网络中的每个系统都有65536个端口,每个连接或“发送/接收”将使用其中之一。
我的问题是:如果我们有65536 + 1个连接会发生什么?
我知道这不会以正常方式发生,但是我很好奇操作系统会如何处理它。
网络中的每个系统都有65536个端口,每个连接或“发送/接收”将使用其中之一。
我的问题是:如果我们有65536 + 1个连接会发生什么?
我知道这不会以正常方式发生,但是我很好奇操作系统会如何处理它。
Answers:
请注意,一个系统可以处理超过65536个并发连接,因为他们并不一定每次使用一个单独的端口。
TCP连接或UDP流由4元组定义:
(source IP address, source port, destination IP address, destination port)
因此,即使您有一台仅具有单个IP地址的Web服务器计算机,以及仅在端口80上侦听的单个HTTP服务器软件包,从理论上讲,它可以处理每个与之连接的客户端IP地址的 65536个连接。因此,来自客户端IP地址1的64Ki连接,加上来自客户端IP地址2的64Ki连接,依此类推。
因此,协议大致上支持到单个IPv4地址上的单个TCP或UDP端口的2 48个连接/流。同时考虑TCP和UDP,以及IPv4的地址空间和IPv6的宇宙/漫画很大的地址空间,您会发现协议本身不可能成为主机并发连接数量限制的源头可以处理。
同样,TCP或UDP协议中也没有任何内容可以阻止客户端计算机使用单个IP地址上的单个源端口来建立与各种服务器地址和端口的多个传出连接。有时,给定OS的网络API可能不容易做到这一点,但是要记住重要的一点,例如,古老的“ [BSD]套接字” API只是TCP和UDP的一个API。TCP和UDP可能具有传统Sockets API未公开的功能。
因此,给定主机可以处理的并发TCP连接或UDP流的数量不受端口号的限制,而受诸如跟踪所有这些连接并为其提供服务的RAM空间和CPU时间之类的系统资源的限制。而且,操作系统特定于实现的详细信息可能会施加人为限制。例如,在Unix中,“一切都是文件”的理念中,每个TCP连接或UDP流可能都有一个文件描述符。如果您的Unix内核对它可以跟踪的文件描述符数量有限制,则该文件描述符限制是您的内核可以处理的并发TCP连接或UDP流数量的人为限制。