⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rfc1191.txt

📁 很多RFC的中文文档
💻 TXT
📖 第 1 页 / 共 3 页
字号:
组织:中国互动出版网(http://www.china-pub.com/)
RFC文档中文翻译计划(http://www.china-pub.com/compters/emook/aboutemook.htm)
E-mail:ouyang@china-pub.com
译者:马东辉(eaststone   ma_donghui@263.net)
译文发布时间:2001-4-12
版权:本中文翻译文档版权归中国互动出版网所有。可以用于非商业用途自由转载,但必须保留本文档的翻译及版权信息。


Network Working Group                                           J. Mogul
Request for Comments: 1191                                        DECWRL
Obsoletes: RFC 1063                                             S. Deering
                                                        Stanford University
November 1990


RFC1191 路径MTU发现
(RFC1191 Path MTU Discovery)


本备忘录状态
   This memo provides information for the Internet community.  It does
   not specify an Internet standard of any kind.  Distribution of this
   memo is unlimited.
摘要
   此备忘录描述了一种动态发现因特网上任意一条路径的最大传输单元(MTU)的技术。它对这条路径上的路由器产生的一种ICMP消息作了很小的修改。在路径上的路由器如果没有作出这样的改变,这种技术将不能发现正确的路径MTU,但是这种技术选择出来的路径MTU将和当前使用的其它方法选择出来的MTU同样准确,而且在许多情况下更加精确。
致谢
这个建议是IETF MTU发现工作组的产品。

    这种被建议的机制首先由Geof Cooper [2]提出,他在两个简短的段落中陈述了所有基本的思想,IETF MTU发现工作组用了几个月的时间重新修订。







                            目录
 
1. 简介	2
2. 协议概览	2
3, 主机规范	3
3.1 TCP MSS选项	4
4. 路由器规范	5
5. 主机对老式报文的处理	5
6. 主机实现	6
6.1 分层	7
6.2 存储PMTU信息	7
6.3 清除过时的PMTU信息	8
6.4 TCP层的行为	9
6.5 其它传输协议的问题	10
6.6 管理接口	11
7. 路径MTU的可能值	11
7.1 一种较好的检测PMTU增长的方法	12
8. 安全性的考虑	13
参考书目:	13
作者地址:	14

1. 简介 
   当一台IP主机有大量的数据要发送给另一台主机的时候,数据是作为一系列的IP数据报传输。数据报最好具有在从源点到目的点的路径上不需要分片的最大尺寸。(避免分片的情况,见[5]。)这种数据报的尺寸称作为路径MTU(PMTU),它等于路径上每一跳的MTU之中的最小值。当前因特网协议族的缺点就是对一台主机来说缺乏发现任意一条路径的PMTU的标准机制。

  注意:路径MTU在[1]中被称作为“用于发送的有效MTU" (EMTU_S).
PMTU与一条路径相关,路径是IP的源地址、目的地址,也许还有
服务类型(TOS)的特定组合。

   当前实际[1]采用的是576和第一跳MTU中的较小者作为任何不与源地址网络或者子网直接相连的目的地址的PMTU。在许多情况下,这导致了使用比必须要求小的数据报,因为许多路径的PMTU比576大。一台主机发送比路径MTU小的多的数据报是浪费因特网的资源,达不到最优的吞吐量。而且,当前的实现在所有的情况下不防止分片,因为一些路径的MTU比576小。

   期望未来的路由协议将能够在一个路径区域中提供准确的PMTU信息,尽管也许不能越过多级路由层次。还要多久这种未来的路由协议才能广泛应用现在还不清楚。所以在以后的几年中,因特网在所有主机和路由器被修改前为了不浪费资源需要一种简单的发现PMTU的机制。
2. 协议概览
   在此备忘录中,我们描述了一种技术,在IP首部使用不分片(DF)比特位动态发现一条路径的PMTU。基本思想就是源主机开始假定一条路径的PMTU是它的(已知的)第一跳的MTU,在这条路径上发送的数据报都设置DF比特位。如果有的数据报太大,不被路径中的某些路由器分片就不能转发,那么路由器将丢弃这些数据报,然后返回一个意思为“需要分片,设置了DF位 [7]”的ICMP目的不可达报文。在收到这样一条报文后(以后称它为“数据报太大”报文),源主机减小它假定的这条路径的PMTU。
 
   当主机对PMTU的估计值小到它的数据报不需要分片也能转发的时候,PMTU发现过程结束。或者,主机可以选择停止在数据报首部中设置DF比特位来结束发现过程;它可能会这样做,例如主机想在某些情况下让数据报分片。通常,主机继续在所有的数据报中设置DF,这是为了如果路由改变并且新的PMTU减小的时候,将会被发现。

   不幸的是,当前指定的数据报太大报文不报告拒绝太大数据报的那一跳的MTU。所以源主机不能准确地判定把它假设的PMTU减小多少。为了弥补这个缺点,我们建议使用当前在数据报太大报文中没有使用的一个报头字段来报告减小的那一跳的MTU。这是支持PMTU发现的路由器唯一被指定的改变。

   路径的PMTU可能随着时间而改变,因为路由的拓扑结构可能改变。PMTU的减小通过数据报太大报文被检测到,除非主机停止设置沿此路径的数据报的DF比特位。为了检测路径的PMTU值的增加,主机周期地增加它假定的PMTU(如果它已经停止,再重新设置DF比特位)。这几乎总是导致数据报被丢弃,数据报太大报文产生,因为在大多数情况下,路径的PMTU不会改变,所以不应该频繁地做这种工作。

   因为这种机制本质上保证了主机接收不到来自另一台进行PMTU发现的对等者的分片,它可能对与某个不能重新装配分片的数据报的主机进行互操作有帮助。
3, 主机规范
    当主机收到一个数据报太大报文时,它必须基于此报文中的下一跳MTU字段中的值(见第四节),减少对相关路径的PMTU估计值。因为不同的应用程序有不同的需要,不同的实现体系倾向于不同的策略,所以我们不能在这种情况下指定确定的行为。
 
   我们要求在收到数据报太大报文后,主机必须尽量去避免在最近一段时间再引出这样的报文。主机可以减小沿着这条路径发送的数据报的尺寸,或者在这些数据报首部停止设置不分段比特位。显然,前一种策略在一段时间内可能继续导致产生数据报太大报文,但是因为这些报文中任何一个(和它们所响应的被丢弃的数据报)都消耗因特网的资源,主机必须强迫PMTU发现过程汇聚。

   使用PMTU发现的主机一定要尽可能快地检测到路径MTU的减少。主机可以检测到路径MTU的增加,但是,因为这样做需要发送比当前估计的PMTU大的数据报, 而且PMTU很可能不增加,所以这种工作一定不要频繁地做。检测一个增加的尝试(通过发送一个比当前估计值大的数据报)一定不要在数据报太大报文收到后5分钟内做,或者在前一个成功的增加尝试之后1分钟内做。我们建议把计时器设置为它们最小值的两倍(分别为10分钟和2分钟)。

   主机必须能够处理不包括下一跳MTU的数据报太大报文,因为不可能在有限的时间内升级因特网中的所有路由器。来自一个没有修改的路由器的数据报太大报文中的下一跳MTU字段(新定义的)中的值为0(这对于ICMP规范[7]是必需的,ICMP规范要求“未使用”字段必须要是0)。在第五节中,我们讨论响应老式的数据报太大报文(由一个没有修改的路由器发出)的主机可能遵守的策略。

    主机一定不要使对路径MTU的估计值低于68字节。
 
    主机一定不能增加它对路径MTU的估计值来响应数据报太大报文的内容。一个通告路径MTU增加的报文可能是一个在因特网中飘移的过时的数据报,一个作为服务拒绝攻击一部分的虚假的数据报,或者是由于到目的地址有多条路径造成的结果。
3.1 TCP MSS选项
   作PMTU发现的主机一定要遵守不发送大于576字节的IP数据报的规则,除非它具有接收者的许可。对于TCP连接来说,这意味着主机一定不能发送大于40字节加上它的对等者发来的最大段尺寸(MSS)的数据报。

         注意:TCP MSS 被定义为相关的IP数据报尺寸减40[9]。最大IP数据报尺寸的默认值576将导致TCP MSS的默认值是536字节。

   "Requirements for Internet Hosts -- Communication Layers" [1]的 4.2.2.6节中陈述了:
 
         一些TCP实现只有当目的主机在一个非直接连接网络上才发送MSS选项。但是,通常TCP层不可能有适当地信息来作出这种决定,所有它更愿意把决定因特网路径合适的MTU的工作留给IP层来完成。

   实际上,很多TCP实现总是发送MSS选项, 但是,如果目的地不是本地的,把值设置为536。当因特网中充满了不遵守超过576字节的数据报不发给非本地的目的地址规则的主机的时候,这种行为是正确的。现在大多数主机遵守这个规则,所以对非本地的对等者来说也不必把TCP MSS选项的值限制为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。因此,报文具有下面的格式:

       0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   类型 = 3    |   代码 = 4    |           校验和           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |           未使用 = 0         |        下一跳    MTU      |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |         Internet 首部 + 原始数据报中的前 64 bit             |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 
   在下一跳MTU字段中的值是:
 
沿着原始数据报的路径,在此路由器上不需分段能够转发的最大数据报的用字节表示的尺寸,这个尺寸包含IP首部和IP数据,不包含任何低层的首部。

这个字段不会包含小于68字节的值,因为每一个路由器都“必须不分段转发68字节的数据报”[8]。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -