在以太网中,无论是计算机的网卡,还是网络设备的接口,都存在一个我们认为是全球唯一物理地址(mac),而ARP协议,就是用来获取到设备的物理地址的一个TCP/IP协议。

当一个数据包将要被转发的时候,这个时候我们只知道该数据包的目的IP,但是数据包得传输还需要进行一次二层封装(以太包的封装),而以太包中,源物理地址是自己的mac,需要知道目的mac,这时候,就需要通过ARP协议来,进行目的mac查询。

假设AB 发送数据包,假设,AIP192.168.1.1MAC地址为0024.7EDF.CDCD。而BIP192.168.1.2MAC0050.56C0.0001。此时需要发送的这个数据包,源IP192.168.1.1,源MAC0024.7EDF.CDCD,目的IP 192.168.1.2,但是A并不知道BMAC地址是多少,所以需要进行ARP的请求。

ABARP的过程如下:

1、     A发现自己并不知道BMAC地址(可以通过ARP表来查看),将以广播的方式,发送一个ARP请求包,在该ARP请求包中,源IP 192.168.1.1,源MAC0024.7EDF.CDCD,目的IP192.168.1.2,目标MAC0000.0000.0000(代表未知)。由于该ARP请求包是以广播的形式发送的,该网段上所有的主机都可以收到,但是由于该请求中的目的IP192.168.1.2,则只有B收到会处理。

2、     B发现该数据包为ARP请求包且目的IP为自己,则有两件事情需要出路:将AIPMAC地址的对应关系存入自己的ARP表(主机的ARP表象,使用ARP –a命令可以看到)中,之后以单播的方式发送ARP应答包给A,其中包含了自己的MAC地址。

3、     A收到该ARP的应答包后,将主机BMAC地址加入到自己的ARP表中,将数据包封装目的MAC后转发出去。

从以上ARP协议的过程来看,其实通过生活中的例子,很容易理解。假使此时我面对一群人,我要给小王一本书,此时这本书就是我要发的“数据包”,而“小王”这个名字,就是我所知道的目的IP,但是我并不知道小王是谁,于是我面对这群人喊(发广播):“谁是小王”,于是,虽然所有人都听到了,但是只是小王会给我应答,说:“我是小王”,小王此时的应答我们可以理解为,我们知道了目的MAC.

通过以上的例子,可能会有朋友说:现实中,万一有人冒充小王欺骗怎么办,在以太网中难道没有这种情况? 我会告诉你:在以太网中,这种欺骗是存在的,这里不再详细阐述,具体请搜索“ARP欺骗”。