套接字发送重定向到与其绑定的接口不同的接口

套接字发送重定向到与其绑定的接口不同的接口

有 2 个 NIC(网络接口卡),它们具有 IPIP0IP1主地址,如内核路由表中所示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:P1P0 != P1

答案1

如果应用程序绑定到0.0.0.0端口,则所有接口的端口都将相同。

当绑定到 时,路由仍然变得棘手0.0.0.0。软件通常会生成数据包,然后以0.0.0.0IP 为源SRC。这导致最终进入默认路由表,这通常是第一个接口网关/子网。

因此需要设置两个独立的路由表:

https://serverfault.com/a/823061/476056

并根据接口的目标指定路由

https://serverfault.com/a/918875/476056

相关内容