在IPv6中,ND协议通过在节点间交互NS和NA报文完成IPv6地址到链路层地址的解析,解析后用得到的链路层地址和IPv6地址等信息来建立相应的邻居缓存表项。如果NS请求是从一个网络的主机发往同一网段却不在同一物理网络上的另一台主机,那么连接它们的具有代理功能的设备就可以代答该请求,回应NA报文,这个过程称作ND代理(ND Proxy)。
1.IPv6中ND协议交互过程
1)NodeA发送一个NS报文到链路上,目的IPv6地址为NodeB对应的被请求节点组播地址(FF02::1:FF02:B),选项字段中携带了NodeA的链路层地址00E0-FC00-0001。
2)NodeB接收到该NS报文后,由于报文的目的地址FF02::1:FF01:B是NodeB的被请求节点组播地址,所以NodeB会处理该报文;同时,根据NS报文中的源地址和源链路层地址选项更新自己的邻居缓存表项。
3)NodeB发送一个NA报文来应答NS,同时在消息的目标链路层地址选项中携带自己的链路层地址00E0-FC00-0002。
4)NodeA接收到NA报文后,根据报文中携带的NodeB链路层地址,创建一个到目标节点NodeB的邻居缓存表项。
2.如何实现ND proxy
ND Proxy功能屏蔽了分离的物理网络这一事实,使用户使用起来,好像在同一个物理网络上。ND Proxy功能根据应用场景不同分为普通ND Proxy、跨网段ND Proxy。
1)设备Device通过两个三层接口Interface A和Interface B连接两个网络,两个三层接口的IPv6地址不在同一个网段,接口地址分别为4:1::99/64、4:2::99/64。但是两个网络内的主机Host A和Host B的地址通过掩码的控制,既与相连设备的接口地址在同一网段,同时二者也处于同一个网段。
2)在这种组网情况下,当Host A需要与Host B通信时,由于目的IPv6地址与本机的IPv6地址为同一网段,因此Host A会直接发出请求Host B硬件地址的NS请求。但是,此时的两台主机处于不同的广播域中,Host B无法收到Host A的NS请求报文,当然也就无法应答。
3)通过在Device上启用ND Proxy功能,可以解决此问题。在接口Interface A和Interface B上启用ND Proxy后,Device可以应答Host A的NS请求。同时,Device作为Host B的代理,把其它主机发送过来的报文转发给Host B。这样,实现Host A与Host B之间的通信。