Icmp
外观
ICMP
Internet控制消息协议ICMP(Internet Control Message Protocol)是IP协议的辅助协议,是用来在网络设备间传递各种差错和控制信息,对于收集各种网络信息、诊断和排除各种网络故障等方面起着重要作用。常用的ping命令就使用了该协议
ICMPv6
IPv6定义了ICMPv6(Internet Control Message Protocol for IPv6)是IPv6的基础协议之一,除了提供类似ICMP的功能外还有诸多扩展。邻居发现协议(Neighbor Discovery Protocol,NDP)便是基于ICMPv6实现的,作为IPv6的关键协议,NDP提供了如前缀发现、重复地址检测、地址解析、重定向等功能。
报文格式
| Version | Traffic Class | Flow Label |
|---|---|---|
| Payload Length | Next Header(58) | Hop Limit |
| Source Address | ||
| Destination Address | ||
| ICMPv6报文载荷 | ||
ICMPv6报文载荷由ICMPv6报文类型决定,因报文类型不同而不同
在IPv6报文头部中,Next Header字段值为58则对应为ICMPv6报文
报文类型
ICMPv6报文分为两类:
差错报文
差错报文(Error Messages)也称为差错消息,Type字段最高比bit为0,也就是ICMPv6 Type-[0,127]
差错消息用于报告在转发IPv6数据包过程中出现的错误,如常见的目的不可达,超时等。
信息报文
信息报文(Information Messages)也称为信息消息,Type字段最高bit为1,也就是ICMPv6 Typ=[128,255]
信息报文可以用来实现同一链路上节点间的通信和子网内的组播成员管理等。
| 消息类型 | Type | 名称 | Code |
|---|---|---|---|
| 差错消息 | 1 | 目的不可达 | 0无路由 |
| 1因管理原因禁止访问 | |||
| 3地址不可达 | |||
| 4端口不可达 | |||
| 2 | 数据包过长 | 0 | |
| 3 | 超时 | 0跳数到0 | |
| 1分片重装超时 | |||
| 4 | 参数错误 | 0错误的包头字段 | |
| 1无法识别的下包头类型 | |||
| 2无法识别的IPv6选项 | |||
| 信息消息 | 128 | Echo Request | 0 |
| 129 | Echo Reply | 0 |
NDP
| NDP | 路由器发现 | 发现链路上的路由器,获取路由通告信息 |
|---|---|---|
| 无状态自动配置 | 通过路由器通告地址前缀,终端自动生成IPv6地址 | |
| 重复地址检测 | 获得地址后,进行地址重复检测,确保地址不冲突 | |
| 地址解析 | 请求目的网络地址对应的数据链路层地址,类似IPv4的ARP | |
| 邻居状态跟踪 | 通过NDP发现链路上的邻居并跟踪邻居状态 | |
| 前缀从编址 | 路由器对所通告的地址前缀进行灵活设置,实现网络重编址。 | |
| 重定向 | 告知其它设备,到达目标网络的更优下一跳。 |