NDP:IPv6邻居发现协议,主要通过ICMPv6报文来实现其功能。
1.主要功能
NDP功能对应实现的ICMPv6报文如下:
2.路由发现功能
1.路由器发现是指主机发现本地链路上路由器和确定其配置信息的过程。
2.路由器发现可以同时实现以下3个功能:
- 路由器发现 (Router Discovery):主机定位邻居路由器以及选择哪一个路由器作为缺省网关的过程
- 前缀发现 (Prefix Discovery):主机发现本地链路上的一组IPv6前缀的过程,用于主机的地址自动配置
- 参数发现 (Parameter Discovery):主机发现相关操作参数的过程,如输出报文的缺省跳数限制、地址配置方式等信息
3.使用的报文:
- RS 路由器请求 (主机主动发送RS)
- RA 路由器通告(路由器触发回应RA;路由器周期发送RA)
4.主机请求触发流程:
a.当主机启动时,主机会向本地链路范围内所有的路由器(FF02::2)发送RS报文;
b.路由器收到RS报文后触发回应RA报文;
c.主机发现本地链路上的路由器后,自动配置缺省路由器,建立缺省路由表、前缀列表和设置其它的配置参数。
5.路由器周期性发送流程:
- 路由器周期性的发送RA报文,RA发送间隔是一个有范围的随机值,缺省的最大时间间隔是600s,最小时间间隔是200s
- 对于定期发送的RA报文,Source Address:必须是发送接口的链路本地地址;Destination Address :FF02::1
6.场景抓包
AR2路由器发送RA报文
AR1路由器接受RA报文后根据前缀生成地址和默认网关
注意事项:
- RA会携带所有的IPv6前缀信息给主机,但是主机只会根据掩码为64的前缀进行本地地址生成
- 若图中R2和R3优先级一样,都想R1发送RA,R1会生成2条默认网关,实现负载分担
- 若图中R2优先级比R3大,会生成一条R2的默认网关。若R2失效,自动切换R3为默认网关,形成主备备份
3.地址解析
IPv6地址解析通过ICMPv6(NS和NA报文)来实现。
当PC1要传送数据包到PC2时,如果不知道PC2的链路层地址,则需要完成以下协议交互过程:
- PC1发送一个NS报文到网络上,目的地址为PC2对应的被请求节点组播地址(FF02::FF00:2),选项字段中带上PC1的链路层地址00e0-fcb5-4cc9。
- PC2侦听到该NS报文后,由于报文的目的地址FF02::FF00:2,自己在该组播组,处理该报文;同时,根据NS报文的源地址和源链路层地址选项更新自己的邻居缓存表项。
- PC2发送一个NA报文应答NS,同时在消息的目标链路层地址选项中带上自己的链路层地址00e0-fc48-777c。
- PC1接收到NA报文后,获悉了PC2的链路层地址,创建一个目标节点的邻居缓存表项。
- 这样通过交互后,PC1和PC2就知道了对方的链路层地址,建立其对方的邻居缓存表项(类似于IPv4的ARP表),就可以相互通信了。
4.邻居状态跟踪
在IPv6同子网通信的过程中,源主机有对自己的邻居表缓存的MAC地址进行再次确认的能力,确保通讯之前邻居是可达的,避免发错报文。
5种邻居状态:
邻居状态变化:
假设R1、R2之前没有任何通讯,以R1、R2之间相互通讯过程中R1的邻居状态变化做简要介绍:
- R1先发送NS报文,并生成缓存条目,此时,邻居状态为Incomplete。
- 若收到R2回复的NA报文,则邻居状态由Incomplete变为Reachable,否则固定时间后邻居状态由Incomplete变为Empty。
- 经过邻居可达时间(默认30s),邻居状态由Reachable变为Stale,即未知是否可达;如果在Reachable状态,R1收到R2的非请求NA报文,且其中携带的R2的链路层地址和表项中不同,则邻居状态马上变为Stale。
- 在Stale状态若R1要向R2发送数据,则邻居状态由Stale变为Delay,并发送NS请求。
- 在Delay_First_Probe_Time(默认5s)后,邻居状态由Delay变为Probe。其间若有NA应答,则邻居状态由Delay变为Reachable。
- 在Probe状态,R1每隔RetransTimer(默认1s)发送单播NS,发送Max_Unicast_solicit个后,有应答则邻居状态变为Reachable,否则邻居状态变为Empty。
5.重复地址检测
重复地址检测(Duplicate Address Detect,DAD):是节点确定即将使用的地址是否被另一节点使用的过程
触发机制:接口新增或者更换任何一个单播IPv6地址之前
- PC1新分配了一个IPv6地址,触发DAD
- 由于新配置的地址还没有做DAD,为防止地址冲突暂时不能使用,所以使用::代替源地址,目标地址为新地址的被请求节点组播地址FF02::1:FF00:1。
- PC1将NS报文发送到本地链路上(缺省发送一次NS报文)
- PC2监听FF02::1:FF00:1组播,收PC1的NS报文后,会回应一个NA报文,目标地址为FF02::1(因为PC1的源地址未知)
- PC1收到NA报文认为这个临时地址是重复的,不使用;反之在规定时间内没有NA报文进行应答,则认为这个临时单播地址在本地链路上是唯一的,可以分配给接口
6.重定向
当网关路由器知道更好的转发路径时,通过ICMPv6以重定向报文的方式告知主机
重定向条件:
- 报文的目的地址不是一个组播地址
- 路由器只为与接收端口同网段的主机提供服务
- 路由器检查报文的源地址,发现自身的邻居表项中有用该地址作为全球单播地址或链路本地地址的邻居存在
- 经过路由计算后,路由的下一跳接口是接收报文的接口
- 路由器发现报文的最佳下一跳IP地址和报文的源IP地址处于同一网段
标签:报文,基础知识,发送,地址,RA,邻居,IPv6,NDP,路由器 From: https://blog.csdn.net/uzumcc/article/details/140637020