首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IPv6作用域ID与IPv4

IPv6作用域ID与IPv4
EN

Stack Overflow用户
提问于 2018-01-18 19:33:10
回答 1查看 2.5K关注 0票数 6

最近,我正在使用用于IPv6的伯克利套接字API,并注意到IPv6地址(sockaddr_in6)有一个名为sin6_scope_id的字段,它不是IPv4地址的一部分。

在搜索了一下之后,我了解到scope_id是用来识别网络接口的,因为多个网络接口可以具有相同的链接本地IPv6地址。这是有道理的,但我不明白的是,如果没有相当于范围ID的内容,IPv4是如何处理这个问题的?

内核中是否有一种机制可以防止多个IPv4接口被分配到相同的链路本地地址?

如果是这样的话,为什么有必要为IPv6发明作用域ID而不是使用与IPv4相同的解决方案呢?

另外,scope_id只用于区分具有相同链接本地地址的接口,还是也有其他用例?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-29 16:53:51

简而言之,不存在处理具有多个接口的主机上的链接本地IPv4地址的定义良好的机制。没有什么可以阻止为两个不同的接口选择相同的链接本地地址(但是,如果这两个接口位于同一个网络链路上,那么基于ARP的冲突检测将导致至少一个接口被重新分配)。

RFC 3927第3.2节涵盖了“地址歧义”问题:

假定IP堆栈必须具有与需要发送到的数据包相关联的出站接口,则必须进行接口选择。出站接口不能从包的报头参数(例如源地址或目标地址)导出(例如,通过使用转发表查找)。因此,必须通过其他方法显式地完成出站接口关联。说明书没有规定这些手段。

同时也在第6.3节

在多主机上运行的应用软件可能会失败,该主机支持多个接口上的IPv4链路-本地地址配置。 这是因为应用软件假定IPv4地址是明确的,它只能引用一个主机。IPv4链接-本地地址仅在单个链接上是唯一的。连接到多个链接的主机很容易遇到一种情况,即同一地址存在于多个接口上,或首先出现在一个接口上,随后出现在另一个接口上;在任何情况下都与多个主机相关联。大多数现有软件都没有准备好应付这种模棱两可的情况。将来可以开发应用程序编程接口来防止这个问题。

在IPv6中,通过引入作用域ID解决了这个问题。

目前作用域id仅用于链路本地寻址。.

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48328995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档