TCP和UDP协议发送数据包的大小方面的知识介绍

这篇具有很好参考价值的文章主要介绍了TCP和UDP协议发送数据包的大小方面的知识介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

MTU最大传输单元,这个最大传输单元实际上和链路层协议有着密切的关系,EthernetII帧的结构DMAC+SMAC+Type+Data+CRC由于以太网传输电气方面的限制,每个以太网帧都有最小的大小64bytes最大不能超过1518bytes,对于小于或者大于这个限制的以太网帧我们都可以视之为错误的数据帧,一般的以太网转发设备会丢弃这些数据帧。
由于以太网EthernetII最大的数据帧是1518Bytes这样,刨去以太网帧的帧头(DMAC目的MAC地址48bit=6Bytes+SMAC源MAC地址48bit=6Bytes+Type域2bytes)14Bytes和帧尾CRC校验部分4Bytes那么剩下承载上层协议的地方也就是Data域最大就只能有1500Bytes这个值我们就把它称之为MTU。
PPPoE所谓PPPoE就是在以太网上面跑PPP协议,有人奇怪了,PPP协议和Ethernet不都是链路层协议吗?怎么一个链路层跑到另外一个链路层上面去了,难道升级成网络层协议了不成。其实这是个误区:就是某层协议只能承载更上一层协议。
为什么会产生这种奇怪的需求呢?这是因为随着宽带接入(这种宽带接入一般为Cable Modem或者xDSL或者以太网的接入),因为以太网缺乏认证计费机制而传统运营商是通过PPP协议来对拨号等接入服务进行认证计费的.
PPPoE带来了好处,也带来了一些坏处,比如:二次封装耗费资源,降低了传输效能等等,这些坏处俺也不多说了,最大的坏处就是PPPoE导致MTU变小了以太网的MTU是1500,再减去PPP的包头包尾的开销(8Bytes),就变成1492。
UDP 包的大小就应该是 1492 - IP头(20) - UDP头(8) = 1464(BYTES)
TCP 包的大小就应该是 1492 - IP头(20) - TCP头(20) = 1452(BYTES)
目前大多数的路由设备的MTU都为1500
我对上面的理解是:如果我们定义的TCP和UDP包小于1452,1464,那么我们的包在IP层就不用分包了,这样传输过程中就避免了在IP层组包发生的错误。如果使用UDP协议,如果IP层组包发生错误,那么包就会被丢弃,UDP不保证可靠传输。但是TCP发生组包错误时,该包会被重传,保证可靠传输。所以,我们在用Socket编程时,包的大小设定不一定非要小于1400,UDP协议要求包小于64K,TCP没有限定。   
总结:
我们设定包的大小对于UDP和TCP协议是不同的,关键是看系统性能和网络性能,网络是状态很好的局域网,那么UDP包分大点,提高系统的性能。不好,就分小于1464,这样可以减低丢包率。对于TCP来说,这个就要靠经验了,因为,TCP丢包可以自动重传,分大了,系统性能提高了,分包和错误重组可能会耗费时间,使传送时间延长,分小了,系统性能又降低了。

文章来源地址https://www.toymoban.com/news/detail-452597.html

到了这里,关于TCP和UDP协议发送数据包的大小方面的知识介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux内核--网络协议栈(二)UDP数据包发送

    一、引言 二、数据包发送 ------2.1、数据发送流程 三、协议层注册 ------3.1、socket系统调用 ------3.2、socket创建 ------3.3、协议族初始化 ------3.4、对应协议的socket创建 ------------3.4.1、sock ------3.5、协议注册 四、通过套接字发送网络数据 ------4.1、inet_sendmsg 本文首先从宏观上概述了

    2024年01月15日
    浏览(41)
  • uniapp 开发微信小程序使用TCP/UDP通信以16进制发送数据

    在微信小程序中实现像网络调试工具按16进制发送的功能。 如下图调试工具接收到微信小程序发送的16进制数据 以上代码是在 uniapp 开发工具进行编写,然后编译 运行到小程序模拟器才能正常使用。如果直接用微信开发者工具编译,会报错: ReferenceError: Buffer is not defined 源码

    2024年02月15日
    浏览(47)
  • 【Python爬虫与数据分析】UDP/TCP通信协议

    目录 一、网络编程基础 二、UDP协议 三、TCP协议 数据编码与解码 str - bytes :encode编码,发送信息的时候用encode编码 bytes - str :decode解码,打印接收的信息用decode解码 socket socket套接字,是进程间通信的工具,也能不同主机间的网络通信 首先通过ip地址找到网络中对应的主机

    2024年02月12日
    浏览(44)
  • QT通过TCP协议发送结构体数据

    做上位机的时候下发数据,数据是一个结构体,这里就阐述一下怎么通过TCP协议发送结构体。 我自己写的时候主要通过两种方式,一种是memcpy,另一种是用QDataStream。 先在mainwindow.h头文件中定义结构体: 函数原型为void *memcpy(void *destin, void *source, unsigned n);函数的功能是从源

    2024年02月16日
    浏览(39)
  • UDP(用户数据报协议)和TCP(传输控制协议)是互联网协议(IP)中两种主要的传输层协议

    您的描述是正确的。UDP(用户数据报协议)和TCP(传输控制协议)是互联网协议(IP)中两种主要的传输层协议。他们之间有几个重要的区别,其中之一就是建立连接的方式。 连接方式: • TCP:在进行数据传输之前,需要通过三次握手(3-way handshake)建立连接。这可以确保

    2024年02月02日
    浏览(111)
  • 网络协议格式 | 以太网帧、ARP数据报、IP数据报、UDP数据报、TCP数据报

    欢迎关注博主 Mindtechnist 或加入【Linux C/C++/Python社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。 专栏:《网络编程》 传输层及其以下的机制由内

    2024年01月16日
    浏览(64)
  • 利用c++基于ffmpeg库接收rtsp视频数据,并利用udp将以RTP协议将数据发送,同时利用udp接收RTP数据包,并基于ffmpeg库播放视频。

    这是两个不同的任务,需要分别实现。 任务一:基于ffmpeg库接收rtsp视频数据,并利用udp将以RTP协议将数据发送。 以下是基于ffmpeg库接收rtsp视频数据,然后使用udp发送RTP协议数据的示例代码: 任务二:利用c++利用udp接收RTP数据包,并基于ffmpeg库播放视频。 以下是利用c++利用

    2024年02月12日
    浏览(44)
  • Labview实现vi间数据传递的方法汇总 ---子VI、队列、全局变量及UDP/TCP协议传输

    本文汇总一下不同VI之间数据传递的方式,使大家明确数据传递的几种类型并灵活使用。 本文程序均上传至云端,读者可自行下载学习。 基于目前大家所学到的基础知识,在Labview中简单来说数据类型基本包括 数值、字符串、数组、簇、布尔量、引用、路径、枚举量、波形图

    2024年04月10日
    浏览(51)
  • Java netty发送接收(TCP、UDP)

    最下方附项目地址 项目地址 https://gitee.com/xn-mg/netty_kafka

    2024年02月16日
    浏览(40)
  • TCP/IP UDP广播无法发送或接收

    在看《TCP/IP 网络编程》这本书的时候,看到广播那一节,跟着书上写代码,怎么写都不行,广播就是没法发送/接收,发送端一直在发送数据,接收端就是没有反应。 对了好几遍源码,没有问题。实在是愁人。 最后查了很多资料,确定是网卡的问题。 现在的计算机都是多网

    2024年02月04日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包