发现路由器与解析邻居分工不同
路由器请求和路由器通告帮助主机发现本链路路由器,并获取前缀、链路MTU等配置。邻居请求和邻居通告则承担地址解析、可达性探测等任务;Redirect让路由器指出某个目的地更合适的第一跳。
这几类消息都属于ICMPv6,但不是同一份广播地址表。主机可在支持组播的链路上向相应组播地址发送请求,之后还可能使用单播探测;不能把所有邻居发现处理都概括成逐个主机广播查询。
参考:[1]
邻居缓存不等于同链路前缀表
邻居缓存保存下一跳的链路层地址及可达性状态;目的地缓存把最终目的地址映射到下一跳;前缀表和默认路由器列表则帮助判断该直接发送还是交给路由器。这些结构相互引用,却回答不同问题。
RFC 5942特别澄清,配置了某个IPv6地址,并不自动证明同一看似相近前缀中的所有地址都在本链路。收到一个邻居条目也不能直接据此扩展同链路前缀表;前缀通告、明确配置和重定向等信息需按各自规则使用。
找到地址之后仍须检测路径
邻居不可达检测关心发出的报文是否到达下一跳。新的TCP确认等上层进展可提供证据,缺少这类线索时可主动发起邻居请求。单纯收到未经请求的通告,只能表明一个方向的到达,不能自动证明双向路径已经正常。
这也不是身份认证。基础邻居发现面临伪造地址和路由器通告等风险;报文来自本链路、地址能够解析以及发送者获得授权,仍是不同判断。安全扩展和链路管理需要另行承担对应保护。
参考:[1]