Bootstrap

一次完整的tcpdump -XX输出报文详解

报文:

03:32:51.745623 IP (tos 0x0, ttl 64, id 65006, offset 0, flags [DF], proto TCP (6), length 94)
    10.229.43.200.6471 > 10.229.43.200.55674: Flags [P.], cksum 0x6daa (incorrect -> 0x2e06), seq 1:43, ack 42, win 3635, options [nop,nop,TS val 2699525425 ecr 2699524773], length 42
        0x0000:  0000 0000 0000 0000 0000 0000 0800 4500  ..............E.
        0x0010:  005e fdee 4000 4006 cf51 0ae5 2bc8 0ae5  .^..@[email protected]..+...
        0x0020:  2bc8 1947 d97a 74b5 d8b0 0127 bdc0 8018  +..G.zt....'....
        0x0030:  0e33 6daa 0000 0101 080a a0e7 7d31 a0e7  .3m.........}1..
        0x0040:  7aa5 0100 6842 0100 0000 0000 0000 2a00  z...hB........*.
        0x0050:  0000 0000 0000 0000 0000 0000 0000 0000  ................
        0x0060:  0000 0000 0000 0000 0000 0000

tcpdump -XX输出的16进制报文各部分的含义:

报文基本信息

03:32:51.745623 IP (tos 0x0, ttl 64, id 65006, offset 0, flags [DF], proto TCP (6), length 94)
10.229.43.200.6471 > 10.229.43.200.55674: Flags [P.], cksum 0x6daa (incorrect -> 0x2e06), seq 1:43, ack 42, win 3635, options [nop,nop,TS val 2699525425 ecr 2699524773], length 42
  • 时间戳03:32:51.745623,表示报文捕获的时间。

  • IP头部

    • tos 0x0:服务类型字段,值为0,表示常规服务。

    • ttl 64:生存时间,值为64,表示报文最多可以经过64个路由器。

    • id 65006:标识字段,用于唯一标识主机发送的每一分组。

    • offset 0:片偏移字段,值为0,表示该报文不分片。

    • flags [DF]:不分片标志位,表示该报文不允许分片。

    • proto TCP (6):协议字段,值为6,表示上层协议为TCP。

    • length 94:整个IP报文的长度为94字节。

  • TCP头部

    • Flags [P.]:标志位,P表示推送(PSH),.表示确认(ACK)。

    • cksum 0x6daa (incorrect -> 0x2e06):校验和,计算结果为0x6daa,但实际应为0x2e06,表示校验和错误。

    • seq 1:43:序列号范围,从1到43,表示该报文段包含42字节的数据。

    • ack 42:确认号,表示期望收到的下一个报文段的序列号为42。

    • win 3635:窗口大小,值为3635,表示接收方的接收窗口大小。

    • options [nop,nop,TS val 2699525425 ecr 2699524773]:选项字段,包含两个NOP(无操作)选项和一个时间戳选项,时间戳值为2699525425,时间戳回显值为2699524773。

    • length 42:TCP数据部分的长度为42字节。

16进制报文详细解释

0x0000:  0000 0000 0000 0000 0000 0000 0800 4500  ..............E.
0x0010:  005e fdee 4000 4006 cf51 0ae5 2bc8 0ae5  .^..@[email protected]..+...
0x0020:  2bc8 1947 d97a 74b5 d8b0 0127 bdc0 8018  +..G.zt....'....
0x0030:  0e33 6daa 0000 0101 080a a0e7 7d31 a0e7  .3m.........}1..
0x0040:  7aa5 0100 6842 0100 0000 0000 0000 2a00  z...hB........*.
0x0050:  0000 0000 0000 0000 0000 0000 0000 0000  ................
0x0060:  0000 0000 0000 0000 0000 0000
0x0000 - 0x000F:以太网头部(如果存在)
  • 0000 0000 0000 0000 0000 0000:目的MAC地址(全0,表示可能是一个原始IP报文,没有以太网封装)。

  • 0800:以太网类型字段,值为0800,表示这是一个IP报文。

0x0010 - 0x001F:IP头部
  • 4500:IP版本和首部长度。4表示IP版本为IPv4,5表示IP头部长度为5个32位字节,即20字节。

  • 005e:总长度,十六进制5e转换为十进制为94,表示整个IP报文长度为94字节。

  • fdee:标识字段,值为fdee,用于唯一标识主机发送的每一分组。

  • 4000:标志和片偏移字段。4表示不分片(DF位为1),00表示片偏移为0,即该IP报文不分片。

  • 4006:生存时间(TTL)和协议字段。40表示TTL为64,06表示协议为TCP。

  • cf51:头部校验和,用于检测IP头部在传输过程中是否出现错误。

  • 0ae5 2bc8:源IP地址,转换为点分十进制为10.229.43.200。

  • 0ae5 2bc8:目的IP地址,也是10.229.43.200。

0x0020 - 0x002F:TCP头部
  • 1947:源端口号,十六进制1947转换为十进制为6471。

  • d97a:目的端口号,十六进制d97a转换为十进制为55674。

  • 74b5 d8b0:序列号,值为74b5d8b0。

  • 0127:确认号,值为0127。

  • bdc0:数据偏移(高4位)和保留位(中间6位)以及紧急指针字段(低4位)。数据偏移值为b(十进制为11),表示TCP头部长度为11个32位字节,即44字节(包括20字节基本头部和24字节选项部分)。

  • 8018:标志位和窗口大小字段。80表示PSH(推送)和ACK(确认)标志位为1,18表示窗口大小为18(需要乘以2的10次方,即18 * 1024 = 18432,但这里应该是16位的窗口大小字段,直接转换为十进制为20010,可能是表示窗口大小为20010)。

0x0030 - 0x003F:TCP头部(继续)
  • 0e33:检验和,用于检测TCP报文段在传输过程中是否出现错误。

  • 6daa:紧急指针字段,值为6daa,但在这个报文段中紧急指针可能没有实际意义,因为紧急指针字段只有在紧急标志位为1时才有效。

  • 0000:填充字段,用于填充TCP头部,使其长度为整数个32位字节。

  • 0101:选项字段,表示TCP选项的类型和长度。01表示时间戳选项,01表示该选项长度为10字节。

  • 080a:时间戳选项的类型和子类型,08表示时间戳,0a表示时间戳回显。

  • a0e7 7d31:时间戳值,用于TCP的拥塞控制和往返时间测量等。

  • a0e7 7aa5:时间戳回显值,用于确认对方发送的时间戳。

0x0040 - 0x004F:TCP数据部分
  • 0100:TCP数据部分的开始,这部分数据的具体含义需要根据上层应用协议来解释。例如,如果这是一个HTTP协议的数据,那么这些字节可能是HTTP请求或响应的一部分内容。

  • 6842:TCP数据部分的继续。

  • 0100:TCP数据部分的继续。

  • 0000:TCP数据部分的继续,后面跟着的多个0000可能是数据的一部分,也可能是填充数据,具体取决于上层协议对数据的格式要求。

  • 0000:TCP数据部分的继续。

  • 2a00:TCP数据部分的继续。

0x0050 - 0x005F:TCP数据部分(继续)
  • 0000:TCP数据部分的继续,后面跟着的多个0000可能是数据的一部分,也可能是填充数据,具体取决于上层协议对数据的格式要求。

0x0060 - 0x006F:TCP数据部分(继续)
  • 0000:TCP数据部分的继续,后面跟着的多个0000可能是数据的一部分,也可能是填充数据,具体取决于上层协议对数据的格式要求。

总结

  • IP头部:20字节,包含IP版本、头部长度、总长度、标识、标志、片偏移、TTL、协议、头部校验和、源IP地址、目的IP地址。

  • TCP头部:20字节基本头部 + 24字节选项部分,包含源端口号、目的端口号、序列号、确认号、数据偏移、标志位、窗口大小、检验和、紧急指针、选项字段。

  • TCP数据部分:42字节,具体内容需要根据上层协议来解释。

;