ndp是用于ipv6的邻居发现协议,相当于ipv4的arp协议,但ndp相对于arp进行了大量完善,也更为复杂。
先把题目列出来,后面再补充
– solicited-node multicast address(请求节点多播地址,SNMA)
这个多播地址主要在nd协义中用于多播ndp。
交换机开启mld协议后SNMA才能以组播的形式转发(RFC4861 7.2.1节),否者跟广播没区别。
前104位是固定值,后24位是对应ipv6的后64位,格式如下:
ff02::1:ff00:0/104
注意:每个ipv6地址都有一个对应的多播地址。
– ns和na报文
ns报文用来请求目标ip地址的mac地址,na报文用来通告自己的ip地址和mac地址绑定关系,同时ns和na报文也用于nud和dad。
– 单播和组播ndp
单播ndp就是目的地址是单播ipv6和mac地址的nd报文,反之目的地址是组播ipv6和mac地址的nd报文就是组播ndp,用于ndp的组播地址分为请求节点多播地址和链路本地作用域所有节点的多播地址(FF02::1),FF02::1主要用于非请求NA报文以及DAD时应答的NA报文。
– Address Resolution和nud(邻居不可达性检测)
In some cases (e.g., UDP-based protocols and routers forwarding packets to hosts), such reachability information may not be readily available from upper-layer protocols. When no hints are available and a node is sending packets to a neighbor, the node actively probes the neighbor using unicast Neighbor Solicitation messages to verify that the forward path is still working.
对已知的ipv6 neighborhood进行状态维护,实现更新缓存表中的neighborhood是否可达,不过只对正在发送数据的neighborhood进行维护,没有流量的neighborhood会转入stale状态。
NUD可以参考上层协议的信息,比如TCP确认,当收到TCP确认后可以不再发送NS报文执行NUD,但是UPD和组播仍然需要通过NS报文执行NUD。
首次解析mac地址时叫地址解析,使用请求节点多播地址,后面维护邻居状态叫NUD,使用单播地址。
- dad(重复地址检测)
Neighbor Solicitation and Advertisement messages are also used for Duplicate Address Detection as specified by [ADDRCONF]. In particular, Duplicate Address Detection sends Neighbor Solicitation messages with an unspecified source address targeting its own “tentative” address. Such messages trigger nodes already using the address to respond with a multicast Neighbor Advertisement indicating that the address is in use.
使用solicited-node multicast address发送NS报文,使用多播回复NA报文(ff02::1)
dad只在接口初始化时执行 - gc(垃圾回收)
对于状态处于stale,又没有流量通过(没有流量就不执行nud)的邻居表会始终存在内存中,这样时间长了势必会浪费内存空间,在Linux当邻居表大于128个时就会调用gc删除stale状态的表项,当大于512个时就是删除超过5秒的表项。 - Unsolicited Neighbor Advertisements(非请求NA)
只在mac地址改变时发送,不能代替NUD,设备收到非请求NA时不应该更新自己的neighbor表,而应该重新执行地NUD,即发送ns单播报文。非请求na报文如果把override设为1,则设备会用新的mac地址执行nud。rfc中说不应该只依懒非请求NA来更新neighbor的mac地址,因为能收到na报文只代表是单向通的,不代表反过来也是通的。
注意:
网卡初始化时并不执行非请求NA而是执行DAD。 -
重定向
ICMPv6 Type 137,与ipv4的重定向类似
参考:
arp协议
https://datatracker.ietf.org/doc/rfc826/
ndp协议
https://datatracker.ietf.org/doc/rfc4861/
rfc4861中文版,不过有点像机翻,比谷歌翻译强点
https://blog.csdn.net/Phoenix_zxk/article/details/135048709
rfc1971 4.8.2节 重复地址检测
To check an address, a node sends DupAddrDetectTransmits Neighbor Solicitations, each separated by RetransTimer milliseconds. The solicitation’s Target Address is set to the address being checked, the IP source is set to the unspecified address, and the IP destination is set to the solicited-node multicast address of the target address.
https://datatracker.ietf.org/doc/rfc1971/
icmpv6协议
https://datatracker.ietf.org/doc/rfc4443/
配置gc的运行条件
http://sunyongfeng.com/201805/networks/linux_arp
华为的文档
https://support.huawei.com/enterprise/zh/doc/EDOC1100389608/a7028751