0

我有一个带有两个 IP 地址的客户端系统:10.172.12.13 和 58.53.12.15。

服务器还配置有两个 ipaddresses:10.172.12.18 & 58.53.12.17

现在,在客户端,我首先绑定到本地地址和端口(端口为 0),然后进行 TCP 非阻塞连接。

奇怪的行为是,如果我将 10.172.12.13 指定为要绑定的本地地址,然后在服务器中连接到 58.53.12.17,则连接失败,并给出错误为“主机无法访问”。

但是,如果我将客户端中的本地地址指定为 58.53.12.15,然后尝试在服务器中连接到 58.53.12.17,它会连接。

最有趣和令人惊讶的方面是,在上述执行之后,如果我再次将 10.172.12.13 作为本地地址绑定并连接到 58.53.12.15,它现在连接成功。但是,这只会发生几分钟。一段时间后,10.172.12.13 作为本地地址的连接再次失败。

请人解释发生了什么?绑定如何影响 TCP 连接?

4

1 回答 1

2

通常你永远不会将客户端套接字绑定到特定的接口。通过将其绑定到局域网接口 10.172.12.18,由于专用网络可见性,您将只能与局域网连接进行通信。

要通过 Internet 连接到服务器,您只需创建套接字并将其直接连接到外部 IP,在您的情况下为 58.53.12.17。

如果您想确保您的客户端将连接到本地可见的服务器而不是通过 Internet,则绑定到本地 IP 可能很有用。

这两个IP地址也不一样。阅读有关私有和公共 IP 地址以及它们存在的原因的一些信息。http://www.vicomsoft.com/glossary/ip-addresses/

仍然绑定客户端套接字对外部 IP 的可访问性可能是路由器优化的结果,该优化将捕获一些路由,并且在没有大的变化的情况下使用它们来捕获。几分钟后,它会发现路由数据略有不同,并会清除缓存。(这只是想法,可能完全错误)

于 2012-04-23T16:16:09.160 回答