注: 本文为 “ICMP 协议” 相关文章合辑。
未整理去重。
网络层 IP 数据报、ICMP 协议(含具体实验演示)
陆海潘江小 C 于 2021-04-21 17:43:28 发布
一、前言
对以前学习过的内容进行一个系统的整理,梳理思路,将零散的知识碎片集成一个相对完善的知识体系,这样能够更好地去理解知识。
看完这篇能学到什么呢?
-
IP 数据报格式和首部字段的功能;
-
Cisco 实验验证实际通信过程中 IP 数据报具体内容;
-
ICMP 协议以及报文内容;
-
ICMP 在实际中的应用。
二、IP 数据报
学习一个知识,我们往往倾向于能够直观地感知,而不喜欢抽象的概念,所以这里先放上图片(来源:百度百科)。
先看看 IP 数据报长什么样子,才能更好地理解它。

这张图最清晰直观的,一眼就可以发现 IP 数据报的格式和基本功能内容,下面就来瞧瞧每个区域分别负责什么。
一个 IP 数据报由首部和数据两个部分组成。首部的前部分属于固定部分,占 20 个字节;后面部分属于可变部分,长度时可变的。
首部固定部分主要字段解析:
1、版本
从图中可以看到,版本字段占 4 位。记录着通信双方使用的 IP 协议版本,比如 IPv4、IPv6,目前广泛使用的是 IPv4。
2、首部长度
占 4 位,表示的 单位为 4 字节,比如 1111(十进制的 15)就代表首部长度为 60 字节(15*4=60). 以 4 字节的整数倍划分,不足则填充。最常用的首部长度为 0101(20 字节)。
3、区分服务
占 8 位,用以获得更好的服务。实际中未使用。
4、总长度
即 首部长度和数据长度之和。占 16 位。因此,最大长度可知为 16 位都是 1,就是 65535 字节。
在 IP 层下层数据链路层存在自己的帧格式,帧格式的数据字段最大传送单元(MTU)是 1500 字节。尽可能长的数据报能够提高传输效率,实际中数据报长度很少大于 1500 字节。所以,IP 标准规定:所有主机和路由器的 IP 数据报长度不能小于 576 字节。
如果数据报长度超过 MTU,则将进行分片后再传送,与后面的片偏移相关。然后 总长度就成了分片后每个分片的首部和数据的长度之和。
5、标识
占 16 位。在实际 IP 中,维持了一个计数器,每产生一个数据报,计数其加 1,存放到该字段。IP 是无连接服务,不存在按序接收问题,该标识不是序号,而是 在进行分片之后对相同的数据报进行标识,属于同一个数据报的标识相同,以便到达目的后被重新封装为原来的数据报。
6、标志
占 3 位。目前使用 2 两位有意义的。
最低位:MF(More Fragment)还有分片,MF=0 时说明是最后一个分片。
中间位:DF(Don‘t Fragment)不能分片,DF=0 时才能分片。
7、片偏移
占 13 位。用于记录较长分组中,一个分片在原数据报中的相对位置。片偏移以 8 字节为单位,长度是 8 字节的整数倍。
假设一个数据报总长度为 3820 字节。首部 20 字节和数据 3800 字节。现在要求长度不超过 1420 字节,那么它的每个分片为多少呢?
简单分析一下,数据部分尽可能长的可以分为 1400,1400,1000 三个分片,这样再加上首部满足小于 1420 字节。
分片一:0-1399 字节,因此片偏移 = 0/8=0
分片二:1400-2799 字节,片偏移 = 1400/8=175
分片三:2800-3800 字节,片偏移 = 2800/8=350
很容易就计算出每个分片的片偏移。
8、生存时间
TTL(Time To Live) 占 8 位。最大值 255. 每个数据报都有 TTL,防止被错误路由在网络中不断循环,消耗网络资源。在实际中,TTL 表示的是跳数而不是时间,指明数据报在网络中最多可经过多少个路由器。
9、协议
占 8 位。指明数据报携带的数据是使用什么协议,方便目的主机的 IP 层将数据交给对应的程序处理,这里列举几个。
| 协议 | ICMP | IGMP | TCP | UDP | OSPF |
|---|---|---|---|---|---|
| 字段值 | 1 | 2 | 6 | 17 | 89 |
10、首部检验和
占 16 位。只校验数据报首部,不包括数据部分。这样可以减少计算量,同时不采用复杂的 CRC 检验码,而是使用简单的 反码算术运算。
反码算术运算:将数据报首部划分为多个 16 位的序列,16 位序列相加之和取反码,写入检验和。接收方再将首部 16 位序列(包含检验和的 16 位)相加之和取反码,结果为 0 则说明数据报正确,否则丢弃。
三、Cisco 模拟器实验
现在做一个简单的实验,模拟两台主机进行通信,然后查看 IP 数据报的格式。

实验如图,现在 PC0 发送 ping 命令给 PC1.

这就是实际中 IP 数据报的格式,与开始介绍的图一致:

这里使用到 ping 命令,自然联想到是基于 ICMP 协议进行通信的。接下来看看 ICMP 协议具体是什么。
四、ICMP 协议
网际控制报文协议就是熟悉的 ICMP 全称。
还是先放一个直观容易理解地图片(来源:百度百科)

ICMP 报文作为 IP 数据报的数据,加上 IP 数据报首部,组成 IP 数据报被发送出去。
前 4 个字节是固定格式:包括类型、代码、检验和三个字段。
ICMP 报文种类有差错报告报文和询问报文,几种常用的报文类型有:
差错报告报文有 5 种类型:
1、终点不可达
当路由器或主机不能交付数据报时,就向发送方发送源点不可达报文。
2、源点抑制
由于拥塞而丢弃数据,就发送源点抑制报文告知发送方降低放松频率。
3、超时
当 TTL 减少至零时,说明目的接收方没有接收数据报,发送超时报文告知发送方。
4、参数问题
接收方收到的数据首部的一些字段不正确时,发送参数问题报文。
5、改变路由(重定向)
发送方按路由表中的默认路由发送数据给目的主机,因为每个路由器都有一个最佳路由到达每个网络。所以如果该路由不是最佳的,路由器就把新的路由信息发送给源主机,告知下次发送时有更好地路由选择。
询问报文有两种类型:
6、回送请求和回答
上面使用到的 ping 命令就是发送了询问报文,测试目的是否可到达。
7、时间戳请求和回答
请某个主机或路由器回答当前的日期时间,可以用来进行时钟同步和测量时间。
五、ICMP 实践应用
在上面的模拟实验也可以看到 ICMP 报文的内容。

使用 ping 命令测试目的主机:

在自己电脑的命令提示符 cmd 测试:
ping www.youkuaiyun.com

可以看到询问报文应答的一些信息。
另外,tracert 命令可以探测路由信息,也是发送 ICMP 回送请求报文。
tracert www.csdn.net
通过最多 30 个跃点跟踪
到 www.csdn.net [39.105.14.128] 的路由:
这次详细记录了网络层 IP 数据报和 ICMP 协议 的内容,直观的演示和实践可以更好地掌握这方面的知识。
计算机网络实验 ——IP/ICMP 协议分析
淋雨的蜗牛于 2020-04-30 16:44:02 发布
实验 IP/ICMP 协议分析实验
一、实验目的
理解 IP 协议包格式;
理解 ICMP 协议包格式。
二、实验内容
PING 应用系统通信过程中 ICMP 协议、IP 协议分析。
三、实验原理、方法和手段
(1)ICMP 报文格式

(2) IP 报文格式

四、实验条件
(1)报文捕获工具
Wireshark 协议分析软件;
(2)应用协议环境
每个学生机的 PC 机(安装 Windows xp 或者 Windows 2000 操作系统)处于
同一个 LAN
五、实验步骤
1. ICMP 协议分析
(1)先在 cmd 中 ping www.souhu.com

(2)在抓包软件中抓取信息


得到 ICMP 的报文
表格 1、ICMP 报文格式
| 实验项 | ICMP 包字段名称 | 值 | 含义 |
|---|---|---|---|
| 1 | Type | 8 | 报文类型、应答报文 |
| 2 | Code | 0 | 报文编码 |
| 3 | Checksum | 0x4d50 [correct] | 校验和 |
| 4 | Identifier (BE) | 1 (0x0001) | 标识符 |
| 5 | Sequence number (BE) | 11 (0x000b) | 序列号 |
2. IP 协议分析
(1)在 cmd 中 ping 一个主机名 在抓包软件中获取信息 同 1

| 实验项 | IP 包字段名称 | 值 | 含义 |
|---|---|---|---|
| 1 | Version | 4 | 版本为 4,IPV4 |
| 2 | Differentiated Services | 0x00 (DSCP:Default;ECN:0x00 :Not-ECT) | 区分服务领域 |
| 3 | Header Length | 20 | 头部长度,指向数据开始的位置,这个域的最小合法值是 5 |
| 4 | Total Length | 60 | 总长 |
| 5 | Identification | 0xc0f1 (49393) | 标识符 |
| 6 | Flags | 0x00 | 标记字段,第 1 位不能使用,第 2 位是 DF 位,当 DF 为 1 时,表示路由器不允许分段处理,为 0 时,表示允许分段处理。 第 3 位是 MF 位,当 MF 为 1 时表示不是最后一个分段,为 0 时表示是最后一个分段。 |
| 7 | Fragment offset | 0 | 分段偏移,表示是首段的偏移。以 8 个字节为偏移单位。 |
| 8 | Time to live | 128 | 生存期 |
| 9 | Protocol | ICMP (1) | 协议,指定了数据包中的数据类型 |
| 10 | Header checksum | 0x594d | 头部校验和,确保数据的正确性 |
| 11 | Destination | 47.74.78.36 | 目的地址 |
| 12 | Source | 192.168.0.108 | 源地址 |
六、思考题
(1)为什么 Ping 127.0.0.1 时,不能捕获 ICMP 报文?如果运行 ping 本机地址能收到报文吗?
答:ping 127.0.0.1 的时候,数据包根本没有到达网口,所以捕获不到 ICMP 报文,在 ping 本机的时候,虽然是用这种办法来判断网卡是否正常工作,但实际上并没有发送到网卡,也就是说,ping 本机也收不到 ICMP 报文,两者都是经过环路来进行处理。
(2)能否在 WINDOWS 操作系统下进行设置,使得主机收到 ICMP 报文后不响应呢?
答:能! 在 windows 系统中打开控制面板 ——windows 防火墙 —— 开启高级 ——ICMP—— 设置中
在高级设置窗口选择 ICMP 选项卡,进行相应设置
【计算机网络】IP 协议与 ICMP 协议分析
Martin_Luo233 已于 2022-05-13 20:44:37 修改
一、实验目的
1、分析 IP 协议与 IP 数据报;
2、分析 ICMP 协议。
二、实验环境
与因特网连接的计算机,操作系统为 Windows,安装有 Wireshark、IE 或其他浏览器。
三、预备知识
四、实验步骤
1、IP 协议分析
(1)在命令提示符中,利用 ipconfig -all 查看自己主机的 ip 及 MAC 地址,查看自己的网关 ip 地址并记录。(物理地址 : C8-D9-D2-19-FC-4E,IPv4 地址: 10.0.132.12,默认网关: 10.0.132.254)
(2)运行 wireshark 抓包分析工具,在命令提示符输入”ping 网关地址”,命令运行结束后,停止抓包。在 wireshark 过滤栏中,设置过滤条件过滤从网关 ip 地址到本机 ip 地址的数据包,查看捕获数据包的 ip 协议分组结构,截图并记录下表。
| 版本 | 首部长度 | 区分服务 | 总长度 |
|---|---|---|---|
| 4 | 20bit(5) | 0x00(0) | 60 |
| 标识 | 标记 | 片偏移 | |
| 0x000085ca (34250) | 0x00 | 0 | |
| 生存时间 | 协议 | 首部校验和 | |
| 255 | 01(ICMP) | 0x000018ec [validation disabled] | |
| 源地址 | 目的地址 | ||
| 10.0.132.254 | 10.0.132.12 |
(3)根据捕获的数据包信息思考并回答以下问题:
-
首部长度是如何计算的?总长度是如何计算的?
IP 首部固定部分有 20 字节,除非含有选项部分。故最小长度为 20 字节。首部长度是指 IP 首部占 32bit 字的数目,包括选项 (如果有)。首部长度本身为 4bit 字段,能表示的二进制最大数为 1111,换算成十进制为 15,即首部最长为 15 个 32bit 长度,即最大长度 60 字节。
-
生存时间取值是多少?表示什么含义?找到从 202.115.32.43 发送给本机 ip 的数据包,查看 ip 报头中的生存时间取值,与上表中的生存时间取值相比有什么变化?说明了什么?
生存时间 (TTL) 是 IP 协议包中的一个值,它告诉网络路由器包在网络中的时间是否太长而应被丢弃。有很多原因使包在一定时间内不能被传递到目的地。例如,不正确的路由表可能导致包的无限循环。一个解决方法就是在一段时间后丢弃这个包,然后给发送者一个报文,由发送者决定是否要重发。TTL 的初值通常是系统缺省值,是包头中的 8 位的域。TTL 的最初设想是确定一个时间范围,超过此时间就把包丢弃。由于每个路由器都至少要把 TTL 域减一,TTL 通常表示包在被丢弃前最多能经过的路由器个数。当记数到 0 时,路由器决定丢弃该包,并发送一个 ICMP 报文给最初的发送者。
-
协议字段表示什么?本实验中协议字段为什么是这个取值?
-
版本:即图中的 “Version 4”,表示 IP 的版本号,4 比特
-
首部长度:即图中的 “Header length” 的这段,表示 IP 数据包头长度,4 比特,IP 数据包头最短为 20 字节,但是其长度可变,具体长度取决于可选项字段的长度。
-
优先级与服务类型:即图中 “DIfferentiated services field” 这段,用于表示数据包的优先级和服务类型,8 比特。通过在数据包中划分一定的优先级,用于实现 Qos(服务质量)的要求
-
总长度:即图中 的 “Total length” 这段,用以指示整个 IP 数据包的长度,16 比特。最长为 65535 字节,包括包头和数据。
-
标识符:即图中的 “Identification” 这段,表示 IP 数据包的标识符,16 比特。当 IP 对上层数据进行分片时,它将给所有的分片分配一组编号,然后将这些编号放入标识符字段中,保证分片不会被错误的重组。标识符字段用于标识一个数据包,以便接收节点可以重组被分片的数据包。
-
标志:即图中的 “Flags”,标志字段,3 比特,标志和分片一起被用来传递信息。例如,当数据包从一个以太网发送到另一个以太网时,指示对当前的包不能进行分片或者一个包被分片后指示在一系列的分片中最后一个分片是否已发出。
-
段偏移量:即图中的 “fragment offset”,该字段用于表示段偏移量,13 比特。段偏移量中包含的信息是在一个分片序列中如何将各分片重新连接起来。
-
TTL:即图中的 “time to live”,该字段用于表示 IP 数据包的生命周期,8 比特。该字段包含的信息是防止一个数据包在网络中无限循环的转发下去。
TTL 值对应于一个数据包通过路由器的数目。一个数据包没经过一个路由器,TTL 将减去 1. 当 TTL 值为 0 时,数据包将被丢弃。
-
协议号:即图中的 “Protocol”,协议字段,8 比特。该字段用以指示在 IP 数据包中封装的是哪个协议,是 TCP 还是 UDP,tcp 的协议号是 6,UDP 的协议号是 17 ,这里我们看到的是 TCP 协议号是 6。
-
首部校验和:即图中的 “Header checksum status”, 该字段用于表示校验和,16 比特。校验和是 16 位的错误检测字段。目的主机和网络中的每个网关都要重新计算包头的校验和,就如同源主机所做的一样。如果数据没有被改动过,两个计算结果应该是一样的。
-
启动抓包,“ping 本网络广播地址”,停止抓包。截图并回答:ping 命令是否有回应?从哪一台主机产生的回应?。
请求超时
-
启动抓包,“ping 127.0.0.1”,通过设置过滤器,尝试找到目的地址为 127.0.0.1 的数据包。截图并回答:是否能找到?为什么?
不能找到
因为默认情况下,Wireshark 无法捕获 127.0.0.1 的报文
-
启动抓包,“ping 192.168.31.1 –l 3000”,通过设置过滤器,找到本主机发出的第一个 3000 字节的 3 个数据包分片,截图并记录下表。
分片 1 分片 2 分片 3 总长度 1500 1500 68 标识 0x00003d07 0x00003d07 0x00003d07 MF 标志 Set Set Not set DF 标志 Not set Not set Not set 片偏移 0 1480 2960
根据捕获的数据包信息回答以下问题:
-
原始数据包是如何被划分成不同大小分片的?本机的 MTU 可能是多少?
分片和重新组装的过程对传输层是透明的,其原因是当 IP 数据报进行分片之后,只有当它到达目的站时,才可进行重新组装,且它是由目的端的 IP 层来完成的。分片之后的数据报根据需要也可以再次进行分片。IP 分片和完整 IP 报文差不多拥有相同的 IP 头,ID 域对于每个分片都是一致的,这样才能在重新组装的时候识别出来自同一个 IP 报文的分片。在 IP 头里面,16 位识别号唯一记录了一个 IP 包的 ID,具有同一个 ID 的 IP 分片将会重新组装;而 13 位片偏移则记录了某 IP 片相对整个包的位置;而这两个表中间的 3 位标志则标志着该分片后面是否还有新的分片。这三个标志就组成了 IP 分片的所有信息,接受方就可以利用这些信息对 IP 数据进行重新组织。
1500
-
不同分片的标识字段取值是否一致?为什么?
是
IP 软件在存储器中维持一个计数器,每产生一个数据包,计数器就加 1,并将此值赋给标识字段。但这个 “标识” 并不是序号,因为 IP 是无连接服务,数据包不存在按序接收的问题。当数据包由于长度超过网络的 MTU 而必须分片时,同一个数据包被分成多个片,这些片的标识都一样,也就是数据包这个标识字段的值就被复制到所有的数据包分片的标识字段中。相同的标识字段的值使分片后的各数据包片最后能正确地重装成为原来的数据包。
-
不同分片的 MF 和 DF 标志位取值有何不同?为什么?
DF=0 表示可以分片,MF = 1 表示后面还有分片,MF = 0 表示后面没有分片
-
每个分片的片偏移分别是多少?片偏移的含义是什么?
0 1480 2960
2、ICMP 协议的分组结构
(1)查看上述抓包结果中的第 3 个分片的 ICMP 数据包,填写下表:
| 类型 | 代码 | 检验和 | 标识符 | 序号 | 数据长度 |
|---|---|---|---|---|---|
| IPv4 | 0 | 0xcfbd [correct] | 1-256 | 17-4352 | 68 |
回答以下问题:
-
该 ICMP 报文属于哪种类型?
查询报文
-
重新设置过滤条件,找到 ICMP echo reply 报文,其类型号是多少?
8
-
3000 字节的数据分成了 3 片,每个分片中都有 IP 头部信息吗?为什么?
有 ip 头部信息出现在每个 ip 报文数据报中,用于指定 ip 通信的远端 ip 地址,目的端 ip 地址,指导 ip 分片和重组,以及部分的通信行为。
-
3000 字节的数据分成了 3 片,每个分片中都有 ICMP 头部信息吗?为什么?
有 ICMP 是在 IP 数据报的内部被传输的,紧跟着 IP 报文的首部,如果 IP 首部有可选部分,则紧跟着可选部分
-
启动抓包,在命令提示符中输入 “ping baidu.com -i 4”(节点数最多为 4),运行结束后停止抓包,设置过滤器,显示 ICMP 报文,截图并回答:
-
观察 TTL exceeded 报文, 该 ICMP 报文的类型号和代码分别是多少,代表的含义是什么?
类型号 8 代码 0
-
观察 TTL exceeded 报文的 ICMP 数据部分,请问该数据部分包括了哪些部分?为什么这样?
源端口抑制报文路由器在处理报文时会有一个缓存队列。如果超过了最大缓存队列,将无法处理,从而丢弃报文,并向源发送一个 ICMP 源冷却报文 (Type 为 4),告诉对方不在接收报文了。
超时报文
网络传输 IP 数据报的过程中,如果 IP 数据报的 TTL 值逐渐递减为 0 时,需要丢弃数据报,这时候路由器需要向源发送方发送 ICMP 超时报文 (Type 为 11),code 为 0,表示传输过程中超时了.
参数错误报文 (Parameter Problem Message)
当路由器或主机处理数据报文时,发现因为报文头的参数错误而不得不丢弃报文时,需要向源发送方发送参数错误报文 (Type 为 12). 当错误为 0 时,报文中的 Pointer 指出错误的字节位置
改变路由重定向 (Redirect Message)
当路由收到 IP 数据报,发现数据报的目的地址在路由表中没有,他就会发 ICMP 重定向报文 (Type 为 5) 个源发送方,告诉它发送的地址不在
回送请求和回答
Type 为 8 是请求回显报文 (Echo);Type (0) 是回显应答报文。请求回显包或回显应答报文属于查询报文,Ping 就是用这种报文进行查询和应答的。
时间戳请求和回答
时间戳报文时用来记录收发以及传输时间的报文 Originate Timestamp 记录的是发送方发送报文的时刻。Receive Timestamp 记录的是接收方收到的报文的时刻;Transmit Timestamp 表示回显这最后发送报文的时刻。
ICMP 协议分析实验
半夏风情于 2020-11-23 17:06:55 发布
1.ICMP 协议介绍
ICMP(Internet Control Message Protocol)是因特网控制报文协议 [RFC792] 的缩写,是因特网的标准协议。ICMP 允许路由器或主机报告差错情况和提供有关信息,用以调试、监视网络。
(1)ICMP 的报文格式

图 1 ICMP 回送请求和应答报文格式
在网络中,ICMP 报文将封装在 IP 数据报中进行传输。由于 ICMP 的报文类型很多,且又有各自的代码,因此,ICMP 并没有一个统一的报文格式供全部 ICMP 信息使用,不同的 ICMP 类别分别有不同的报文字段。
ICMP 报文只在前 4 个字节有统一的格式,即类型、代码和校验和 3 个字段。接着的 4 个字节的内容与 ICMP 报文类型有关。图 1 描述了 ICMP 的回送请求和应答报文格式,ICMP 报文分为首部和数据区两大部分。其中:
-
类型:一个字节,表示 ICMP 消息的类型,内容参见表 1;
-
代码:一个字节,用于进一步区分某种类型的几种不同情况;
-
校验和:两个字节,提供对整个 ICMP 报文的校验和;
(2)ICMP 的报文类型
ICMP 报文的种类可以分为 ICMP 差错报告报文和 ICMP 询问报文两种,表 5 列出了已定义的几种 ICMP 消息。
表1 ICMP 消息及类型码
| 类型的值 | ICMP消息类型 |
|---|---|
| 0 | 回送 (Echo) 应答 |
| 3 | 目的站点不可达 |
| 4 | 源站点抑制 (Source quench) |
| 5 | 路由重定向 (Redirect) |
| 8 | 回送请求 |
| 9 | 路由器询问 |
| 10 | 路由器通告 |
| 11 | 超时报告 |
| 12 | 参数出错报告 |
| 13 | 时间戳 (Timestamp) 请求 |
| 14 | 时间戳 (Timestamp) 应答 |
| 15 | 信息请求 |
| 16 | 信息应答 |
| 17 | 地址掩码 (Address mask) 请求 |
| 18 | 地址掩码 (Address mask) 应答 |
说明
-
差错报告报文:主要有目的站点不可达、源站点抑制、超时、参数问题和路由重定向5种。
-
ICMP询问报文:有回送请求和应答、时间戳请求和应答、地址掩码请求和应答以及路由器询问和通告 4 种。
(3)ICMP 常见的消息类型
下面介绍几种常用的 ICMP 消息类型。
- 目的站点不可达(3)
产生 “目的站点不可达” 的原因有多种。在路由器不知道如何到达目的网络、数据报指定的源路由不稳定、路由器必须将一个设置了不可分段标志的数据报分段等情况下,路由器都会返回此消息。如果由于指明的协议模块或进程端口未被激活而导致目的主机的 IP 不能传送数据报,这时目的主机也会向源主机发送 “目的站点不可达” 的消息。
为了进一步区分同一类型信息中的几种不同情况,在 ICMP 报文格式中引入了代码字段,该类型常见信息代码及其意义如下:
表 2 ICMP 类型 3 的常见代码
| 代码 | 描述 | 处理 |
|---|---|---|
| 0 | 网络不可达 | 无路由到达主机 |
| 1 | 主机不可达 | 无路由到达主机 |
| 2 | 协议不可用 | 连接被拒绝 |
| 3 | 端口不可达 | 连接被拒绝 |
| 4 | 需分段但 DF 值为 0 | 报文太长 |
| 5 | 源路由失败 | 无路由到达主机 |
-
源站点抑制 (4)
此消息类型提供了流控制的一种基本形式。当数据报到达得太快,路由器或主机来不及处理时,这些数据报就必须被丢弃。丢弃数据报的计算机就会发一条 “源站点抑制” 的 ICMP 报文。“源站点抑制” 消息的接收者就会降低向该消息发送站点发送数据报的速度。
-
回送请求 (8)和回送应答 (0)
这两种 ICMP 消息提供了一种用于确定两台计算机之间是否可以进行通信的机制。当一个主机或路由器向一个特定的目的主机发出 ICMP 回送请求报文时,该报文的接收者应当向源主机发送 ICMP 回送应答报文。
-
时间戳请求 (15)和时间戳应答 (16)
这两种消息提供了一种对网络延迟进行取样的机制。时间戳请求的发送者在其报文的信息字段中写入发送消息的时间。接收者在发送时间戳之后添加一个接收时间戳,并作为时间戳应答消息报文返回。
-
地址掩码请求 (17)和地址掩码应答 (18)
主机可以用 “地址掩码请求” 消息来查找其所连接网络的子网掩码。主机在网络上广播请求,并等待路由器的包含子网掩码的 “地址掩码应答” 消息报文的到来。
-
超时报告 (11)
当一个数据报的 TTL 值到达 0 时,路由器将会给源主机发送超时报文。
2.基于 ICMP 的应用程序
目前网络中常用的基于 ICMP 的应用程序主要有 ping 命令和 tracert 命令。
(1)ping 命令
Ping 命令是调试网络常用的工具之一。它通过发出 ICMP Echo 请求报文并监听其回应来检测网络的连通性。图 2 显示了 Ethereal 捕获的 ICMP Echo 请求报文和应答报文。

图 2 ICMP Echo 请求报文和应答报文
Ping 命令只有在安装了 TCP/IP 协议之后才可以使用,其命令格式如下:
ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS] [-r count] [-s count] [[-j host-list] | [-k host-list]] [-w timeout] target_name
这里对实验中可能用到的参数解释如下:
-
-t :用户所在主机不断向目标主机发送回送请求报文,直到用户中断;
-
-n count:指定要 Ping 多少次,具体次数由后面的 count 来指定 ,缺省值为 4;
-
-l size:指定发送到目标主机的数据包的大小 ,默认为 32 字节,最大值是 65,527;
-
-w timeout:指定超时间隔,单位为毫秒;
-
target_name:指定要 ping 的远程计算机。
3.实验环境与说明
(1)实验目的
掌握 ping 和 tracert 命令的使用方法,了解 ICMP 协议报文类型及其作用。
执行 ping 和 tracert 命令,分别截获报文,分析截获的 ICMP 报文类型和 ICMP 报文格式,理解 ICMP 协议的作用。
(2)实验设备和连接
实验设备和连接图如图 3 所示,一台锐捷 R1760 路由器连接 2 台 PC 机,分别命名为 PC1、PC2。

图 3 ICMP 协议分析实验连接图
4.实验步骤
步骤 1:按照如图 22 所示连接好设备;
步骤 2:完成路由器和 PC1、PC2 的相关配置;(编者注:实验室中任何一台 PC 都可以作为模型中的 PC1。PC2 用 202.202.43.125 等另一网段机器代理即可。)
路由器的配置参考如下:
router#configure terminal
router (config)#interface fastEthernet 1/0
router (config-if)#ip address 172.16.10.1 255.255.255.0
router (config-if)#no shutdown
router (config-if)#interface fastEthernet 1/1
router (config-if)#ip address 172.16.20.1 255.255.255.0
router (config-if)#no shutdown
PC1 和 PC2 的 IP 地址、子网掩码、网关按照图中有关参数配置。
步骤 3:分别在 PC1 和 PC2 上运行 wireshark,开始截获报文,为了只截获和实验内容有关的报文,将 wireshark 的 Captrue Filter 设置为 “No Broadcast and no Multicast ”;
步骤 4:在 PC1 上以 PC2 为目标主机,在命令行窗口执行 Ping 命令;
请写出执行的命令:ping 172.27.64.119
步骤 5:停止截获报文,将截获的结果保存为 ICMP-1 - 学号,分析截获的结果,回答下列问题:
1)您截获几个 ICMP 报文?分别属于那种类型?
总共截获 8 个 ICMP 报文
分别属于回送请求和回送应答两种类型
2)分析截获的 ICMP 报文,查看表 2 中要求的字段值,填入表中。
表 2 ICMP 报文分析
报文号 源 IP 目标 IP ICMP 报文格式
类型 代码 标识 序列号
1436 172.27.64.120 172.27.64.119 8 00 0x0001 1
1437 172.27.64.119 172.27.64.120 0 00 0x0001 1
1528 172.27.64.120 172.27.64.119 8 00 0x0001 2
1529 172.27.64.119 172.27.64.120 0 00 0x0001 2
1578 172.27.64.120 172.27.64.119 8 00 0x0001 3
1579 172.27.64.119 172.27.64.120 0 00 0x0001 3
1629 172.27.64.120 172.27.64.119 8 00 0x0001 4
1630 172.27.64.119 172.27.64.120 0 00 0x0001 4
3)分析在上表中哪个字段保证了回送请求报文和回送应答报文的一一对应,仔细体会 Ping 命令的作用。
序号保证了请求报文和回送报文的一一对应,ping 可以用来检验网络能否通。
步骤 6:在 PC1 上运行 wireshar 开始截获报文;
步骤 7:在 PC1 上执行 Tracert 命令,向一个本网络中不存在的主机发送数据报,如:Tracert 百度

步骤 8:停止截获报文,将截获的结果保存为 ICMP-2 - 学号,分析截获的报文,
回答下列问题:
1)截获了报文中哪几种 ICMP 报文?其类型码和代码各为多少?
共截获了 3 种 ICMP 报文
Echo request 0 0
Echo reply 8 0
Time-to-live exceeded 11 0
2)在截获的报文中,超时报告报文的源地址是多少?这个源地址指定设备和 PC1 有何关系?
源地址 39.156.27.1,这个地址是百度 IP39.156.66.14 的网关地址
3)通过对两次截获的 ICMP 报文进行综合分析,仔细体会 ICMP 协议在网络中的作用。
ICMP 报文有两种:差错报告报文和询问报文。其中差错报告报文用来报告差错类型,询问报文用与寻找目标主机应用有 ping、tracert,时间戳可以用来计算 RTT 时间。
via:
-
计算机网络学习:网络层 IP 数据报、ICMP 协议 看一篇就够了!(含具体实验演示)_原始的 icmp 报文长度是多少字节?-优快云 博客
https://blog.youkuaiyun.com/Charzous/article/details/115956836 -
计算机网络实验 ——IP/ICMP 协议分析_为什么运行 ping 127.0.0.1 时,不能捕获到 icmp 报文?如果运行 ping 本机 ip 地址能收 - 优快云 博客
https://blog.youkuaiyun.com/Zeus1125/article/details/105864956 -
【计算机网络】IP 协议与 ICMP 协议分析_实验 3 ip 与 icmp 分析 - 优快云 博客
https://blog.youkuaiyun.com/Martin_Luo233/article/details/124558753 -
实验七 ICMP 协议分析实验_分析在上表 1.8 中哪个字段保证了回送请求报文和回送应答报文的一一对应,仔细体会 pi-优快云 博客
https://blog.youkuaiyun.com/qq_43576794/article/details/110001686
4229

被折叠的 条评论
为什么被折叠?



