0

我有一个非常简单的问题,似乎无法找到我想要的答案。假设我在客户端和服务器之间有一个 tcp 连接,并且客户端请求包含 2 个文件的页面。我们假设 http 连接是持久的并且使用管道,因此对文件的 2 个请求在一个 tcp 段中发送到从客户端到服务器的。现在假设客户端想要的文件是 4500 字节和 3000 字节,tcp 的 MSS 是 1460 字节,因为我们使用的是以太网,所以第一个文件应该分为 1460 和 120 的 3 段,而第二个文件是分为 1460 和 80 的 2 段(至少如果 tcp 仅发送一个文件会发生这种情况)。在这种情况下,tcp 将发送多少段?第一个文件的前 4 个和第二个文件的 3 个,或者它会先将 2 个文件“合并”在一起,然后分割发送该文件?在第二种情况下,我们将有一个 7500、5 MSS + 200 字节的文件。

我在任何地方都找不到有关此问题的信息。所以最后我的问题是tcp发送的段模式如何:

3 MSS -> 120 字节 -> 2 MSS -> 80 字节或 5 MSS -> 200 字节

我不明白 tcp 如何发送包含 2 个不同文件字节的段。

4

1 回答 1

0

我不明白 tcp 如何发送包含 2 个不同文件字节的段。

从用户应用程序的角度来看,TCP 只是一个字节流,不知道这些字节是如何在数据包中传递的。在 TCP 本身,没有文件或 HTTP 请求和响应的概念。相反,它们之间的区别是在应用程序级别完成的,即在这种情况下是在 HTTP 协议级别。

HTTP 协议定义每个请求和响应都由一个标头和一个主体组成,它们以空行区分。正文或正文部分的大小是预先知道的,即在标题中给出(使用content-length字段)或在每个正文块之前给出(使用transfer-encoding: chunked)。这样,主体的结尾以及下一个请求/响应的开始可以由 HTTP 协议解析器确定。这些数据如何在底层 TCP 层打包并不重要。

于 2019-06-26T18:40:54.370 回答