ICMPv6基础:
ICMPv6(Internet Control Message Protocol for the IPv6)是IPv6的基础协议之一。
在IPv4中,Internet控制报文协议ICMP(Internet Control Message Protocol)向源节点报告关于向目的地传输IP数据包过程中的错误和信息。它为诊断、信息和管理目的定义了一些消息,如:目的不可达、数据包超长、超时、回应请求和回应应答等。在IPv6中,ICMPv6除了提供ICMPv4常用的功能之外,还是其它一些功能的基础,如邻接点发现、无状态地址配置(包括重复地址检测)、PMTU发现等。反正比ICMP更加强大了。
ICMPv6的协议类型号(即IPv6报文中的Next Header字段的值)为58(IPv4中ICMP为1)。ICMPv6的报文格式如图所示:
- Type:表明消息的类型,0至127表示差错报文类型,128至255表示消息报文类型。也就是一部分是报错消息,一部分是功能型报文。
- Code:表示此消息类型细分的类型。
- Checksum:表示ICMPv6报文的校验和。
ICMPv6差错报文:
-
目的不可达错误报文
当数据包无法被转发到目标节点或上层协议时,路由器或目标节点发送ICMPv6目标不可达差错报文。在目标不可达报文中,类型(Type)字段值为1,代码(Code)字段值为0-4,每一个代码值都定义了具体含义(RFC2463):
• 0:没有到达目标的路由
• 1:与目标的通信被管理策略禁止
• 2:未指定
• 3:地址不可达
• 4:端口不可达 -
数据包过大错误报文:
如果由于出口链路的MTU小于IPv6数据包的长度而导致数据包无法转发,路由器就会发送数据包超长报文。该报文被用于IPv6路径MTU发现的处理 。数据包超长报文的类型字段值为2,代码字段值为0。 -
时间超时错误报文:
当路由器收到一个IPv6报头中的跳限制(Hop Limit)字段值为0的数据包时,会丢弃该数据包并向源发送ICMPv6超时报文。在超时报文中,类型字段的值为3,代码字段的值为0或1:
• 0:在传输中超越了跳限制
• 1:分片重组超时 -
参数错误报文:
当IPv6报头或者扩展报头出现错误,导致数据包不能进一步处理时,IPv6节点会丢弃该数据包并向源发送此报文,指明问题的位置和类型。参数问题报文中,类型字段值为4,代码字段值为0~2,32位指针字段指出错误发生的位置。其中代码字段是这样定义的:
• 0:遇到错误的报头字段
• 1:遇到无法识别的下一个报头(Next Header)类型
• 2:遇到无法识别的IPv6选项
模拟器上很难制造出来这些报文,所以这里不进行抓包分析。
ICMP消息报文:
1.请求、应答报文:
回送请求报文:
回送请求报文用于发送到目标节点,以使目标节点立即发回一个回送应答报文。回送请求报文的类型字段值为128,代码字段的值为0。标志符(Identifier)和序列号(Sequence Number)字段有发送方主机设置,用于将即将收到的回送应答报文与发送的回送请求的报文进行匹配,例如我发送的包的报文序列号是1,回复的报文也是1。
回送应答报文:
当收到一个回送请求报文时,ICMPv6会用回送应答报文响应。回送应答报文的类型字段的值为129,代码字段的值为0。标志符(Identifier)和序列号(Sequence Number)字段的值被指为与回送请求报文中的相应字段一样的值。
2.RS消息:
当主机刚刚接入网络并被配置为自动获取地址,主机需要自动获得前缀、前缀长度、默认网关等信息时,就会发送RS消息。源IP是发送接口的Link Local地址或者未指定地址,目的地址是FFO2::1或FFO2::2,路由器收到RS消息后立刻回送RA消息给主机,在RA消息中有主机想要的单播地址的前缀及前缀长度等信息。下图显示了RS消息的详细格式:
- Type: 8bit,值为133。
- Code: 8bit,值为0。
- Checksum: 16bit,ICMPv6校验和,用于验证IPv6报头的完整性。Reserved: 32bit,保留为0。
- Options:选项,目前只定义了一个,包含发送者的链路层地址,如果源地址为未扌定地址,则RS消息中不能包含此选项。
3.RA消息:
RA消息由路由器周期性地发送,或者在收到主机发送的RS消息后立刻发送,主要为主机提供编址信息以及其他配置信息。该消息的源IP是发出消息接口的Link Local地址,目的地址是FFO2::1或者为收到的RS消息中的源地址。消息格式如图所示:
- Type: 8bit,值为134。Code: 8bit,值为0。
- Checksum: 16bit,ICMPv6校验和,用于验证ICMPv6报头。
- Cur Hop Limit: 8bit,表示主机跳数限制,路由器建议采用无状态自动配置的主机在IP包的跳数限制在该字段中的值,该值为0时表示路由器不推荐跳数限制值,由主机自己设置各自的跳数限制值。
- M位: 1bit,管理地址配置位,该位置О表示使用无状态自动配置;置1表示告诉主机使用DHCPv6服务器来获取配置信息当置1时O位无意义,因为所有参数都可以通过DHCPv6获得。
- О位: 1bit,表示其他配置标志位,该位置О表示 DHCPv6服务器没有其他可用信息。该位置1时,其他参数使用DHCPV6服务器获得,包括路由器生存时间、邻居可文达时间、邻居的重传时间、链路的MTU信息和DNS相关信息等。
- Reserverd:保留字段,6bit,该字段未使用。
Router Lifetime: 16bit,与默认路由器关联的生存时间,以秒为单位,最大为65535华为缺省情况下为1800s。该值表示主机把该路由器作为默认网关的有效时间。收到等于0的RA消息时,主机不会将通告该RA消息的源路由器配置为自己的默认网关。主机在每次收到RA消息时,都会刷新此计时器。 - Reachable Time: 32bit,以毫秒为单位,表示通告邻居的可达时间,用作邻居不可达检测,为О表示未指定。
- Retrans Timer: 32bit,重传计时器,以毫秒为单位,表示主机在重传邻居请求消,息前应该等待的时间,为0表示未指定。该字段一般用作地址解释和邻居不可性检测。
- Options:可能包含的选项有发送RA消息的路由器的链路层地址、MTU、前缀信息。
4.NS消息:
当节点不知道目标地址的链路层地址时,将发送NS消息。此时 NS消息的源地址是发送接口的 global地址,目标地址是被访问的地址所对应的被请求节点组播地址。此消息中包含发送端的链路层地址,作用类似于ARP请求,这里的链路层地址一般是指以太网的MAC地址。此外,NS还可以用来检测邻居的可达性和进行地址冲突检测,当节点需要验证邻居的可达性时,将发送单播的NS消息;在DAD(重复地址检测)过程中,源地址为未指定地址。NS的消息格式如图所示:
- Type: 8bit,值为135。Code: 8bit,值为0。
- Checksum: 16bit,ICMPv6校验和,用来验证ICMPv6报头。Reserved: 32bit,该字段未使用,保留为0。
- Target Address: 128bit,请求的目标设备的IPv6地址,该字段不能使用组播地址。
- Options:选项,发送者的链路层地址当源IP地址是未指定地址时不能包括此选项。在有IPv6地址的链路层上,以须句含此选项。
5.NA消息:
当节点接受到NS消息后,会快速响应NA 消息,或者当节点需要快速传播新的作息(非请求)时,也会发送NA消息。对于收到NS后回复的NA消息是以单播的形发送的,源IP是被访问的IP地址,目的IP是NS消息中的源地址;如果收到的NS 息中的源地址是未指定地址,则NA消息的目的地址为所有节点的组播地址,作用类于ARP响应。对于非请求的NA消息,目的地址为所有节点的组播地址。NA的消息式如图所示:
- Type: 8bit,值为136。Code: 8bit,值为0。
- Checksum: 16bit,ICMPv6校验和,用于验证ICMPv6的报头。
- R位:1bit,路由器标记位,置1表示该节点为路由器,在邻居不可达检测中检测路由器是否变成主机。
- S位: 1bit,请求标记位,置1表示该NA消息是收到NS消息后的回应。S位在邻居可达性检测时被用作可达性确认。
- O位:1bit,替代标记位,置1表示需要替代当前已缓存的IPv6地址的链路层地址,从而更新邻居缓存表项。如果置0,则表示该NA 消息不更新现有的链路层地址,如果没有相应的链路层地址,则添加新的表项。
- Reserved:29bit,该字段未使用,保留为0。
- Target Address: 128bit,如果用作NS回应的NA消息,此字段应该是收到NS消息中的Target Address字段的值,对于非响应的NA消息,此字段应该是链路层地址发生变化的IPv6地址。
- Options:选项,包含此NA消息发送者的链路层地址,对于回应组播NS请求的NA消息必须包含此选项,对于回应单播NS请求的NA消息可以不包含此选项,因为单播NS请求的发送者有正确的链路层地址。
6.重定向信息:
- Type: 8bit,值为137。Code: 8bit,值为0。
- Checksum: 16bit,ICMPv6校验和,用于验证ICMPv6报头。Reserved:32bit,该字段未使用,保留
为0。 - Target Address:是通知到主机的最优下一跳路由器,必须是该下一跳路由器的 linklocal地址;当目的地是邻居时,Target Address必须是 Destination Address,否则是重定向后的下一跳路由器地址。
- Destination Address:需要被重定向的目的地址。
- Options:选项,包含目标地址(重定向后使用的下一跳路由器)的链路层地址。路由器可以通过ICMPv6重定向消息通知主机,在去往目的地址的路径上有更优的下一跳,主机发出的数据包能被重定向到更好的下一跳路由器,也可以用于通知目标地址就是邻居。重定向消息只对主机有效,对路由器无效。消息的源地址是发送接口的链路本地地址,目的地址是触发此重定向报文的源地址。
注:RS、RA、NS、NA、重定向报文具体使用参考后面的笔记。
整理资料来源:《HCIE路由交换学习指南》、HCIE培训文档