ICMP协议
http://91mail.51.net提供,要详细的附图的翻译,请到http://91mail.51.net下载
英特网控制信息协议目地和特征被概略说明在RFC 792中,如提供为非短暂的错误情况送错误信息的方法, 和提供一个为了要测定有关网络的一般特性而探查网络的手段。后来RFC 1122, 和RFC 1812阐明了一些ICMP协议的特征。为了要可靠地而且一致的用其他的ICMP协议进行工作,我们需要合并RFC 792 , RFC 1122和RFC 1812 。其他的RFCs为ICMP协议定义了其他的功能性:
RFC 896- 源路由失败
RFC 950- 地址掩饰扩展
RFC 1191- MTU 路径的发现
RFC 1256- 路由器发现
RFC 1349- 在英特网协议组1中的服务类型
一种比较正确的定义英特网控制信息协议的目标,和特征可能是它使用的两种操作的类型:当一个路由器或一个目的地主机在一数据报处理中需要告知有关错误的来源主机的时候 ,和为了要测定有关网络的一般特性 而使用的网络测定请求和答复信息.
1 ICMP规范
ICMP信息在IP数据报中传送。 虽然ICMP使用IP做于底层支持,好象它是一个高层协议,而实际上它是IP的一部分,必须由其它IP模块实现。IP并非设计为设计为绝对可靠,这个协议的目的是为了当网络出现问题的时候返回控制信息,而不是使IP协议变得绝对可靠,并不保证数据报或控制信息能够返回。一些数据报仍将在没有任何报告的情况下丢失。上层协议必须使用自己的差错控制程序来判断通信是否正确.RFC 792为ICMP定义IP协议的ID号是1 。它也规定IP类型—服务域值和优先权地位的数值应该和零相等。依照RFC 1812,路由器将会使用价值6或7如他们的IP优先一点点用 ICMP错误信息评价。
1.1有关ICMP信息的特殊情况
对於暂态错误信息 应该不发送ICMP错误信息。 对於接着的情况ICMP协议有在RFC 792中被定义的内部工作的严格规则:
.为避免无限重复在ICMP错误信息返回之後将不在发送ICMP错误信息.
.对於支离破碎的IP数据报只是在零碎片上发送错误的ICMP信息.(第一个碎片)
.ICMP错误信息从不在注定到广播或多点传送地址的数据报回应中发送。
.ICMP错误信息从不在作为联结层广播的数据报回应中发送.
.ICMP错误信息从不在源地址不表示唯一主机—源IP位址不可能是零,环路地址,一个广播地址或一个多点广播地址的数据报回应中发送。
.ICMP错误信息并不在任意类型的IGMP信息回应中被发送。当未知类型的一个ICMP信息是被收到的时候,它必须默默的被丢弃。
.除了信息到达 目的主机的之外,路由器将会几乎总是产生ICMP信息 (s),被产生的ICMP信息的数目是由执行来决定的。
从比较靠近的角度看各种不同的规则,我们能得出一个有关 “网络风暴” 的想法,而且额外的网络通信量是在绝大部份的ICMP协议特别条件之后。
2 ICMP信息
ICMP习惯用于两种操作类型:
。报告非暂态错误的条件。
。为了要测定有关网络的一般特性用请求和 应答信息的 测试 网络。
一个被做为”信息类型”的数字代码,被分配给每个ICMP信息;它详细叙述信息的类型。另外的一个数目码为被叙述的ICMP类型表现 “码” 。 它当作一个子类型使用,和它的描述取决于信息类型。
ICMP协定有二种类型的运算;因此它的信息也被分成两种:
ICMP错误信息
ICMP查询信息
英特网分配数字当局 (IANA) 有一个现在已被注册的定义ICMP信息类型的列表。 它也列出定义ICMP信息的RFC 。 该列表查询网址 : http://www.isi.edu/in-注意/iana/指定/icmp-叁数。表1定义各种不同的ICMP类型和码。
1 ICMP错误信息
ICMP错误信息用来报告一个妨碍传输的问题。问题的本质应该是一个非暂态传送问题。
在ICMP错误信息里面一些域位总是被传送:
ICMP错误信息的一般格式
。ICMP错误信息长度
每个ICMP错误信息包括IP表头 (20到60位字节) 和引起了错误的至少最初的8个数据字节,;超过8位字节可以被传送; 收到的数据包中这个表头和数据从被一定是为改变的。因此,一个ICMP错误信息长度应该是 在36到72位字节之间 .
ICMP错误信息
目的地不能到达(类型3)源地址丢失 (类型4)再直接的 (类型5)时间超时 (类型11)叁数问题 (类型12)
表3: ICMP错误信息
RFC 792 为 ICMP 定义 的IP 协议ID号是 1 。 它也说明了 IP 类型--服务
域值和优先位值应该等于零。 依照 RFC 1812,路由器将会使用数值 6 或 7 作为他们发送的ICMP 错误信息的 IP 标志位的值。ICMP 协议为 ICMP 错误信息作的规定:
.为避免无限重复ICMP 错误信息从不为另外的一个 ICMP 错误信息发送回应。
.ICMP 错误信息从不在注定要到一广播地址或一个多点传送位址的 数据报回应中发送。
.ICMP 错误信息从不在联结层广播发送的 数据报回应 被发送.
.ICMP 错误信息从不在根源位址不代表唯一主机的数据报回应中发送,即源 IP 位址不可能是零,环路回送地址,一个广播的地址或一个多点传送地址。ICMP 错误信息从不在路由器和主机 (s) 发布的错误信息的条件不一致的任何类型的一个 IGMP 回应中被发送。 因此我将会分开概略说明发行错误信息的条件。
1.1 不能到达目的地 (类型 3)
由目的主机发布的不能到达目的主机的ICMP信息类型:一位目的主机发出一个目的地不能到达的消息当协议在协议指定了原版的数字域时,数据包不在目的主机上是活跃的,否则指定的端口是不活跃的。ICMP 目的地不能到达的信息型藉着一个路由器发行:一个路由器在因目的地( 或下个跃程)不能到达或服务不可获得而不能够转寄的数据包回应中发行一个目的地不能到达的信息.
代码 意义 注释
012345 网络不能到达主机不能到达协议不能达到端口不能到达分裂是必须的并且DF位固定源路由失败 到达目的网络路由是不可见的如果到在一个直接被连结了的网络上的目的地主机的一条线路不是可得到的,由一个路由器产生了(别反应到 ARP )。如果,被指定在一个数据包中运输协议的没在最后的目的地的运输层被支持。如果,产生了指定运输协议(例如 UDP )对 多路输出信号不能在最后的目的地的运输层的数据包但是没有协议机制通知发送者。如果一个路由器需要到碎片但是自从 DF 标志位被固定而不能被设置。如果一个路由器不能把一个包提交给下一个,产生了在来源线路选择跳跃
1.1.1 目的地不能到达–碎片是必须的但是碎片单元是固定的
唯一的目的地不能到达的 ICMP 错误信息类型, 它与其他的目的地不能到达的 ICMP 错误信息的数据报格式有一些轻微的不同之处,这就是类型3代码4---碎片是必须的但是碎片单元是固定的。在这种类型信息中,不用的域的是长度 16 位字节,而不是 32 位字节。 其馀的16 位字节将会用来携带用于联结的 MTU(最大值传递单位)即因为数据包过大而不能运送给下一个的连接使用了跳跃 ( 或目的地)。既然数据报不可以被切碎 (DF 字节被固定) ,所以应当发送给寄件人一个包含指示应该被用比较低的 MTU和指示下一个跃程联结序号的错误信息。
1.1.2 目的地不能到达- 禁止与目的网络的通信是可以被管理的
指示目的地系统的错误信息是被配置给来自发送系统的被拒数据报。这个错误信息被用在当基於一些藉着过滤装置 (防火墙/路由器/其他人过滤装置) 限制或其他的安全过滤措施标准而被过滤的 数据报上。 我们能得出结论,尽管过滤装置正在阻断我们的数据包, 而且正在指示我们停止送数据,但我们的目的地主机是延伸的和流动的,我们不能够到达它。藉由下个例子来说明一个路由器对所有来自英特网的阻塞请求信息格式上,目的机器的目标端口号 53 被固定应用在申请 ACL 在:
1.2 源路由失败 (类型 4)
ICMP源路由失败信息类型由一个路由器发行:如果一个路由器送这个信息, 它意谓路由器不需要缓冲空间存储到目的网络的路径上的下个网络的输出数据报序列。RFC 1812 特别说明一个路由器不应该产生源陆由失败信息, 但是对路由器产生的源陆由失败信息加以限制 (因为它消耗带宽,而且它是对拥塞的一个无效的矫正方法)一个路由器收到的ICMP 源路由失败信息类型:
一个路由器接收到可能忽视的信息:由主机产生的ICMP 源路由失败信息类型:如果一个目的主机送这个信息 (它可能被实现),它意谓着数据报到达太快而不能被处理。 给英特网目的地发送通信量时ICMP 来源失败信息是对主机的一个减低速率的请求。ICMP 信息头会总是零的。藉由下个例子HPUX B.11.0,说明基于机器发行一个 ICMP 来源失败错误信息:
收到 ICMP 来源的主机失败消息类型:
ICMP 来源失败消息必须被报导到运输层, UDP 或 TCP ,主机应该在一个时期内抑制自己的流通量,然后又逐渐地增加传输量。
1.3 重定向(类型 5 )
一个路由器发出的ICMP 重定向消息类型:
如果一个路由器产生这条消息,它意味着主机应该送未来的数据包到网络的路由器上,他的IP地址是在 ICMP 消息中被给定的。路由器应该总是在作为传送了数据包主机和产生ICMP重定向消息的路由器的一样的子网上。当路由器IP地址与原来的数据报头的IP地址相匹配时,一个路由环被产生。
除非具备所有的下列条件,否则路由器不能产生重定向消息:
.数据包正在被从它被接收到的相同物理的接口转发出去,
.在数据包的 IP 来源地址与作为下一跳跃IP地址的网络逻辑IP地址相同,并且
.不包含IP源路由选择。
IP重定向消息格式
一个路由器收到一 ICMP 的重定向消息类型:
如果路由器正在运行一个路由协议,或者重定向在路由器上并且在包在其上正在被送的接口上被启用。当为路由器产生的数据报选择路径时,路由器可以忽略 ICMP.
能在代码域出现的4种不同的代码:
重定向代码
由主机发布的ICMP 重定向类型的消息:
一位主机不应该发送 ICMP 重定向消息,重定向信息仅仅是由路由器 9 发送的。
由主机收到的 ICMP 的重定向消息类型:
收到的一重定向消息的主机必须因此更新它的路由信息。
每台主机都必须随时准备接受主机和网络重定向。
在下列条件下重定向消息应该被静静地丢弃:
它指定的新网关地址不在通过的网重定向到达的相同网上。
如果重定向的来源不是为指定的目的地的当前的第一跳跃网关。
1.4 超时错误(类型 11 )
在运输错误消息中,超过了ICMP生存期的错误由一个路由器发出:
传输操作系统(或应用程序)将实时的域的时间值放在 IP 头,它代表着数据包被允许在因特网上旅行的最大的时间的。时间域值在因特网头( IP 头)被处理每个节点被减少。RFC 791规定了反映数据报处理时间花费的域的减少过程。域值以秒的单位被测量。RFC 也说实时的价值的最大的时间能被设置到 255 秒,它等于 4.25 分钟。RFC 也规定域的最大的时间能被设置到 255 秒,它等于 4.25 分钟。如果这域值等于零,数据包必须在到达它的目的地前被丢弃。作为一项措施联系到这田野评定时间是有点似是而非的。一些路由器的处理数据速度可能比较长,而一些路由器可以快处理数据包(重负担状况)。真实的意愿是数据报的寿命有一个上界限, 这样未送出的无限的环路数据包的将不堵塞因特网。
数据报的寿命是有限的是有助我们阻止旧副本在经过的某个时间以后到达。因此当我们重新播送时,我们能被保证不是以前交付了的一个信息,更旧的副本已经被丢弃并且将不防碍进程。
如果一个路由器发现在他处理的一个数据包的一个 IP 头的生存周期域等与零他将丢弃数据包并且产生一 ICMP 超时信息代码 0—— 在传输过程中超出了生存周期 (这也可能是一个路由环问题的标志)。
一个路由器必须产生一 ICMP超过了时间的消息代码 0 当它由于到期的TTL 域而丢弃一个数据包时。一个路由器可以有每接口选择在那个接口上停用这些消息的起源,但是那选择必须允许消息被发源的缺省。
在下一个例子,在到‘ping’某个 IP ( y.y.y.y ) 的尝试以后,我们收到了到目的地IP地址的从一个路由到另一个路由的传输错误消息中的超时信息 。生存周期已被耗尽:
路由器发出重新组装碎片超时错误信息:
当路由器重新集合被注定为路由器的一个包时,它被作为英特网主机。正在充当主机的路由器什么时候收到超时消息,主机规则也同样适用。