我有一个连接从客户端到服务器通过websocket。我只是在检查netstat o/p以了解网络级别的细节。我发现,当我在客户端和服务器上运行netstat -anpt时,我得到不同的客户端端口。如。服务器端
tcp6 0 0 172.34.10.158:8080 121.71.171.152:28301
建立了13250/java
在客户端,
tcp6 0 0 192.168.0.111:35129 51.74.132.142:8080
建立了8209/java
所以客户端端口从服务器是"28301",但当我检查我的客户端,它的"35129"。我对此有点困惑。P.S. 192.168.0.111是我的本地ip, 51.74.132.142是我的服务器的公共ip, 121.71.171.152是我的ISP ip, 172.34.10.158是我的服务器的私有ip。如果能了解更多这方面的信息就太好了,这样任何文档,资源都会很有用。
客户端和服务器都在NAT(网络地址转换)防火墙后面。
你列出:
客户端: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
的IP,并且想要在端口8080
上与51.74.132.142
的服务器通信,因此它为会话分配了一个动态端口(端口35129
)。
TCP/IP报文通过带源nat的防火墙离开本地网络,源IP:Port映射为121.71.171.152
: 28301
。
这是您办公室/家庭的外部IP。您可以在http://www.whatsmyip.org/确认。
TCP/IP报文到达保护服务器网络的防火墙,防火墙配置了destination- nat,因此它将目的IP:Port映射为172.34.10.158
: 8080
。
服务器接收到数据包并建立连接。
以另一种方式流动的数据包将被防火墙取消映射。防火墙保持状态以记住如何反转映射。为了节省资源,状态有一个超时,所以如果服务器真的很慢,并且需要比超时更长的时间来响应,即使客户端仍在等待,响应也会丢失。超时时间由网络管理员控制。我见过的回复时间低至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
网络元组hostip:hostport: destp:dest:port:protocol。所有这5个信息一起定义了操作系统级别的一个连接。在操作系统级别,它必须知道一个连接的所有这些细节才能成功地将数据从主机路由到dest,反之亦然。
一个连接中有多少个元组?
https://en.wikipedia.org/wiki/Network_socket Socket_pairs