计算 TCP 标头长度?

New*_*bie 3 networking tcp network-protocols frame wireshark

任何人都可以指导我进行以下操作吗?

我正在尝试找出在博客恶意软件杰克[.]blogspot.com/2015/05/packet-analysis-practice-part-3.html 中的第一个问题中看到的答案。

根据找到的样本包

什么是嵌入式协议、目标端口和不包括协议头的数据量?

    0x0000:  4500 004c 1986 4000 4006 9cba c0a8 0165
    0x0010:  c0a8 01b6 0015 bf3c dad0 5039 2a8c 25be
    0x0020:  8018 0072 06ec 0000 0101 080a 008a 70ac
Run Code Online (Sandbox Code Playgroud)

上述问题的答案如上。

    Embedded protocol: TCP
    Total packet length:  76
    IP Header length:  20
    Protocol header length: 32
    Data length: 24
    Dest Port: 0xbf3c (48956)
Run Code Online (Sandbox Code Playgroud)

我设法得到了除Protocol Header LengthData Length之外的所有其他答案。

TCP Header Length 通常不是 20 个字节,扩展到 40 个字节吗?但是 32 字节是如何从上述数据包中导出的呢?我不明白。

谢谢!

Mal*_*alt 7

这是直接来自RFC的 TCP 标头:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          Source Port          |       Destination Port        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                        Sequence Number                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    Acknowledgment Number                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Data |           |U|A|P|R|S|F|                               |
   | Offset| Reserved  |R|C|S|S|Y|I|            Window             |
   |       |           |G|K|H|T|N|N|                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Checksum            |         Urgent Pointer        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    Options                    |    Padding    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                             data                              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Run Code Online (Sandbox Code Playgroud)

0015bf3c是端口。值dad0 50392a8c 25be是序列/确认号。

现在看看接下来的 4 位。在 offset 的那些0x20。字节的值为0x80,这意味着最高 4 位是1000。它们对应于“数据偏移”字段:

数据偏移:4位

TCP 标头中 32 位字的数量。这表明数据从哪里开始。TCP 标头(甚至包括选项)是 32 位长的整数。

所以1000意味着头由 8 x 32 位字组成,这意味着 8 x 4 字节 = 32 字节。