客户端如何绑定影响tcp连接?

时间:2012-04-23 15:31:19

标签: c linux sockets bind connect

我有一个带有两个ipaddresses的客户端系统:10.172.12.13& 58.53.12.15。

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

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

奇怪的行为是,如果我指定10.172.12.13作为要绑定的本地地址然后连接到服务器中的58.53.12.17,则它无法连接,将错误称为“Host Unreachable”。

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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