我通过websocket建立了从客户端到服务器的连接。 我只是检查netstat o / p以了解网络级别的详细信息。 我发现当我在客户端和服务器上运行netstat -anpt时,我会得到不同的客户端端口。 对于例如 在服务器上,
tcp6 0 0 172.34.10.158:8080 121.71.171.152:28301
ESTABLISHED 13250 / java
在客户端,
tcp6 0 0 192.168.0.111:35129 51.74.132.142:8080
ESTABLISHED 8209 / java
所以来自服务器的客户端端口是" 28301"但当我检查我的客户时,它的" 35129"。 我对此感到有点困惑。 附: 192.168.0.111是我的本地IP,51.74.132.142是我的服务器的公共IP,121.71.171.152是我的ISP ip,172.34.10.158是我的服务器的私有ip。 非常了解这一点,所以任何文档,资源都会有用。
答案 0 :(得分:2)
客户端和服务器都在NAT (Network Address Translation)防火墙后面。
你列出了:
客户:tcp6 0 0 192.168.0.111:35129 51.74.132.142:8080
服务器:tcp6 0 0 172.34.10.158:8080 121.71.171.152:28301
您的客户端在本地网络上的IP为192.168.0.111
,并希望通过端口51.74.132.142
上的8080
与服务器通信,因此它为会话分配动态端口(端口35129
)。
TCP / IP数据包通过带有源NAT的防火墙离开本地网络,源NAT将源IP:端口映射到121.71.171.152
:28301
。
这是您办公室/家庭的外部IP。您可以在http://www.whatsmyip.org/确认。
TCP / IP数据包到达防火墙,保护服务器网络,该服务器网络配置了目标NAT,因此它将目标IP:端口映射到172.34.10.158
:8080
。
服务器接收数据包并建立连接。
然后,防火墙会取消以其他方式流动的数据包。防火墙维护状态以记住如何反转映射。为了节省资源,状态有一个超时,因此如果服务器非常慢并且响应时间超过超时,即使客户端仍在等待,响应也会丢失。网络管理员控制超时。我已经看到它们低至5分钟,所以任何响应时间&gt; 5分钟从未回到客户端 道德:将客户端超时设置为高于防火墙NAT超时只会延迟不可避免的情况。<强>小结强>
Network Source Destination
YourPC --lan--> Firewall 192.168.0.111:35129 51.74.132.142:8080
Firewall --web--> Firewall 121.71.171.152:28301 51.74.132.142:8080
Firewall --lan--> Server 121.71.171.152:28301 172.34.10.158:8080
答案 1 :(得分:-1)
这是一个网络元组hostip:hostport:destip:dest:port:protocol。所有这5个信息一起定义了OS级别的一个连接。在操作系统级别,它必须知道一个连接的所有这些细节,以便成功地将数据从主机路由到dest,反之亦然。