如果我有一个“实时 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/