TCP 流/连接

网络工程 通讯协议 协议理论 第4层 传输协议
2021-07-10 10:09:25

我想问一下 TCP 如何创建流(以及究竟什么是流)。例如,在 Wireshark 中,我看到一个服务器有多个流,但我无法理解 TCP 如何/何时从同一连接创建此流。我还读到 HTTP/1.1 使用多个连接同时从 Web 服务器获取更多对象,那么这些连接与 Wireshark 中的流是否相同?

先感谢您。

2个回答

简而言之,一个给定的 TCP 连接由四件事指定:

  • 主机 A IP 地址
  • 主机 A 端口号
  • 主机 B IP 地址
  • 主机 B 端口号

这是唯一定义给定连接的内容。

当一个主机打开一个到另一个的 TCP 连接(可能是一个 web fetch)时,它选择一个未使用的端口,通常是一个“随机的高端口号”,并连接到服务器的众所周知的端口号,可能是 80。如果它打开到同一台服务器的另一个连接,它将有一个不同的本地端口。

在页面刷新期间在现实生活中捕获,我的计算机有许多连接,其中有两个:

192.168.0.28:34628      69.30.95.247:80
192.168.0.28:34626      69.30.95.247:80

由于给定主机最多有 2^16 个端口(在 IPv4 中),因此它最多可以同时连接 65,536 个连接到普通 Web 端口上的给定 Web 服务器(减去一些具有特殊含义的端口)。这对于个人计算机来说不是问题,但对于大型网络代理来说可能是问题。(并且给定的操作系统很可能还有其他更小的限制:我所说的限制是协议限制中固有的。)

希望这有助于澄清一些。

TCP 流实际上是应用程序向 TCP 发送的大数据块。TCP 将数据分段为 PDU(协议数据单元),称为适合 MSS(最大段大小)的段。另一端的 TCP 将重新组装这些段并重新创建数据流并将其传递给接收应用程序。对于应用程序来说,它只是一个数据流,TCP 处理所有细节。TCP 流发生在 TCP 连接上。应用程序可以打开主机操作系统允许的尽可能多的 TCP 连接(这里是题外话),并将这些连接用于数据流。

另一方面,HTTP 是一种应用层协议,这里是题外话。