在以太网中,无论是计算机的网卡,还是网络设备的接口,都存在一个我们认为是全球唯一物理地址(mac),而ARP协议,就是用来获取到设备的物理地址的一个TCP/IP协议。
当一个数据包将要被转发的时候,这个时候我们只知道该数据包的目的IP,但是数据包得传输还需要进行一次二层封装(以太包的封装),而以太包中,源物理地址是自己的mac,需要知道目的mac,这时候,就需要通过ARP协议来,进行目的mac查询。
假设A向B 发送数据包,假设,A的IP为192.168.1.1,MAC地址为0024.7EDF.CDCD。而B的IP为192.168.1.2,MAC为0050.56C0.0001。此时需要发送的这个数据包,源IP为192.168.1.1,源MAC为0024.7EDF.CDCD,目的IP 为192.168.1.2,但是A并不知道B的MAC地址是多少,所以需要进行ARP的请求。
A和B的ARP的过程如下:
1、 A发现自己并不知道B的MAC地址(可以通过ARP表来查看),将以广播的方式,发送一个ARP请求包,在该ARP请求包中,源IP 为192.168.1.1,源MAC为0024.7EDF.CDCD,目的IP为192.168.1.2,目标MAC为0000.0000.0000(代表未知)。由于该ARP请求包是以广播的形式发送的,该网段上所有的主机都可以收到,但是由于该请求中的目的IP为192.168.1.2,则只有B收到会处理。
2、 B发现该数据包为ARP请求包且目的IP为自己,则有两件事情需要出路:将A的IP与MAC地址的对应关系存入自己的ARP表(主机的ARP表象,使用ARP –a命令可以看到)中,之后以单播的方式发送ARP应答包给A,其中包含了自己的MAC地址。
3、 A收到该ARP的应答包后,将主机B的MAC地址加入到自己的ARP表中,将数据包封装目的MAC后转发出去。
从以上ARP协议的过程来看,其实通过生活中的例子,很容易理解。假使此时我面对一群人,我要给小王一本书,此时这本书就是我要发的“数据包”,而“小王”这个名字,就是我所知道的目的IP,但是我并不知道小王是谁,于是我面对这群人喊(发广播):“谁是小王”,于是,虽然所有人都听到了,但是只是小王会给我应答,说:“我是小王”,小王此时的应答我们可以理解为,我们知道了目的MAC.
通过以上的例子,可能会有朋友说:现实中,万一有人冒充小王欺骗怎么办,在以太网中难道没有这种情况? 我会告诉你:在以太网中,这种欺骗是存在的,这里不再详细阐述,具体请搜索“ARP欺骗”。