客户端和服务器上用于相同连接的不同端口号

时间:2015-10-04 15:09:21

标签: java networking tcp websocket

我通过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。 非常了解这一点,所以任何文档,资源都会有用。

2 个答案:

答案 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.15228301
这是您办公室/家庭的外部IP。您可以在http://www.whatsmyip.org/确认。

TCP / IP数据包到达防火墙,保护服务器网络,该服务器网络配置了目标NAT,因此它将目标IP:端口映射到172.34.10.1588080

服务器接收数据包并建立连接。

然后,防火墙会取消以其他方式流动的数据包。防火墙维护状态以记住如何反转映射。为了节省资源,状态有一个超时,因此如果服务器非常慢并且响应时间超过超时,即使客户端仍在等待,响应也会丢失。网络管理员控制超时。我已经看到它们低至5分钟,所以任何响应时间> 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,反之亦然。

How many tuples are there in a connection?

https://en.wikipedia.org/wiki/Network_socket#Socket_pairs