最后更新:2022-06-15 14:04:49 手机定位技术交流文章
MTU:是网络的最大传输单元。MTU)是指一种 通信协议 的 可以通过一个层的最大数据包大小(以字节为单位)。这个参数通常与通信接口关联。
当MTU不合理时,会发生以下问题
1.当本地的MTU值高于网络的MTU值时,本地传输的“数据包”的过度负载导致网络在分离后传输,不仅产生额外的数据包,而且耗费“分离、包装”时间。
2.当本地的MTU值小于网络的MTU值时,本地传输的包可以直接传输,但不能完全使用网络所给出的包传输大小的限值,并且传输能力没有充分利用。
什么是合理的MTU值
将本地的MTU值与网络的MTU值匹配,因此,任何包都不能比网络传输的MTU值大,而不得不进行拆包,然后组包,然后将所谓的合理的集合MTU值转移,它将本地的MTU值与网络的MTU值匹配,它能够完全完成传输性能,又不让数据包拆分。
首先,TCP/IP协议包含四个层:链路层、网络层、传输层和应用层。
它们的关系是数据框架 {IP包 {TCP或UDP包 {Data}}
并且我们使用基于ICMP协议的 ping命令(该协议默认为UDP协议传输,例如: ping www.baidu.com -l 1472),此时的数据是第一个苹果+用户数据,当前的数据帧大小应为+20(IP头)+8(UDP头)

不同的协议层有不同的包的定义,传输层称为分段.网络层称为数据图.链层称为框架。数据被包装成帧,然后送回传输媒体,到达目标主机后,每个层协议剥离相应的第一个部分,最后, 应用层数据被转移到应用处理中.
我们在应用程序中使用的数据的最大长度直接取决于底层的限度。
让我们从底层分析:
对于TCP包,第一部分为20字节,因此MTU为1480-20=1460;
所以,当传输层是UDP协议时,在应用层,您的数据的最大长度是1472.当我们的UDP包的数据超过MTU(1472),发送者的IP层需要分离来传输,接收 IP层需要重新组织数据报告,因为UDP不是可靠的传输协议,如果断片丢失导致重组失败,这会导致UDP包被丢弃。
根据上述分析,最大1.472字节的UDP数据是最优的(避免分离)。
但在网络编程中,互联网路由器可设置为不同的值(低于默认值),互联网上的标准MTU是576,因此在网络上编程UDP时,数据长度最好在576-20-8=548字节内。
UDP和TCP协议使用端口号实现多个应用程序同时发送和接收数据。数据通过源端口发送,通过目标端口接收。有些网络应用程序只能使用预录制或注册的静态端口;其他网络应用程序只能使用未注册的动态端口。因为UDP和TCP头条使用两个字节存储端口号,因此,端口号码的有效范围是0到65535。动态端口的范围从1024到65535。
MTU最大传输单元,这个最大传输单元实际上与链层协议有着密切的关系,以太网II框架结构DMAC+SMAC+Type+Data+CRC由于以太网传输电源的局限性,每个Ethernet帧的最小尺寸为64字节,最大不超过1518字节,对于以太网帧的大小超过这个限度,我们可以认为它们是错误数据帧,通用的Ethernet传输设备将丢弃这些数据帧。

由于Ethernet II的最大数据帧是1518字节,切出Ethernet帧的帧头(DMAC目标MAC地址48bits=6Bytes+SMAC源MAC地址48bits=6Bytes+Type域2Bytes)14Bytes和帧末端CRC校正部分4Bytes然后, loaded的其他顶层协议,即最大数据域,只有1500Bytes。
UDP包的大小应为1500 - IP头(20) - UDP头(8) = 1472(字节)
TCP包的大小应为1500 - IP头(20) - TCP头(20) = 1460 (字节)
注:PPoE是指互联网上的“PP”。有宽带接入(这种宽带接入通常用于电缆调制或xDSL或Ethernet),由于Ethernet没有认证费机制,传统的运营商使用PP协议来认证拨号等访问服务。因此,我们引入了PPoE。PPoE使MTU缩小。Ethernet的MTU是1500,降低PP包头和末端成本(8字节),就变成1492。然而, 目前, 大部分 MTU 在 路线 设备 中 是 1500 。
如果我们定义的TCP和UDP包不超出范围,所以我们的包不需要装入IP层,这样可以避免在传输过程中在IP层包中出现错误;如果超过范围,也就是说,IP数据消息超过1500字节,发送 IP层需要将包分成几个部分,接收 IP层需要重新组织数据报告。更严重的是,如果使用UDP,当IP层包错误发生时,那么包就会被丢弃。接收器不能重新组织数据消息,这将导致整个IP数据报告被丢弃。UDP不保证可靠的传输;但当TCP有包错误时,该包会被重传,保证可靠传输。
UDP数据报告的长度指包括头部和数据部件的总字节数,其中头部长度是固定的,数据部件是变的。 数据消息的最大长度取决于操作环境。
当我们用索克特编程时,UDP协议需要64K以下的包。TCP没有限定,TCP头部没有“包长度”字段,它完全依赖IP层来处理分割帧。这就是为什么TCP经常被称为“流程协议”,当开发者使用TCP服务时,别担心包的大小,只要把SOCKET当作数据流的输入,把数据放在里面是好的。TCP协议本身执行拥塞/流量控制。
然而,由于在互联网上(非本地网络)的标准MTU值为576字节,当在互联网上编程UDP时,应控制UDP的数据长度为548字节(576-8-20)。
当使用UDP LAN通信时,经常有一个“欢迎世界”来测试,然而,“欢迎世界”并不符合最低有效数据要求(64-46),为什么少于18个字符,另一方还可接受 吗?因为链层的MAC子层中有一个数据排列,不能超过18个字符被填入0。但当服务器在公网,客户端在内网,少于18个字符的数据,接收者将不会接收数据的状况。
以太网II的条款,以太网帧的带宽至少为46字节,最小Ethernet帧为6+6+2+46+4=64。移除四字元FCS,因此,当你抓住它时,它只有60字节。当数据字段的长度低于46字节时,MAC子层将在数据字段后面填充,以满足64字节以下的数据帧。因为数据的填充是MAC子层的责任,那是设备驱动器。不同的抓取程序和设备驱动程序可能具有不同的优先次序,抓取程序的优先级可能高于设备驱动程序,也就是说,当设备驱动程序尚未填满64字节以下的帧时,我们的抓取包装程序可能已经在位,包商已经捕获了数据。因此,不同捕获工具捕获的数据帧的大小可能有所不同。结果分别被线eshark 和sniffer 捕获,对于TCP的ACK确认框架,一个大小为54字节,一个是60字节,线eshark捕获没有填补数据段,当嗅觉抓住时, 有一个填充数据段.
使用UDP协议发送时,使用o函数传输的最大长度是: 65535- IP头 (20) - UDP头 (8) = 65507字节。当使用o函数发送数据时,如果传输的数据长于该值,则函数会返回错误。
当用TCP协议发送时,因为TCP是一个数据流协议,因此没有限制数据包大小(不考虑缓冲器大小),这意味着使用发送函数时,数据长度参数不受限制。而实际上,指定的数据不一定是一次发送的,如果数据长,会被分段发送,如果比较短,它可能等待下一个数据一起发送。
本文由 在线网速测试 整理编辑,转载请注明出处。