在维基百科对 TCP 的描述中,指出
服务器端的会话数仅受内存限制,并且可以随着新连接的到来而增长,但客户端必须在向服务器发送第一个 SYN 之前分配一个随机端口。
第一部分似乎合乎逻辑:服务器仅使用客户端连接的端口作为源端口,因此仅受(客户端 IP 数)*(临时客户端端口数)的限制 - 一个很大的数字。
但是为什么客户不能做基本相同的事情呢?如果套接字 A 使用临时端口 12345 连接到服务器 1(例如客户端:12345 -> 服务器 1:80),为什么套接字 B 不能通过重用相同的源端口(客户端:12345 -> 服务器 2:80)连接到服务器 2?这将允许来自单个主机的多个(端口数量)传出 TCP 连接。
TCP 规范中是否有禁止这种端口重用的内容,或者限制只是常见 TCP 实现的实际结果?如果是这样,第一种情况是否真的以与第二种情况不同的方式处理,或者单个服务器端口上的传入 TCP 连接数实际上也限制为 65535?
为了澄清起见,我正在寻找以下方面的理论(根据规范)和实际(实施;尤其是 Linux)限制:
(client:* -> *:*)(client:* -> server:port)- 这显然不能大于 65535。(*:* -> server:port)- 根据引用的段落和上述原因,我怀疑这大于 65535。一个 tcp 会话由地址的所有四个部分定义,只有所有四个部分的组合需要是唯一的。
所以
client ip : source port -> server ip : destination port
Run Code Online (Sandbox Code Playgroud)
如果这些与下一个会话不同,则下一个会话是有效的,即使它使用相同的源端口和客户端 IP。
这在现实中是否可行取决于操作系统的网络堆栈和正在使用的 TCP 库的实现。
显然,对于传入连接,传入计数可能远大于 65535 - 一个繁忙的网站很容易拥有比 65000 个连接多得多的并发性。
| 归档时间: |
|
| 查看次数: |
16311 次 |
| 最近记录: |