1、实验五 Internet 控制报文协议 ICMP实验目的1掌握使用 WIRESHARK 工具对 ICMP 协议进行抓包分析的方法。 2理解不同类型 ICMP 报文的具体意义。3通过实验,进一步了解 ICMP 协议。实验环境1安装 Windows2000/2003Server/XP 操作系统的 PC 计算机一台。2每台 PC 具有一块以太网卡,通过双绞线与局域网相连。3每台 PC 运行网络协议分析软件 WIRESHARK。实验原理ICMP 是 Internet Control Message Protocol(Internet 控制报文协议)的缩写,是TCP/IP 协议族的一个子协议,用于在主机
2、和路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由器是否可用等网络本身的消息。由于IP 网络的不可靠并且不能保证信息传递,因此当发生问题时,通知发送者是很重要的。ICMP 协议提供有关阻止数据包传递的网络故障问题反馈信息的机制,它让 TCP 等上层协议能够意识到数据包没有送达目的地,ICMP 协议提供一种查出灾难性问题的方法。这些灾难性的问题包括“TTL Exceeded”(超过生存时间)和“ 需要分更多的数据段”等。ICMP 协议不报告 IP 校验失败等常见的问题。这是因为假定 TCP 或者其他可靠的协议能够处理这类数据包损坏的问题。而且,如果使用 UDP 等不可靠的协议,
3、我们就不应理会较小数量的数据损失。反之,如果网络有问题则需要立即报告。例如,当 IP 的 TTL 值(IP 生存时间)将达到零,这就可能是网络的某个部分发生了路由环路问题,这样将没有任何数据包能发送到目的地。端点系统需要了解这些类型的故障。ICMP 是一种发送各种消息,用于报告网络状态的协议,而非仅仅是简单的 ping(连通性测试程序) 。回应请求(Echo Request)仅是 ICMP 协议提供的众多消息之一。Ping 信息可以被过滤掉。但是,大多数 ICMP 消息类型是 IP、TCP 和其他协议正常运行所需要的。ICMP 协议本身非常复杂。每一种类型的 ICMP 消息也称“主要类型(Ma
4、jor Type)”,它拥有自己的“ 子类型编码(Minor Codes) ”。ICMP 协议工作在第 3 层,因此,它能够在互联网上路由。一个 ICMP 数据包实际上就是一个 IP 数据部分包含 ICMP 协议数据的 IP 数据包。每一个 ICMP 消息都将包含引发这条 ICMP消息的数据包的完全 IP 包头,这样端点系统就会知道实际上哪一个数据包没有发送到目的地。ICMP 协议消息包含不会变化的 3 个字段,随后是 ICMP 数据,然后是引发此消息的源 IP 数据包包头。不会变化的 3 个字段中,第 1 个字段包含 ICMP类型(主要类型) 、第 2 个字段包含了类型代码、第 3 个字段是
5、 ICMP 消息校验值。ICMP 协议在某些情况下不会发送错误信息。ICMP 不会对 ICMP 信息做出响应。如果 ICMP 回应其他 ICMP 消息,这些消息的数量会爆炸性增长而演变为一场 ICMP 消息风暴。为了防止出现广播风暴,ICMP 消息也不会回应一个广播或者多播地址。各种 ICMP 的报文格式如下: 目的不可达报文 类型:3 代码:0 至 12 检验和未使用(全 0)收到的 IP 数据报的一部分,包括 IP 首部以及数据报数据的前 8 个字节 源端抑制报文 类型:4 代码:0 检验和未使用(全 0)收到的 IP 数据报的一部分,包括 IP 首部以及数据报数据的前 8 个字节 超时报
6、文 类型:11 代码:0 或 1 检验和未使用(全 0)收到的 IP 数据报的一部分,包括 IP 首部以及数据报数据的前 8 个字节 参数问题 类型:12 代码:0 或 1 检验和指针 未使用(全 0)收到的 IP 数据报的一部分,包括 IP 首部以及数据报数据的前 8 个字节 改变路由 类型:5 代码:0 到 3 检验和目标路由器 IP 地址收到的 IP 数据报的一部分,包括 IP 首部以及数据报数据的前 8 个字节 回送请求和回答 类型:8 或 0 代码:0 检验和标识符 序号由请求报文发送;由回答报文重复 时间戳请求和回答 类型:13 或 14 代码:0 检验和标识符 序号原始时间戳接收
7、时间戳发送时间戳 地址掩码请求和回答 类型:17 或 18 代码:0 检验和标识符 序号地址掩码 路由询问和通告 类型:10 代码:0 检验和标识符 序号类型:9 代码:0 检验和地址数 地址项目长度 寿命路由器地址 1优先级 1路由器地址 2优先级 2.实验步骤1、ping 程序使用的 ICMP 信息包启动 WIRESHARK 协议分析工具,选择“Capture”“Start” ,开始数据包的抓取,接下来点击“开始”菜单,在运行中输入“cmd” ,进入 Windows 系统的命令行模式,在命令行模式下输入“ping n 10 172.16.”,ping 结束后,停止 WIRESHARK 抓包
8、程序,并在 WIRESHARK 中的“Filter”域中输入关键字“ICMP” ,点击“Apply”按钮,将非 ICMP 数据包过滤掉。如图 4-2 所示。在中间窗口的“Internet Protocol”中可以看到,协议号为 01,表明是一个ICMP 格式的数据包。WIRESHARK 捕获的 ping 程序数据包查看数据包内容窗口中的“Internet Control Message Protocol”,可以看到该ICMP 数据包的协议类型为 8(Type 8),代码为 0(Code 0),表明是一个 ICMP 请求(Request)数据包。如图 4-3 所示,请注意其他字段 “Identi
9、fier”, “Sequence number”和“Data”的内容。WIRESHARK 捕获的 ping 程序 ICMP 包扩展分析查看这些 ICMP 协议数据包,回答以下问题:(1)本机的 IP 地址是多少?目标主机的 IP 地址是多少?(2)为什么 ICMP 协议数据包没有源端口号和目的端口号?(3)查看本机发送的每个 Request 数据包,回答这些 ICMP 数据包的类型号(Type)和代码(Code)是多少?这些 ICMP 数据包中的其他字段有哪些? “Checksum”、“Sequence”和“Identifier”字段分别占多少字节?(4)查看回复的 Reply 数据包,它们的
10、类型号(Type) 和代码(Code) 是多少?这些ICMP 数据包中还有其他哪些字段?“Checksum” 、 “Sequence”和“Identifier”字段分别占多少字节?2、traceroute 程序使用的 ICMP 信息包启动 WIRESHARK 协议分析工具,选择“Capture”“Start” ,开始抓取数据包。然后点击“开始”菜单,在运行中输入“cmd” ,进入 Windows 系统的命令行模式,在命令行模式下输入“tracert ” ,如图所示。tracert 程序tracert 命令结束后,停止 WIRESHARK 抓包程序,并在 WIRESHARK 中的“Filter
11、”域中输入关键字“ICMP” ,点击“Apply ”按钮,将非 ICMP 数据包过滤掉。如图所示。WIRESHARK 捕获的 tracert 程序数据包分析查看这些 ICMP 协议数据包,回答以下问题:(1)本机的 IP 地址是多少?目标主机的 IP 地址是多少?(2)查看 echo 数据包,与 ping 所使用的 ICMP 包比较一下,看看是否相同,有什么区别?(3)查看本 error(Time-to-live Exceeded)数据包,这些数据包是不是比 echo 数据包多了些字段?这些字段的内容是什么?(4)查看最后 3 个 error 数据包,这些包与其他的 error 数据包有什么不同?为什么?思考题1 ICMP 的用途是什么?2 为什么要限制由失效的 ICMP 差错报文再产生一个 ICMP 报文?3 ping 程序和 tracert 程序分别使用什么样的 ICMP 类型数据包?4主机 A 向主机 B 发送数据报。主机 B 从未收到该数据报,而主机 A 也从未收到出问题的通知。试给出可能发生的情况的两种不同解释。5试用表说明,什么样的 ICMP 报文是由路由器发送出的,什么样的 ICMP 报文是由目的主机发送出的。