我在学习 TCP 时遇到了数据偏移。这是我找到的答案。
" 数据偏移量以 32 位字为单位指定 TCP 标头的大小。最小大小的标头为 5 个字,最大为 15 个字,因此最小大小为 20 字节,最大为 60 字节。
这个词是什么意思?32位字、5字、15字。他们如何得出大小为 20 字节和 60 字节的结论。
我在学习 TCP 时遇到了数据偏移。这是我找到的答案。
" 数据偏移量以 32 位字为单位指定 TCP 标头的大小。最小大小的标头为 5 个字,最大为 15 个字,因此最小大小为 20 字节,最大为 60 字节。
这个词是什么意思?32位字、5字、15字。他们如何得出大小为 20 字节和 60 字节的结论。
数据偏移的目的是告诉上层数据从哪里开始。正如您所指出的,TCP 标头的长度可以是 5-15 个字。所以你需要知道头在哪里结束,数据在哪里开始。
32位字
意味着在这种情况下,word
单位定义为32 bits
。
由于 1 字节 = 8 位,因此一个字是 4 字节。
所以一个 5 个字长的标题是 20 个字节,一个 15 个字的标题是 60 个字节。
即使这是一个旧帖子,我也想给出一个答案,因为详细的答案尚未公开,而且它仍然是第一个 Google 搜索结果。如果我错了,请纠正我,我也在学习。
表达word
方式有点混乱。
数据偏移是指整个标题内容。偏移量,之后数据开始。
由于 Header 最大大小可以达到 60 字节 = 480 位。您可以将其分成最小 20 字节(160 位)加上最大 40 字节(320 位)(可选)。
在 XY 数量之后words
,数据本身开始。这些之间的所有words
内容仍然是标题的一部分。同时定义了OPTIONS
字段的长度,因为之前的Header部分OPTIONS
总是20字节长(强制)。
数据偏移量本身是 4 位长,这意味着您最多可以有 16 个值/字(2^4=16,其中 2 表示 => '1' 和 '0' 有 4 种可能的组合)。因为您使用“32 位长”字进行计算,所以这 16 个值中的每一个都代表一个 32 个字的块。0000 不算*,因此 16-1=15 => 15*32 BIT= 60 Byte(总长度)
乍一看,大小是在描述自身的 Header 的“中间”中定义的,这有点令人困惑。但是你必须把它放在某个地方......所以没有比这更好的地方了。
*我对这个不是 100% 确定(为什么会这样)。我的二进制文件不够好。如果需要,有人可以解释或更正。但价值观本身是正确的。