Linux上超过65536个TCP连接


11

我一直试图从Linux(RedHat5)盒中设置65536个以上的传出TCP连接。

我已经配置了传出和接收框以允许足够的文件描述符。

我不认为接受方面存在问题-我有多个目标框,每个目标框都有多个IP地址,而且我使用的是多个端口。

在输出方面,我不相信每个IP地址都会达到限制-我正在使用多个IP地址和端口(我为多个IP地址中的每个打开了端口30,000-60,000的连接)。

我缺少一些Linux内核可调参数吗?还是TCP的一些基本限制?

失败的原因是我打开连接的应用程序挂在connect()调用中。

感谢您的帮助NickB


您达到了什么极限?当您达到该限制时有什么错误?

connect()挂起。
NickB

1
您的源IP和目的地IP之间是什么?您是否可能填写了某些设备的NAT表?

Answers:


10

这是一个博客,其中有人从一个盒子中获得了超过1,000,000个出站邮件。

在第1部分中,我们将范围设置为“ 1024 65535”-意味着有65535-1024 = 64511个非特权端口可用。其中一些将被其他进程使用,但是我们永远不会超过64511个客户端连接,因为我们会耗尽端口。

...

因此,让我们提出17个新IP地址,目的是从每个IP地址建立62,000个连接-共给我们1,054,000个连接


谢谢!这对我行得通。具体来说,来自metabrew.com/article/…的sysctl 内容 使我可以建立65,536个以上的TCP连接。
NickB 2010年

1

TCP协议仅将16位用于目标端口和源端口。一次最多只能打开65536个端口,即使使用Linux也是如此。


3
这仅适用于一个IP地址。如果使用多个端口,则每个IP地址都应该能够有65536个开放端口。
工作

1
正确,每个传出连接都需要一个本地端口。IIRC,任何已在使用的端口都不能用于这些连接。因此,例如,如果您正在运行telnet / ftp / http,则编号为21/23/80的端口不能用作本地端口。
KevinDTimm

1
您也可以有多个连接到同一端口。
gtrak

@Job-是的,因为TCP堆叠在IP之上-我只在谈论一个IP地址。

4
每个连接由一个元组标识,该元组由远程地址和端口以及本地地址和端口组成。因此,来自不同远程主机的> 65536入站连接是可能的。>无法从主机上的单个接口进行65536个出站连接,而且总会受到一些限制,因为总会有一些端口在使用中。
Len Holgate

0

在这种情况下,“单个接口”表示分配了单个IP地址的单个网络服务。每个出站TCP连接都绑定到一个单独的端口,因此您的示例是不可能的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.