sockets - 32 位 linux 上的同时 tcp/ip 连接数

标签 sockets tcp

我有一个关于实现负载平衡器或执行 TCP/IP 的 TCP/IP 服务器程序的具体问题。

由于端口号是 16 位,因此在任何给定时间,单个 Linux 机器上最多只能有 65536 个端口。 而TCP/IP需要一个端口号才能与外界对话。 1)当客户端建立连接时,选择一个临时端口号。 2)当监听套接字的服务器接受连接时,分配一个端口号。

因此,据我所知,在任何给定时间,一台给定机器上最多只能存在 65536 个 TCP/IP 连接。

那么为什么一些或大多数负载均衡器声称有 200,000 个或更多并发连接?

有人可以解释一下吗?

关于负载均衡器,一旦负载均衡器将请求转发到它后面的其中一台服务器,负载均衡器是否可以以某种方式向它传递一些信息,这将有助于服务器直接响应原始客户端以避免通过负载均衡器发回响应的延迟?

感谢大家的帮助。 坦比

最佳答案

Since port number is 16 bits, there are a max of only 65536 ports on a single Linux box at any given time.

实际上是 65535,因为您不能使用端口零。

when a server listening on a socket accepts a connection, a port number is assigned.

不,不是。传入连接使用它连接到的相同端口。 accept() 上没有分配新端口。

So in my understanding at any given time only maximum 65536 TCP/IP connections can exist on a given machine.

不,见上文。实际限制由内核和进程资源决定:打开的 FD、线程堆栈内存、内核缓冲区空间……而不是由 16 位端口号决定。

关于sockets - 32 位 linux 上的同时 tcp/ip 连接数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31664078/

相关文章:

c++ - 这个套接字绑定(bind)失败了吗?如果是,为什么?

Java 套接字游戏服务器调整

sockets - Nginx和uWSGI : Proper permissions setup for 502 Bad Gateway issue

java - 通过 Tcp 发送数据后,字符串比较不起作用

java - 确定 TLS 数据包 Java/Android 的数据包大小

sockets - 在 Netty 上发送图像文件的套接字发送缓冲区的最佳设置

c# - 使用 SSL 连接时 Windows 窗体应用程序和类库应用程序之间有什么区别

silverlight - silverlight 应用程序可以打开到同一服务器或另一台服务器的套接字 (TCP/IP) 连接吗?

c++ - 为什么不同客户端的服务器输出会转到同一个终端?

docker - cURL 请求在 docker ubuntu/alpine 容器中挂起