如果同一台机器上有 2 个 NIC,那么一个 NIC 上的 TCP 客户端是否可以连接到另一个 NIC 上的 TCP 服务器?

如果同一台机器上有 2 个 NIC,那么一个 NIC 上的 TCP 客户端是否可以连接到另一个 NIC 上的 TCP 服务器?

我使用 TUN/TAP 创建了一个tun0IP 为 10.10.10.2 的 tun NIC,并且我有一个eth0IP 为 202.112.34.49 的真实 NIC

然后我运行一个 TCP 客户端,将其套接字绑定到 202.112.34.49,并运行一个 TCP 服务器绑定 10.10.10.2。但我无法在它们之间建立 tcp 连接。

那么,一个 NIC 上的 TCP 客户端可以连接到另一个 NIC 上的 tcp 服务器吗?

答案1

发往本地地址的数据包将始终在lo接口上运行;它们永远不会离开机器。(到达非 lo 接口的发往本地地址的数据包被视为火星人

换句话说,您的数据包一定卡在了某个lo接口上,可能是因为防火墙。检查您的输出,并针对这些数据包的接口iptables-save执行操作,以调试此问题。tcpdumplo

答案2

TCP 客户端和 TCP 服务器都不在任何 NIC 上。单个接口被视为第 1 层和第 2 层,而 TCP 在第 4 层运行。除了非常特殊的套接字选项(例如)SO_BINDTODEVICE,TCP 端点不连接到任何网络接口。

您的 TCP 服务器和客户端恰好绑定到不同的本地 IP 地址。它们之间的连接应该可以正常工作。

相关内容