有 2 个 NIC(网络接口卡),它们具有 IPIP0
和IP1
主地址,如内核路由表中所示ip route
。假设一个 TCP 套接字绑定到IP0
(和某个端口P0
)。因此它将接收发往的数据包IP0:P0
,这部分我理解。当它想要将数据发送到目的地时IP-Dest:Port-Dest
,内核路由表表示这最终应该通过主 IP 为 的另一个 NIC 发送IP1
。我想知道在这种情况下的规则是什么。内核是否会丢弃数据包,因为发送方(套接字)绑定到具有不同 IP 的其他 NIC(IP0
)还是通过另一个 NIC 发送但忽略与其关联的 IP(IP1
)并改为标记套接字绑定的源 IPIP0
或(反过来)忽略IP0
并标记源IP1
同时仍通过另一个 NIC 发送,或者是否有其他规则来控制此处的行为并且结果可能会有所不同?
后续问题:当通过0.0.0.0
和端口绑定到所有接口时0
,是否为该套接字的所有接口选择相同的端口号(无论内核选择什么)或者没有这样的保证并且它可以在哪里选择IP0:P0
或者它是否取决于协议或其他因素?IP1:P1
P0 != P1
答案1
如果应用程序绑定到0.0.0.0
端口,则所有接口的端口都将相同。
当绑定到 时,路由仍然变得棘手0.0.0.0
。软件通常会生成数据包,然后以0.0.0.0
IP 为源SRC
。这导致最终进入默认路由表,这通常是第一个接口网关/子网。
因此需要设置两个独立的路由表:
https://serverfault.com/a/823061/476056
并根据接口的目标指定路由