我会继续走下去,绝不会倒下。(加载时间略长)
侧边栏
最新评论
irislc管理员
2025-06-13 16:20
部署虚拟化做试验用,给一些朋友开虚拟机挂合规业务,以及个人NAS存储,跑点AI大模型>﹏<
SEN
2025-06-09 13:34
Σ(゚д゚;)大佬!顺便问一下物理机在家的话一般部署些什么项目呢

数据包拆解之-ICMP全面拆分

作者:irislc时间:2025-06-13 12:07:00分类:报文拆分

实验图如下:

f3574b71e9d328495a810655b4553c1.png

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

1a2b32e1a92762541bada4c197683b0.png

物理层数据帧的情况:

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 Ⅱ帧的情况:

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

一个完整的以太帧由以下格式组成

字段长度含义
DMAC6字节目的MAC地址,IPv4为6字节,该字段标识帧的接收者。
SMAC6字节源MAC地址,IPv4为6字节,该字段标识帧的发送者。
Type2字节协议类型。
Data46~1500字节数据字段,标识帧的负载(可能包含填充位)。

数据字段的最小长度必须为46字节以保证帧长至少为64字节,这意味着传输1字节信息也必须使用46字节的数据字段。

如果填入该字段的信息少于46字节,该字段的其余部分也必须进行填充。数据字段的最大长度为1500字节。

以太帧的长度必须为整数字节,因此帧的负载长度不足整数字节,需插入填充字段以保证数据帧的长度为整数字节。
FCS4字节帧校验序列FCS(Frame Check Sequence)是为接收者提供判断是否传输错误的一种方法,如果发现错误,丢弃此帧。

FCS只是通用叫法,具体的FCS还可以细分多种校验方法。在以太帧中,FCS通常采用循环冗余码校验CRC(Cyclical Redundancy Check)。

网络层-IP协议数据包情况:

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数据包情况:

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消息类型代码

类型Type代码Code描述
00回显应答(ping应答)
30网络不可达
31主机不可达
32协议不可达
33端口不可达
34需要进行分片但设置不分片比特
35源站选路失败
36目的网络不认识
37目的主机不认识
39目的网络被强制禁止
310目的主机被强制禁止
311由于TOS,网络不可达
312由于TOS,主机不可达
313由于过滤,通信被强制禁止
314主机越权
315优先权中止生效
40源端被关闭
50对网络重定向
51对主机重定向
52对服务类型和网络重定向
53对服务类型和主机重定向
80请求回显(ping请求)
90路由器通告
100路由器请求
110传输期间生存时间为0
111在数据报组装期间生存时间为0
120坏的IP首部
121缺少必须的选项
170地址掩码请求
180地址掩码应答

至此,一个点到点的单播ICMP包拆解完毕


参考资料:《华为数通报文格式描述》、《泰克徐来hcia课程讲解》、《RFC Editor》

相关作品:
HCIA
暂无评分
数通HCIA
2024年4月30日 16时 ~ 2025年6月13日 13时
共计阅读1年1个月
暂无内容