linux 盒子可以同时打开多少个输出套接字

How many simultaneous outgoing sockets a linux box can open

我想知道一个 linux 盒子可以为 IPv4 和 IPv6 中的 TCP、UDP 和 ICMP 通信打开多少个同时 套接字。虽然有几个关于处理 incoming(主要是 TCP)连接的回复,但我没有看到关于 outgoing.

的明确说明

我的理解如下:

这有点乱,因为我不是很清楚。在此先感谢您的指教!

... one can only open a number of sockets equal to the number of ephemeral ports

没有。 TCP 连接对于源 IP、源端口、目标 IP 和目标端口的集合必须是唯一的。因此,只有在其他一切都保持不变的情况下,关于源端口的限制才是正确的。这意味着对于传出连接,此限制仅适用于与特定固定 IP 和端口的连接(假设传出接口上只有一个 IP)。

对于 UDP,还必须区分已连接和未连接的套接字。对于已连接的套接字,适用与 TCP 连接相同的限制。但是也可以有未连接的 UDP 套接字,它可以 sendto 到任意对等点,也可以 recvfrom 来自任意对等点,即每个发送或接收的数据包对于对等点来说都是唯一的。在这种情况下,套接字的数量受端口数量的限制,因为每个未连接的套接字都需要(通常,请参阅 SO_REUSEPORT 以了解例外情况)具有唯一的源 IP 和源端口。但另一方面,这些套接字更灵活,因为单个套接字可用于与任意对等点通信。

... what is the limit on the number of open (raw) sockets

没有固有的限制。但是由于所有传入数据都传递到所有原始套接字,因此原始套接字太多会变得混乱。

IPv6: all above was IPv4 related, but what are the differences between IPv4 and IPv6 on that matter ?

没有区别。

除了这些限制之外,当然还有其他限制,例如每个进程打开的文件描述符的数量,文件描述符的总数......。但是这些限制是可以调整的,并且主要受可用内存量的限制。