邻居请求后的远程主机邻居缓存条目状态

网络工程 ip IPv6 协议论 国家发展计划
2022-02-25 02:28:20

当主机 A 第一次向另一个主机 B 发送 NS 请求时,主机 B 以 NA 回答。

在主机 A 的邻居缓存中,主机 B 的状态条目从未完成变为可访问,当 NA 返回时。

但是远程主机 B 会发生什么?
RFC4861 描述:

节点发送邻居请求以请求目标节点的链路层地址,同时也向目标提供它们自己的链路层地址。

所以这意味着主机 B 应该利用这种情况并在他的缓存中为主机 A 创建一个新条目。
但是这个条目的状态是什么?

该标准描述:

收到其他邻居发现消息,例如路由器广告和邻居广告,请求标志设置为零,不得将其视为可达性确认。收到未经请求的消息仅确认从发送者到接收节点的单向路径。相反,邻居不可达检测要求节点从其角度而不是邻居的角度跟踪到邻居的前向路径的可达性。请注意,收到请求的广告表明路径正在双向工作。请求必须已到达邻居,提示它生成广告。同样,收到广告表明从发送者到接收者的路径正在运行。然而,后一个事实只有接收者知道;广告的发送者无法直接知道它发送的广告实际上到达了邻居。从邻居不可达检测的角度来看,只有前向路径的可达性是感兴趣的。

那么,在我们的例子中,主机 A 不应该被声明为主机 B 的 REACHABLE 吗?
可能是它被宣布为 STALE 吗?

如果您还可以提供某种源文档以及您的解释,将不胜感激。:)
谢谢!

1个回答

是的,一个条目应该被创建或更新为 STALE,但是一个特定的操作系统实际上做了什么是题外话。RFC 4861,IP 版本 6 (IPv6) 的邻居发现清楚地说明了当主机 B 从主机 A 收到邻居请求时会发生什么(我已突出显示相关文本):

7.2.3. 收到邻居请求

不满足以下任何要求的有效邻居请求必须被静默丢弃:

  • 目标地址是分配给接收接口 [ ADDRCONF ] 的“有效”单播或任播地址,

  • 目标地址是节点为其提供代理服务的单播或任播地址,或

  • 目标地址是正在执行重复地址检测的“暂定”地址 [ ADDRCONF ]。

如果目标地址是暂定的,则应按照 [ ADDRCONF ] 中的描述处理邻居请求。否则,以下描述适用。 如果源地址不是未指定的地址,并且在具有地址的链路层上,请求包括源链路层地址选项,则接收者应该为请求的 IP 源地址创建或更新邻居缓存条目。如果条目不存在,节点应该创建一个新条目并将其可达性状态设置为 STALE,如第 7.3.3 节所述. 如果条目已经存在,并且缓存的链路层地址与接收到的源链路层选项中的地址不同,则缓存地址应该被接收到的地址替换,并且条目的可达性状态必须设置为 STALE。

如果创建了邻居缓存条目,则 IsRouter 标志应该设置为 FALSE。即使邻居请求是由路由器发送的,情况也会如此,因为邻居请求消息不包含发送者是否是路由器的指示。如果发送方是路由器,后续的 Neighbor Advertisement 或 Router Advertisement 消息将设置正确的 IsRouter 值。如果邻居缓存条目已经存在,则不得修改其 IsRouter 标志。

如果源地址是未指定的地址,则节点不得创建或更新邻居缓存条目。

在对 Neighbor Cache 进行任何更新后,节点会发送一个 Neighbor Advertisement 响应,如下一节所述。