【问题标题】:How does client side bind influence tcp connect?客户端绑定如何影响 tcp 连接?
【发布时间】:2012-04-23 15:31:18
【问题描述】:

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

服务器还配置有两个 IP 地址: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 作为本地地址的连接再次失败。

请人解释发生了什么? bind 对 TCP 连接有何影响?

【问题讨论】:

  • 你的服务器端知道如何到达10.172.12.13吗? 10.0.0.0/8 是私有地址。公共互联网不知道如何路由到他们。
  • 我希望 ip route showip route show cacheip route get 58.53.12.15 from 58.53.12.15ip route get 58.53.12.15 from 10.172.12.13ip route flush cache 会有所启发。

标签: c linux sockets bind connect


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    相关资源
    最近更新 更多