引言
在现代计算机网络中,理解协议的工作原理对于开发、维护和优化网络应用至关重要。为了深入学习网络协议的细节,本博客通过将使用Wireshark这款强大的网络协议分析工具来捕获并分析网络中的各种协议交互过程,详细介绍如何使用Wireshark对以太网帧、ARP、IP、TCP、UDP以及HTTP协议进行分析,并通过具体的实验案例加深对这些协议的理解。
正文
1. Wireshark 的使用
1)安装网络协议分析仪
从网站中下载1.2.10版本的Wireshark。双击下载下来的exe文件开始安装,按照提示进行选择。完成安装后打开软件会出现图1所示界面:

图1 Wireshark系统界面
2)Wireshark 基本操作
打开应用后会出现图1所示界面,然后点击上方菜单栏中的"Capture ---> Interface"使用其分组俘获功能,打开后可以看到图2所示界面:

图2 俘获/接口界面
这表明该PC机有多个接口卡,点击任意一个Options可进入图3所示界面:

图3 俘获/接口/选项界面
图3的上方的下拉框中列出了本机中所有的接口,这里可进行选择所需的接口,如图4所示:

图4 可供选择的本机接口
另,在图2所示界面点击Start则可让程序在指定接口上俘获分组,如图5所示:

图5 俘获分组界面
此俘获界面被打开后可通过点击菜单栏中的Capture ---> Stop 停止俘获分组,并将俘获的信息存入trace文件,当需要再俘获分组时,点击Capture ---> Start 即可再次启动俘获。
(1)程序可以对俘获的分组信息进行分析。如图5所示,在俘获分组的列表的上方有编号(No)、时间(Time)、源地址(Sourece)、目的地址(Destination)、协议(Protocol)和信息(Info)列。图5界面的中间则是所选分组的首部详细信息。最下面显示的是所选分组以16进制和ASCII形式的内容。
这里以分组第24号帧为例进行分析。从图5中的信息可以看到,该帧传输时间为俘获后的4.634802秒;源IP地址是192.168.1.100,源MAC地址为04:78:63:6e:c5:4d;目的IP地址是238.238.238.238,目的MAC地址为01:00:5e:6e:ee:ee;分组长度80字节,是一个由UDP协议封装并传输的数据包。
3)Wireshark 过滤功能
在使用俘获功能时,可能会俘获到大量无关报文,因此需要进行过滤。Wireshark的过滤分为两种:捕获过滤和显示过滤。
捕获过滤可以在捕获的过程中过滤掉不符合条件的报文,在图6所示的框中可输入相应过滤条件:

图6 选项界面中的捕获过滤
捕获过滤器的语法结构允许用户通过组合基本元素来定义特定的网络流量捕获规则。这种语法支持逻辑运算符not、and 和 or,从而可以构建复杂的条件表达式。对于首次设置捕获过滤器的用户,可以在软件的选项界面中找到"Capture Filter"按钮,点击后会弹出一个包含多种预设过滤条件的对话框,如图7所示:

图7 默认捕获过滤
显示过滤的功能是在已经捕获到的报文中进一步筛选,仅展示那些符合特定条件的报文。在捕获分组的界面上,可直接输入过滤条件来实现这一功能,如图8所示。值得注意的是,显示过滤所使用的过滤条件语法与捕获过滤的语法不同。

图8 显示过滤
若不确定如何编写显示过滤条件,可以利用工具提供的"Expression"按钮。点击后,会弹出一个对话框,如图9所示,其中列出了多种可用的过滤条件选项。通过这个界面,可轻松地选择和组合不同的条件,创建出适合当前分析需求的过滤规则。

图9 显示过滤输入对话框
2. 分析Web 应用中的协议交互
1)捕获报文
打开Wireshark,不设置捕获过滤条件,但是为了避免一些干扰的数据包,我们关闭混淆模式,在图10中取消勾选即可,然后捕获报文。

图10 关闭混淆模式
2)清空本机 ARP 表和 DNS 缓存
以管理员身份运行"命令提示符",分别输入"arp -d"命令和"ipconfig /flushdns"清空本机ARP 表和DNS 缓存,见图11。

图11 命令提示符界面
3)访问百度官方网站
打开联想浏览器,输入baidu.com访问百度官方网站,当网站界面出现时(如图12),停止捕获。

图12 百度网站首页
4)以太网帧及 arp 协议分析
在显示过滤中设置过滤条件仅显示ARP,如图13所示:

图13 显示过滤界面
回答指导书中以下问题:
(1)找到本机请求默认网关MAC 地址的arp 请求报文,显示其详细信息并截图。该报文的以太网帧首部的目的MAC 地址是什么,代表什么意思?该arp 请求报文中的发送方地址是多少,是不是本机的以太网MAC 地址?该arp 请求报文中的目标地址是多少,代表什么意思?
答:

图14 arp请求报文详细信息
图14为任意一个arp请求报文的详细信息截图。目的MAC地址是广播地ff:ff:ff:ff:ff:ff。这表示这是一个广播地址,广播地址用于向同一个局域网内的所有设备发送数据。该arp请求报文的发送方的MAC地址为10:b1:df:c0:0b:29,IP地址为192.168.1.229这个MAC地址是本机以太网的MAC地址,因为这是本机即为发送方。该arp请求报文中的目标MAC地址是00:00:00:00:00:00,目标IP地址是192.168.1.110,这表示目标MAC地址未知,因此使用全零地址,ARP请求的目的就是找出与目标IP地址相对应的MAC地址。
(2)找到本机请求默认网关MAC 地址的arp 响应报文,显示其详细信息并截图。从arp响应报文内容中找出默认网关的IP 地址与MAC 地址对应关系,并在图中用红框标出。为什么会捕捉到本机请求默认网关MAC 地址的arp 报文?
答:本机的arp响应报文详细信息见图15(该arp响应报文对应图14中的arp请求报文)。从图中可以看到默认网关的 IP 地址是 192.168.1.110,对应的 MAC 地址是 42:12:70:fe:21:80,已在图中用红框标出。至于为什么捕获到本机请求默认网关 MAC 地址的 ARP 报文,这是因为当计算机要访问外部网络时,需要先找到默认网关的 MAC 地址才能进行通信。因此,计算机会发送一个 ARP 请求来询问默认网关的 MAC 地址。在这个过程中,我们就能观察到这样的 ARP 报文交换过程。

图15 arp响应报文详细信息
(3)给出该arp 响应报文的以太网帧中的2 字节以太类型字段的十六进制的值。它表示该以太帧包含了什么样的协议?
答:在图16中可以看到,该 ARP 响应报文的以太网帧中的 2 字节以太类型字段的十六进制值是 0x0806。这表示该以太帧包含了 ARP 协议的数据。

图16 ARP 响应报文的关键字段标注
(4)此时通过arp 命令查看ARP 表,此时ARP 表有什么变化?
答:输入arp -a可以查看ARP表,此时ARP表中对于 IP 地址 192.168.1.110,可以查询到其对应的 MAC 地址应该是 42:12:70:fe:21:80。如图17所示:

图17 更新后的部分ARP表
5)DNS 协议分析
在显示过滤中输入dns筛选出dns解析过程,然后回答下述问题:
(1)找到请求该网站域名对应IP 地址的DNS 响应分组,显示其详细信息并截图。在DNS 响应报文中找出该网站域名对应的IP 地址,并在图中用红框标出。
答:DNS响应分组的详细信息见图18。该网站域名对应的IP地址是110.242.68.4和110.242.68.3,已在图中用红框标出。

图18 DNS响应分组的详细信息
(2)默认域名服务器的IP 地址是多少?本机的IP 地址是多少?
答:在命令提示符界面输入"ipconfig /all"指令,可以看到默认域名服务器的 IP 地址是192.168.1.1,本机的IP地址为192.168.1.229,见图19。

图19 命令提示符界面
(3)IP 首部中的协议字段的值是多少?该字段表明DNS 的运输层采用的是什么协议?DNS 客户和服务器使用的运输层端口号是多少?
答:在图20中可以看到,IPv6首部中的"Next header"字段的值是0x11。这个字段表示下一个头部的类型,0x11对应于UDP。因此:
IP首部中的协议字段的值是0x11。该字段表明DNS的传输层采用的是UDP协议。
在图中还可以看到,DNS客户端使用的目的端口是53,而DNS服务器使用的目的端口是55979。

图20 DNS响应分组的详细信息
6)TCP 协议分析
在显示过滤中输入tcp过滤出tcp报文,然后点击菜单栏中的 Statitics ---> Flow Graph,会弹出如图21所示界面,将选项勾选修改成图21所示之后点击ok,弹出TCP的流图,然后回答下述问题:

图21 Flow Graph选项对话框

图22 Flow Graph
(1)TCP 的连接建立在HTTP 协议请求之前还是之后?
答:TCP 的连接建立在HTTP 协议请求之前,TCP 连接通过三次握手来建立,只有当 TCP 连接成功建立后,才能进行 HTTP 请求。
(2)从连接建立的第一个报文看,web 服务器的IP 地址是多少?该报文中以太网帧的目的MAC 地址是多少?这个MAC 地址是哪个接口的MAC 地址?是否是web 服务器接口的MAC 地址?
答:在图22中,从第一个报文来看,web 服务器的IP 地址为47.95.96.14,然后在显示过滤中输入指令"ip.addr==47.95.96.14",查看其中一个报文的详细信息可以观察到以太网帧的目的 MAC 地址是68:db:54:a5:34:c6,是 web 服务器接口的MAC 地址,如图23所示。

图23 ip.addr==47.95.96.14的报文的详细信息
(3)从TCP 流图中找到本机与Web 服务器建立连接的过程,并进行截图。用于发起与服务器TCP 连接的TCP SYN 报文段的序号是多少?在该报文段中SYN 标志位和ACK 标志位的值分别是多少?该报文段携带数据了吗?
答:本机与Web 服务器建立连接的TCP 流图见图24。报文段的序号是Seq=1。
根据图24,可以看出:在第 0.165 秒,源 IP 192.168.1.229 向目标 IP 47.95.96.14 发送了一个 TCP 包。此包的序列号 Seq=1,且标记为 [FIN, ACK],但实际上这是建立连接的第一次握手,应该是 SYN 包。因此,SYN 标志位为 1,而 ACK 标志位为 0,因为它不是一个确认包。
根据图23中的信息,该报文段长度(Len)为 0,所以没有携带数据。

图24 TCP 流图
(4)服务器应答上述TCP SYN 报文段的SYN ACK 报文段的序号是什么?在该SYN ACK 报文段的确认号是多少?服务器是怎样确定这个确认号的?在该报文段中SYN 标志位和ACK 标志位的值分别是多少?该报文段携带数据了吗? 答:序号是 Seq=0。确认号是 Ack=2。服务器通过将客户端发送的 SYN 报文段的序列号(Seq=1)加一来确定确认号,即 Ack=1+1=2。在服务器应答的 SYN ACK 报文段中,SYN 标志位的值为 1,ACK 标志位的值也为 1。因为其长度(Len)为 0,所以服务器应答的 SYN ACK 报文段没有携带数据。
(5)本机对服务器的SYN ACK 报文段进行确认的ACK 报文段携带数据了吗?在该报文段中SYN 标志位值是多少?
答:不携带数据,SYN标志位的值为0。
7)HTTP 协议分析
在显示过滤中输入http过滤出HTTP报文,此时查看任意一个报文的详细信息,如图25所示,然后回答下述问题:

图25 HTTP报文的详细信息
(1)HTTP 协议的运输层采用什么协议?HTTP 协议的默认端口是多少?这个端口是服务器的端口还是客户端的?
答:从图25中可以看到,HTTP 协议的运输层采用的是 UDP 协议。HTTP 协议的默认端口是 80,这个端口是服务器的端口。
(2)从报文分析看,HTTP 使用的方法是什么?HTTP 协议的版本是多少?
答:从报文分析看,HTTP 使用的方法是 GET 方法。HTTP 协议的版本是 HTTP/1.1。
结语
通过对Wireshark的实际操作和对网络协议的细致分析,我们不仅掌握了这款工具的基本使用方法,还深化了对以太网帧结构、ARP协议、DNS解析、TCP连接建立以及HTTP请求响应机制的理解。实践证明,Wireshark是一个非常有效的学习和调试工具,它可以帮助我们更好地理解和解决网络环境中遇到的各种问题。希望这篇博客能为你提供有价值的参考,激发你对计算机网络更深的兴趣和探索。
补充
此处为实验中的一些注意事项:
在安装 Wireshark 之前,需确保已安装 WinPcap 网络监测驱动程序。此外,捕获分组前应选择正确的网络接口,以避免捕获无关数据。同时,捕获结果应及时保存,以便后续分析。合理使用捕获过滤和显示过滤功能,可以显著提高分析效率。然而,长时间捕获可能影响系统性能,因此应设定合理的捕获时间和数据量限制。最后,利用 Wireshark 帮助文档,可以更好地掌握软件的高级功能。