sockets - 从单个客户端到同一端口上同一服务器的最大连接数

标签 sockets networking tcp client-server

如果我有一个“实时 IP 地址”,即一个 IP 地址,如果我在该 IP 地址上运行服务器,互联网上的任何人都可以访问该服务器。

现在假设我在具有“实时 IP 地址”的网关下有一群计算机。

以下是真的吗?

如果此 IP 地址下的所有计算机都使用 keep-alive header 访问相同端口 80 上的相同 google 服务器,则最大连接数可以为 2^16=65536

我是如何得出这个数字的?

TCP/IP 数据包由(src.ip、src.port、dst.ip、dst.port)标识

对于我们的案例,如果我们从服务器端查看 src.ip=MY LIVE IP,dst.ip=google 服务器 ip,dst.port=80,那么我们剩下 16 位的 src.port。

如果以上为真,那么:

套接字连接的最大数量也是 2^16,因为每个 TCP 连接只能有一个套接字。这是真的吗?

最佳答案

这在理论上是正确的,来自客户端的最大并发连接数,无论是否连接到同一台服务器,都是 65536。但是,IPv4 地址空间短缺是现实,ISP 已经开始实现 A+P 策略以可用地址的数量。

A+P表示地址加端口共享。这意味着端口号的某些位用于可寻址目的。这实际上意味着一个 IPv4 公共(public)地址可能由不同的客户共享,每个客户都被分配了一系列端口。这限制了每个客户的可用连接数。您的操作系统可能仍会为源端口选择一个介于 0-65565 之间的随机数,但在某些时候,您的私有(private) IPv4 源地址和端口将被 natted 到您分配的源端口范围,然后再投入使用。

这是一个高级主题,但值得考虑。 RFC6346有更多关于它的信息。

关于sockets - 从单个客户端到同一端口上同一服务器的最大连接数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23272564/

相关文章:

c# - RestSharp 响应错误 : "Only one usage of each socket address (protocol/network address/port) is normally permitted"

c - 如果套接字通信的另一端关闭,为什么 recv() 不设置 errno?

c++ - 在 gen_tcp 中使用 {packet, N} 以及如何在 C++ 程序中接收数据

c - c中的poll函数是如何工作的?

python - 为什么来自套接字服务器的文本会删除以前写入的文本?

java - 如何在Java、TCP/IP服务器/客户端模型中使用套接字获取远程IP地址?

android - 如何仅以编程方式为我的应用禁用移动数据

c# - 用于 HTTP 基本身份验证的 UnityWebRequest 嵌入用户 + 密码数据在 Android 上不起作用

node.js - 如何在 Node.js TCP 服务器中追踪 ECONNREFUSED?

sockets - 从 docker 容器中打开 DGRAM 套接字失败(权限被拒绝)