跟踪邻居状态
1、邻居: 不是协议层面的邻居,而是ip层面的邻居(?)
2、 当两个节点直连,使能了ipv6(ipv6 enable)并配置了地址以后,假如router1去ping router2,那么两个节点之间就会去维护一个邻居状态(ipv6层面)
邻居状态
1、incomplete 未完成 邻居关系还未完成
2、reachable 可达
3、stale 陈旧
4、delay 延迟
5、probe 探测
作用
1、确定同一链路上节点的2层地址
2、找到可以转发他们数据包的临近路由器
3、随时跟踪哪些路由器可达,哪些路由器不可达,并检测有改变的链路层地址
IPV4链路:
1) 链路不可达
假设R1、R2是一个ipv4链路并且可达,R1中存放了R2的mac地址,但是,假设R2到SW的链路断了,可是R1并不能感知到,R1的出接口还是会有R2的Mac地址,还是会继续给R2发送data
2) Mac地址变化
若R2的Mac地址进行了一个修改,但是R1并不能感知到R2的mac变化,此时R1再给R2发送数据包的时候,链路不通,就要重新进行ARP。
IPV6链路:
1) 当IPv6可以检测邻居关系时,假设R2到SW的链路断了,R1给R2发送数据包,在一段时间内没收到回复,就会将R1中的Mac删除
2)若R2的Mac地址改变,R2会主动给R1发送包,告诉他说R2的Mac地址发生改变,然后R1会再去探测R2的Mac地址
一个例子
假设A的缓存中没有B的条目,下面是两个节点之间邻居状态的变化
1)A给B发送NS报文,并在A的内部生成一条缓存条目,状态为incomplete
2)若B回复NA,那么incomplete->reachable
若B没有回复NA(A会连发三次,若三次都没有回复),那么incomplete->empty(删除)
3)
①若在reachableTime时间内,
A、B没有发报文,reachable->stale
【如果一直没有发报文,那么A、B会一直处于stale状态】
②或者在reachable状态下,收到B的非请求NA,
且链路层地址不同,则马上->stale
【什么情况下回发送非请求NA报文】:
当B配置了一个新的地址,然后做了一次DAD,没有人回应,此时要发送一个非请求NA报文
若这时候还同时修改了MAC地址,那么A感知到Mac地址与表项中存放的不一样,那么此时立马回从reachable->stale
4)在stale状态,若A给B发送数据包,会从stale->delay,等待应用层的提示信息,表示邻居可达
5)在Delay_first_Probe_Time内,若有NA应答或应用层的提示信息,则delay->reachable,无应用层提示信息或NA应答,delay->probe
6)在probe状态,每隔RetransTimer发送单播NS报文,发送若干个后再等待RetransTimer时间,有应答 probe->reachable,没有,删除