路径MTU发现( 二 )


我们要求在收到数据报太大报文后,主机必须尽量去避免在最近一段时间再引出这样的报文 。主机可以减小沿着这条路径发送的数据报的尺寸,或者在这些数据报首部停止设置不分段比特位 。显然,前一种策略在一段时间内可能继续导致产生数据报太大报文,但是因为这些报文中任何一个(和它们所响应的被丢弃的数据报)都消耗因特网的资源,主机必须强迫PMTU发现过程汇聚 。
使用PMTU发现的主机一定要尽可能快地检测到路径MTU的减少 。主机可以检测到路径MTU的增加,但是,因为这样做需要发送比当前估计的PMTU大的数据报,而且PMTU很可能不增加,所以这种工作一定不要频繁地做 。检测一个增加的尝试(通过发送一个比当前估计值大的数据报)一定不要在数据报太大报文收到后5分钟内做,或者在前一个成功的增加尝试之后1分钟内做 。我们建议把计时器设置为它们最小值的两倍(分别为10分钟和2分钟) 。
主机必须能够处理不包括下一跳MTU的数据报太大报文,因为不可能在有限的时间内升级因特网中的所有路由器 。来自一个没有修改的路由器的数据报太大报文中的下一跳MTU字段(新定义的)中的值为0(这对于ICMP规范[7]是必需的,ICMP规范要求“未使用”字段必须要是0) 。在第五节中,我们讨论响应老式的数据报太大报文(由一个没有修改的路由器发出)的主机可能遵守的策略 。
主机一定不要使对路径MTU的估计值低于68字节 。
主机一定不能增加它对路径MTU的估计值来响应数据报太大报文的内容 。一个通告路径MTU增加的报文可能是一个在因特网中飘移的过时的数据报,一个作为服务拒绝攻击一部分的虚假的数据报,或者是由于到目的地址有多条路径造成的结果 。
3.1TCPMSS选项
作PMTU发现的主机一定要遵守不发送大于576字节的IP数据报的规则,除非它具有接收者的许可 。对于TCP连接来说,这意味着主机一定不能发送大于40字节加上它的对等者发来的最大段尺寸(MSS)的数据报 。
注重:TCPMSS被定义为相关的IP数据报尺寸减40[9] 。最大IP数据报尺寸的默认值576将导致TCPMSS的默认值是536字节 。
"RequirementsforInternetHosts--CommunicationLayers"[1]的4.2.2.6节中陈述了:
一些TCP实现只有当目的主机在一个非直接连接网络上才发送MSS选项 。但是,通常TCP层不可能有适当地信息来作出这种决定,所有它更愿意把决定因特网路径合适的MTU的工作留给IP层来完成 。
实际上,很多TCP实现总是发送MSS选项,但是,假如目的地不是本地的,把值设置为536 。当因特网中布满了不遵守超过576字节的数据报不发给非本地的目的地址规则的主机的时候,这种行为是正确的 。现在大多数主机遵守这个规则,所以对非本地的对等者来说也不必把TCPMSS选项的值限制为536 。
而且,这样做防止发现超过576的PMTU,所以,主机应该不再减少它们在MSS选项中发送的值 。MSS选项应该比主机能够重组的最大数据报(MSS_R,在[1]中定义)的尺寸小40字节;在许多情况下,这将有65495(65535-40)字节结构上的限制 。主机可能发送从它连接网络上的MTU(对一个多宿主主机来说,是在它所有连接网络中的最大MTU)得到的MSS值;这应该不会对PMTU发现造成问题,可以阻止一个损坏的对等者发送巨大的数据报 。
注重:这时,我们没有看到发送比连接的网络最大的MTU还要大的MSS的原因 。我们建议主机不使用65495 。因为一些IP实现可能有负比特位的错误,这种错误在在没有必要使用这么大的MSS的时候被触发 。
4.路由器规范
路由器不能转发数据报,是因为数据报超过了下一跳网络的MTU并且它的不分段比特位被设置,路由器需要给数据报的源地址返回一个ICMP的目的不可达报文,此报文带有表示“需要分段,设置了DF位”的代码 。为了支持在此备忘录中说明的路径MTU发现技术,路由器必须在ICMP首部字段中低序的16bit中包含下一跳网络的MTU,这个字段在ICMP规范[7]中被标记为“未使用” 。高序的16bit保持未用,必须设置为0 。因此,报文具有下面的格式:

推荐阅读