计算机网络——实验3Wireshark软件使用与协议分析(2)

3.2-----IP与ICMP分析

一、实验目的

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

二、实验内容

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

1. 执行ping命令,观察IP数据报和ICMP询问报文的结构

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

2. 改变ping命令的参数,观察IP数据报分片

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

3. 执行Traceroute命令,观察ICMP差错报文的结构,并分析其工作原理

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

三、实验原理

3.1 IP 协议及数据报格式

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

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

  1. 版本(4位):该字段定义IP协议版本,所有字段都要按照此版本的协议来解释。
  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数据报的分片与重组过程中,以下三个首部字段发挥了重要作用:

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

3.2 ICMP 协议及报文格式

因特网控制报文协议(Internet Control Message Protocol,ICMP),用于IP主机、路由器之间传递控制消息。控制消息是指网络是否连通、主机是否可达、路由是否可用等网络本身的控制管理消息,对网络正常运行起着重要的作用。ICMP报文的类型可以分为ICMP差错报文和ICMP询问报文两种(其结构如图1.2–2)。ICMP差错报告报文主要有终点不可达、源站抑制、超时、参数问题和路由重定向5种。ICMP询问报文有回送请求和应答、时间戳请求和应答、地址掩码请求和应答以及路由器询问和通告4种。其常见的类型与代码如表1.2–1所示。

1.2–2 ICMP 报文结构示意图

表1.2–1 ICMP 各类型报文的格式

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

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

2. traceroute/tracert命令,利用TTL字段和ICMP差错类型报文,查找IP数据报的路由转发路径(含路由器信息)。源主机执行该命令向目的主机发送生存时间(TTL)不同的ICMP回送请求报文,直至收到目的主机应答,并通过分析应答报文获得转发路径和时延信息。首先源主机发起一个TTL=1的ICMP报文。第一个路由器收到该报文后,TTL减1变为0并丢弃此报文,返回一个[ICMP time exceeded]的消息。源主机通过这个消息获知IP数据报转发路径上的第一个路由器信息。然后,依次增加发送ICMP报文的TTL值,可以获取路径上的后续路由器的信息。当到达目的地时,目标主机返回一个[ICMP port unreachable]的消息,使发起者确认IP数据报已经正常到达。至此,traceroute命令发起者已经获得了通向目标主机路径上的所 有路由信息。tracert命令(Linux)格式和常用参数罗列如下。

3.3 实验方法和手段

  1. 使用Wireshark软件,捕获本机在ping和traceroute网络命令执行过程中接收和发出的全部数据流量。
  2. 合理设置过滤条件,观察IP数据报和ICMP报文,着重分析报文首部和内容变化,从而掌握协议的工作原理。
  3. 调整ping命令的参数,观察并分析IP数据报分片情况。
  4. 结合所捕获的数据报,画出traceroute命令过程中数据交互示意图。

 

四、实验条件

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

参考资料:

  1. J.F Kurose and K.W. Ross, Wireshark Lab: ICMP v8.0
  2. Wireshark官方过滤器语法指导书
  3. IP协议的RFC

五、实验步骤

5.1 ping命令

本机(IP为192.168.43.122),启动Wireshark软件,选择要监听的网络接口;然后在终端发起网络命令:ping IP地址/域名,此处为后续分析完备选择ping百度。

(1)获取本机IP

(2)启动Wireshark软件,选择要监听的网络接口

(3)在终端发起网络命令:ping  www.baidu.com

1. 在Wireshark监视器中设置过滤条件。设置过滤条件为icmp,则显示出所捕获的ICMP数据包,如下图5.1所示。

2. 点击Internet Protocol Version 4展开,查看IP数据报,如下图5.2所示。特别观察IP数据报的首部字段及其内容。

5.2 查看IP数据报

分析:

  • 版本(4bit)ip报文中,版本占了4位,用来表示该协议采用的是哪一个版本的ip,相同版本的ip才能进行通信。此处表示使用互联网协议IPv4。

  • 首部长度(4bit)该字段表示整个ip包头的长度,其中数的单位是4字节。即二进制数0000-1111(十进制数0-15),其中一个最小长度为0字节,最大长度为60字节。此处值为0101,表示头长度为20字节。

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

  • 总长度(16bit)该字段指IP 数据报的字节长度,即协议首部和数据之和的长度,单位为字节。因此数据报的最大长度为65535字节。此处表示IP包总长度为60字节

  • 标识(16bit)该字段包含一个整数,用于标识当前数据报。当数据报分片时,标识字段的值被复制到所有的分片中。此处表示标识值为0x4f93

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

  • 分片偏移(13位):该字段指出数据分片在源数据报中的相对位置,以8字节为长度单位。此处表示数据分配与源数据报的偏移量为0

  • 生存时间(8 位):该字段是计数器,转发该数据报的路由器依次减1直至减少为0。此处表示生存时间为53个时间单位

  • 协议(8位):该字段指出在IP层处理后,由哪种上层协议接收该数据报。此时表示此包内封装的上层协议为ICMP。

  • 头部校验和(16位):该字段帮助确保IP协议头的正确性,只检验数据报的首部不检验数据部分。此处表示头部校验和为0x79c6(0111 1001 1100 0110)。

  • 源地址(32位):源主机的IP地址。此处表示源主机的IP地址为115.233.187.37

  • 目的地址(32位):目标主机的IP地址。此处表示目标主机IP地址为192.168.43.122

表5.1 IP数据报各段分析表

语句

含义

Internet Protocol Version 4, Src: 36.152.44.95, Dst: 10.99.97.10

IPV4协议

0100 .... = Version: 4

互联网协议IPv4

....0101 = Header Length: 20 bytes (5)

IP包头部长度

Differentiated Services Field: 0x04 (DSCP: LE, ECN: Not-ECT)

差分服务字段

1100 00.. = Differentiated Services Codepoint: Class Selector 6 (48)

.... ..00 = Explicit Congestion Notification: Not ECN-Capable Transport (0)

Total Length: 60

IP包的总长度

Identification: 0x4f93 (20371)

标志字段

Flags: 0x00

标记字段

0... .... = Reserved bit: Not set

.0.. .... = Don't fragment: Not set

..0. .... = More fragments: Not set

...0 0000 0000 0000 = Fragment Offset: 0

分的偏移量

Time to Live: 53

生存期TTL

Protocol: ICMP (1)

此包内封装的上层协议为ICMP

Header Checksum: 0x79c6 [validation disabled]

头部数据的校验和

[Header checksum status: Unverified]

头部数据的校验和:未经核实

Source Address: 36.152.44.95

源IP地址

Destination Address: 10.99.97.10

目标IP地址

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

分析:

  • Type(1字节)此字段标识ICMP报文的类型,目前已定义了14种,从类型值来看ICMP报文可以分为两大类。第一类是取值为1~127的差错报文,第2类是取值128以上的信息报文。此处表示回应的类型字段为0,是ICMP查询报文中的回应报文。

  • Code(1字节)标识对应ICMP报文的代码,与类型字段一起共同标识了ICMP报文的详细类型。此时表示ICMP报文代码为0。

  • Checksum(2字节)对包括ICMP报文数据部分在内的整个ICMP数据报的校验和,以检验报文在传输过程中是否出现了差错。其计算方法与在上文IP报头中的校验和计算方法一致。此处表示校验和为0x54c6(0101 0100 1100 0110)

  • Identifier(2字节)用于标识本ICMP进程,但仅适用于回显请求和应答ICMP报文,对于目标不可达ICMP报文和超时ICMP报文等,该字段的值为0。此处值为0001,表示回显请求和应答ICMP报文。

  • Sequence Number:序列号,BE(big endian)是大端表示,LE(little endian)是小端表示。此处表示序列号为149(0x0095)。

  • Data:数据。次数是一个32字节的二进制。

表5.2 ICMP报文段分析表

语句

含义

Internet Control Message Protocol

Type: 0 (Echo (ping) reply)

标识ICMP报文的类型

Code: 0

标识对应ICMP报文的代码

Checksum: 0x54c6 [correct]

包括ICMP报文数据部分在内的整个ICMP数据报的校验和

[Checksum Status: Good]

Identifier (BE): 1 (0x0001)

标识本ICMP进程(大端表示)

Identifier (LE): 256 (0x0100)

标识本ICMP进程(小端表示)

Sequence Number (BE): 149 (0x0095)

序列号(大端表示)

Sequence Number (LE): 38144 (0x9500)

序列号(小端表示)

[Request frame: 217]

回应构架号

[Response time: 12.940 ms]

回应时间

Data (32 bytes)

Data:6162636465666768696a6b6c6d6e6f

7071727374757677616263646566676869

数据

[Length: 32]

数据字长

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

(1)重新发起网络命令:ping www.buidu.com -l 4000

(2)两次结果对比

对比两次结果发现,多了红色框出区域。此处说明分了3个Fragments,从帧序号31到33是这4000字节长度的分片,分别0-1479(1480个字节)、1480-2959(1480个字节)和2960-4007(1048个字节)。其中,因为片位移8字节倍数,4000相当于第4001字节,所以最后一片4007才能分片。然后,我查阅资料了解到分片的原因:以太网的最大传送单元MTU是1500字节,超过则自动分片,减去IP首部20字节,所以IP数据部能发1480字节。

5. 可以多次改变#length的大小(例如1000字节、2000字节和4000字节),观察IP数据报何时会分片?请解释IP数据报分片的原因和具体情况。提示:请先确认该网络的MTU,可在 Wireshark 记录中查找“IPv4 fragments”项目。

(1)确认网络的MTU

在命令提示符中输入:netsh interface ipv4 show subinterfaces,按下回车键查看当前的mtu值(不过一般情况下实际比这个MTU小,后续进行手动测试)。

通过ping -l mut值 -f www.baidu.com,发现当mut值为1472时,可以连接网站;当mut值为1473时,不能连网,提示需要拆分数据包但是设置DF。说明该网络的mut值为1472(测定值+28 = 使用netsh interface ipv4 show subinterfaces命令查询到的值相同)。

(2)在 Wireshark 记录中查找“IPv4 fragments”项目

        ① length = 1000字节

② length = 2000字节

③ length = 3000字节

④ length = 4000字节

当length = 1000字节时,1个Fragments。

当length = 2000字节时,分2个Fragments,从帧序号40、41是这2000字节长度的分片,分别0-1479(1480个字节)和1480-2007(1480个字节)。其中,因为片位移8字节倍数,2000相当于第2001字节,所以最后一片2007才能分片。

当length = 3000字节时,分3个Fragments,从帧序号53-55是这3000字节长度的分片,分别0-1479(1480个字节)、1480-2959(1480个字节)和2960-3007(48个字节)。其中,因为片位移8字节倍数,3000相当于第3001字节,所以最后一片3007才能分片。

当length = 4000字节时,分4个Fragments,从帧序号97-99是这4000字节长度的分片,分别0-1479(1480个字节)、1480-2959(1480个字节)和2960-4007(1048个字节)。其中,因为片位移8字节倍数,4000相当于第4001字节,所以最后一片4007才能分片。

如果IP数据报加上数据帧头部后大于MTU,数据报文就会分成若干片进行传输。

解释IP数据报分片的原因和具体情况

IP数据报分片原因:当IP数据报的长度远大于各物理网络的MTU时,IP数据报需要通过多个物理网络的帧来传输,传输过程可能要通过多个不同的物理网络。物理网络不同,所支持的帧的格式与长度也就不同。因此,每个路由器都要将接收到的IP数据报进行拆包处理,然后封装成另外一个更小的IP数据报,以适应不同物理网络的传输。

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

一般情况下,以太网的环境中可传输的最大IP报文为1500字节。如果要传输的数据帧大小超过了1500字节,即IP数据报的长度大于1472(1500-20-8=1472,普通数据报)字节,则需要分片之后进行传输。IP数据报分片后,每个都由IP头部和IP数据区两个部分组成,头部占用20个字节,故数据区最多为1480个字节。因此,分区以0-1479、1480-2959、2960-3139……类推。Length为第length+1个字节,由于片位移8字节倍数,故最后一片分片需取((length/8+1)的上限整数*8)才能分片。

5.2 traceroute 命令

本机(IP为192.168.43.122)启动Wireshark软件,选择要监听的网络接口;然后在终端发起网络命令:traceroute IP地址/域名,此处为后续分析完备选择traceroute百度。

刚开始尝试时,在命令行输入traceroute www.buidu.com 提示'traceroute' 不是内部或外部命令,也不是可运行的程序或批处理文件。

后来通过查询资料,了解到该命令在Linux中被称为traceroute,Windos的类似功能被称为tracert。后续修改命令行输入为tracert www.buidu.com

1. 启动 Wireshark 软件,选择要监听的网络接口WLAN,设置过滤条件icmp。

2. 在终端中使用traceroute命令,目的主机是外网的一台设备(IP为192.168.0.196)。

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

分析:

  • Type(1字节)此字段标识ICMP报文的类型,目前已定义了14种,从类型值来看ICMP报文可以分为两大类。第一类是取值为1~127的差错报文,第2类是取值128以上的信息报文。此处表示回应的类型字段为11,表示时间超时。

  • Code(1字节)标识对应ICMP报文的代码,与类型字段一起共同标识了ICMP报文的详细类型。此时表示ICMP报文代码为0,和Type一起说明该报文TTL超时。

  • Checksum(2字节)对包括ICMP报文数据部分在内的整个ICMP数据报的校验和,以检验报文在传输过程中是否出现了差错。其计算方法与在上文IP报头中的校验和计算方法一致。此处表示校验和为0xf63f(1111 0110 0011 1111)

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

(1)ICMP报文记录

① 整体过程部分截图

② Type:8,Code:0,Checksum:0xf675,通过查询ICMP报文类型可知,Type为8代码为0的包为回射请求(Ping请求)。

③ 查看Echo (ping) reply包,得到type类型为0,code类型为0,通过查询ICMP报文类型可知,Type为0代码为0的包为回射应答(Ping应答)。

数据交互示意图:

tracert工作原理:首先源主机发起一个 TTL=1 的 ICMP 报文。第一个路由器收到该报文后,TTL减 1 变为 0 并丢弃此报文,返回一个 [ICMP time exceeded] 的消息。源主机通过这个消息获知 IP 数据报转发路径上的第一个路由器信息。然后,依次增加发送ICMP 报文的 TTL 值,可以获取路径上的后续路由器的信息。当到达目的地时,目标主机返回一个 [ICMP port unreachable] 的消息,使发起者确认 IP 数据报已经正常到达。

六、实验心得与体会

本次实验涉及IP数据报和ICMP询问报文的字段分析、IP数据报分片原理、ICMP差错报文的结构和工作流程,对我来说难度比较大,我通过查阅了很多资料,花了比较长的时间完成消化。

实验内容一是执行ping命令,学习IP数据报和ICMP询问报文的结构。通过对Internet Protocol Version 4展开内容进行分析,并与前文的实验原理结合,掌握了IP数据报的结构是由首部和数据两部分组成,首部的前一部分是固定长度(共20字节),所有IP数据报必须具有;后一部分是一些可选字段,其长度是可变的。对于其固定部分,是由4位版本(日前广泛使用IPv4)+ 4位首部长度 + 8位服务(优先权、短延迟位、高吞吐量位、高可靠位、保留位组成)+ 16位总长度 + 16位标识 + 3位标志 + 13位片偏移 + 8位生存时间 + 8位协议(上层协议)+ 16位首部检验和 + 32位源地址 + 32位目的地址组成。通过对Internet Control Message Protocol 展开内容进行分析,掌握了ICMP询问报文的结构。ICMP报文的前4个字节是统一的格式8位类型 + 8位代码 + 16位检验和。其中8位类型和8位代码字段一起决定了ICMP报文的类型。类型8、代码0表示回显请求(ping请求),类型0、代码0表示回显应答(ping应答),类型11、代码0表示超时。而16位的检验和字段包括数据在内的整个ICMP数据包的检验和,计算方法和IP头部检验和的计算方法一样。

实验内容二是通过改变ping命令参数,此处学习到了数据报分片的知识。当IP数据报的长度远大于各物理网络的MTU时,IP数据报需要通过多个物理网络的帧来传输,传输过程可能要通过多个不同的物理网络。物理网络不同,所支持的帧的格式与长度也就不同。因此,每个路由器都要将接收到的IP数据报进行拆包处理,然后封装成另外一个更小的IP数据报,以适应不同物理网络的传输。

实验内容三是了解学习基于ICMP协议的ping和traceroute命令及其工作原理。此处学习到了差错报告报文的分类和结构。差错报文共分为终点不可达、时间超过、参数问题、改变路由(重定向)四种。所有的差错报文中的数据字段都有着同样的格式,把收到的需要进行差错报告的IP数据报的首部和数据字段的前8个字节提取出来作为ICMP报文的数据字段。并且,还通过分析ICMP报文记录,掌握了tracert的工作原理(见上文5.4,不再赘述)。

虽然在实验过程中遇到了一些问题,但最终都成功解决。总之,这次实验让我对IP数据报和ICMP询问报文的数据结构、IP数据报分片、ICMP差错报文的结构和工作流程都有了更深入的了解,并且更加熟练使用Wireshark软件。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阮阮的阮阮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值