ICMPv6

Reserved

ICMPv6 Summary

IPV6包头--下一个头部58--ICMPv6消息

8位类型--8位代码--16位校验和
---------消息主体----------
	......
---------消息主体----------

有两类消息:
0-127是错误消息
128-255是信息类消息


错误消息汇总:
类型-------名称--------------代码------代码描述
1          目的不可达        0         没有通往目的主机的路由
                             1         与目的主机的通信被管理性禁止
                             2         目的主机所在网络超出了源地址所能企及范围
                             3         地址不可达(适用于1和2都不适用的情况)
                             4         端口不可达
                             5         源地址无法通过出、入站安全策略检查
                             6         网络设备拒绝通往目的主机的精确路由
2          数据包过长        0         需要分片
3          消息超时          0         跳限制减为0
                             1         重组经过分片的数据包
4          参数问题          0         ipv6包头字段错误
                             1         下一个头部字段无法识别
                             2         ipv6选项无法识别
100        供私人实验使用
101        供私人实验使用
127        预留,用于扩充icmpv6错误消息


信息类消息汇总:
类型------------------------名称--------------代码和描述
用于ping程序
128                         Echo Request      0:忽略
129                         Echo Reply        0: 忽略
用于多播侦听者发现功能
130                         MLD查询
131                         MLD报告
132                         MLD完成
用于邻居发现功能
133                         RS
134                         RA
135                         NS
136                         NA
137                         重定向
其他
138                         用于路由器重新编址,通知一组路由器,让他们执行重新编址
139                         节点信息查询
140                         节点信息应答
......
    

邻居发现ND Neighbor Discovery

邻居发现功能依赖于下面5种ICMPv6消息

路由器和主机之间发送的,行使动态地址分配功能的消息:
1.路由器恳求消息RS Router Solicitation
2.路由器通告消息RA Router Advertisement

主机之间,行使地址解析功能的消息:
3.邻居恳求消息NS Neighbor Solicitation
3.邻居通告消息NA Neighbor Advertisement

路由器和主机之间,用于发现更优的第一跳路由的消息
5.重定向消息

邻居发现消息可以完成:
1.发现路由器,配置ipv6地址前缀,默认网关
2.地址解析
3.地址冲突检测DAD
4.邻居不可达NUD检测
5.重定向

邻居发现选项:
可携带下面的选项
1.源链路层地址,NS RS RA会包括这个选项
2.目标链路层地址,NA和重定向包含这个
3.前缀信息,RA包含
4.重定向头部
5.MTU选项

RS,RA

RS:
type=133 8位----code=0 8位----16位校验和
----------------预留-------------------
----------------ND选项-----------------
	......
----------------ND选项-----------------

--以太网头--
目的mac:33:33:00:00:00:02 所有ipv6路由器
源mac: nic mac
类型:0x86dd ipv6
--IPv6头--
下一个头部:58
跳限制:255,表示路由器不得转发,路由器会丢弃跳限制为非255的RS
源地址:本地链路单播或者未指定单播
目的地址:ff02::2
--ICMPv6头部--
类型:133
代码:0
校验和:
预留:
--ND选项--
类型:1 表示源mac
长度:1,单位8字节
值:mac


RA:
type=134 8位----code=0 8位----16位校验和
跳限制 8位  ----M-O-H-P-R ----16位路由器生存时间
----------------可达时间  ---------------------
----------------重传计时器---------------------
----------------选项(源mac,mtu,前缀)-------
	......
----------------选项(源mac,mtu,前缀)-------


当前缀选项中包含的A标记位打开的时候,设备会根据前缀信息生成ip
当icmp选项O打开的时候,会额外从无状态dhcpv6服务器获取除公网单播地址外的其他信息,如DNS
当icmp选项M打开的时候,会从有状态dhcpv6服务区获取公网单播地址,DNS。
但是默认网关永远是从RA的源地址获取。

--以太网头部--
dst mac: 33:33:00:00:00:01可以是单播也可以配置位单播,但是定期发送的肯定是多播
src mac:
tyep:0x86dd
--IPv6包头--
下一个头部:58
跳限制:255
源ip:接口本地链路单播地址
目的ip:ff02::1或者RS的源ip
--ICMPv6头部--
type:134
code:0
校验和
跳限制:64,路由器给子网内主机的建议值,0为无建议
M位:建议从有状态的dhcpv6获取地址
O位:建议从dhcpv6获取其他信息,比如dns
归属代理标记位:为1表示路由器行使移动ipv6代理之职
默认路由优先级:生成的默认路由的优先级01高,00中,11低,10预留
路由器生存时间:在指定时间内,将路由器作为默认网关,如果位0表示不应该作为默认网关。cisco默认1800秒 
可达时间:收到邻居的可达性确认之后,在这个时间段内认为邻居可达
重传计时器:主机重传NS之前等待的时间
--ICMPv6 ND源mac选项--
type:1
len:1
value:mac
--ICMPv6 MTU选项--
type:5
len:1
value:mtu
--ICMPv6前缀选项--
type:3
len:4
前缀长度:
on-link:如果为1,主机会把前缀添加进一个前缀列表,任何其他ipv6主机,只要这个前缀覆盖了它的ipv6地址,都视为可在本地子网内直连。
A标记:地址自动配置标记,通知主机执行SLAAC
有效地址生存时间:地址有效时间,必须大于首选地址生存时间
首先地址生存时间:地址优先使用期。
前缀:

NS,NA

NS:
type=135 8位----code=0 8位----16位校验和
----------------预留-------------------
----------------目标地址---------------
----------------目标地址---------------
----------------目标地址---------------
----------------目标地址---------------
----------------ND选项(源mac)--------

--以太网头部--
dst mac:目的ip的请求节点多播地址对应的多播mac
src mac:
type:0x86dd
--IPv6包头--
下一个头部:58
跳限制:255
源ip:本地链路ip或者公务单播ip,依目标地址而定
目的地址:如果目的是执行NUD,那么是目的ip是单播地址,否则是请求节点多播地址
--ICMPv6头部--
type:135
code:0
校验和:
预留:
目标地址:解析的目标地址
--ND选项--
type:1
len:1
value:src mac


NA:
type=136 8位----code=0 8位----校验和
R-S-O---------------29位预留-------
----------------目标地址-----------
----------------目标地址-----------
----------------目标地址-----------
----------------目标地址-----------
----------------ND选项(dst mac)--


--以太网头部--
dst mac:NS的src mac
src mac:
type:0x86dd
--IPv6包头--
下一个头部:58
跳限制:255
源ip:nic ip
目的ip:NS的src ip
--ICMPv6头部--
type:136
code:0
校验和:
R:如果是1,表示发送NA的是路由器
S:如果是1,表示发送NA的目的是为了响应NS
O:表示接收主机应该更新邻居缓存表
预留字段:0
目标地址字段:对方请求的目标地址,或者主动发送的时候指定mac有更新的地址
--ND选项--
type:2 目标链路地址
len:1
value:mac

DAD Duplicate Address Detection

ipv6设备在启用任何一个单播地址之前,都需要执行DAD
就是以自己的ip为目标,创建并发送NS,
目的地址是自己ip对应的请求节点多播地址

NUD Neighbor Unreachability Detection

满足两个条件之一,即认为可达:
1.收到了NS的回应NA
2.高层协议指出,本机与邻居之间成功建立了链接,比如TCP链接。