基本状态
- Incomplete 邻居请求已经发送到目标节点的请求组播地址,但没有收到邻居的通告
- Reachable 可达,收到确认,不续再发包确认
- Stale 从收到上一次可达性确认后过了超过 30s。
- Delay 在 stale 状态后发送过一个报文,并且 5s 内没有可达性确认
- Probe 每隔 1s 重传邻居请求来主动请求可达性确认,直到收到确认
状态机转变
- A 发送 NS,并生成缓存条目,A 上条目的状态为 Incomplete
- 若 B 回复 NA,则 A 上关于 B 的邻居状态就由 Incomplete ->Reachable。但若 A 发出 NS 消息后一定时间内仍没有收到任何的回复,则由 Incomplete->Empty,即删除条目
- 如果在 reachable 状态上经过 ReachableTime (默认 30S), A 路由器上关于 B 的条目状态 Reachable->stale或如果在 reachable 状态上,收到 B 的非请求 NA,且链路层地址不同,则马上->stale
- 在 Stale 状态若 A 要向 B 发送数据,可直接发送,并从 A 上关于 B 的条目由 Stale->Delay,同时会等待应用层的提示信息,提示邻居是否可达
- 如果在 Delay_First_Probe_Time(默认 5S)内,有 NA 应答或者应用层的提示信息(例如我发了 ICMP 包给对端,对端回复我 ICMP 了,那就是上层可达),则 Delay->Reachable,如果无应用层提示信息, Delay->Probe
- 在 Probe 状态,每隔 RetransTimer (默认 1S)发送单播 NS,发送 MAX_Unicast_Solicit 个后再等 RetransTimer,有应答则 Reachable,无则进入 Empty,即删除条目