我有很多(成千上万)连接的移动设备,它们正在维护与服务器的打开连接。如果我对64k连接限制的理解是正确的,则每个客户端的服务器的单个端口(由于客户端的临时端口范围)的连接不能超过64k (因为TCP/IP协议)。
但大多数情况下,这些设备是通过使用NAT转换地址的网络提供商连接的。(例如,智能手机不会有静态IP地址)。
因此,在这种情况下,我的服务器将看到相同的ip地址,而不能保证源端口在两个不同的客户机中不会是相同的。
我的问题也许很愚蠢,但问题是:在这种情况下,如果我们将连接看作是5元组(协议、服务器端口、服务器ip、客户端ip、客户端端口),那么我的服务器如何识别正确的连接?两个不同的客户之间是否有失去连接或冲突的风险?
发布于 2015-10-20 08:25:05
我的服务器将看到相同的ip地址,没有任何东西可以保证源端口在两个不同的客户端中不会相同.是否有失去联系或冲突的风险?
不,这是路由器执行NAT的工作:将IP:端口组合保持在连接到另一侧的端口组合。
所以:
Client | IP | Src | < NAT > | IP | Src | Dest | Dst
======================================================
1 | .1 | 42 | <-----> | .3 | 1 | Server | 80
2 | .2 | 84 | <-----> | .3 | 2 | Server | 80如果两个客户机(源IP 10.0.0.1,源端口42)和(源IP 10.0.0.2,源端口84)希望在端口80连接到您的服务器,那么NAT将将它们的IP:port对转换为NAT的另一端(例如11.0.0.3)上有效的一对,给它们一个唯一的源端口(NAT的那一侧)。它将将此转换保存在内存中,以便能够以两种方式发送数据包。
您将看到NAT右侧的元组(因此您的服务器所看到的)是唯一的:
11.0.0.3:1 - Server:80
11.0.0.3:2 - Server:80如果路由器确定对您的服务器的可能元组已经耗尽(在11.0.0.3:65535 - Server:80之后),它可能拒绝打开到它的新连接。
https://stackoverflow.com/questions/33231552
复制相似问题