网际控制报文协议 ICMP 分析-计算机网络
一、 实验目的
1.1 了解网际控制报文协议 ICMP;
1.2 学习扑获网际控制报文协议 ICMP 分组,并正确分析其类型。
1.3 了解 ping 、tracert 命令的工作原理。
二、 实验环境
2.1 Wireshark 网络分析软件
2.2 实验文件“DHCP-ICMP 数据.cap”
三、 实验内容
3.1 网际控制报文协议 ICMP
为了提高 IP 数据报交付成功的机会,在网际层使用了网际控制报文协议 ICMP(Internet Control Message Protocol)。ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP 不是高层协议,而是 IP 层的协议。ICMP 报文作为 IP 层数据报的数据,加上 IP 数据报的首部,组成 IP 数据报发送出去。
ICMP 报文的种类有两种,即 ICMP 差错报告报文和 ICMP 询问报文。
ICMP 报文的前 4 个字节是统一的格式,共有三个字段:即类型、代码和检验和。类型、代码字节的内容表明了 ICMP 的类型,常见的有:类型 8、代码 0:回显请求;类型 0、代码 0:回显应答;类型 11、代码 0:超时。检验和是包括数据在内的整个 ICMP 数据包的校验和,其计算方法和 IP 头部校验和的计算方法是一样的。
除此之外后面的字段格式针对不同的类型代码内容会有所不同。对于 ICMP 回显请求和应答报文来说,接下来是 16bits 标识符(Identifier)字段:用于标识本 ICMP 进程,区分不同的 PING 进程。对于 windows 系统来说,具体参考如下:
Microsoft Windows NT - 256
Microsoft Windows 98/98SE - 512
Microsoft Windows 2000 – 512
最后是16bits序列号字段:用于判断回显应答数据报。实际上windows系统根据SequenceNumber field 区分 ping 进程。
ICMP 差错报告报文共有 5 种:
n 终点不可达 (错误数据报……)
n 源点抑制(Source quench)
n 时间超过 (TTL=0……)
n 参数问题
n 改变路由(重定向)(Redirect)
跟踪路由 tracert:
n 源主机向目的主机连续发送 IP 数据报
n 分别设置 TTL=1,2,….
n 未到目的主机的情况:因 TTL=0,中间路由器返回给源主机”ICMP 时间超过”差错报文
n 到达目的主机:或者由目的主机返回给源主机”ICMP 终点不可达”差错报文(因 UDP端口号非法);或者由目的主机返回给源主机”ICMP 回显回答”报文(类似于 ping)。

3.2 扑获 ICMP 分组,并正确分析其内容
3.2.1 依次执行以下命令:
ipconfig /release ;(释放本地网卡 IP 地址)
arp –d ; 删除 ARP 表中所有的内容
ipconfig /flushdns ;删除本机上的 DNS 域名解析列表
启动 Ethereal,扑获当前网络接口的数据分组。执行以下命令:
ipconfig /renew;重新配置本地网卡 IP 地址,执行 DHCP 协议
ping www.sina.com
tracert www.163.com
结束扑获,并保存该文件,为“DHCP-ICMP 数据.cap”,过程见下图:

3.2.2 ICMP 数据的分析
上述的 ping www.sina.com、tracert www.163.com 分别执行了 ICMP 协议,观察文件可以发现 ping www.sina.com 对应的是 46-61 之间的 4 对 ICMP 应答分组;tracert www.163.com 对应的是 98-246 之间的 ICMP 应答分组。

ICMP 报文的前 4 个字节是统一的格式,共有三个字段:即类型、代码和检验和。
ICMP 类型:8,回送请求
代码:0,ping
检验和:465c, 检验整个报文正确与否
其它字段内容:标识符、序列号、数据内容等

类型:0,应答回复
代码:0,ping
检验和:4e5c, 检验整个报文正确与否
其它字段内容:标识符、序列号、数据内容等
下面举例分析 tracert www.163.com 的过程

类型:11
代码:0,时间超过错误
检验和:f4ff, 检验整个报文正确与否
其它字段内容: IP 首部、原始 IP 数据报(分组 98)中前 8 字节
如果发现如下图 6 的对 ping 报文的标识/序号字段解码显示(BE 与 LE),是因为wireshark 考虑到 window 系统与 Linux 系统发出的 ping 报文(主要指 ping 应用字段而非包含 IP 头的 ping 包)的字节顺序不一样(windows 为 LE:little-endian byte order,即低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。Linux 为 BE:big-endian)。

四、 实验问题
分析实验文件“DHCP-ICMP 数据.cap”的相关数据报,回答以下问题:
1. 执行“ping www.sina.com”对应的数据报有哪些?并参照 3.2.2 的方法分析每个数
据报 ICMP 协议的内容。
答:
ping www.sina.com 对应的是 46-61 之间的 4 对 ICMP 应答分组;
(1)分组46
ICMP 类型:8,回送请求
代码:0,ping
检验和:465c, 检验整个报文正确与否
其它字段内容:标识符、序列号、数据内容等
(2)分组47
类型:0,应答回复
代码:0,ping
检验和:4e5c, 检验整个报文正确与否
其它字段内容:标识符、序列号、数据内容等
(3)分组53
ICMP 类型:8,回送请求
代码:0,ping
检验和:455c, 检验整个报文正确与否
其它字段内容:标识符、序列号、数据内容等
(4)分组54
类型:0,应答回复
代码:0,ping
检验和:4d5c, 检验整个报文正确与否
其它字段内容:标识符、序列号、数据内容等
(5)分组56
ICMP 类型:8,回送请求
代码:0,ping
检验和:445c, 检验整个报文正确与否
其它字段内容:标识符、序列号、数据内容等
(6)分组57
类型:0,应答回复
代码:0,ping
检验和:4c5c, 检验整个报文正确与否
其它字段内容:标识符、序列号、数据内容等
(7)分组60
ICMP 类型:8,回送请求
代码:0,ping
检验和:435c, 检验整个报文正确与否
其它字段内容:标识符、序列号、数据内容等
(8)分组61
类型:0,应答回复
代码:0,ping
检验和:4b5c, 检验整个报文正确与否
其它字段内容:标识符、序列号、数据内容等
2. 结合实例“ping www.sina.com”给出 ping 命令的原理。
答:
ping的原理是:利用网络上机器IP地址的唯一性,给目标IP地址发送一个数据包,通过对方回复的数据包来确定两台网络机器是否连接相通,时延是多少。例如,我们向sina的ip地址发送一个数据包,sina的服务区收到后回复一个数据包,以此来测定网络的连通性和时延。
3. 执行“tracert www.163.com”对应的数据报有哪些?并参照 3.2.2 的方法分析每个
数据报 ICMP 协议的内容。(注意观察每个数据报的 TTL、ICMP 类型代码)
答:
tracert www.163.com 对应的是 98-246 之间的 ICMP 应答分组;
(1)分组99
类型:11
代码:0,时间超过错误
检验和:f4ff, 检验整个报文正确与否
其它字段内容: IP 首部、原始 IP 数据报(分组 98)中前 8 字节
(2)分组110
类型:11
代码:0,时间超过错误
检验和:f4ff, 检验整个报文正确与否
其它字段内容: IP 首部、原始 IP 数据报(分组 109)中前 8 字节
(3)分组134
类型:11
代码:0,时间超过错误
检验和:f5ff, 检验整个报文正确与否
其它字段内容: IP 首部、原始 IP 数据报(分组 133)中前 8 字节
(4)分组145
类型:11
代码:0,时间超过错误
检验和:7dbf, 检验整个报文正确与否
其它字段内容: IP 首部、原始 IP 数据报(分组 144)中前 8 字节
(5)分组154
类型:11
代码:0,时间超过错误
检验和:506a, 检验整个报文正确与否
其它字段内容: IP 首部、原始 IP 数据报(分组 153)中前 8 字节
(6)分组165
类型:11
代码:0,时间超过错误
检验和:506a, 检验整个报文正确与否
其它字段内容: IP 首部、原始 IP 数据报(分组 163)中前 8 字节
(7)分组177
类型:11
代码:0,时间超过错误
检验和:506a, 检验整个报文正确与否
其它字段内容: IP 首部、原始 IP 数据报(分组 176)中前 8 字节
(8)分组188
类型:11
代码:0,时间超过错误
检验和:506a, 检验整个报文正确与否
其它字段内容: IP 首部、原始 IP 数据报(分组 187)中前 8 字节
(9)分组199
类型:11
代码:0,时间超过错误
检验和:540b, 检验整个报文正确与否
其它字段内容: IP 首部、原始 IP 数据报(分组 197)中前 8 字节
(10)分组208
类型:11
代码:0,时间超过错误
检验和:506a, 检验整个报文正确与否
其它字段内容: IP 首部、原始 IP 数据报(分组 208)中前 8 字节
(11)分组219
类型:11
代码:0,时间超过错误
检验和:506a, 检验整个报文正确与否
其它字段内容: IP 首部、原始 IP 数据报(分组 218)中前 8 字节
(12)分组232
类型:11
代码:0,时间超过错误
检验和:506a, 检验整个报文正确与否
其它字段内容: IP 首部、原始 IP 数据报(分组 230)中前 8 字节
4. 结合实例“tracert www.163.com”给出 tracert 命令的原理。
答:
通过向目标发送不同 IP 生存时间 (TTL) 值的“Internet 控制消息协议 (ICMP)”回应数据包,Tracert诊断程序确定到目标所采取的路由。要求路径上的每个路由器在转发数据包之前至少将数据包上的 TTL 递减 1。数据包上的 TTL 减为 0 时,路由器应该将“ICMP 已超时”的消息发回源系统。例如,tracert www.163.com 向163邮箱发送不同TTL的ICMP回应数据包,在路径上的每个路由器转发数据包之前,TTL递减1,当TTL减为0时,路由器吧ICMP超时的信息发回源地址。