为什么IPv6允许单个接口具有多个地址?

Sim*_*ong 19 linux ipv6

"单个接口也可能有多个任何类型的IPv6地址(单播,任播和多播)或范围" ----引用形式RFC 4291

最近我在实验过程中遇到了这个问题.我通过了RFC 4291,没有任何线索......

以下是我的实验的简要介绍:
有两个主机,我分别为它们分配了两个IPv6地址.然后,我测试了两台主机之间的连接.我使用命令"ping6 ipv6_addr".但事实证明,它无法通过命令ping6访问对等主机的两个地址.

通过示例更加敏锐*(两个命令都在主机A上执行,使用linux kenel 2.6.32)*:
ping6 addr_b_1 ---它的工作原理是
ping6 addr_b_2 ---无法通过

我想和你们讨论两个问题:
1.为什么ipv6协议允许这种机制,一个具有多个地址的接口?
2.为什么我不能同时到达主机a的两个地址.(应该是这种情况.IPv6的默认地址选择在RFC 3484中定义)

感谢你们!

Cel*_*ada 38

早期的IPv4堆栈不支持每个接口多个IP地址.后来的改进启用了"辅助"地址.这被发现在实践中非常有用,并且IPv6的设计者选择强制支持它作为标准的一部分,以便您始终可以依赖它.

IPv6的设计者所做的不仅仅是强制要求.他们使其成为IPv6协议的重要组成部分.每个IPv6接口都有一个链路本地IP地址.如果接口也能够在更大的网络(例如Internet)上进行通信,那么它还具有全局范围地址.那是两个最小的地址,就在那里.如果主机支持多宿主互联网连接,它可能拥有更多地址.每个接口的多个IP地址在IPv6中并不像在IPv4中那样是事后的想法.

你提到缺点,但除了配置错误,我不认为这种情况会导致任何问题.(也许你可以详细说明你的设置以及为什么一个IP地址有效而不是另一个;但我保证你会遇到某种错误导致它).

另一方面,想想优势:

  • 即使没有可用的网络基础设施(即路由器),设备也可以使用链路本地地址在本地LAN上发现彼此.稍后,如果添加了路由器并且全局范围地址可用,则这些地址会扩充地址集,它们不会替换链路本地地址; 因此,使用链路本地地址的现有通信不会中断.
  • 删除,添加或替换Internet连接时,可以撤消或添加该组中的一个IP地址,而不会影响其他IP地址.由于"depracated"状态,这使得能够从一个IP地址到另一个IP地址进行优雅的重新编号,接口支持一段时间.

另外:请记住,几乎所有IPv4堆栈都支持每个接口多个地址,因此这与v4和v6之间没有太大区别.它只是不支持它的旧v4堆栈.区别在于v6具有自动管理地址集的方法,但这在v4中不存在.

  • @user31986 这将是特定于操作系统的细节,我不太确定,但在 Linux 上`/proc/sys/net/ipv6/conf/default/max_addresses` 为我建议 16。 (2认同)