首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >64k连接神话与NAT翻译

64k连接神话与NAT翻译
EN

Stack Overflow用户
提问于 2015-10-20 08:22:21
回答 1查看 465关注 0票数 2

我有很多(成千上万)连接的移动设备,它们正在维护与服务器的打开连接。如果我对64k连接限制的理解是正确的,则每个客户端的服务器的单个端口(由于客户端的临时端口范围)的连接不能超过64k (因为TCP/IP协议)。

但大多数情况下,这些设备是通过使用NAT转换地址的网络提供商连接的。(例如,智能手机不会有静态IP地址)。

因此,在这种情况下,我的服务器将看到相同的ip地址,而不能保证源端口在两个不同的客户机中不会是相同的。

我的问题也许很愚蠢,但问题是:在这种情况下,如果我们将连接看作是5元组(协议、服务器端口、服务器ip、客户端ip、客户端端口),那么我的服务器如何识别正确的连接?两个不同的客户之间是否有失去连接或冲突的风险?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-20 08:25:05

我的服务器将看到相同的ip地址,没有任何东西可以保证源端口在两个不同的客户端中不会相同.是否有失去联系或冲突的风险?

不,这是路由器执行NAT的工作:将IP:端口组合保持在连接到另一侧的端口组合。

所以:

代码语言:javascript
复制
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右侧的元组(因此您的服务器所看到的)是唯一的:

代码语言:javascript
复制
11.0.0.3:1 - Server:80 
11.0.0.3:2 - Server:80

如果路由器确定对您的服务器的可能元组已经耗尽(在11.0.0.3:65535 - Server:80之后),它可能拒绝打开到它的新连接。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33231552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档