《计算机网络实验课程》——Wireshark实验

一、介绍

Wireshark 实验
本部分按照数据链路层、网络层、传输层以及应用层进行分类,共有 10 个实验。需要使用协议分析软件 Wireshark 进行,请根据简介部分自行下载安装。

二、准备

请自行查找或使用如下参考资料,了解 Wireshark 的基本使用:

  • 选择对哪块网卡进行数据包捕获
  • 开始/停止捕获
  • 了解 Wireshark 主要窗口区域
  • 设置数据包的过滤
  • 跟踪数据流

三、数据链路层

实作一
熟悉 Ethernet 帧结构
使用 Wireshark 任意进行抓包,熟悉 Ethernet 帧的结构,如:目的 MAC、源 MAC、类型、字段等。
《计算机网络实验课程》——Wireshark实验
在捕获选项里选择wlan,我的联网方式选择的无线局域网。
《计算机网络实验课程》——Wireshark实验
可以看到目的MAC与源MAC还有type:ipv4

问题?
你会发现 Wireshark 展现给我们的帧中没有校验字段,请了解一下原因。

答: Wireshark 抓取的包会自动过滤四个字节的校验字段。
实作二
了解子网内/外通信时的 MAC 地址
1、ping 你旁边的计算机(同一子网),同时用 Wireshark 抓这些包(可使用 icmp 关键字进行过滤以利于分析),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址是多少?这个 MAC 地址是谁的?

《计算机网络实验课程》——Wireshark实验
发送帧的目的MAC
《计算机网络实验课程》——Wireshark实验
返回帧的源MAC
《计算机网络实验课程》——Wireshark实验
目的MAC就是虚拟机的物理地址

2、然后 ping qige.io(或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 icmp 过滤),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址是多少?这个 MAC 地址是谁的?
《计算机网络实验课程》——Wireshark实验
发送帧的目的MAC
《计算机网络实验课程》——Wireshark实验
返回帧的源MAC
《计算机网络实验课程》——Wireshark实验
这个MAC地址时网关的。

问题? 通过以上的实验,你会发现: 访问本子网的计算机时,目的 MAC 就是该主机的 访问非本子网的计算机时,目的 MAC 是网关的
请问原因是什么?

答:原因是在子网内不需要经过网关,所以MAC是主机的,而访问外网的时候,都是通过 mac 地址送到网关处,然后出了网关再通过 IP 地址进行查找。

实作三
掌握 ARP 解析过程
1、为防止干扰,先使用 arp -d * 命令清空 arp 缓存(需要以管理员身份运行命令行)

《计算机网络实验课程》——Wireshark实验
2、ping 你旁边的计算机(同一子网),同时用 Wireshark 抓这些包(可 arp 过滤),查看 ARP 请求的格式以及请求的内容,注意观察该请求的目的 MAC 地址是什么。再查看一下该请求的回应,注意观察该回应的源 MAC 和目的 MAC 地址是什么
《计算机网络实验课程》——Wireshark实验
请求的目的mac
《计算机网络实验课程》——Wireshark实验
回应的目的mac与回应的源mac
《计算机网络实验课程》——Wireshark实验
3、再次使用 arp -d * 命令清空 arp 缓存
《计算机网络实验课程》——Wireshark实验
4、然后 ping qige.io (或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 arp 过滤)。查看这次 ARP 请求的是什么,注意观察该请求是谁在回应。
《计算机网络实验课程》——Wireshark实验
请求的目的mac
《计算机网络实验课程》——Wireshark实验

回应的源mac
《计算机网络实验课程》——Wireshark实验

问题? 通过以上的实验,你应该会发现, 1、ARP 请求都是使用广播方式发送的 2、如果访问的是本子网的 IP,那么 ARP解析将直接得到该 IP 对应的 MAC;如果访问的非本子网的 IP, 那么 ARP 解析将得到网关的 MAC。 请问为什么?

答:
如果访问的是我所处的本子网的ip,ARP 缓存中没有该 IP,那么就是发送一个广播,在子网中找寻这个 IP,如果有 那么ARP解析协议将会直接得到该ip对应的Mac地址;如果访问的是非本子网的ip,那么ARP解析将直接得到网关的mac地址。因为要想访问对方,在处于同一子网的条件下,应该知道对方的MAC地址,但是不处于同一子网,就需要对方所处子网网关的mac地址。

网络层

实作一
熟悉 IP 包结构

使用 Wireshark 任意进行抓包(可用 ip 过滤),熟悉 IP 包的结构,如:版本、头部长度、总长度、TTL、协议类型等字段。
《计算机网络实验课程》——Wireshark实验
可以观察到
版本:IPV4;头部长度:20 bytes总体长度:56;存活时间TTL:64s;协议类型UDP;头部校验和:0xff69。
ip包结构的释义:

版本号(Version):长度4比特。标识目前采用的IP协议的版本号。一般的值为0100(IPv4),0110(IPv6)
IP包头长度Header
Length长度4比特。这个字段的作用是为了描述IP包头的长度,因为在IP包头中有变长的可选部分。该部分占4个bit位,单位为32bit(4个字节),即本区域值=
IP头部长度(单位为bit)/(84),因此,一个IP包头的长度最长为“1111”,即154=60个字节。IP包头最小长度为20字节。
IP包总长Total Length长度16比特。 以字节为单位计算的IP包的长度 (包括头部和数据),所以IP包最大长度65535字节。
标识符Identifier长度16比特。该字段和Flags和Fragment
Offest字段联合使用,对较大的上层数据包进行分段(fragment)操作。路由器将一个包拆分后,所有拆分开的小包被标记相同的值,以便目的端设备能够区分哪个包属于被拆分开的包的一部分。
标记(Flags):长度3比特。该字段第一位不使用。第二位是DF(Don’t
Fragment)位,DF位设为1时表明路由器不能对该上层数据包分段。如果一个上层数据包无法在不分段的情况下进行转发,则路由器会丢弃该上层数据包并返回一个错误信息。第三位是MF(More
Fragments)位,当路由器对一个上层数据包分段,则路由器会在除了最后一个分段的IP包的包头中将MF位设为1。 片偏移(Fragment
Offset):长度13比特。表示该IP包在该组分片包中位置,接收端靠此来组装还原IP包。
生存时间(TTL):长度8比特。当IP包进行传送时,先会对该字段赋予某个特定的值。当IP包经过每一个沿途的路由器的时候,每个沿途的路由器会将IP包的TTL值减少1。如果TTL减少为0,则该IP包会被丢弃。这个字段可以防止由于路由环路而导致IP包在网络中不停被转发。
协议Protocol长度8比特。标识了上层所使用的协议。 头部校验Header
Checksum:长度16位。用来做IP头部的正确性检测,但不包含数据部分。
因为每个路由器要改变TTL的值,所以路由器会为每个通过的数据包重新计算这个值

问题? 为提高效率,我们应该让 IP 的头部尽可能的精简。但在如此珍贵的 IP 头部你会发现既有头部长度字段,也有总长度字段。请问为什么?

答:
这样做恰恰可以节省时间提高效率,因为有头部长度字段和总长度字段是为了方便上层将 IP 包中的数据提取出来,接收端需要读数据,接收数据当长度超过1500B时就会被返回链路层进行分段,所以标明就是必要的

实作二
IP 包的分段与重组

根据规定,一个 IP 包最大可以有 64K 字节。但由于 Ethernet 帧的限制,当 IP 包的数据超过 1500 字节时就会被发送方的数据链路层分段,然后在接收方的网络层重组。

缺省的,ping 命令只会向对方发送 32 个字节的数据。我们可以使用 ping 202.202.240.16 -l 2000 命令指定要发送的数据长度。此时使用 Wireshark 抓包(用 ip.addr == 202.202.240.16 进行过滤),了解 IP 包如何进行分段,如:分段标志、偏移量以及每个包的大小等

《计算机网络实验课程》——Wireshark实验
《计算机网络实验课程》——Wireshark实验
《计算机网络实验课程》——Wireshark实验
可以看到,包总长:total length 分段标志:Flags;偏移量:Fragment Offset

问题? 分段与重组是一个耗费资源的操作,特别是当分段由传送路径上的节点即路由器来完成的时候,所以 IPv6 已经不允许分段了。那么 IPv6
中,如果路由器遇到了一个大数据包该怎么办?

答:丢弃并返回主机失败消息。

实作三
考察 TTL 事件
在 IP 包头中有一个 TTL 字段用来限定该包可以在 Internet上传输多少跳(hops),一般该值设置为 64、128等。

在验证性实验部分我们使用了 tracert 命令进行路由追踪。其原理是主动设置 IP 包的 TTL 值,从 1 开始逐渐增加,直至到达最终目的主机。

请使用 tracert www.baidu.com 命令进行追踪,此时使用 Wireshark 抓包(用 icmp 过滤),分析每个发送包的 TTL 是如何进行改变的,从而理解路由追踪原理。

《计算机网络实验课程》——Wireshark实验
基本原理是TTL递增从而实现路由追踪

传输层

实作一
熟悉 TCP 和 UDP 段结构

1、用 Wireshark 任意抓包(可用 tcp 过滤),熟悉 TCP 段的结构,如:源端口、目的端口、序列号、确认号、各种标志位等字段。
《计算机网络实验课程》——Wireshark实验

由上到下分别可以观察到源端口、目的端口、序列号、确认序列号、4位首部长度、ACK(URG、ACK、PSH、PST、SYN、FIN)、校验和、紧急指针。

2、用 Wireshark 任意抓包(可用 udp 过滤),熟悉 UDP 段的结构,如:源端口、目的端口、长度等。
《计算机网络实验课程》——Wireshark实验
从上到下依次看到源端口、目的端口、校验码。

问题? 由上大家可以看到 UDP 的头部比 TCP 简单得多,但两者都有源和目的端口号。请问源和目的端口号用来干什么?

答:端口是确定数据到达用户的哪个进程的一种标识,IP 只到达子网网关,MAC 只到达子网下的指定主机,所以需要端口。

实作二
分析 TCP 建立和释放连接

1、打开浏览器访问 qige.io 网站,用 Wireshark 抓包(可用 tcp 过滤后再使用加上 Follow TCP Stream),不要立即停止 Wireshark 捕获,待页面显示完毕后再多等一段时间使得能够捕获释放连接的包。

《计算机网络实验课程》——Wireshark实验

2、请在你捕获的包中找到三次握手建立连接的包,并说明为何它们是用于建立连接的,有什么特征。
《计算机网络实验课程》——Wireshark实验
通过发出 SYN 信号请求连接,然后服务器端回应 ACK 确认收到请求,然后主机再发出一个确认信号。第一次握手时只有 SYN = 1 ,第二次握手时只有 SYN = 1 且 ACK = 1 ,第三次握手时只有 ACK = 1 。

3、请在你捕获的包中找到四次挥手释放连接的包,并说明为何它们是用于释放连接的,有什么特征。
《计算机网络实验课程》——Wireshark实验
首先发出 FIN 信号请求断开,然后服务器端回应一个 ACK 确认信号,然后又发出一个 FIN 信号,这里将 ACK 和 FIN 合并成立一个包,然后主机回应一个 ACK 确认信号,即可断开连接。

问题一? 去掉 Follow TCP Stream,即不跟踪一个 TCP 流,你可能会看到访问 qige.io
时我们建立的连接有多个。请思考为什么会有多个连接?作用是什么?

答:用多个连接来开充当多个传输通道,加快了传输数据的速度。

问题二? 我们上面提到了释放连接需要四次挥手,有时你可能会抓到只有三次挥手。原因是什么?

答:原因是将第二次、第三次挥手发出的包合并为了一个。

应用层

实作一
了解 DNS 解析
1、先使用 ipconfig /flushdns 命令清除缓存,再使用 nslookup qige.io 命令进行解析,同时用 Wireshark 任意抓包(可用 dns 过滤)。
《计算机网络实验课程》——Wireshark实验
《计算机网络实验课程》——Wireshark实验
《计算机网络实验课程》——Wireshark实验
你应该可以看到当前计算机使用 UDP,向默认的 DNS 服务器的 53 号端口发出了查询请求,而 DNS 服务器的 53 号端口返回了结果。
可了解一下 DNS 查询和应答的相关字段的含义

DNS应答字段含义
1.QR:查询/应答标志。0表示这是一个查询报文,1表示这是一个应答报文
2.opcode,定义查询和应答的类型。0表示标准查询,1表示反向查询(由IP地址获得主机域名),2表示请求服务器状态
3.AA,授权应答标志,仅由应答报文使用。1表示域名服务器是授权服务器
4.TC,截断标志,仅当DNS报文使用UDP服务时使用。因为UDP数据报有长度限制,所以过长的DNS报文将被截断。1表示DNS报文超过512字节,并被截断
5.RD,递归查询标志。1表示执行递归查询,即如果目标DNS服务器无法解析某个主机名,则它将向其他DNS服务器继续查询,如此递归,直到获得结果并把该结果返回给客户端。0表示执行迭代查询,即如果目标DNS服务器无法解析某个主机名,则它将自己知道的其他DNS服务器的IP地址返回给客户端,以供客户端参考
6.RA,允许递归标志。仅由应答报文使用,1表示DNS服务器支持递归查询
7.zero,这3位未用,必须设置为0
8.rcode,4位返回码,表示应答的状态。常用值有0(无错误)和3(域名不存在)清除缓存

问题? 你可能会发现对同一个站点,我们发出的 DNS 解析请求不止一个,思考一下是什么原因?

答:DNS不止一个的原因是DNS解析过程是先从浏览器的DNS缓存中检查是否有这个网址的映射关系,如果有,就返回IP,完成域名解析;如果没有,操作系统会先检查自己本地的hosts文件是否有这个网址的映射关系,如果有,就返回IP,完成域名解析;如果没有,电脑就要向本地DNS服务器发起请求查询域名;本地DNS服务器拿到请求后,先检查一下自己的缓存中有没有这个地址,有的话直接返回;没有的话本地DNS服务器会从配置文件中读取根DNS服务器的地址,然后向其中一台发起请求;直到获得对应的IP为止。

实作二
了解HTTP的请求和应答
打开浏览器访问 qige.io 网站,用 Wireshark 抓包(可用http 过滤再加上 Follow TCP Stream),不要立即停止 Wireshark 捕获,待页面显示完毕后再多等一段时间以将释放连接的包捕获。请在你捕获的包中找到 HTTP 请求包,查看请求使用的什么命令,如:GET, POST。并仔细了解请求的头部有哪些字段及其意义。
《计算机网络实验课程》——Wireshark实验

post:q请求的方法,
Host:
也就是是你要访问的主机的名字;
Connection:keep-alive
值代表的意思是保持连接。这样子有利于在你访问的网页中有很多图片等其他资源的时候,可以使用同一个TCP连接接收,而不是针对每一个文件都建立一次TCP/IP的连接。这个也就是课本上面说的“持久连接”。
user-Agent:包含发出请求的用户信息
Accept-Encoding:请求的编码格式
Accept-Language:请求语言
《计算机网络实验课程》——Wireshark实验
请在你捕获的包中找到 HTTP 应答包,查看应答的代码是什么,如:200, 304, 404 等。并仔细了解应答的头部有哪些字段及其意义。
《计算机网络实验课程》——Wireshark实验
200:交易成功;
304:客户端已经执行了GET,但文件未变化;
404:没有发现文件、查询或URl;
HTTP/1.1 200 OK\r\n——相应行信息
Cache-Control: no-cache\r\n——缓存控制
Connection: close\r\n——连接状态
Content-Length: 192\r\n——包的长度
Content-Type: application/multipart-formdata\r\n——响应的内容类型
Date: Thu, 24 Dec 2020 13:25:01 GMT\r\n——时间数据

问题? 刷新一次 qige.io 网站的页面同时进行抓包,你会发现不少的 304
代码的应答,这是所请求的对象没有更改的意思,让浏览器使用本地缓存的内容即可。那么服务器为什么会回答 304 应答而不是常见的 200 应答?

答:200(成功) 服务器已成功处理了请求。通常,这表示服务器提供了请求的网页。如果是对您的 robots.txt 文件显示此状态码,则表示 Googlebot 已成功检索到该文件。304(未修改)自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。如果网页自请求者上次请求后再也没有更改过,您应将服务器配置为返回此响应(称为 If-Modified-Since HTTP 标头直接读本地缓存,可以节省宽带资源。

总结

真该在考试之前就把实验做完,做完实验真的受益匪浅。让我对计算机网络的分层有了更深的理解,掌握了各层的构成与以及各种协议的作用。

上一篇:wireshark抓包工具详细说明及操作使用


下一篇:10分钟带你区分抓包工具Fiddler 与 wireshark的不同