Alice
ICMP报文拆分解析

ICMP报文拆分解析

报文解析拆分

  • 很经典的一个点对点的单播实验图,让PC1对PC2进行发包,以这个产生的ICMP包为基础去进行报文的拆分。

ICMP实验图2

  • 物理层数据帧的情况:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Frame 3: 74 bytes on wire (592 bits), 74 bytes captured (592 bits) on interface 0  #第3号帧,对应的也是抓到的第三个包;线路74字节,实际捕获74字节。
    Interface id: 0 (-) #接口ID
    Interface name: -
    Encapsulation type: Ethernet (1) #封装类型
    Arrival Time: Jan 27, 1970 15:03:09.234000000 中国标准时间 #捕获的日期和时间(正常来说1970的中国时间戳应该是上午八点)
    [Time shift for this packet: 0.000000000 seconds]
    Epoch Time: 2271789.234000000 seconds
    [Time delta from previous captured frame: 0.016000000 seconds] #这个包和上一个包的时间间隔
    [Time delta from previous displayed frame: 0.016000000 seconds] #这个包和第一帧的时间间隔
    [Time since reference or first frame: 0.016000000 seconds]
    Frame Number: 3 #帧序号,也就是抓到的第三个包
    Frame Length: 74 bytes (592 bits) #帧长度
    Capture Length: 74 bytes (592 bits) #实际捕获长度
    [Frame is marked: False] #此帧是否做了标记:否
    [Frame is ignored: False] #此帧是否被忽略:否
    [Protocols in frame: eth:ethertype:ip:icmp:data] #帧内封装的协议层次结构
    [Coloring Rule Name: ICMP] #着色标记的协议名称
    [Coloring Rule String: icmp || icmpv6] #着色规则显示的字符串
  • 链路层-Ethernet Ⅱ帧的情况:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Ethernet II, Src: HuaweiTe_f3:08:35 (54:89:98:f3:08:35), Dst: HuaweiTe_1c:09:63 (54:89:98:1c:09:63)    #可以看到源MAC和目的MAC,这里的HuaweiTe_f3:08:35是设备厂商的“组织唯一标识符”
    Destination: HuaweiTe_1c:09:63 (54:89:98:1c:09:63) #DMAC,也就是接收方的MAC地址,占6个字节
    Address: HuaweiTe_1c:09:63 (54:89:98:1c:09:63)
    .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
    .... ...0 .... .... .... .... = IG bit: Individual address (unicast) #IG位为0,代表单播,也就是后面的unicast
    Source: HuaweiTe_f3:08:35 (54:89:98:f3:08:35) #SMAC,也就是发送方,占6个字节
    Address: HuaweiTe_f3:08:35 (54:89:98:f3:08:35)
    .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
    .... ...0 .... .... .... .... = IG bit: Individual address (unicast) #IG位为0,代表单播,也就是后面的unicast
    Type: IPv4 (0x0800) #协议类型,0x0800代表的是ipv4
  • 网络层-IP协议数据包情况:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Internet Protocol Version 4, Src: 10.10.10.10, Dst: 20.20.20.20
    0100 .... = Version: 4 #代表IPV4协议
    .... 0101 = Header Length: 20 bytes (5) #IP包头部的总长度
    Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT) #差分服务字段
    0000 00.. = Differentiated Services Codepoint: Default (0)
    .... ..00 = Explicit Congestion Notification: Not ECN-Capable Transport (0)
    Total Length: 60 #IP包总长度
    Identification: 0x0ad4 (2772) #标记的字段
    Flags: 0x4000, Don't fragment #标志位
    0... .... .... .... = Reserved bit: Not set #保留位,必须为0。
    .1.. .... .... .... = Don't fragment: Set #能否分片位,0表示可以分片,1表示不能分片。
    ..0. .... .... .... = More fragments: Not set #表示是否该报文为最后一片,0表示最后一片,1代表后面还有。
    ...0 0000 0000 0000 = Fragment offset: 0 #片偏移:分片重组时会用到该字段。表示较长的分组在分片后,某片在原分组中的相对位置。以8个字节为偏移单位。
    Time to live: 128 #生存时间:可经过的最多路由数,即数据包在网络中可通过的路由器数的最大值。
    Protocol: ICMP (1) #协议
    Header checksum: 0xb3b1 [validation disabled] #首部检验和,只检验数据包的首部,不检验数据部分。这里不采用CRC检验码,而采用简单的计算方法。
    [Header checksum status: Unverified]
    Source: 10.10.10.10 #目的IP地址。
    Destination: 20.20.20.20 #填充字段,全填0。
  • 网络层-ICMP数据包情况:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Internet Control Message Protocol
    Type: 8 (Echo (ping) request) #报文类型
    Code: 0 #代码
    Checksum: 0xb272 [correct] #校验和,使用和IP相同的加法校验和算法,但是ICMP校验和仅覆盖ICMP报文。
    [Checksum Status: Good]
    Identifier (BE): 54282 (0xd40a)
    Identifier (LE): 2772 (0x0ad4)
    Sequence number (BE): 1 (0x0001)
    Sequence number (LE): 256 (0x0100)
    [Response frame: 4]
    Data (32 bytes) #ICMP数据包大小
    Data: 08090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f…
    [Length: 32]
  • 至此,一个点到点的单播ICMP包拆解完毕

本文作者:Alice
本文链接:https://blog.irislc.cn/2025/06/13/ICMP报文拆分解析/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可