我有一个关于实现负载平衡器或执行 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/