linux机箱可以同时打开多少个传出套接字

linux机箱可以同时打开多少个传出套接字,linux,tcp,udp,icmp,Linux,Tcp,Udp,Icmp,我想知道在IPv4和IPv6中,linux机箱可以为TCP、UDP和ICMP通信同时打开多少个套接字。虽然有一些关于处理传入(主要是TCP)连接的回复,但我没有看到关于传出的明确声明 我的理解如下: TCP:由于TCP是基于端口的,因此只能打开与临时端口数量相等的套接字,而在我的框中是 cat /proc/sys/net/ipv4/ip_local_port_range 32768 60999 # == 28231 如果我想增加这个数量(而不改变上面的配置),我需要创建额外的接口,每个接口

我想知道在IPv4和IPv6中,linux机箱可以为TCP、UDP和ICMP通信同时打开多少个套接字。虽然有一些关于处理传入(主要是TCP)连接的回复,但我没有看到关于传出的明确声明

我的理解如下:

  • TCP:由于TCP是基于端口的,因此只能打开与临时端口数量相等的套接字,而在我的框中是

    cat /proc/sys/net/ipv4/ip_local_port_range 
    32768 60999 # == 28231
    
    如果我想增加这个数量(而不改变上面的配置),我需要创建额外的接口,每个接口将获得大约28K个额外的连接,对吗

    这里是否需要考虑每个系统过程

    我可以看到,使用额外的(虚拟)接口和公共IP,但如果我在虚拟接口上定义私有IP,并通过唯一的公共IP对它们进行NAT,这仍然有效吗

  • UDP:我相信UDP也使用端口。如果我同时拥有UDP和TCP流量,两者都会争夺28K端口,对吗

  • ICPM:ICMP不是基于端口的,那么开放(原始)套接字的数量限制是多少?是否取自打开的FD池的最大数量:

    cat /proc/sys/fs/file-max
    9223372036854775807
    
  • IPv6:以上所有内容都与IPv4相关,但IPv4和IPv6在这方面有什么区别

这有点混乱,因为事情对我来说不是很清楚。提前感谢您的启发

。。。只能打开与临时端口数相等的套接字数

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

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

。。。打开(原始)插槽的数量限制是多少

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

IPv6:以上所有内容都与IPv4相关,但IPv4和IPv6在这方面有什么区别

没有区别


除了这些限制之外,当然还有其他限制,比如每个进程打开的文件描述符的数量,文件描述符的总数。但是这些限制是可以调整的,并且大部分都受到可用内存量的严格限制。

Hi。(…)还有其他限制吗,比如每个进程打开的文件描述符的数量,(…)这意味着如果我有一个进程打开很多很多套接字,那么限制大约是65K?@mszmurlo:“…限制大约是65K…”-不,为什么要这样做?我可能是混合了一些东西,但是套接字不是文件描述符吗?每个进程的文件描述符数量是否限制在0xFFFF(~65K)?@mszmurlo:“但是套接字不是文件描述符吗”-是的。“每个进程的文件描述符数量不限于0xFFFF吗”-我不这么认为。为什么您认为应该是这种情况?我不知道为什么,但我认为每个进程的最大打开FD数限制为65K。谢谢你抽出时间。