《Wireshark数据包分析实战(第2版)》—第6章6.1节地址解析协议

本节书摘来自异步社区《Wireshark数据包分析实战(第2版)》一书中的第6章6.1节地址解析协议,作者【美】Chris Sanders,更多章节内容可以访问云栖社区“异步社区”公众号查看。

第6章 通用底层网络协议
Wireshark数据包分析实战(第2版)
无论是处理延迟问题,还是甄别存在错误的应用,抑或对安全威胁进行聚焦检查,都是为了发现异常的流量,而你必须首先了解正常的流量。在下面的几章中,你将会学到正常的网络流量在数据包级别是如何工作的。

我们将介绍最常见的几种协议,包括最基础的TCP、UDP和IP,以及如HTTP、DHCP、DNS等最常用的应用层协议。在每个协议的相关部分,都会至少有一个捕获文件供你下载,并可以让你直接上手分析。在这一章中,我们将着重关注在OSI分层模型中从第1层到第4层的底层协议。

这应该是这本书中最重要的几章。如果跳过了这些内容,你会感到如同周末晚餐中没有牛角面包那样不完整,即使你对每个协议是如何工作的都了然于胸,那也请至少快速浏览一遍,以便复习每个协议数据包的结构。

6.1 地址解析协议
网络上的通信会使用到逻辑地址和物理地址。逻辑地址可以使得不同网络以及没有直接相连的设备之间能够进行通信。物理地址则用来在单一网段中交换机直接连接的设备之间进行通信。在大多数情况下,正常通信需要这两种地址协同工作。

我们假设这样一个场景:你需要和你网络中的一个设备进行通信,这个设备可能是某种服务器,或者只是你想与之共享文件的另一个工作站。你所用来创建这个通信的应用已经得到了这个远程主机的IP地址(通过DNS服务,这将在第7章中介绍),也意味着系统已经拥有了用来构建它想要在第3层到第7层中传递的数据包所有需要的信息。这时它所需要的唯一信息就是第2层包含目标主机MAC地址的数据链路层数据。

之所以需要MAC地址,是因为网络中用于连接各个设备的交换机使用了内容寻址寄存器(CAM)。这个表列出了它在每一个端口的所有连接设备的MAC地址。当交换机收到了一个指向特定MAC地址的流量,它会使用这个表,来确定应该使用哪一个端口发送流量。如果目标的MAC地址是未知的,这个传输设备会首先在它的缓存中查找这个地址,如果没有找到,那么这个地址就需要在网络上额外的通信来进行解析了。

TCP/IP网络(基于IPv4)中用来将IP地址解析为MAC地址的过程称为地址解析协议(Address Resolution Protocol, ARP)。这个协议在RFC826中进行了定义,它的解析过程只使用两种数据包:一个ARP请求与一个ARP响应,如图6-1所示。

12-1248 数据包分析实用技术-使用Wireshark解决现实世界中的网络问题(第2版)(改三校)0601.tif


《Wireshark数据包分析实战(第2版)》—第6章6.1节地址解析协议

注意
 RFC(Request for Comments)是定义协议实现标准的官方文档。你可以在RFC Editor的首页上搜索RFC文档,http://www.rfc-editor.org/
这个传输计算机会发出一个ARP请求,基本上就是问“大家好,我的IP地址是XX.XX.XX.XX,MAC地址是XX:XX:XX:XX:XX:XX。我需要向那个IP地址是XX.XX.XX.XX的家伙发些东西,但我不知道它的硬件地址,你们谁有这个IP地址的,可否请回复给我你的MAC地址?”

这个数据包将被广播给网段中的所有设备。不是这个IP地址的设备将简单地丢弃这个数据包,而拥有这个IP地址的设备将发送一个ARP响应,就像是说:“你好,传输设备,我就是你所找的那个拥有IP地址为XX.XX.XX.XX的,我的MAC地址是XX:XX:XX:XX:XX:XX。”

一旦这个解析过程完成了,传输设备就会对这个设备MAC和IP对应关系的缓存进行更新,并且开始传输数据。

注意
 在Windows主机中,你可以通过在命令行中键入arp -a来查看ARP表。
通过实际情况来看地址解析的这个过程,有助于你更好地理解它究竟是怎么工作的。但是在看一些例子之前,我们先介绍一下ARP数据包头。

6.1.1 ARP头
如图6-2所示,ARP头包含下列的几个域。

硬件类型:数据链路层使用的类型数据。在大多数情况下,这个类型都是以太网(类型1)。

协议类型:ARP请求正在使用的高层协议。

硬件地址长度:正在使用的硬件地址的长度(八位组/字节)。

12-1248数据包分析实用技术-使用Wireshark解决现实世界中的网络问题tu0


《Wireshark数据包分析实战(第2版)》—第6章6.1节地址解析协议

协议地址长度:对于指定协议类型所使用的逻辑地址的长度(八位组/字节)。

操作:ARP数据包的功能:1表示请求,2表示响应。

发送方硬件地址:发送者的硬件地址。

发送方协议地址:发送者的高层协议地址。

目标硬件地址:目标接收方的硬件地址(ARP请求中为0)。

目标协议地址:目标接受方的高层协议地址。

现在打开arp_resolution.pcap这个文件,就可以看到实际的解析过程。我们将对这个过程中的每个数据包单独进行分析。

6.1.2 数据包1:ARP请求
如图6-3所示,第1个数据包是一个ARP请求。我们可以通过在Wireshark的Packet Details面板中,检查以太网头,来确定这个数据包是否是一个真的广播数据包。这个数据包的目的地址是ff:ff:ff:ff:ff:ff图标1。这是一个以太网的广播地址,所有发送到这个地址的数据包都会被广播到当前网段中的所有设备。这个数据包中以太网头的源地址就是我们的MAC地址图标2。


《Wireshark数据包分析实战(第2版)》—第6章6.1节地址解析协议

在这个给定的结构中,我们可以确定这的确是一个在以太网上使用IP的ARP请求。这个ARP头列出了发送方的IP(192.168.0.114)和MAC地址(00:16:ce:6e:8b:24)图标3,以及接收方的IP地址192.168.0.1图标4。我们想要得到的目标MAC地址,还是未知的,所以这里的目的MAC地址填写为00:00:00:00:00:00。

6.1.3 数据包2:ARP响应
在我们对最初请求的响应中(如图6-4所示),第一个数据包中的源MAC地址成为了这个以太网头中的目的地址。这个ARP响应和之前的ARP请求看上去很像,除了以下几点。

数据包的操作码(opcode)现在是0x0002,用来表示这是一个响应而不是请求。
地址信息进行了颠倒——发送方的MAC地址和IP地址现在变成了目的MAC地址和IP地址。
最重要的是,现在数据包中所有的信息都是可用的,也就是说我们现在有了192.168.0.1主机的MAC地址(00:13:46:0b:22:ba)。


《Wireshark数据包分析实战(第2版)》—第6章6.1节地址解析协议

6.1.4 无偿的ARP
在我的家乡,当一些事是所谓的“无偿”的时候,那通常没有什么好的含义。但无偿发送的ARP却是一个好东西。

在多数情况下,一个设备的IP地址是可以改变的。当这样的改变发生后,网络主机中缓存的IP和MAC地址映射就不再有效了。为了防止造成通信错误,无偿的ARP请求会被发送到网络中,强制所有收到它的设备去用新的IP和MAC地址映射更新缓存(如图6-5所示)。

12-1248 数据包分析实用技术-使用Wireshark解决现实世界中的网络问题(第2版)(改二校)改0605.tif


《Wireshark数据包分析实战(第2版)》—第6章6.1节地址解析协议

几个不同的情形都会产生无偿ARP数据包,其中一个最常见的就是IP地址的改变。打开arp_gratuitous.pcap这个捕获文件,你就会看到一个实际例子。这个文件只包含一个数据包(如图6-6所示),因为这就是无偿数据包的全部了。

《Wireshark数据包分析实战(第2版)》—第6章6.1节地址解析协议

检查这个以太网头,你会看见这个数据包是以广播的形式发送,以便网络上的所有主机能够接收到它图标1。这个ARP头看上去和ARP请求很像,除了发送方的IP地址图标2和目标IP地址图标3是相同的。当这个数据包被网络中的其他主机接收到之后,它会让这些主机使用新的IP和MAC地址关系更新它们的ARP表。由于这个ARP数据包是未经请求的,却导致客户端更新ARP缓存,所以会称之为无偿。

你会在一些不同的情形下注意到无偿ARP数据包的存在。如上所示,设备IP地址的改变会生成它,并且一些操作系统也会在启动时进行无偿ARP的发送。此外,你可能会注意到一些系统使用无偿ARP数据包对流入流量进行负载均衡。

上一篇:初识 K8s,创建一个guestbook留言簿应用 【K8s | from zero to hero】


下一篇:.NET6新东西--PriorityQueue