ICMPv6是IPv6的基础协议之一,被广泛应用于其他协议中。
1.ICMPv6报文格式
在IPv6报文头部中,Next Header字段值为58则对应为ICMPv6报文
2. ICMPv6消息类型
1.差错报文
- 作用:用于报告在转发IPv6数据包过程中出现的错误,如常见的目的不可达、超时等等。
- Type取值范围:[0,127]
- 应用场景:Path MTU发现
- PMTU(Path MTU):路径MTU发现,就是发现路径上接口的最小MTU
- 背景:在IPv6中,中间转发设备不对IPv6报文进行分片,报文的分片将在源节点进行
- 目的:发现路径上的MTU,避免数据包从源转发到目的地的过程中被分片
- 作用:依赖PMTU,数据的发送方可以使用所发现到的最小PMTU与目的地节点进行通信,避免数据包在传输过程中被中途的路由器分片而导致性能的下降
- 交互过程:
- 首先PC1用1500字节作为MTU向PC2发送IPv6数据包
- R1意识到数据包过大,出站接口MTU为1400字节,于是丢弃报文并回复一个ICMPv6(Type=2)报文给PC1,指定MTU值为1400字节。
- 然后,PC1开始使用1400作为MTU发送IPv6数据。
- 数据包到达R2后,R2意识到出站接口MTU为1300字节,于是丢弃报文并发送一个ICMPv6(Type=2)报文给PC1,指定MTU值为1300字节。
- PC1开始使用1300作为MTU发送IPv6数据
2.信息报文
- 用来实现同一链路上节点间的通信和子网内的组播成员管理等
- Type取值范围[128,255]
- 应用场景:Ping
- Echo Request:用于发送到目标节点,以使目标节点立即发回一个Echo Reply应答报文。Echo Request报文的Type字段值为128,Code字段的值为0。
- Echo Reply:当收到一个Echo Request报文时,ICMPv6会用Echo Reply报文响应。Echo Reply报文的Type字段的值为129,Code字段的值为0。
- 其他常用报文
- 邻居发现(RFC2461和RFC4861)
- Type=133 路由器请求(Router Solicitation)
- Type=134 路由器公告(Router Advertisement)
- Type=135 邻居请求(Neighbor Solicitation)
- Type=136 邻居公告(Neighbor Advertisement)
- Type=137 重定向 (Redirect)
- 组播侦听者发现协议(RFC2710和RFC3810)
- Type=130 查询消息
- Type=131 报告消息
- Type=132 离开消息
- Type=143 MLDv2报告消息
- 邻居发现(RFC2461和RFC4861)