MTU、MSS的介绍和图示,以及对TCP、UDP传输数据的影响

MTU: Maxitum Transmission Unit 最大传输单元
MSS: Maxitum Segment Size 最大分段大小

在这里插入图片描述
对于以太网数据帧:
在这里插入图片描述
其中长度/类型字段,当这个值<1518时,那么代表了数据字段的长度;如果这个值>1518,则表示该以太网帧中的数据属于哪个上层协议,例如0x800,代表IP数据包;0x806,代表ARP数据包等。
所以以太网EthernetII最大的数据帧是1518字节。

MTU = 1518 - 以太网帧头(14) - 帧尾(4) = 1500字节
MSS = MTU - IP最小报头长度 - TCP/UDP最小包头长度

  • 对于TCP,MSS = 1500 - 20 - 20 = 1460
  • 对于UDP,MSS = 1500 - 20 - 8 = 1472

网络层IP协议会检查每个从上层协议下来的数据包的大小,并根据本机MTU的大小决定是否作“分片”处理。
分片最大的坏处就是降低了传输性能。所以上层在实现中会对此加以注意。有些上层会因为某些原因要求不能分片,所以会在IP数据包包头里面加上一个标签:DF(Donot Fragment)。这样,当这个IP数据包在网络传输的时候,如果遇到MTU < IP数据包的情况,转发设备就会根据要求丢弃这个数据包。然后返回一个错误信息给发送者。这样往往会造成某些通讯上的问题,不过幸运的是大部分网络链路都是MTU ≥ 1500。
在这里插入图片描述

  • 对于TCP,在建立连接的时候,会协商双方的MSS,通常这个 MSS 会控制在 MTU 以内,即最大 IP 包大小 - IP - TCP 协议头的大小,这样 TCP 就可以在传输层,把用户发送的数据,预先分成多个大小限制在 MTU 里的 TCP 包。每个 TCP 的分片包,都完整了包含了 TCP 头信息,方便在接收方重组。

  • 如果某些情况导致,已经分好的 TCP 分片,还是大于了 MTU,那就在网络层中,再执行一次分片。

  • 如果这个时候数据丢了,那也只需要重传这一个 TCP 的分片,而不是整个原始数据。
    在这里插入图片描述

  • 对于UDP,没有协商,所以只能直接把用户发送的数据传给网络层。如果UDP报文长度 > MTU,那么在网络层会自动对数据进行切割分片。

  • 如果网络发生了波动,丢失了某个 IP 包分片, 对于 UDP 而言, 它没有反馈丢失了哪个分片给发送方的能力,这就意味着,50k的数据全都丢失了,如果需要重传,就得再次完整的传递这 50k 的数据。

  • 所以如果采用 UDP 来通讯,一般都会特意控制下单个包体的大小,从而提高传输效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值