IPV6的控制消息解释

信息产业部数据通信所 马光星

  摘要:本文说明了ICMP消息的格式,差错类型和返回消息。

  关键词:IPV6,ICMP

1.ICMPV6[1]

  IPV6节点用ICMP(Internet Control Message Protocol)报告在包处理时遇到的差错和执行另一个因特网层的功能,如诊断(ICMPV6“ping")。ICMPV6是IPV6不可缺少的部分并必须由每个IPV6节点完全实现。

1.1消息的一般格式

  ICMPV6消息分成两级:差错消息和信息。由消息类型字段的高级比特为0标识差错消息。因此,差错消息的消息类型从0到127;信息的类型从128到255。

下面是ICMPV6消息的格式:

  ICMPV6差错消息:

1.目的地不可到达

2.包太大

3.超时

4.参数有问题

  ICMPV6信息:

128 返回请求

129 返回答案

  每个ICMPV6消息优先于IPV6首部和IPV6扩展首部。ICMPV6首部由紧接前面首部的下一首部字段的值58标识ICMPV6首部。ICMPV6消息有下列形式:

  类型字段表示消息的类型。它的值确定其它数据的形式。编码字段取决于消息的类型。它用于建立消息的附加等级。校验和用于检测ICMPV6消息和IPV6首部中的数据的损坏。

1.2.消息源地址的确定

  发送ICMPV6消息的节点,必须在计算校验和之前,在IPV6首部中确定IPV6的源和目的地址。如果节点有一个以上的独播地址,它必须选择消息的源地址如下:

(a) 如果消息是发送到节点独播地址之一的响应消息,答案的源地址必须与节点独播地址是同一地址。

(b) 如果消息是发送到节点的组播或任播组之一的响应消息。答案的源地址必须属于接收包的组播或任播接口上的独播地址。

(c) 如果消息是发送到不属于该节点地址的响应消息,源地址应该属于在差错诊断中最有帮助的节点独播地址。例如,如果消息是不能成功完成传送动作的响应包,源地址应该属于包传送失败接口上的独播地址。

(d) 否则,必须检验节点的路由表,确定用于发送消息到目的地的接口,独播地址属于必须用于作为消息源地址的接口。

1.3 消息的校验和计算

  校验和为16比特,开始用ICMPV6消息的类型字段,预计用IPV6首部字段的"伪首部"[2] 。在伪首部中下一首部的值是58。为了计算校验和,校验和字段置0。

1.4 消息处理规则

  在处理ICMPV6消息时,必须观察下列规则:

(a) 如果接收到未知类型的ICMPV6差错消息,必须传送到上层。

(b) 如果接收到未知类型的ICMPV6信息,必须丢弃它。

(c) 每个ICMPV6差错消息(类型∠128)包括很多IPV6讨厌的(请求)包(这些包引起差错)将适合不使差错消息超过最小IPV6的MTU(Maximum Transmission Unit)。

(d) 在那种情况下,要求因特网协议传送ICMPV6差错消息到上层处理,上层协议类型从原包提取(包含在ICMPV6差错消息体中)并选择适合的上层处理差错过程。如果原包有大量的扩展首部,在ICMPV6消息中可能不出现上层协议类型,由于原包的截短满足最小IPV6 MTU限制。在此情况下,在任何上层处理后,丢弃差错消息。

(e) ICMPV6差错消息不必作为接收的结果发送:

(e.1)ICMPV6差错消息或

(e.2)指向IPV6组播地址的包(这个规则有两个例外:(1)包太大消息,对IPV6组播,允许路径MTU发现和(2)参数有问题消息,编码2,报告不能识别的IPV6选项,选项类型的最高两比特置10),或(e.3)作为链路层组播发送的包,(e.2 中的例外也用于此情况),或(e.4)作为链路层广播发送的包,(e.2 中的例外也用于此情况),或(e.5)包的源地址不能独立识别单个节点,例如,IPV6未规定地址,IPV6组播地址或ICMPV6消息发送者知道的地址是IPV6任播地址。

(f)最后,为了限制带宽和发送成本,引起发送ICMPV6差错消息,IPV6节点必须限制发送ICMPV6消息的比率。当源发送差错包流失败时,这种情况可能出现,注意得到的ICMPV6差错消息。实现比率限制功能的方法很多,例如:

(f.1)基于定时器,如,限制差错消息传送到给定源或任意源的比率,最大每次T毫秒。(f.2)基于带宽,例如,限制从特定接口发送差错消息占用链路带宽的比率F。节点一定可以配置限制参数(例如,在上例中的T或F),用保守的缺省值(例如,T=1秒,非0秒,或F=2%,非100%)。

2.ICMPV6差错消息

2.1.目的地不可到达消息

IPV6字段:

目的地址

  从请求包的源地址字段拷贝。

ICMPV6字段:

类型 1

编码 0--不选择到达目的地的路由

1--禁止与目的地通信

2--(未分配)

3--地址不可到达

4--口不可到达

  不用这个字段对于所有的编码值都不用。必须由发送者初始化为0和接受者忽略。

说明

  目的地不可到达消息应该由路由器或原节点的IPV6层产生,在响应中,不是由于拥塞不能传送包到它的目的地址。(如果,由于拥塞丢弃包,不必产生ICMPV6消息)。如果传送失败的理由是在传送节点的路由表中没有匹配的项,编码字段置0。(注意:只有在节点的路由表中没有保持“缺省路由”时,才能够发生这种错误)。如果传输失败的理由是管理者禁止,例如“防火墙过滤器”,编码字段置1。如果传输失败是其他原因,例如,没有能力把IPV6目的地址转换为相应的链路地址或其它类型的链路问题,则编码字段置3。如果传送协议没有办法通知发送者,传送协议(如,UDP)的响应包没有接收者,目的节点应该发送编码为4的目的地不可到达消息。

上层通知

  接收ICMPV6目的地不可到达消息的节点必须通知上层处理。

2.2 包太大消息

IPV6字段:

目的地址

从请求包的源地址字段拷贝。

ICMPV6字段:

类型2

编码由发送者置0和接受者忽略。

MTU下一跳链路的最大传输单元

说明

  由于包大于出局链路的MTU不能传送响应包,路由器必须发送包太大消息。在这个消息中的信息用于作为路径MTU发现过程的部分。发送包太大消息成为发送其他ICMPV6差错消息的特例,不象其他消息,用IPV6组播目的地址或链路层组播或链路层广播地址发送接收包的响应。

上层协议通知

进来的包太大消息必须传到上层处理。

2.3 超时消息

IPV6字段:

目的地址

从请求包的源地址字段拷贝。

ICMPV6字段

类型 3

编码 0--在传送中超过跳数限制

1--分段重组超时

不用 这个字段对于所有编码值都不用。由发送者初始化为0和接收者忽略。

说明

如果路由器接收包的跳数限制是0或路由器减少包的跳数限制为0,必须丢弃包并发送编码为0的ICMPV6超时消息到包的源。这表示有路由环或初始跳数限制值太小。选择这个消息的源地址的规则见1.2节。

上层通知

进来的超时消息必须传送到上层处理。

2.4 参数有问题

IPV6字段:

目的地址

从请求包的源地址字段拷贝。

ICMPV6字段:

类型4

编码0--遇到错误的首部字段

1--遇到不能识别的下一首部字段

2--遇到不能识别的IPV6选项

指针在检测差错时标识请求包内字节的偏移量。

如果差错字段超过能够适合的ICMPV6差错消息的最大长度,指针指向超过ICMPV6包的末端。

说明

  如果IPV6节点处理包时,发现IPV6首部或扩展首部字段有问题,如不能完成包的处理,必须丢弃该包并应该发送ICMPV6参数有问题的消息到包的源,指出问题的类型和位置。在检测差错时,指针识别原包首部的字节。例如,ICMPV6消息的类型字段=4,编码字段=1和指针字段=40,应该表示IPV6扩展首部跟着原包的IPV6首部有不能识别的下一首部字段值。

上层通知

接收ICMPV6消息的节点必须通知上层处理。

3.ICMPV6信息

3.1 返回请求消息

IPV6字段:

目的地址

任意合法的IPV6地址。

ICMPV6字段:

类型128

编码0

标识符标识符帮助返回答案与这个返回请求匹配。可以是0。

顺序号 顺序号帮助返回答案与这个返回请求匹配。可以是0。

数据0或多字节的任意数据。

说明

  每个节点必须实现返回响应功能,接收返回请求和发送相应的返回答案。节点还应该实现应用层接口,发送返回请求和接收返回答案,用于诊断。

上层通知

返回请求消息可以传送到处理接收ICMPV6消息的层。

3.2 返回答案消息

IPV6字段:

目的地址

从返回请求包的源地址字段拷贝。

ICMPV6字段:

类型129

编码0

标识符标识符来自返回请求消息。

顺序号顺序号来自返回请求消息。

数据数据来自返回请求消息。

说明

  每个节点必须实现ICMPV6返回响应功能,接收返回请求和发送相应的返回答案。节点还应该实现应用层接口,发送返回请求和接收返回答案,用于诊断。在响应中发送返回答案的源地址一定是返回请求消息的目的地址。在响应中发送返回答案到发送返回请求消息的IPV6组播地址。答案的源地址一定属于接收组播返回请求消息接口上的独播地址。在ICMPV6返回请求消息中接收的数据一定全部和不修改的在ICMPV6返回答案消息中返回。

上层通知

  返回答案消息一定传送到产生返回请求消息的层处理。它可能传送到不产生返回请求消息的层处理。

4.安全考虑

4.1 ICMPV6消息的认证和加密

  用IP认证首部能够认证ICMP协议的包交换。如果,对目的地址,使用有IP认证首部的安全关联,节点应该使发送的ICMP消息包括认证首部。可以通过手工配置或密钥管理协议的操作建立安全关联。为了保证正确性必须检验在ICMP包中接收的认证首部和必须忽略不正确的认证包并丢弃。系统管理员可以配置节点忽视没有使用认证首部或封装安全净载荷认证的任何ICMP消息。应该默认允许未认证的消息。IP安全结构和IP封装安全净载荷文件专用于机密性问题[3]。

4.2 对ICMP的攻击

  ICMP消息可能受到各种攻击。下面简要地讨论这种攻击和他们的防护如下:

(1)ICMP消息可能受到作用,企图使接收器相信非原消息源来的消息。对ICMP消息,使用IPV6认证机理能够防止这种攻击。

(2)ICMP消息可能受到作用,企图使消息和答案到达非原消息要到达的目的地址。ICMP校验和计算提供保护机理,防止恶意破坏者改变载着消息的IP包的源和目的地址,用认证或加密ICMP消息能防止改变和保护校验和字段[4]。

(3)ICMP消息的消息字段或净载荷可能受到改变。ICMP消息的认证或加密能防止改变。

参考文献

[1]A. Cnta and S. Deering, "Internet Control Message Protocol(ICMP)for The Internet Protocol Version 6(IPV6) Specification", RFC 2463, December 1998.

{2} Deering, S. and R. Hinden, "Internet Protocol, Version 6,(IPV6) Specification" , RFC 2460, December 1998.

[3] Kent, S. and R. Atkinson, "IP Authentication Header ",RFC 2402,November 1998.

[4] Kent, S. and R.Atkinson, "Ip Encapsulating Security Protocol (ESP)" ,RFC 2406, November 1998.

摘自《网络通信世界》


微信扫描分享本文到朋友圈
扫码关注5G通信官方公众号,免费领取以下5G精品资料

本周热点本月热点

 

  最热通信招聘

  最新招聘信息

最新技术文章

最新论坛贴子