最近我正在使用用于 IPv6 的 Berkeley 套接字 API,并注意到 IPv6 地址 ( sockaddr_in6
) 有一个名为 的字段sin6_scope_id
,它不是 IPv4 地址的一部分。
经过一番搜索,我了解到这scope_id
是为了识别网络接口,因为多个网络接口可以具有相同的链路本地 IPv6 地址。这是有道理的,但是我不明白的是 IPv4 如何处理这个问题,如果那里没有等效的范围 ID?
内核中是否有一种机制可以防止多个 IPv4 接口被分配相同的链路本地地址?
如果是这样,那么为什么有必要为 IPv6 发明范围 ID 而不是使用与 IPv4 相同的解决方案?
此外,scope_id 是否仅用于区分具有相同链路本地地址的接口,还是还有其他用例?