我读到,当内核确定数据包的源 IPv6 地址时,它会考虑使用哪个接口来发送数据包,
(http://www.rfc-editor.org/rfc/rfc3484.txt,第 5 节)规则 5:优先选择传出接口。如果 SA 被分配给将用于发送到 D 的接口,而 SB 被分配给不同的接口,则优先选择 SA。同样,如果 SB 被分配给将用于发送到 D 的接口,而 SA 被分配给不同的接口,则优先选择 SB。
*德= 目标地址
但是接口本身是如何确定的呢?我们以tcp握手为例:
- 主持人A有一个接口和一个 IP 地址
1:0:0:0:0:0:0:a
- 主持人乙有两个接口 eth0(带 ip)
1:0:0:0:0:0:0:b0
和 eth1(带 ip)1:0:0:0:0:0:0:b1
- A发送 SYN 至乙的
1:0:0:0:0:0:0:b0
。乙用 SYN-ACK 进行响应。它应该在 Ipv6 标头中设置源 IP。
据我了解(如果我错了请纠正我!)它会根据我上面链接的 rfc 中的规则在和之间进行选择1:0:0:0:0:0:0:b0
,1:0:0:0:0:0:0:b1
但我无法理解它们,尤其是规则 5,因为我无法找到如何首先选择接口。
答案1
你的例子与第 5 节(“源地址选择”)。
在你的例子中,主机B正在响应来自主机 A它没有选择使用哪个地址。TCP 连接由地址:端口 + 地址:端口组合定义,该组合已由主机 A。
你的例子中另一个奇怪的事情是主机B您的示例中的地址1:0:0:0:0:0:0:b0
和1:0:0:0:0:0:0:b1
位于不同的接口上。合理地讲,这两个地址看起来应该属于同一个接口(相同的前缀?)。
相关内容如下:
主机 A具有多个可能用作源地址的地址。
什么时候主机 A正在创建一个新的连接(即,它将发送初始 TCP SYN)到某个指定的地址,在源地址选择过程中它将应用第五节 第五条(这只是选择过程中适用的几条规则之一),这确保了无论哪个地址主机 A选择后,它将优先选择分配给该接口的地址(根据路由)来发送到指定的目标地址,而不是其他地址。
即,路由表指定用于目标地址的任何接口都将影响选择哪个地址作为源地址。