Wireshark软件使用 之 IP与ICMP分析

—. 实验目的

IP和 ICMP协议是 TCP/IP协议簇中的网络层协议,在网络寻址定位、数据分组转发和路由选择等任务中发挥了重要作用。本实验要求熟练使用 Wireshark软件,观察 IP数据报的基本结构,分析数据报的分片;掌握基于 ICMP协议的 ping和 tracert命令及其工作原理。

 

二. 实验内容

启动 Wireshark,捕捉网络命令执行过程中本机接受和发送的数据报。

1.执行 ping命令,观察 IP数据报和 ICMP询问报文的结构:通过Wireshark监视器观察捕获流量中的 ICMP询问报文和 IP数据报的结构。注意比较 ICMP请求帧与回应帧,及其 IP头部数据字段的异同。

2.改变 ping命令的参数,观察 IP数据报分片:更改ping命令参数MTU,使其发出长报文以触发 IP数据报分片,再观察 IP数据报的结构变化。

3.执行 Tracert命令,观察 ICMP差错报文的结构,并分析其工作原理:使用Linux操作系统提供的 tracert6命令(或者 Windows系统提供的 tracert命令),捕获和分析该命令所产生的 IP数据报,特别注意相关的 ICMP差错报文。结合捕获的具体数据,画出命令执行过程中数据交互的示意图,掌握 tracert的工作原理。

 

三. 实验原理、方法和手段

 

3.1 IP协议及数据报格式

网际互连协议(InternetProtocol,IP),是 TCP/IP体系中的网络层协议,可实现大规模的异构网络互联互通,为主机提供无连接的、尽力而为的数据包传输服务。在网际协议第 4版(IPv4)中,IP数据报是一个可变长分组,包括首部和数据两部分 (如图1.2–1)。首部由 20~60 字节组成,包含与路由选择和传输有关的重要信息,其各字段意义如下:

 

  1. 版本(4位):该字段定义 IP协议版本,所有字段都要按照此版本的协议来解释。
IP数据报结构示意图

图 1.2–1IP数据报结构示意图

 

2. 首部长度(4位):该字段定义数据报协议头长度,表示协议首部具有 32位字长的数量,最小值为 5,最大值为 15。

 

3. 服务(8位):该字段定义上层协议对处理当前数据报所期望的服务质量,并对数据报按照重要性级别进行分配。前 3位为优先位,后面 4位为服务类型,最后1位没有定义。这 8位可用于分配优先级、延迟、吞吐量以及可靠性。

 

4. 总长度(16位):该字段定义整个 IP数据报的字节长度,包括协议首部和数据,其最大值为 65535字节。

 

5. 标识(16位):该字段包含一个整数,用于标识当前数据报。当数据报分片时,标识字段的值被复制到所有的分片中。

 

6. 标记(3位):该字段由 3位字段构成,其中最低位(MF)控制分片:若存在下一个分片则值为 1;否则置 0代表该分片是最后一个。中间位(DF)指出数据报是否可进行分片,若置1则不允许该数据报进行分片。第三位即最高位保留不使用,值为 0。

 

7. 分片偏移(13位):该字段指出数据分片在源数据报中的相对位置,以 8字节为长度单位。

 

8. 生存时间(8位):该字段是计数器,转发该数据报的路由器依次减 1直至减少为 0。

 

9. 协议(8位):该字段指出在 IP层处理后,由哪种上层协议接收该数据报。

 

10. 头部校验和(16位):该字段帮助确保 IP协议头的正确性。计算过程是先将校验和字段置为 0,然后将整个头部每 16位划分为一部分,并将各部分相加,其计算结果取反码,填入校验和字段中。

 

11. 源地址(32位):源主机的 IP地址。

 

12. 目的地址(32位):目标主机的 IP地址。

一个IP包从源主机传输到目标主机可能需要经过多个传输媒介不同的网络。每种网络对数据帧都设置了一个最大传输单元 (MTU)的限制(例如以太网的 MTU 是 1500字节)。因此,当路由器在转发 IP包时,如果数据包的大小超过了出口链路网络的 MTU时,需将对该 IP数据报进行分片,才能在目标链路上顺利传输。每个 IP分片将独立传输,直到所有分片都到达目的地后,目标主机才会把他们重组成一个完整的 IP 数据报。在IP数据报的分片与重组过程中,以下三个首部字段发挥了重要作用:

  • 标记的后两位:最低位记为 MF(MoreFragment),MF= 1代表还有后续分片,MF= 0表示此为原始数据报的最后分片。次低位DF(Don’tFragment),用来控制数据报是否允许分片。DF= 1 表示该数据报不允许分片;DF= 0 允许分片。
  • 标识符:用于目的主机将IP数据报的各个分片重装成原来的数据报。
  • 片偏移:以 8字节为单位,目的主机在重装 IP数据报时需要根据该字段提供偏移量进行排序。这是因为数据分片的独立传输使各分片的到达顺序难以确定。

 

3.2 ICMP协议及报文格式

因特网控制报文协议(InternetControlMessageProtocol,ICMP),用于 IP主机、路由器之间传递控制消息。控制消息是指网络是否连通、主机是否可达、路由是否可用等网络本身的控制管理消息,对网络正常运行起着重要的作用。

 

ICMP报文的类型可以分为ICMP差错报文和ICMP询问报文两种(其结构如图1.2–2)。ICMP差错报告报文主要有终点不可达、源站抑制、超时、参数问题和路由重定向5种。ICMP询问报文有回送请求和应答、时间戳请求和应答、地址掩码请求和应答以及路由器询问和通告 4种。其常见的类型与代码如表1.2–1所示。

ICMP报文结构示意图

图 1.2–2ICMP报文结构示意图

 

本实验涉及以下两个常用网络命令,都属于ICMP协议的典型应用。

类型

(TYPE)

代码

(CODE)

描述 (Description) 查询类

(Query)

差错类

(Error)

0 0 EchoReply——回显应答(Ping应答)
3 1 HostUnreachable——主机不可达
3 3 PortUnreachable——端口不可达
3 4 Fragmentationneededbutnofrag.bitset

——需要进行分片但设置不分片比特

8 0 Echorequest——回显请求(Ping请求)
11 0 TTLequals0 duringtransit

——传输期间生存时间为 0

 

1.  ping命令,是测试网络最有效的工具之一。它是由主机或路由器执行 ping命令向一个特定的目的主机发送一份 ICMP回显请求(Echorequest)报文,并等待其返回 ICMP回显应答(EchoReply)。ping命令可以检测网络的连通性,简单估测数据报的往返时间(RoundTripTime),确定是否有数据包丢失或损坏,从而帮助分析网络故障。ping命令格式和常用参数罗列如下:

用法: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]
            [-r count] [-s count] [[-j host-list] | [-k host-list]]
            [-w timeout] [-R] [-S srcaddr] [-c compartment] [-p]
            [-4] [-6] target_name

选项:
    -t             Ping 指定的主机,直到停止。
                   若要查看统计信息并继续操作,请键入 Ctrl+Break;
                   若要停止,请键入 Ctrl+C。
    -a             将地址解析为主机名。
    -n count       要发送的回显请求数。
    -l size        发送缓冲区大小。
    -f             在数据包中设置“不分段”标记(仅适用于 IPv4)。
    -i TTL         生存时间。
    -v TOS         服务类型(仅适用于 IPv4。该设置已被弃用,
                   对 IP 标头中的服务类型字段没有任何
                   影响)。
    -r count       记录计数跃点的路由(仅适用于 IPv4)。
    -s count       计数跃点的时间戳(仅适用于 IPv4)。
    -j host-list   与主机列表一起使用的松散源路由(仅适用于 IPv4)。
    -k host-list    与主机列表一起使用的严格源路由(仅适用于 IPv4)。
    -w timeout     等待每次回复的超时时间(毫秒)。
    -R             同样使用路由标头测试反向路由(仅适用于 IPv6)。
                   根据 RFC 5095,已弃用此路由标头。
                   如果使用此标头,某些系统可能丢弃
                   回显请求。
    -S srcaddr     要使用的源地址。
    -c compartment 路由隔离舱标识符。
    -p             Ping Hyper-V 网络虚拟化提供程序地址。
    -4             强制使用 IPv4。
    -6             强制使用 IPv6。

 

2. tracert命令,利用 TTL字段和 ICMP差错类型报文,查找 IP数据报的路由转发路径(含路由器信息)。源主机执行该命令向目的主机发送存时间(TTL)不同的 ICMP回送请求报文,直至收到目的主机应答,并通过分析应答报文获得转发路径和时延信息。

首先源主机发起一个 TTL=1的 ICMP报文。第一个路由器收到该报文后,TTL减 1变为 0并丢弃此报文,返回一个 [ICMP timeexceeded]的消息。源主机通过这个消息获知 IP数据报转发路径上的第一个路由器信息。然后,依次增加发送ICMP报文的 TTL值,可以获取路径上的后续路由器的信息。当到达目的地时,目标主机返回一个 [ICMPportunreachable] 的消息,使发起者确认 IP数据报已经正常到达。至此,tracert命令发起者已经获得了通向目标主机路径上的所有路由信息。tracert 命令(Linux)格式和常用参数罗列如下:

用法: tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout]
               [-R] [-S srcaddr] [-4] [-6] target_name

选项:
    -d                 不将地址解析成主机名。
    -h maximum_hops    搜索目标的最大跃点数。
    -j host-list       与主机列表一起的松散源路由(仅适用于 IPv4)。
    -w timeout         等待每个回复的超时时间(以毫秒为单位)。
    -R                 跟踪往返行程路径(仅适用于 IPv6)。
    -S srcaddr         要使用的源地址(仅适用于 IPv6)。
    -4                 强制使用 IPv4。
    -6                 强制使用 IPv6。

 

3.3 实验方法和手段

  1. 使用 Wireshark软件,捕获本机在 ping和 tracert网络命令执行过程中接收和发出的全部数据流量。

2. 合理设置过滤条件,观察 IP数据报和 ICMP报文,着重分析报文首部和内容变化,从而掌握协议的工作原理。

3. 调整 ping命令的参数,观察并分析 IP数据报分片情况。

4. 结合所捕获的数据报,画出 tracert命令过程中数据交互示意图。

 

四. 实验条件

装有 Wireshark 软件的 PC 机一台,处于局域网环境。

 

参考资料:

•J.FKuroseandK.W.Ross,WiresharkLab:ICMPv8.0

•Wireshark官方过滤器语法指导书

•IP协议的 RFC

 

五. 实验步骤

 

5.1 ping命令

本机启动Wireshark软件,选择要监听的网络接口(如eth0、wlan0);

本物理机IP:192.168.1.101

默认网关:19.168.1.1

同网段另一台主机IP:192.168.1.103

 

然后,在终端发起网络命令:pingIP地址/域名。

ping 网关和 ping 同网段的一台主机

 

1、在Wireshark监视器中设置过滤条件。例如图1.2–3设置过滤条件为 icmp,则显示出所捕获的 ICMP数据包。

Wireshark 监视器界面 icmp过滤

图 1.2–3Wireshark 监视器界面

 

2、点击Internet Protocol Version 4展开(如图1.2–4),查看 IP数据报,特别观察IP数据报的首部字段及其内容。

Internet Protocol Version 4

图 1.2–4查看 IP数据报

 

字段 含义
Ip协议版本号 IPv4
服务类型 DSCP:CS0, ECN:Not-ECT
IP报文头长度 20bytes,说明没有使用可选字段
数据报总长度 60
标识 0x3e83(16003)
数据报是否要求分段 Not set
分段偏移量 0
在发送过程中经过几个路由器 128-64=64
上层协议名称 ICMP
报文头校验和 0x0000
源地址 192.168.1.101
目的地址 192.168.1.103

 

3、点击Internet Control Message Protocol展开(如图1.2–5),查看 ICMP报文,并解释回显(Echo Request 和 Echo Reply)报文的首部字段。

 Echo request

图 1.2–5 Echo request 示例

 

Echo Reply

Echo Reply 示例

 

4、清空 Wireshark监控器,重新发起网络命令(如图1.2–6):pingIP地址/域名 –l #length,并解释对比前后两次执行 ping 命令的结果。其中,-l #length确定 echo数据报的长度为 #length,其默认值为 32字节,且小于 65,527字节。

 

测试一:

C:\WINDOWS\system32>ping 192.168.1.103

ping 192.168.1.103

 

ping默认长度32

 

测试二:

C:\WINDOWS\system32>ping 192.168.1.103 -l 1688

ping 192.168.1.103 -l 1688

 

ping长度1688

 

5、可以多次改变 #length的大小(例如 1000字节、2000字节和 4000字节),观察IP数据报何时会分片?请解释 IP数据报分片的原因和具体情况。

提示:请先确认该网络的 MTU,可在 Wireshark记录中查找“IPv4 fragments”项目。

 

经过大量测试,ping的长度在1480的时候开始分片。

C:\WINDOWS\system32>ping 192.168.1.103 -l 1480

ping 192.168.1.103 -l 1480

 

ping的长度在1480的时候开始分片

 

IP数据报分片的原因:

数据链路层具有最大传输单元MTU这个特性,它限制了数据帧的最大长度。通常要传输的IP报文的大小超过最大传输单位MTU时就会产生IP分片情况,IP分片经常发生在网络环境当中。

 

IP数据报分片的具体情况:

分片和重新组装的过程对传输层是透明的,其原因是当IP数据报进行分片之后,只有当它到达下一站时,才可进行重新组装,且它是由目的端的IP层来完成的。分片之后的数据报根据需要也可以再次进行分片。

IP分片和完整IP报文差不多拥有相同的IP头,ID域对于每个分片都是一致的,这样才能在重新组装的时候识别出来自同一个IP报文的分片。在IP头里面,16位识别号唯一记录了一个IP包的ID(ipid),具有同一个ID的IP分片将会重新组装;而13位片偏移则记录了某IP片相对整个包的位置;而这两个表中间的3位标志则标志着该分片后面是否还有新的分片。这三个域就组成了IP分片的所有信息, 接受方就可以利用这些信息对IP数据进行重新组织。

 

5.2 tracert命令

本机启动Wireshark软件,选择要监听的网络接口(如eth0、wlan0);

然后,在终端发起网络命令:tracert IP地址/域名。

本物理机IP:192.168.1.101

默认网关:19.168.1.1

同网段另一台主机IP:192.168.1.103

 

 

1、启动Wireshark软件,选择要监听的网络接口,设置过滤条件 icmp(如图1.2–7)。

icmp过滤

图 1.2–7 在 Wireshark中设置过滤条件

 

2、在终端中使用tracert命令,目的主机是外网的一台设备(如图1.2–8,示例 IP为 192.168.1.103)。

C:\WINDOWS\system32>tracert 192.168.1.103

tracert 192.168.1.103

 

3、点击 Internet Control Message Protocol 展开,查看 ICMP 报文,观察并解释ICMP报文结构和字段内容。Internet Control Message Protocol

 

4、结合 ICMP 报文记录画出数据交互示意图,并描述 tracert工作原理。

tracert工作原理:

Tracert 命令用 IP 生存时间 (TTL) 字段和 ICMP 错误消息来确定从一个主机到网络上其他主机的路由。

首先,tracert送出一个TTL是1的IP 数据包到目的地,当路径上的第一个路由器收到这个数据包时,它将TTL减1。此时,TTL变为0,所以该路由器会将此数据包丢掉,并送回一个「ICMP time exceeded」消息(包括发IP包的源地址,IP包的所有内容及路由器的IP地址),tracert 收到这个消息后,便知道这个路由器存在于这个路径上,接着tracert 再送出另一个TTL是2 的数据包,发现第2个路由器...... tracert 每次将送出的数据包的TTL 加1来发现另一个路由器,这个重复的动作一直持续到某个数据包 抵达目的地。当数据包到达目的地后,该主机则不会送回ICMP time exceeded消息,一旦到达目的地,由于tracert通过UDP数据包向不常见端口(30000以上)发送数据包,因此会收到「ICMP port unreachable」消息,故可判断到达目的地。

tracert 有一个固定的时间等待响应(ICMP TTL到期消息)。如果这个时间过了,它将打印出一系列的*号表明:在这个路径上,这个设备不能在给定的时间内发出ICMP TTL到期消息的响应。然后,Tracert给TTL记数器加1,继续进行。(注意:默认是最多30跳就结束 )

 

七.实验报告内容

本次实验需提交一份实验报告以及相关的数据报文保存文件。报告内容应当包括以下三个部分,其中的分析解释都有对应的截图,且与保存文件一致。

 

1、实施 ping命令,记录引发的 IP数据报和 ICMP报文,保存为 pcapng类型文件;解释任一个IP数据报的首部,并对比ICMPEcho请求帧和回应帧;改变ping的长度参数,解释 IP数据报分片情况。

ping.pcapng 百度网盘下载

链接: https://pan.baidu.com/s/1uogOA-XSO27FOYOiAChVkQ?pwd=kac7

提取码: kac7

 

2、实施 tracert命令,记录引发的 ICMP报文,保存为 pcapng类型文件;解释任一个ICMP差错报文的结构;描述 tracert工作原理,结合 ICMP报文记录画出数据交互示意图。

tracert.pcapng 百度网盘下载

链接: https://pan.baidu.com/s/1jeL1NsWO15_jSue2prx-JQ?pwd=ef8t

提取码: ef8t

 

3、记录自己在本次实验中所遇到的问题,以及心得感悟。如果遇到异常情况,或者无法完成的任务时,也请分析错误产生的原因。

遇到的问题:

观察ip数据报何时会分片时,由于不确定大概数值,我数据都测试到60000了,还一直提示 NO set,最后还是通过查看了“IPv4 fragments”,才知道详情,最后才确定是1480,才再一次测试成功。

 

感悟:

实际操作和理论还是有很大的差距的。

 

实验报告要求至少包含以下几个部分:

·姓名,学号

·数据报文的相关截图

·相关分析和结论

·相关问题和解决方法

付杰
  • ¥ 99.0元
  • 市场价:199.0元
  • ¥ 98.0元
  • 市场价:298.0元
  • ¥ 98.0元
  • 市场价:198.0元
  • ¥ 398.0元
  • 市场价:598.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: