网络工程师技术难点分析MTU和PMTU是什么
MTU(最大传输单元):
最大传输单元用来通知对方所能接受数据服务单元的最大尺寸,说明发送方能够接受的有效载荷大小。
以太网和802.3对数据帧的长度都有一个限制,其最大值分别是1500字节和1492字节。链路层的这个特性称为MTU,即最大传输单元。不同类型网络的数帧长度大多数都有一个上限。
如果IP层有一个数据报要传,而且数据帧的长度比链路层的MTU还大,那么IP层就需要进行分片( fragmentation),即把数据报分成干片,这样每一片就都小于MTU。
数据链路不同,最大传输单元( Maximum transmission Unit,MTU)也不同,由于IP协议是数据链路的上一层,所以它必须不受数据链路的MTU大小的影响能够加以利用。当IP数据报太大时,就要采用分片技术,以保证数据帧不大于要过的网络的MTU。
IP协议除了具有路由寻址功能外,另一个重要的功能就是IP数据报的分片处理。每个数据链路层能够确定发送的一个帧的最大长度称为最大传输单元。在Ethernet中,MTU为1500字节;在FDDI中,MTU为4352字节;在 IP over AMT中,MTU为9180字节。
如果要发送的IP数据报比数据链路层的MTU大,则无法发送该数据报。对于来自于上一层的IP协议,当要求发送的IP数据报比数据链路层的MTU大时,必把该数据报分割成多个IP数据报才能发送。另外,在进行通信的各台主机之间,存在着MTU不同的数据链路;在发送的过程中,也有MTU缩小的情况发生。当出现上述情况时,在发送过程中必须有一台能够进行分片处理的路由器。
接收端主机必须对经过分片处理后的IP数据报进行还原处理。在中继路由器中,虽然路由器进行了分片处理,但并不进行还原处理。另外,经分片处理的IP数据报只有经过还原处理后才能还原成原来的IP数据报,才可以向上一层的模块传递数据。
在IPv6协议之中,MTU又有了新的变化。前面学习的关于IPv6报文转发相关知识的时候知道, IPv6报文在转发的过程中是不进行分片操作的,当然也不进行分片报文的整合工作。
IPv6报文仅在源节点进行分片,在目的节点进行组装。那么这会产生一个问题,源节点将报文到底分成多大的呢?很简单,为了所有的报文都能在路径上畅通无阻,那么分片的报文大小不能超过路径上最小的MTU,也就是PMTU——路径。MTURFC1981中定义了PMTU发现的机制,它是通过ICMPv6的Packet Too Big报文来完成的。
首先源节点假设PMTU就是其出接口的MTU,发出报文,当转发路径上存在一个小于当前假设的PMTU时,就会向源节点发送Packet Too Big报文,并且携带自己的MTU值,此后源节点将PMTU的假设值更改为新收到的MTU值。
如此反复,直到报文到达目的地之后,源节点就能知道到达某个目的地的PMTU了。假设源到目的要先后经过4条链路,链路地MTU分别是1500、1500、1400、1300,当源发送一个分片报文的时候,首先分成1500大小的片,当到达1400的出接口时,路由器就会返回PacketToo Big错误,同时携带1400的MTU值。
源接收到之后就会重新分成1400大小的片,当到达1300的出接口时,同样返回Packet Too Big错误,携带1300的MTU值。之后源重新分成1300的报文,最终到达目的地,这样就找到了该路径的PMTU。
我们需要注意的是,只有数据包超过路径上的最小MTU时,PMTU发现机制才有意义,如果报文很小,小于路径上的最小MTU,就不可能产生Packet Too Big报文。
由于IPv6要求链路层所支持的最小MTU为1280,所以PMTU的值不会小于1280。而最大PMTU一般由链路层决定,如果链路层是一个隧道,那么支持的PMTU可能会很大。
1、源端主机使用自己的MTU对报文进行分片,之后向目的主机发送报文。
2、中间转发设备接收到该报文进行转发时,如果发现转发报文的接口支持的MTU值小于报文长度,则会丢弃报文,并给源端返回一个ICMPv6差错报文,其中包含了转发失败的接口的MTU。
3、源主机收到该差错报文后,将使用报文中所携带的MTU重新对报文进行分片并发送。
4、如此反复,直到目的端主机收到这个报文,从而确定报文从源端到目的端路径中的最小MTU。
IELAB网络实验室技术分享,转载需注明出处
学网络,就在IELAB,国内著名网络工程师培养基地