什么是MTU,MTU对UDP、TCP以及IP的影响

什么是MTU,MTU对UDP、TCP以及IP的影响

文章目录

前言一、MTU是什么?二、MTU对UDP协议的影响三、MTU对TCP协议的影响四、MTU对IP协议的影响

前言

面试中问道:在UDP协议中,发送的数据量超出了MTU,会造成什么影响? 那就总结一下MTU对常见网络协议的影响

一、MTU是什么?

MTU(Maximum Transmission Unit,最大传输单元)是指网络层或者数据链路层中,单个数据包在一次传输中所能承载的最大字节数。标准以太网规定一帧最多只能传输 1500 字节的数据部分,即MTU=1500。 为什么要有MTU?

限制每次发送的数据包大小,它保证数据包既不太大以致不能传输,也不太小导致效率低下,是网络可靠性和性能的平衡工具。

二、MTU对UDP协议的影响

首先,要清楚的一点是,虽然MTU是1500字节,但是实际传输的数据字节数是不足1500的,因为还要包含各个协议栈的头部信息,所以实际传输的数据大小为1500-20-8(MTU-IP报头长度-UDP报头长度)=1472字节的数据。 其次,如果超过了MTU,就要进行分片操作,(注意:UDP并不处理分片,真正的分片操作是在IP层完成的,接收方在收到分片后,会将它们重组为原始的数据包,再交给应用层),但是如果分片后的数据有任意一个在传输过程中丢失,都会导致IP层重组失败。所以说,分片操作大大提高了丢包的概率。

三、MTU对TCP协议的影响

当 TCP 协议发送的数据包超过 MTU 时,情况和 UDP 不太一样,因为 TCP 是面向连接、可靠传输的协议。具体来说:TCP 会把要发送的数据拆分成合适大小的报文段(segment),每个报文段的大小(MSS,Maximum Segment Size)通常会小于或等于路径 MTU 减去 IP 和 TCP 头部的长度(与UDP类似,只不过描述不一样)。也就是说,TCP 在发送数据时,会自动控制每个报文段的大小,使其不会超过 MTU,从而避免 IP 层的分片。 在建立连接时,双方会协商MSS的大小,通常MSS=MTU-IP报头-TCP报头(例如1500-20-20=1460),发送端确保每个报文段都不会超过MSS。同理,如果超过了,那么就会进行分片,但是由于TCP是可靠的,面向连接的,所以如果报文丢失,会重新发送对应报文段。

四、MTU对IP协议的影响

由于分片操作是IP层进行的,所以说MTU也同时影响着IP协议。经过以上描述,现在清楚了,超过某个值,数据就会进行分片,但是分片之后如何进行组装,或者说如何把零散的报文组装成一个完整的报文交付给上层,这时就需要用到IP协议中的字段,分别是16位表示,3位标志以及13位偏移来重组。一下是ip的头部字段。

同一个数据分片得到的各个分片报文,所对应的IP报头当中的16位标识(id)都是相同的。每一个分片报文的IP报头当中的3位标志字段中,第1位必须置为0,表示暂未使用,第2位设置为0,表示允许分片,第3位用作结束标记(最后一个分片报文设置为0,其余分片报文设置为1)。当对端IP层收到这些分片报文后,需要先将这些分片报文按顺序进行组装,拼装到一起后再向上交付给传输层。