NDP邻居发现协议
Neighbor Discovery Protocol
NDP使用:ICMPv6报文中【RS、RA、NS、NA、重定向】五种消息
RS+RA可实现
- 路由器发现
- 无状态自动配置
- 前缀重编址
NS+NA可实现
- MAC地址解析
- DAD(重复地址检测)
- 邻居状态跟踪(NUD邻居不可达检测)
RS Options
RA M O Options
NS Target IP Options
NA R S O Target IP Options
RS:路由器请求(Type=133)
Router Solicitation
- 路由器收到RS消息,立即回复RA消息
RA:路由器通告(Type=134)
Router Advertisement
- R 周期性(200s~600s随机)发送RA
收到RS后,立即回复RA
华为路由器默认不发送RA,[R] undo ipv6 nd ra halt启用
Cur Hop Limit:跳数限制
Managed位:是否DHCPv6配IP
0=无状态自动配置IP(默认)
1= DHCPv6配置IP
Other-flag位:是否DHCPv6配其他参数(生存时间、邻居重传时间、MTU、DNS等)
0=无其他参数(默认)
1=DHCPv6配其他参数
- M、O后,空一位,再接下来2位是Router Preference位,把路由器分为low、medium(默认)、high三个优先级。当多个路由器回复RA消息时,靠此优先级决定哪个路由器成为网关,若优先级相同,则负载分担
Router Lifetime:作为网关有效时间(默认1800s)
Reachable Time:到达时间(单位:ms)检测可达性、延迟(类似ping时延)
Retrans Time:重传计时器(单位:ms)表示主机重传RS消息的时间
Options:携带前缀、MAC、优选生存期(Preferred Lifetime)、有效生存期(Valid
Lifetime)、MTU等参数
路由器发现
路由器收到RS,立即回复RA
PC也可以是R
无状态自动配置(SLAAC)
StateLess Address Auto Configuration
LAN中设备收到RA消息(option携带前缀64bit),其他设备可以自动生成IPv6地址
地址格式 = RA前缀 + EUI-64
[PC-G] ipv6 address auto global
- PC获得地址后,还需要DAD
- [PC-G] ipv6 address auto global default,将R的Link-Local地址作为自己网关,产生默认路由(UNR协议类型)
前缀重编址
R周期性(200s~600s随机)发送RA
前缀重编址作用
- 在SLAAC时,R改变前缀,PC跟着改
- R周期发RA(带着前缀),使PC地址始终处于优选生存期
地址生存期
无状态自动配置,通过DAD后,接口拥有了IPv6地址
- 路由器周期性发RA,保证主机IP处于优选生存期
NS:邻居请求(Type=135)
- MAC地址解析、NUD、DAD
Target Address:对方的IP
Options: 我的MAC地址(作为MAC地址解析时)
DAD、NUD的NS消息没有Options字段
NS的目的地址: MAC地址解析、DAD中,被请求节点组播地址
NUD中,单播地址
NA:邻居通告(Type=136)
R 收到NS后,立即回复NA 单播
R MAC改变,发送NA FF02::1 O置位
R位:置位表示:我是路由器(在NUD中用于检测R是否变为主机)
S位:回应NA的NS(S置位)
Override位:MAC改变位
Options:我的MAC地址
MAC地址解析(ARP)
- IPv6接口会为自己每个单播地址(包括Link-local)创建一个被请求节点组播地址
被请求节点组播地址 = FF02::1:FFxx:xxxx(单播末24位)
- 可能存在多个单播地址最后24位相同的情况,被请求节点组播地址相同
此时根据NS报文中的Target Address判断发送给谁
- 和ARP不同的一点在于
ARP Reply中 Target IP=R1
NS中 Target Address=2::2
Target MAC标识的是对哪个MAC地址进行解析,所以始终不变
设计IPv6 ARP的时候,因为不知道目的MAC 所以需要填充组播MAC;因为使用了组播MAC,所以必须有一个三层组播IP。于是就为每个IP设计了被请求节点组播地址。
为什么不直接设计基于2层的ARPv6?
答:因为ARP Request广播,IPv6的广播域中可能存在大量(虚拟)终端,转发效率不高
IPv6取消了广播,设计了被请求节点组播地址=MAC地址解析、DAD的DIP
二层MAC = 3333-XXXX-XXXX
三层被请求节点组播地址 = FF02::1:FFxx:xxxx
~单播IPv6地址
MAC末位是从IPv6单播映射下来的,大大减少会解封装该2层报文的PC数量
IPv4 —— ARP表项
IPv6 —— 直接查看ipv6邻居dis ipv6 neighbors(显示的为link-local和MAC对应关系)
DAD重复地址检测(免费ARP)
Duplicate Address Detection
- DAD类似免费ARP
IP改变、VRRP主备切换时,向自己IP的被请求节点组播地址发送NS
但MAC地址改变时,直接发送NA(O置位)
DAD NS源地址=:: NS目的地址=试验地址的被请求节点组播地址
NA目的地址=FF02::1
- 预配地址称为试验地址(tentative address)
- R1发送NS后,设置计时器,超时未收到NA,则使用该地址。
该地址状态由试验→已分配(assigned)
NUD邻居不可达检测
Neighbor Unreachable Detection
NUD是指:IPv6路由器之间交互NS、NA,以跟踪邻居状态
IPv6邻居状态机(邻居状态跟踪)
- [R] display ipv6 neighbors //查看路由器邻居表(ARP表)
- MAC地址解析、DAD的NS的DIP=被请求节点组播地址
NUD的NS消息目的地址是邻居单播地址
重定向(Type=137)
重定向原理
- 重定向只对主机有效,对路由器无效
- R1发现流量入接口=出接口,则发送给主机一个重定向报文,告诉主机更优下一跳
Path MTU发现
路径上数据包>MTU
IPv4:分片
IPv6:丢包(IPv6仅在源节点分片、目的节点重组)
- IPv6要求MTU≥1280Byte
源节点发自己接口MTU的报文,如果路径上有更小的MTU,则会返回ICMP错误报文(类型=数据包过大,同时携带更小的MTU)
- 动态PMTU探测出链路MTU值,老化时间=10min
优点:可以减少因MTU带来的丢包
缺点:通信前需要PMTU发现,增加时延
[R] ipv6 pathmtu x::x