学习使用Wireshark的读书笔记
地址解析协议
24d7bb85ccac60c50d1267b440c2d38b.jpg网络上的通信会使用到逻辑地址(IP地址)和物理地址(MAC地址)。逻辑地址可以使得不同网络以及没有直接相连的设备之间能够进行通信。物理地址则用来在单一网段中交换机直接连接的设备之间进行通信。在大多数情况下,正常通信需要这两种地址协同工作。
我们假设这样一个场景:你需要和你网络中的一个设备进行通信,这个设备可能是某种服务器,或者只是你想与之共享文件的另一个工作站。你所用来创建这个通信的应用已经得到这个远程主机的IP地址(通过DNS服务),也意味着系统已经拥有用来构建它想要在第3层到第7层中传递的数据包所需要的信息。这时它所需要的唯一信息就是第2层包含目标主机MAC地址的数据链路层数据。
之所以需要MAC地址,是因为网络中用于连接各个设备的交换机使用了内容寻址寄存器(CAM)。这个表列出了它在每一个端口所有连接设备的MAC地址。当交换机收到一个指向特定MAC地址的流量,它会使用这个表,来确定应该使用哪一个端口发送流量。如果目标的MAC地址是未知的,这个传输设备会首先在它的缓存中查找这个地址,如果没有找到,那么这个地址就需要在网络上额外的通信来解析了。
TCP/IP网络(基于IPv4)中用来将IP地址解析为MAC地址的过程称为地址解析协议(Address Resolution Protocol,ARP),它的解析过程只使用两种数据包:一个ARP请求与一个ARP响应。
ARP头
ARP数据包结构.png让我们做个小实验,在局域网内ping一个主机IP,假设是第一次ping,本机的ARP表并未缓存,可以通过arp -a
命令查看。
本机IP192.168.3.7,ping局域网内192.168.3.5的主机,执行以下命令:
ping 192.168.3.5
开始抓包分析。
ARP请求
ARP请求上图是一个ARP请求数据包,通过Wireshark的Packet Details面板中,检查以太网头,来确定这个数据包是否是一个真的广播数据包。这个数据包的目的地址是ff:ff:ff:ff:ff:ff:ff。这是一个以太网的广播地址,所有发送到这个地址的数据包都会被广播到当前网段中的所有设备。这个数据包中以太网头的源地址就是我的MAC地址。
在这个给定的结构中,我们可以确定这的确是一个在以太网上使用IP的ARP请求,从数据包的操作码(opcode)为1可以得知。这个ARP的头列出了发送方的IP(本机的IP 192.168.3.7)和MAC地址,以及接收方的IP地址192.168.3.5。我们想要得到的目标MAC地址,还是未知的,所以这里的目的MAC地址填写为00:00:00:00:00:00。
ARP响应
ARP响应这是一个回应ARP请求的响应,opcode现在是2表示这是一个响应而不是请求。
发送方和接收方的地址发生了转换,重要的是现在数据包中所有的信息都是可用的,也就是说我们现在有了192.168.3.5主机的MAC地址。
ARP缓存列表
执行以下命令
arp -a
arp -a
可以得知192.168.3.5及其对应的MAC地址已经被缓存。
无偿的ARP
大多数情况下,一个设备的IP地址是可以改变的。当这样的改变发生后,网络主机中缓存的IP和MAC地址映射就不再有效了。为了防止造成通信错误,无偿的ARP请求会被发送到网络中,强制所有收到它的设备去用新的IP和MAC地址映射更新缓存。
image.png检查上述数据包,你会看见这个数据包是以广播的形式发送,以便网络上的所有主机都能收到它。这个ARP头的特点就是发送方的IP地址和目标IP地址是相同的。当这个数据包被网络中的其他主机接收到之后,它会让这些主机更新映射表,由于这个ARP数据包时未经请求的,却导致客户端更新ARP缓存,所以会称之为无偿。
我是咕咕鸡,一个还在不停学习的全栈工程师。
热爱生活,喜欢跑步,家庭是我不断向前进步的动力。
网友评论