RPC系列协议--rfc1191--Path MTU Discovery

RPC系列协议--rfc1191--Path MTU Discovery

1.概述

描述了一种动态发现任意internet路径的最大传输单元(MTU)的技术。它指定了路由器生成一种类型的ICMP消息的方式的一个小变化。对于通过一个没有被如此改变的路由器的路径,这种技术可能不会发现正确的路径MTU,但它总是会选择一个路径MTU一样准确,在许多情况下比路径MTU更准确,将被当前的实践选择。

2.介绍

当一个IP主机有大量数据要发送到另一个主机时,该数据被作为一系列IP数据报传输。这些数据报最好是最大的,这样就不需要从源到目的地的路径上的任何地方有碎片。(对于反对分段的情况,请参阅[5]。)该数据报的大小称为路径MTU (PMTU),它等于路径中每一跳的最小MTU。当前Internet协议套件的一个缺点是缺少一种标准机制,让主机发现任意路径的PMTU。
使用较小的576和第一跳MTU作为PMTU的任何目的地,没有连接到相同的网络或子网作为源。在许多情况下,这会导致使用比必要的更小的数据报,因为许多路径的PMTU大于576。主机发送的数据报远小于MTU允许的路径是浪费互联网资源和可能得到次优的吞吐量。此外,当前的实践并不能在所有情况下防止碎片,因为有一些路径的PMTU小于576。

3.协议概述

描述了在IP头中使用Don’t Fragment(DF)位来动态发现路径的PMTU的技术。源主机的基本思想是首先假定的PMTU路径(已知)MTU的第一跳,并将所有数据报发送路径的DF组。如果要转发的数据包太大没有分裂一些沿着路径,路由器,路由器会丢弃他们并返回ICMP目的地不可到达消息代码含义“fragmentation needed and DF set”。在接收到这样的消息(因此称为“数据报太大”消息)后,源主机减少了对该路径的假定PMTU。
当主机对PMTU的估计足够低时,它的数据报可以不带碎片地交付,PMTU发现过程就结束了。或者,主机可以选择通过停止设置数据报头中的DF位来结束发现过程;例如,它可能会这样做,因为它愿意在某些情况下将数据报碎片化。正常情况下,主机继续在所有数据报中设置DF,这样当路由发生变化,新的PMTU较低时,就会被发现。
由于路由拓扑的变化,路径的PMTU可能会随着时间而改变。数据报太大的消息可以检测到PMTU的减少,除非在主机已经停止设置DF位的路径上。为了检测路径的PMTU的增加,主机会周期性地增加它假定的PMTU(如果它已经停止,则继续设置DF位)。这几乎总是会导致丢弃数据报,生成数据报太大的消息,因为在大多数情况下,路径的PMTU不会发生更改,所以不应该经常这样做。由于这种机制本质上保证了主机不会从做PMTU发现的对等点接收到任何片段,因此它可以帮助某些主机(不正确地)无法重新组装片段数据报。

4.主机规范

当主机接收数据报太大消息时,它必须减少估计的PMTU相关路径,基于消息转发MTU字段的值(见第4节)。我们不指定主机的行为在这种情况下,由于不同的应用程序可能有不同的要求,因为不同的实现架构可能支持不同的策略。在接收到数据报太大的消息后,主机必须尝试避免在不久的将来引发更多这样的消息。主机可以减少它沿着路径发送的数据报的大小,或者停止在这些数据报的头中设置Don’t Fragment位。显然,前一种策略可能会在一段时间内继续引发数据报太大的消息,但是由于这些消息(以及它们响应的丢弃的数据报)消耗Internet资源,主机必须迫使PMTU发现过程收敛。
使用PMTU发现的主机必须尽可能快地检测到路径MTU的减少。主机可能会检测到路径MTU的增加,但是因为这样做需要发送比当前估计的PMTU更大的数据报,而且PMTU可能不会增加,所以这必须在不频繁的间隔进行。在给定目的地收到数据报太大的消息后5分钟内,或者在上次成功尝试增加数据后1分钟内,不得尝试检测增长(通过发送大于当前估计的数据报)。我们建议将这些计时器设置为其最小值的两倍(分别为10分钟和2分钟)。
主机必须能够处理不包括下一跳MTU的数据报太大的消息,因为在任何有限的时间内升级Internet上的所有路由器是不可行的。可以通过(新定义的)下一跳MTU字段中的0来识别来自未修改路由器的数据报太大的消息。(这是ICMP规范[7]所要求的,其中规定“未使用的”字段必须为零。)在第5节中,我们将讨论主机响应旧式数据报太大消息(由未修改的路由器发送的消息)的可能策略。
主机不能增加其估计的路径MTU来响应数据报的内容太大的消息。声称宣布MTU路径增加的消息可能是Internet中四处流传的过时数据报、作为拒绝服务攻击的一部分注入的假包,或者是拥有多条到达目的地的路径的结果。

5.TCP MSS Option

进行PMTU发现的主机必须遵守这样的规则:除非它获得了接收方的许可,否则它不能发送大于576八进制的IP数据报。对于TCP连接,这意味着主机不能发送大于40个八进制数加上它的对等发送的最大段大小(MSS)的数据报。一些TCP实现仅当目标主机在一个未连接的网络上时才发送一个MSS选项。然而,通常TCP层可能没有适当的信息来做出此决定,因此最好将为Internet路径确定合适MTU的任务留给IP层。实际上,许多TCP实现总是发送一个MSS选项,但是如果目的地不是本地,则将值设置为536。当Internet上充满了不遵守数据报大于576个八进制数不应发送到非本地目的地规则的主机时,这种行为是正确的。既然大多数主机都遵循这一规则,那么对于非本地对等点,就没有必要将TCP MSS选项中的值限制为536。
此外,这样做可以防止PMTU发现大于576的PMTUs,因此主机不应该再降低它们发送的值

温馨提示:
以上文章描述如有不清晰之处,欢迎在评论区评论,如有时间,会第一时间回复,谢谢!

猜你喜欢

转载自blog.csdn.net/qq_20677327/article/details/108441972
MTU