代码之家  ›  专栏  ›  技术社区  ›  Newbie

正在计算TCP头长度?

  •  1
  • Newbie  · 技术社区  · 6 年前

    有人能指导我以下几点吗?

    我正试图找出答案,如malwarejake[.]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
    

    上述问题的答案如上所述。

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

    除了 协议头长度 数据长度 .

    TCP头的长度通常不是20个字节,扩展到40个字节吗?但是,如何从上面的包中派生出32个字节呢?我不明白。

    谢谢!

    1 回复  |  直到 6 年前
        1
  •  1
  •   Malt    6 年前

    这是直接从 RFC :

        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                              |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    

    价值观 0015 bf3c 是港口。 价值观 dad0 5039 2a8c 25be 是序列号/确认号。

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

    数据偏移:4位

    TCP头中32位字的数目。这表示在哪里 数据开始。TCP头(包括选项)是 32位长的整数。

    所以 一千 表示报头由8 x 32位字组成,即8 x 4字节=32字节。