术语
ND 邻居发现(Neighbor Discovery) NS 邻居请求(Neighbor Soliciation) NA 邻居回答(Neighbor Adertisment) RS 路由请求(Router Soliciation) RA 路由回答(Router Adertisment) NUD 邻居不可达检测(Neighbor Unreachability Detection) DAD 重复地址检测(Duplicate Address Detection) Reachable Time 可达时间 Retrans Timer 重新传输定时器 Neighbor Cache Entry 邻居缓存条目 Target Address 目标地址,具体的单播地址,NS包中具体的请求地址 Link-layer adderss 链路层地址,通常就是设备MAC地址 Link-local address 链路域地址,可参考IPv6编址相关文档 > Target Link-Layer Address 目标链路层地址 Source Link-Layer Address 源链路层地址 Solicited-node MulticastAddress 请求结点组播地址,可参考RFC3515
协议概况
- 邻居发现协议是用来发现在同一链路上的邻居结点,它主要用来解决以下一些问题:
- 路由器发现:主机定位主机侧链路的路由设备;
- 掩码发现:主机、路由器用来发现所处链路的特定目的地址的掩码配置;
- 参数发现:路由设备用来发现所处链路的一些参数,例如:链路MTU,Hop Limit等;
- 地址自动配置:路由设备为自己的接口自动配置一个V6地址;
- 地址解析:路由设备为给定的IPv6地址在目标链路上选择一个link-layer地址;
- 下一跳选择:一个用来根据IP目的地址选择下一跳IP的算法,下一跳可以是路由设备也可以是目的地址本身;
- 邻居不可达检测:路由设备用来检测邻居的可达性;
- 重复地址检测:路由设备用来检测自身的IP地址是否被其它结点使用;
- 重定向:路由设备用来通告主机针对具体目的IP的更好下一跳选择;
ICMPv6包
邻居发现协议定义5种不同的ICMP包:
- 路由请求包(RS):当主机上的接口IPv6 enable后,便会发送一个RS包到路由设备,请求其返回一个路由通告包;
- 路由通告包(RA):路由通告只有几种情况下发出,⑴在收到RS包后,⑵当链路发生变化时,⑶网络参数发生变化时,⑷一个发送周期到达;该通告可以包含目的链路的掩码,地址配置或则Hop
Limit等信息; - 邻居请求包(NS):NS包是路由设备用来获得邻居的link-layer地址,或则通过已获得的link-layer地址来判断邻居可达性,NS包也被用来重复地址检测;
- 邻居通告包(NA):一个针对NS包的应答包。另外还有一种非应答的NA包,用来
- 重定向(Redirect):路由设备通告主机针对具体目的IP的更好下一跳;
IPv6邻居发现(ND)与IPv4中ARP区别
- 在IPv4中,地址解析ARP是基于链路层的广播机制实现的,在一个比较大的站点范围内会占用大量的带宽。
- 在IPv6中,这一过程是基于IP层的组播机制实现的。
- IPv4的ARP运行在数据链路层,不同的网络介质需要有不同的ARP协议,例如Ethernet ARP与FDDI ARP就不完全相同。
- IPv6的ND协议是运行在网络层,与介质无关,任何网络媒介都可以运行相同的ND协议。
ND协议介绍
Ipv6邻居发现(ND)机制
邻居发现使用ICMPv6协议 ND定义了5种ICMPv6报文类型
-
路由器请求(RS):Router solicitation(ICMPv6 type 133) -
路由器公告(RA):Router advertisement (ICMPv6 type 134) -
邻居请求(NS): Neighbor solicitation (ICMPv6 type 135) -
邻居公告(NA): Neighbor advertisement(ICMPv6 type 136) -
重定向(Redirect) (ICMPv6 type 137)
路由器请求(Router solicitation)
为了使路由器迅速产生路由器通告,主机发送路由器请求 当节点启动时,发送RS,期待RA 源地址为自己的地址或者未指定地址 目标地址为ff02::2本地链路所有路由器组播组 选项字段为源链路层地址,::例外
路由器通告(Router advertisement)
路由器周期性的发送路由器通告消息,或者对路由器请求作出回应 周期发送/响应RS 源地址必须是自己的本地链路地址 目标地址为ff02::1本地链路所有节点组播组 选项字段包括源链路层选项前缀选项MTU选项
前缀选项 可有多个前缀选项 L位为1表示该前缀可有于本地链路判断 A位为1可用于无状态地址自动配置 Valid lifetime &Preferred Lifetime用于重新编址平滑过渡
邻居请求(Neighbor solicitation)
节点(主机或路由设备)发送邻居请求报文来请求目标节点链路层地址,并同时将自己的链路层通知给邻居设备。 邻居请求在节点处理地址是是多点传送的。 在节点对邻居可达性进行校验时是单点传送的。 当路由设备想获得一个Target地址(具体的IPv6地址)对应的link-layer地址时,发送NS组播包; 当检测一个邻居是否可达时发单波包; 多种ND机制使用 源地址为未指定地址::或者可用单播地址 目标地址为目标地址所请求节点的组播组地址/单播地址 目标地址为所请求节点地址 选项字段为源链路层地址(可无)
邻居请求(Neighbor solicitation)
IP 字段:
源地址 — 发送NS包接口的IPv6地址,如果是DAD过程,该地址为不确定地址(unspecified address); 目的地址 — Target(目标)地址对应的请求节点组播地址 (solicited-node multicast address); Hop Limit — 255(注意,必须是255,否则视为无效包直接丢弃)
ICMP字段
类型 135 代码 0 Target地址 具体请求的单播IPv6地址
选项字段
可以是发送NS端的link-layer地址, 但是如果IPv6源地址为未指定地址时,则不可以包含此选项;
选项类型
Source Link-Layer Address——1 Target Link-Layer Address ——2 Prefix Information ——————3 Redirected Header ——————4 MTU ————————————5
|