在维基百科的TCP描述中,有人说
服务器端的会话数仅受内存限制,并且可以随着新连接的到达而增长,但客户端必须在将第一个SYN发送到服务器之前分配随机端口。
第一部分似乎是合乎逻辑的:服务器只是使用客户端连接的端口作为源端口,因此仅受(客户端IP数量)*(临时客户端端口数量)的限制 - 这是一个很大的数字。
但为什么客户基本上不能做同样的事情呢?如果套接字A使用临时端口12345连接到server1(例如客户端:12345 - > server1:80),为什么套接字B不能通过重用相同的源端口连接到服务器2(客户端:12345 - > server2:80) ?这将允许来自单个主机的多个(端口数)传出TCP连接。
TCP规范中是否存在禁止这种端口重用的限制,或仅限于常见TCP实现的实际结果?如果是这样,第一种情况是否真的以与第二种情况不同的方式处理,或者单个服务器端口上的传入TCP连接数实际上也限制为65535?
为了澄清,我正在寻找理论(根据规范)和实际(实现;特别是Linux)限制:
- 从单个客户端到ANY服务器/端口的传出连接。
(client:* -> *:*)
- 从单个客户端到SAME服务器和端口的连接
(client:* -> server:port)
- 这显然不会超过65535。 - 从任何客户端到单个服务器端口的传入连接
(*:* -> server:port)
- 我怀疑根据引用的段落和上述原因,这大于65535。