如果没有设置选项,ICMPv6 邻居通告是否有意义?

网络工程 IPv6 加强 icmpv6 国家发展计划
2022-02-21 23:53:34

这就是我认为正常的 ICMPv6 邻居广告应该是这样的:

ICMPv6 邻居请求的 Wireshark 屏幕截图,其中选项 2(目标链路层地址)设置为 mac 地址

它说“我是2001:57a:d000::54,你可以通过以下方式联系我02:02:53:85:21:25”。就是来自我的 ISP 的邻居广告的样子。相比之下,这是来自我的 Fortigate 路由器/防火墙的邻居广告的样子:

未设置选项的 ICMPv6 邻居请求的 Wireshark 屏幕截图

值得注意的是,这不包括 Fortigate 的 mac 地址。我想另一端可以根据以太网标头弄清楚。这是它应该如何工作的吗?

我的问题是 Fortigate 可以发送数据包,但无法接收它们。我怀疑这是因为我的网关正在Neighbor Solicitation尝试获取一个 MAC 地址来发送返回数据包,但它得到的回复是空的。

1个回答

在该数据包中,[S]olicited 标志指示广告是对请求消息的响应。不包括 L2 MAC 地址,因为它没有更改(这将触发 [O]verride 标志),并且来自单播请求的目标 MAC 地址仍然有效。

您可以在RFC 4681中找到详细信息:

目标链路层地址

目标的链路层地址,即广告的发送者。此选项必须包含在响应多播请求时具有地址的链路层上。当响应单播邻居请求时,应该包括这个选项。

当对等节点没有缓存条目来返回 Neighbor Advertisements 消息时,必须为多播请求包含该选项,以避免无限的 Neighbor Solicitation“递归”。 当响应单播请求时,该选项可以省略,因为请求的发送者具有正确的链路层地址;否则,它将无法首先发送单播请求。但是,在这种情况下包括链路层地址会增加很少的开销,并消除了潜在的竞争条件,即发送方在接收到对先前请求的响应之前删除缓存的链路层地址。