操作系统如何确定重复的链路本地地址范围应使用哪个接口?

操作系统如何确定重复的链路本地地址范围应使用哪个接口?

我有一台包含大量容器的 Linux 服务器。每个容器(具有独立的网络命名空间)veth在主机上生成一个接口,并且 IPv6 路由表包含大量条目fe80::/64,包括 4 条物理链路。当我 ping 该 CIDR 块中的地址时,系统如何找出 ARP 应从哪个接口进行查询?

答案1

在 Linux 上,您必须明确指定接口,否则操作系统只会返回错误。

在 Windows 上,如果您指定模糊地址,操作系统会尝试依次向每个接口发送邻居请求(即“ARP 查询”),直到收到回复。

在 FreeBSD 上,操作系统将首先向该地址发送邻居请求在所有接口上然后它将使用第一个接收 NA 响应到 NS 的接口。

指定接口

%idx在 IPv6 中,您可以通过在“区域索引”后缀或通过在套接字 API 中指定来指定链路范围地址的接口.sin6_scope_id。这适用于链路本地单播 fe80:: 地址以及链路范围多播 ff02:: 地址。

API 将接口存储为整数,因此在所有操作系统中它都可以是ip link(Linux) 或netsh interface ipv6 show interface(Windows) 中所见的“ifindex”。

此外,Linux 和 BSD 也接受该接口姓名在文本地址中(例如fe80::1%eth0),API 会自动将其解析为正确的索引。

相关内容