IPv6邻居发现协议
字数 1524 2025-12-05 16:23:44
IPv6邻居发现协议
IPv6邻居发现协议是IPv6网络层的一个核心协议,它替代了IPv4中的地址解析协议、ICMP路由器发现和重定向协议等,提供了一套统一和增强的机制,用于实现同一链路上节点之间的交互。理解它需要循序渐进。
-
基本目标与核心功能
邻居发现协议的核心目标,是让同一物理或逻辑链路上的节点能够发现彼此、确定彼此的链路层地址、验证对方是否可到达,并维护这些信息。其五大核心功能为:- 地址解析:类似于IPv4的ARP,将目标节点的IPv6地址解析为其对应的链路层地址。
- 路由器发现:主机无需配置即可发现本地链路上的路由器,并获取网络前缀和配置参数。
- 前缀发现:主机发现与其连接的网络地址前缀,用于自动配置地址。
- 参数发现:主机发现链路的参数,如最大传输单元。
- 邻居不可达检测:持续验证到邻居节点的双向可达性,这是IPv6可靠性的一大增强。
-
协议消息类型
NDP通过一组ICMPv6报文类型来实现其功能,主要有五种:- 路由器请求:主机发送,用于主动请求路由器立即发送路由器通告。
- 路由器通告:路由器定期发送或响应RS,包含网络前缀、默认路由器、MTU等关键配置信息。这是IPv6无状态地址自动配置的基础。
- 邻居请求:用于地址解析和邻居不可达检测。当节点需要解析目标IPv6地址的链路层地址时,会向目标节点的“请求节点组播地址”发送NS报文。
- 邻居通告:响应NS报文,或主动宣告链路层地址变更。其中包含关键的“目标链路层地址”字段,以完成地址解析。
- 重定向:当路由器发现主机选择的下一跳不是最优时,会发送此报文通知主机更佳的下一跳地址。
-
关键工作流程详解
- 地址解析流程:
- 节点A需要与同链路的节点B通信,已知B的IPv6地址。
- A首先检查本地“邻居缓存”。若没有条目,则构造一个邻居请求报文,其“目标地址”字段为B的IPv6地址。
- 关键步骤:A将此NS报文发送到一个特殊的组播地址——请求节点组播地址。该地址由前缀
FF02::1:FF00:0/104和B的IPv6地址最后24位组成。这确保了只有B会接收此报文,比IPv4的ARP广播更高效。 - B收到NS后,会以邻居通告单播回复A,报文中包含自己的链路层地址。
- A收到NA后,将B的IPv6地址与链路层地址的映射存入邻居缓存。
- 无状态地址自动配置:
- 主机启动后,发送路由器请求。
- 链路上的路由器回复路由器通告,报文中携带一个或多个“网络前缀”。
- 主机结合收到的前缀和自己的接口标识符,自动生成一个全球单播地址。同时,RA中还会指明该路由是否可作为默认网关。
- 地址解析流程:
-
安全机制:安全邻居发现
原始的NDP协议易受攻击,如伪造路由器通告导致流量劫持,或伪造邻居通告进行地址欺骗。为此,SEND 应运而生。- SEND通过为NDP消息添加加密签名、使用证书绑定主机身份等措施,确保路由器通告和邻居通告等关键消息的真实性和完整性。
- 它主要依赖于密码生成地址和RSA签名。CGA地址由主机的公钥等信息计算得出,可证明地址的所有权。NDP消息使用发送者的私钥签名,接收者用对应的公钥验证。
-
邻居发现协议与网络状态维护
NDP不是一个一次性的协议,它维护着几个关键的数据结构来保证网络通信的持续高效:- 邻居缓存:相当于IPv4的ARP缓存,存储已解析的IPv6到链路层的映射及状态。
- 目的地缓存:存储下一跳信息,可以是路由器或直接邻居。
- 前缀列表:存储从路由器通告中学到的网络前缀。
- 默认路由器列表。
其中,邻居缓存条目具有复杂的状态机(未完成、可到达、陈旧、延迟、探测),通过周期性的邻居不可达检测来驱动状态转换,确保信息的时效性。