天天看点

一文搞懂ARP协议,8张图详解如何通过目的ip拿到mac地址

作者:IT一指禅

大家好,我是IT售前工程师Bernie。

我们知道,在网络通信中主机和主机通信的数据包需要依据 OSI 模型从上到下进行数据封装,当数据封装完整后,再向外发出。所以在局域网的通信中,不仅需要源目IP地址的封装,也需要源目 MAC 的封装。

如果一台主机在数据帧封装前不知道某个目的ip机器的mac地址怎么办呢? 这时候就需要通过 ARP 协议来获知目的主机的MAC 地址,完成数据封装。

什么是ARP

ARP 协议的全称是 Address Resolution Protocol,地址解析协议。说直白一点:ARP协议可以用来根据ip地址寻找mac地址的协议。

一文搞懂ARP协议,8张图详解如何通过目的ip拿到mac地址

ARP协议的工作原理

举个简单的例子,在同一个局域网内有4台主机通过交换机连接。那么,当pc1想要拿到ip=192.168.1.4对应的mac地址时。它将进行如下的操作

一文搞懂ARP协议,8张图详解如何通过目的ip拿到mac地址

第1步

它会查询自己的ARP协议表,看看有没有这个IP绑定的mac地址。我们可以通过cmd下输入arp -a指令查询ip与mac地址的对应关系表。如果能查询到,则拿到这个mac地址进行以太网协议的封装即可。

如果拿不到,就要通过arp广播的形式去询问同一个网段下的所有主机。

一文搞懂ARP协议,8张图详解如何通过目的ip拿到mac地址

第2步

pc1这台机器开始发送ARP广播,广播信息里面封装了ip地址和mac地址。这里ip地址为pc4的地址192.168.1.4,mac地址由于不知道,所以每一位都是0。

由于发送的是ARP广播协议,同一个vlan下的主机全都能接收到这条消息。

一文搞懂ARP协议,8张图详解如何通过目的ip拿到mac地址

第3步

每台主机收到了这条广播消息后,迅速查询下自己的ip地址和mac地址。如果发现数据包中ip地址是自己的ip,那么就第一时间更新自己的ARP表,将PC1的ip\mac地址做更新。然后,将自己的mac地址利用单播的形式返回给pc1。

一文搞懂ARP协议,8张图详解如何通过目的ip拿到mac地址

第4步

pc1收到响应回来的mac地址,立即更新到自己的ARP表中。同时,将IP数据包用这个mac地址为目的mac地址封装成帧与pc4通信。

不同网段之间的ARP协议

换一个思路,如果pc1和pc4不在同一个网段,如何才能拿到pc4的mac地址呢?

比如下图,pc1和pc2\pc3在同一个网段,但是和pc4\pc5不在同一个网段。

一文搞懂ARP协议,8张图详解如何通过目的ip拿到mac地址

很明显,pc1和pc4是不能直接使用ARP协议的,那么这就要使用ARP代理路由了。代理路由可以将pc1的广播转送给pc4/pc5,然后在响应时pc4也要借助于ARP代理路由将mac地址传给pc1。

ARP数据包

为了让大家更好的理解 ARP 协议以及广播和单播的概念,我们来看一下用 抓包工具抓到到的真实网络中的 ARP 过程,通过数据包的方式来呈现,地址信息如下,部分 MAC 信息隐去。

请求包

一文搞懂ARP协议,8张图详解如何通过目的ip拿到mac地址

响应包

一文搞懂ARP协议,8张图详解如何通过目的ip拿到mac地址

解读

Hardware type :硬件类型,标识链路层协议

Protocol type: 协议类型,标识网络层协议

Hardware size :硬件地址大小,标识MAC地址长度,这里是6个字节(48bti)

Protocol size: 协议地址大小,标识IP地址长度,这里是4个字节(32bit)

Opcode: 操作代码,标识ARP数据包类型,1表示请求,2表示回应

Sender MAC address :发送者MAC

Sender IP address :发送者IP

Target MAC address :目标MAC,此处全0表示在请求

Target IP address: 目标IP

总结

OSI模型把网络工作分为七层,IP地址在OSI模型的第三层,MAC地址在第二层。在通过以太网发送IP数据包时,需要先封装第三层(32位IP地址)、第二层(48位MAC地址)的报头。ARP 协议在TCP/IP模型中属于IP层(网络层),在OSI模型中属于链路层。

我是IT售前工程师Bernie,欢迎关注!下期见~

继续阅读