什么会结束 TCP 流?

什么会结束 TCP 流?

我正在使用 WireShark 并访问 google.com。我得到了 23 个 TCP 流、23 个 TCP 对话、23 次握手,对吗?我知道 TCP 流以 FIN 标志结尾,并且 TCP 段封装在 ip 协议中。

我的问题是,是什么决定了 TCP 流的开始和结束?为什么我们需要 23 个段来下载一个简单的网站?哪些参数决定何时结束和开始流?这些参数与上述协议有关吗?(也许它们与下载流有关,专门用于从网站下载图片)

请帮忙

答案1

TCP 流通常在进程调用操作系统的 TCP/IP API 来启动 TCP 连接时启动。它以“三次握手”(3 个数据包)开始,通常以“四次关闭”(4 个数据包)结束,中间通常至少有 2 个单独的 TCP 段(数据包)(例如单数据包请求和单数据包响应),因此每个流通常至少有 9 个数据包。

听起来你捕获了 23 个单独的 TCP(所以至少有 200 个片段)。对于现代网站来说,这实际上是一个很小的数字。如今,加载像 cnn.com 这样的典型新闻网站通常需要跨数十个 TCP 流发送数百个 HTTP 请求,只是为了加载所有单独的图形、JavaScript 文件、CSS 文件、广告、跟踪器等。每个 HTTP 响应可能都有很多片段,因此您可能捕获了数千个片段。

编辑后添加:您加载 google.com 的数据包数之所以如此之低,可能是因为您可能正在过滤 TCP,认为一切都将以 HTTP/1.1 或 HTTP/2 完成,而 Google 现在更喜欢 QUIC (HTTP/3),它使用 UDP 而不是 TCP。因此,如果您从 Chrome 或其他支持 QUIC 的浏览器加载 Google.com,您看到的唯一 TCP 连接可能只是对第三方广告服务器的请求或其他东西。

编辑2:至于是什么原因导致 TCP 流结尾,任何一方都可以在完成后正常关闭或重置它。对于 HTTP over TCP,浏览器可能会在发送最后一个 HTTP 请求时结束其流的一侧,服务器可能会在发送最后一个 HTTP 响应的最后一段时结束其流的一侧(例如,当发送了最后一个请求的 HTML 文件或图像文件或 CSS 文件的最后一个字节时)。

相关内容