以太网ICMP协议

一、什么是ICMP协议

        ICMP协议,用于传输出错报告控制信息,包括报告错误、交换控制受限、状态信息等。比如,我们经常使用的ping命令和tracert命令。

二、ICMP协议结构

        ICMP协议是基于以太网协议基础上的组帧协议(参考文章:以太网帧格式解析-CSDN博客),如下图:

具体解析如下表(内含IP协议部分的解析):

协议类型名称字节数数值含义
数据同步前导码7字节

0x55_5555_

5555_5555

同步码,通过串行数据的“01”交替,实现数据的同步。
帧起始界定符1字节0xD5表示一帧的开始。后面紧跟以太网的帧头
以太网协议(14字节帧头)目的MAC地址6字节/以太网协议的第一个字段。指示目标设备(接收端)的MAC地址。分为广播地址、单播地址和多播地址。广播地址的数值为0xFFFF_FFFF_FFFF,用于和所有设备进行通信。
源MAC地址6字节/发送端的MAC地址。
长度/类型2字节/

当该字段的数值小于1536个字节时,表示的是数据的长度。

当为0x0800时,表示该数据包是IPv4协议包。

当为0x08DD时,表示该数据包是IPv6协议包。

当为0x0806时,表示该数据包是ARP协议包。

IP 协议(20字节首部,4字节对齐)版本0.5字节/IP 协议版本号。二进制的 0100 时表示 IPv4,设置为 0110 时表示 IPv6
首部长度0.5字节/表示 IP 首部一共有多少个 32 位(4 个字节)。没有可选字段时,首部有20个字节,此处为5.
服务类型1字节/服务类型为0时,表示一般服务。
总长度2字节/

IP数据报文总长度,包括首部+数据部分

标识2字节/表示数据报文的ID号,每发送一次报文,ID加1
标志0.5字节/

3 位标志(Flags)字段,

第 1 位为保留位;

第 2 位表示禁止分片(1 表示不分片 0:允许分
片);

第 3 位标识更多分片(除了数据报的最后一个分片外,其它分片都为 1)。

片偏移1.5字节/在接收方进行数据报重组时用来标识分片的顺序
生存时间1字节/防止丢失的数据包在网络中无休止的传播,一般设置为64或者128。
协议1字节/表示此数据报所携带上层数据使用的协议类型,ICMP 为 1,TCP 为6,UDP 为 17。
首部校验和2字节/该字段只校验数据报的首部,不包含数据部分
源IP地址4字节//
目的IP地址4字节//
可选字段//可有可无,一般忽略的时候,首部为20字节。注意可选字段长度必须是4字节整数倍。
ICMP协议(8个字节帧头)类型1字节/

指示ICMP报文的作用及格式。常用类型有:

类型 0,代码 0:表示回显应答(ping 应答);

类型 8,代码 0:表示回显请求(ping 请求);

类型 11,代码 0:超时;

类型 3,代码 0:网络不可达;

类型 3,代码 1:主机不可达;

类型 5,代码 0:重定向;

代码1字节/
校验和2字节/与IP首部的校验方式相同,仅校验ICMP首部
标识符2字节/表示进程或线程,用以表示ICMP发送的实体
序列号2字节/表示数据报文的ID号,每发送一次报文,ID加1
用户数据N字节//
以太网协议FCS4字节//

简单描述一下上述表格的IP首部检验和的计算方式:

1、将 16 位检验和字段置为 0,然后将 IP 首部按照 16 位分成多个单元;

2、对各个单元采用反码加法运算(即高位溢出位会加到低位,通常的补码运算是直接丢掉溢出的高位);

3、此时仍然可能出现进位的情况,将得到的和再次分成高 16 位和低 16 位进行累加;

4、最后将得到的和的反码填入校验和字段。

举例如下图:

三、ping命令实际举例

1、wireshark抓取的ping请求指令如下;

协议类型名称字节数数值含义
以太网协议(14字节帧头)目的MAC地址6字节0x04D9_C8BD_15CF以太网协议的第一个字段。指示目标设备(接收端)的MAC地址。分为广播地址、单播地址和多播地址。广播地址的数值为0xFFFF_FFFF_FFFF,用于和所有设备进行通信。
源MAC地址6字节0xE080_88BA_9F36发送端的MAC地址。
长度/类型2字节0x0800

当该字段的数值小于1536个字节时,表示的是数据的长度。

当为0x0800时,表示该数据包是IPv4协议包。

当为0x08DD时,表示该数据包是IPv6协议包。

当为0x0806时,表示该数据包是ARP协议包。

IP 协议(20字节首部,4字节对齐)版本0.5字节0x4IP 协议版本号。二进制的 0100 时表示 IPv4,设置为 0110 时表示 IPv6
首部长度0.5字节0x5表示 IP 首部一共有多少个 32 位(4 个字节)。没有可选字段时,首部有20个字节,此处为5.
服务类型1字节0x00服务类型为0时,表示一般服务。
总长度2字节0x003C

IP数据报文总长度,包括首部+数据部分,共60字节

标识2字节0xBD25表示数据报文的ID号,每发送一次报文,ID加1
标志0.5字节0x0

3 位标志(Flags)字段,

第 1 位为保留位;

第 2 位表示禁止分片(1 表示不分片; 0:允许分片);

第 3 位标识更多分片(除了数据报的最后一个分片外,其它分片都为 1)。

片偏移1.5字节0x000在接收方进行数据报重组时用来标识分片的顺序
生存时间1字节0x80防止丢失的数据包在网络中无休止的传播,设置为128。
协议1字节0x01表示此数据报所携带上层数据使用的协议类型,ICMP 为 1,TCP 为6,UDP 为 17。
首部校验和2字节0x0000该字段只校验数据报的首部,不包含数据部分,一般不校验
源IP地址4字节0xC0A80A0B192.168.10.2
目的IP地址4字节0xC0A80A02192.168.10.11
可选字段///
ICMP协议(8个字节帧头)类型1字节0x08

指示ICMP报文的作用及格式。常用类型有:

类型 0,代码 0:表示回显应答(ping 应答);

类型 8,代码 0:表示回显请求(ping 请求);

类型 11,代码 0:超时;

类型 3,代码 0:网络不可达;

类型 3,代码 1:主机不可达;

类型 5,代码 0:重定向;

代码1字节0x00
校验和2字节0x4CFE与IP首部的校验方式相同,仅校验ICMP首部
标识符2字节0x0001表示进程或线程,用以表示ICMP发送的实体
序列号2字节0x005D表示数据报文的ID号,每发送一次报文,ID加1
用户数据N字节0x6162_6364......32字节发送数据

2、wireshark抓取的对应的ping应答如下:

协议类型名称字节数数值含义
以太网协议(14字节帧头)目的MAC地址6字节0xE080_88BA_9F36以太网协议的第一个字段。指示目标设备(接收端)的MAC地址。分为广播地址、单播地址和多播地址。广播地址的数值为0xFFFF_FFFF_FFFF,用于和所有设备进行通信。
源MAC地址6字节0x04D9_C8BD_15CF发送端的MAC地址。
长度/类型2字节0x0800

当该字段的数值小于1536个字节时,表示的是数据的长度。

当为0x0800时,表示该数据包是IPv4协议包。

当为0x08DD时,表示该数据包是IPv6协议包。

当为0x0806时,表示该数据包是ARP协议包。

IP 协议(20字节首部,4字节对齐)版本0.5字节0x4IP 协议版本号。二进制的 0100 时表示 IPv4,设置为 0110 时表示 IPv6
首部长度0.5字节0x5表示 IP 首部一共有多少个 32 位(4 个字节)。没有可选字段时,首部有20个字节,此处为5.
服务类型1字节0x00服务类型为0时,表示一般服务。
总长度2字节0x003C

IP数据报文总长度,包括首部+数据部分,共60字节

标识2字节0xBC6E表示数据报文的ID号,每发送一次报文,ID加1
标志0.5字节0x0

3 位标志(Flags)字段,

第 1 位为保留位;

第 2 位表示禁止分片(1 表示不分片; 0:允许分片);

第 3 位标识更多分片(除了数据报的最后一个分片外,其它分片都为 1)。

片偏移1.5字节0x000在接收方进行数据报重组时用来标识分片的顺序
生存时间1字节0x80防止丢失的数据包在网络中无休止的传播,设置为128。
协议1字节0x01表示此数据报所携带上层数据使用的协议类型,ICMP 为 1,TCP 为6,UDP 为 17。
首部校验和2字节0xF1F4该字段只校验数据报的首部,不包含数据部分,一般不校验
源IP地址4字节0xC0A80A02192.168.10.2
目的IP地址4字节0xC0A80A0B192.168.10.11
可选字段///
ICMP协议(8个字节帧头)类型1字节0x00

指示ICMP报文的作用及格式。常用类型有:

类型 0,代码 0:表示回显应答(ping 应答);

类型 8,代码 0:表示回显请求(ping 请求);

类型 11,代码 0:超时;

类型 3,代码 0:网络不可达;

类型 3,代码 1:主机不可达;

类型 5,代码 0:重定向;

代码1字节0x00
校验和2字节0x54FE与IP首部的校验方式相同,仅校验ICMP首部
标识符2字节0x0001表示进程或线程,用以表示ICMP发送的实体
序列号2字节0x005D表示数据报文的ID号,每发送一次报文,ID加1
用户数据N字节0x6162_6364......32字节应答数据

  • 25
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值