ICMPv6报文
ICMPv6(Internet Control Message Protocol for the IPv6)是IPv6的基础协议之一。
在IPv4中,Internet控制报文协议ICMP(Internet Control Message Protocol)向源节点报告关于向目的地传输IP数据包过程中的错误和信息。它为诊断、信息和管理目的定义了一些消息,如:目的不可达、数据包超长、超时、回应请求和回应应答等。在IPv6中,ICMPv6除了提供ICMPv4常用的功能之外,还是其它一些功能的基础,如邻接点发现、无状态地址配置(包括重复地址检测)、PMTU发现等等。
报文中字段解释如下:
Type:表明消息的类型,0-127表示差错报文类型,128255表示消息报文类型。
Code:表示此消息类型细分的类型。
Checksum:表示ICMPv6报文的校验和。
ICMPv6错误报文的分类
ICMPv6错误报文用于报告在转发IPv6数据包过程中出现的错误。ICMPv6错误报文可以分为以下4种:
目的不可达错误报文
在IPv6节点转发IPv6报文过程中,当设备发现目的地址不可达时,就会向发送报文的源节点发送ICMPv6目的不可达错误报文,同时报文中会携带引起该错误报文的具体原因。
目的不可达错误报文的Type字段值为1。根据错误具体原因又可以分为:
Code=0:没有到达目标设备的路由。
Code=1:与目标设备的通信被管理策略禁止。
Code=2:未指定。
Code=3:目的IP地址不可达。
Code=4:目的端口不可达。
数据包过大错误报文
在IPv6节点转发IPv6报文过程中,发现报文炒锅出接口的链路MTU时,则向发送报文的源节点发送ICMPv6数据包过大错误报文,其中携带出接口的链路MTU值,数据包过大错误报文是Path MTU发现机制的基础。
数据包过大错误报文的Type字段值为2,Code字段值为0。
时间超时错误报文
在IPv6报文收发过程中,当设备收到Hop Limit字段值等于0的数据包,后者当设备将Hop Limit字段值减为0时,会向发送报文的源节点发送ICMPv6超时错误报文。对于分段重组报文的操作,如果炒锅定时时间,也会产生一个ICMPv6超时报文。
时间超时错误报文的Type字段值为3,根据错误具体原因又可以细分为:
Code=0:在传输中超越了跳数限制。
Code=1:分片重组超时。
参数错误报文
当目的节点收到一个IPv6报文时,会对报文进行有效性检查,如果发现问题会向报文的源节点回应一个ICMPv6参数错误差错报文。
参数错误报文的Type字段值为4,根据错误具体原因又可以细分为:
Code=0:IPv6基本头或扩展头的某个字段有错误。
Code=1:IPv6基本头或扩展头的NextHeader值不可识别。
Code=2:扩展头重出现未知的选项。
ICMPv6信息报文的分类
ICMPv6信息报文提供诊断功能和附加的主机功能,比如多播侦听发现和邻居发现。常见GICMPv6信息报文主要包括会送请求报文(Echo Request)和回送应答报文(Echo Reply),这两种报文也就是通常使用的ping报文。
会送请求报文:会送请求报文用于发送到目标节点,以使目标节点立即发回一个会送应答报文。回送请求报文的Type字段值为128,Code字段的值为0。
会送应答报文:当收到一个会送请求报文时,ICMPv6回用会送应用报文响应。会送应答报文的Type字段的值为129,Code字段的值为0。
IPv6地址配置方式
IPv6邻居发现协议
邻居发现协议NDP(Neighbor Discovery Protocol)是IPv6协议体系中一个重要的基础协议。邻居发现协议替代了IPv4的ARP(Address Resolution Protocol)和ICMP路由器发现(Router Discovery),它定义了使用ICMPv6报文实现地址解析,跟踪邻居状态,重复地址检测,路由器发现以及重定向等功能。
地址解析
在IPv4,当主机需要和目标主机通信时,必须先通过ARP协议获得目的主机的链路层地址。在IPv6中,同样需要从IP地址解析到链路层底子好的功能。邻发现协议实现了这个功能。
ARP报文时直接封装在以太网报文中,以太网协议类型为0x806,普遍观点认为ARP定位为第2.5层的协议。ND本身基于ICMPv6实现,以太网协议类型为0x86DD ,即IPv6报文, IPv6下一个报文头字段值为58,表示ICMPv6报文,由于ND协议使用的所有报文均封装在ICMPv6报文中,一般来说,ND被看作第三层的协议。在三层完成地址解析,主要带来一下几个好处:
地址解析在三层完成,不同的二层介质可以采用相同的地址解析协议。
可以使用三层的安全机制避免地址解析攻击。
使用组播方式发送请求报文,减少了二层网络的性能压力。
地址解析过程中使用了两种ICMPv6报文:邻居请求报文NS(Neighbor Solicitation)和邻居通告报文NA(Neighbor Advertisement)。
NS报文:Type字段值为135,Code字段值为0,在地址解析中的作用类似于IPv4中的ARP请求报文。
NA报文:Type字段值为136,Code字段值为0,在地址解析中的作用类似于IPv4中的ARP应答报文。
地址解析的过程:
Host A在向Host B发送报文之前它必须要解析出Host B的链路层地址,所以首先Host A会发送一个NS报文,其中源地址为Host A的IPv6地址,目的地址为Host B的被请求节点组播地址,需要解析的目标IP为Host B的IPv6地址,这就表示Host A想要知道Host B的链路层地址。同时需要指出的是,在NS报文的Options字段中还携带了Host A的链路层地址。
当Host B接收到了NS报文之后,就会回应NA报文,其中源地址为Host B的IPv6地址,目的地址为Host A的IPv6地址(使用NS报文的Host A 的链路层地址进行单播),Host B的链路层地址被放在Options字段中,这样就完成了一个地址解析的过程。
邻居状态跟踪
通过邻居或到达邻居的通信,会因各种原因而中断,包括硬件故障、接口卡的热插入等。如果目的地失效,则恢复是不可能的,通信失败;如果路径失效,则恢复是可能的。因此节点需要维护一张邻居表,每个邻居都有相应的状态,状态之间可以迁移。
1.A先发送NS报文,并生成缓存条目,此时,邻居状态为incomplete。
[AR1]display ipv6 neighbors
-----------------------------------------------------------------------------
IPv6 Address : 2001:1::2
Link-layer : 0000-0000-0000 State : INCMP
Interface : GE0/0/0 Age : 0
VLAN : - CEVLAN: -
VPN name : Is Router: FALSE
Secure FLAG : UN-SECURE
---------------------------------------