【发布时间】: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 show、ip route show cache、ip route get 58.53.12.15 from 58.53.12.15、ip route get 58.53.12.15 from 10.172.12.13和ip route flush cache会有所启发。
标签: c linux sockets bind connect