天天看点

TCP之路径MTU(PMTU)发现过程详解什么时路径MTU(简称PMTU)为什么要有PMTUPMTU发现过程定时更新PMTU

本文目录

  • 什么时路径MTU(简称PMTU)
  • 为什么要有PMTU
  • PMTU发现过程
  • 定时更新PMTU

什么时路径MTU(简称PMTU)

当在同一个网络上的两台主机互相进行通信时,如果两台主机之间的通信要通过多个网络,那么每个网络的链路层就可能有不同的MTU。所以重要的不仅是两台主机所在网络的MTU的值,最重要的是两台通信主机路径中的最小MTU。它被称作路径MTU。注意:两台主机之间的路径MTU不一定是个常数,因为二个主机之间的路由选路是动态变化的,所以路径MTU取决于当时所选择的路由路径。还有路由选路也不一定是对称的(从A到B的路由可能与从B到A的路由路径不一样),因此路径MTU在两个方向上不一定是一致的。

为什么要有PMTU

通过文章TCP的MSS的计算与详解,我们已经知道因为发送端或者接收端的MTU受限,或者是网络中任何一个路由器的任何一个端口的MTU受限,都可能会引发IP分片,而IP分片可能会使得网络性能变差。这时就要求我们设置正确的MSS以避免IP分片的发生。那么在TCP的MSS的计算与详解中的第二章:MSS协商中,我们已经知道了接收方和发送方以及中间经过的路由器支持的情况下如何协商MSS以避免IP分片的。但如果路由器没有参与到TCP层做替换MSS的功能,那么MSS协商过程并不能解决网络中的路由器的端口的MTU受限而引发的IP分片问题。PMTU就是为解决这个问题而产生的,简单的说:发送端如果能知道PMTU,那么发送端就可以按照PMTU,即两台通信主机路径中的最小MTU对TCP进行分段,将MSS设置成适合PMTU的值,则在通信过程中就可以避免在主机以及网络中和任何一个节点处产生IP分片。

PMTU发现过程

这个过程利用的是:

  1. 主机发送一个IP首部的分片禁止标志位设置为1的IP数据报
  2. 路由器在收到IP首部的分片禁止标志位设置为1的IP数据报时,如果发现需要分片才能处理的大包,它不会去分片,而是将包丢弃,并给发送方主机返回一个ICMP差错报文,告之发送端发生了一个不能分片错误,并带回自己所能支持的最大MTU。
  3. 主机收到ICMP报文后,把自己的出口MTP改小,修改为ICMP差错报文告之的MTU值,再次发送一个IP首部的分片禁止标志位设置为1的IP数据报。
  4. 重复上面2.3二个步骤,直到不再从网络中的收到ICMP差错报文,说明已经收到了整个路径上的最小MTU, 既路径MTU(PMTU)

定时更新PMTU

我们所知IP路由路径是会动态变化的,PMTU变小的情况不要紧,会有新的ICMP差错报文触发新一轮PMTU发现与更新过程,

但我们知道 随着路由路径的变化,PMTU可能也会变大,如果发送方不及时更新PMTU,那么就会导致一直用一个较小的MTU在发送,从而导致较低的网络利用率,所以IP协议规定每隔壁10分钟,就要重启PMTU发现过程,以便定时完成PMTU的更新。

继续阅读