资源描述
实验五 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协议族的一个子协议,用于在主机和路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由器是否可用等网络本身的消息。由于IP网络的不可靠并且不能保证信息传递,因此当发生问题时,通知发送者是很重要的。ICMP协议提供有关阻止数据包传递的网络故障问题反馈信息的机制,它让TCP等上层协议能够意识到数据包没有送达目的地,ICMP协议提供一种查出灾难性问题的方法。这些灾难性的问题包括“TTL Exceeded”(超过生存时间)和“需要分更多的数据段”等。ICMP协议不报告IP校验失败等常见的问题。这是因为假定TCP或者其他可靠的协议能够处理这类数据包损坏的问题。而且,如果使用UDP等不可靠的协议,我们就不应理会较小数量的数据损失。
反之,如果网络有问题则需要立即报告。例如,当IP的TTL值(IP生存时间)将达到零,这就可能是网络的某个部分发生了路由环路问题,这样将没有任何数据包能发送到目的地。端点系统需要了解这些类型的故障。ICMP是一种发送各种消息,用于报告网络状态的协议,而非仅仅是简单的ping(连通性测试程序)。回应请求(Echo Request)仅是ICMP协议提供的众多消息之一。Ping信息可以被过滤掉。但是,大多数ICMP消息类型是IP、TCP和其他协议正常运行所需要的。
ICMP协议本身非常复杂。每一种类型的ICMP消息也称“主要类型(Major Type)”,它拥有自己的“子类型编码(Minor Codes)”。ICMP协议工作在第3层,因此,它能够在互联网上路由。一个ICMP数据包实际上就是一个IP数据部分包含ICMP协议数据的IP数据包。每一个ICMP消息都将包含引发这条ICMP消息的数据包的完全IP包头,这样端点系统就会知道实际上哪一个数据包没有发送到目的地。
ICMP协议消息包含不会变化的3个字段,随后是ICMP数据,然后是引发此消息的源IP数据包包头。不会变化的3个字段中,第1个字段包含ICMP类型(主要类型)、第2个字段包含了类型代码、第3个字段是ICMP消息校验值。
ICMP协议在某些情况下不会发送错误信息。ICMP不会对ICMP信息做出响应。如果ICMP回应其他ICMP消息,这些消息的数量会爆炸性增长而演变为一场ICMP消息风暴。为了防止出现广播风暴,ICMP消息也不会回应一个广播或者多播地址。
各种ICMP的报文格式如下:
· 目的不可达报文
类型:3
代码:0至12
检验和
未使用(全0)
收到的IP数据报的一部分,包括IP首部以及数据报数据的前8个字节
· 源端抑制报文
类型:4
代码:0
检验和
未使用(全0)
收到的IP数据报的一部分,包括IP首部以及数据报数据的前8个字节
· 超时报文
类型: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
检验和
标识符
序号
原始时间戳
接收时间戳
发送时间戳
· 地址掩码请求和回答
类型: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抓包程序,并在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所示,请注意其他字段“Identifier”,“Sequence number”和“Data”的内容。
WIRESHARK捕获的ping程序ICMP包扩展
分析查看这些ICMP协议数据包,回答以下问题:
(1)本机的IP地址是多少?目标主机的IP地址是多少?
(2)为什么ICMP协议数据包没有源端口号和目的端口号?
(3)查看本机发送的每个Request数据包,回答这些ICMP数据包的类型号(Type)和代码(Code)是多少?这些ICMP数据包中的其他字段有哪些?“Checksum”、“Sequence”和“Identifier”字段分别占多少字节?
(4)查看回复的Reply数据包,它们的类型号(Type)和代码(Code)是多少?这些ICMP数据包中还有其他哪些字段?“Checksum”、“Sequence”和“Identifier”字段分别占多少字节?
2、traceroute程序使用的ICMP信息包
启动WIRESHARK协议分析工具,选择“Capture”à“Start”,开始抓取数据包。然后点击“开始”菜单,在运行中输入“cmd”,进入Windows系统的命令行模式,在命令行模式下输入“tracert ”,如图所示。
tracert程序
tracert命令结束后,停止WIRESHARK抓包程序,并在WIRESHARK中的“Filter”域中输入关键字“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报文是由目的主机发送出的。
展开阅读全文