10

您所在的位置:网站首页 icmp类型代码 10

10

2024-07-16 12:02| 来源: 网络整理| 查看: 265

1. ICMP数据报文格式

icmp数据报文的格式如图1所示:

这里写图片描述 图1-icmp数据报文格式 类型(type):占用了8 bit位,前面我们说,是ICMP报文类型,用于标识错误类型的差错报文或者查询类型的报告报文。

代码(code):占用了8 bit位,根据ICMP差错报文的类型,进一步分析错误的原因,代码值不同对应的错误也不同,例如:类型为11且代码为0,表示数据传输过程中超时了,超时的具体原因是TTL值为0,数据报被丢弃。

校验和(checksum):占用了16 bit位,数据发送到目的地后需要对ICMP数据报文做一个校验,用于检查数据报文是否有错误。

标识符(Identifier):占用了16 bit位,对于每一个发送的数据报进行标识

序列号(Sequence number):占用了16 bit位,对于发送的每一个数据报文进行编号,比如:发送的第一个数据报序列号为1,第二个序列号为2。

数据(Data):要发送的ICMP数据。 以icmp请求报文为例,我们来看一下icmp请求报文的封装格式:

这里写图片描述 图2-icmp请求报文的封装格式

Internet Control Message Protocol Type: 8 (Echo (ping) request) // ICMP类型为8,说明这是一个ICMP请求查询报文 Code: 0 //表示是请求 Checksum: 0xf7e9 [correct] //校验和 [Checksum Status: Good] //校验和状态,good表示校验和正确,bad表示数据报被修改或者发生错误 Identifier (BE): 1 (0x0001) //标识,用于区分在linux下抓包,基本上抓的每一个ICMP包都是1 Identifier (LE): 256 (0x0100) //标识,用于区分在windows下抓包,基本上抓的每一个ICMP包都是256 Sequence number (BE): 21 (0x0015) //序列号,用于区分在linux下抓包,每一个ICMP包的序列号都不一样 Sequence number (LE): 5376 (0x1500) //序列号,用于区分在windows下抓包,每一个ICMP包的序列号都不一样 [No response seen] Data (64 bytes) //数据部分

  这是我们刚才通过ping命令抓的ICMP协议包,其中request是ICMP请求数据报,reply是ICMP回答数据报,另外request和reply是一组ICMP请求回答数据报 这里写图片描述

我们再针对一组ICMP请求回答数据报分析两个ICMP数据报是否为一组。

这里写图片描述 图3-icmp的request和reply

   在图3中,左侧是ICMP请求,右侧是ICMP回答,我们在分析的时候发现,这两个ICMP数据报的序列号都是一样的,说明了这两个ICMP数据报就是一组的。而不同组的ICMP数据报的序列号也是不同的,由此可知,通过判断两个ICMP报文的序列号就可以知道是否为一组。

  下面我们来看一下,我们在用ping命令发送的ping包携带的是什么数据。

这里写图片描述 图4-icmp数据部分

  其中Data就是刚才ping命令所发送的ICMP数据报文里的数据部分,这些数据是ping命令发送的测试内容,左侧部分是以十六进制表示,右侧部分就是我们所发送的数据部分,这些数据长度正好是32字节,一个字母代表一个字节。

2. ICMP报文通用格式

这里写图片描述 图5-icmp报文通用格式

  前面我们说过ICMP数据报文种类有ICMP差错报文和ICMP查询报文,这些报文的格式除了类型,代码,校验和这些字段是一样的,但是不同的ICMP数据报文的类型,代码等字段也是不一样的,而上面的图5是ICMP数据报文的通用格式。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3