数据字段在 TCP 段中从哪一位开始?

On which bit does the Data field start in a TCP segment?

我想在 Python 上使用套接字读取 HTTP 请求。具体来说,请求行、一般 Headers 和请求 Headers,基于 this。要执行此操作,我需要读取 TCP 段的数据字段,但我如何知道数据字段从哪一位开始?它将是 32 的倍数,但我是否必须强制执行它(即检查前 32 个字节是否看起来像 "GET /index.html HTTP/1.1")。

使用流套接字,Python 会为您处理 TCP encapsulation/decapsulation。因此,您所要做的就是使用套接字 recv 函数——您收到的第一个字节将是 GET(假设是一个格式正确的 HTTP 请求)。

TCP header 长度是可变的,但它在 TCP header 本身中说明。 第 13 个字节的前 4 位(位 96 - 99)是数据偏移量或 32 位字中 header 大小的二进制表示。

例如,最小数据偏移量为 20 个字节,因此 header 中的数据偏移量字段将为 0101。即 5 个 32 位字 = 5 * 4 个字节 = 20 个字节。

查看 wikipedia page for TCP 了解更多信息