ARP协议 Address Resolution Protocol 地址解析协议
在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧之前将目标主机的IP地址转换成目标主机的MAC地址的过程。ARP协议的基本功能就是通过目标主机的IP地址,查询目标主机的MAC地址,以保证通信的顺利进行。协议又称做服务,ARP协议也即ARP服务,提供把IP地址转换成MAC地址的服务!
IP地址与MAC地址在互连网中的作用
既然每个以太网设备在出厂时都有一个唯一的MAC地址了,那为什么还需要为每台主机再分配一个IP地址呢?或者说为什么每台主机都分配唯一的IP地址了,为什么还要在网络设备(如网卡,集线器,路由器等)生产时内嵌一个唯一的MAC地址呢?主要原因有以下几点:(1)IP地址的分配是根据网络的拓朴结构,而不是根据谁制造了网络设置。若将高效的路由选择方案建立在设备制造商的基础上而不是网络所处的拓朴位置基础上,这种方案是不可行的。(2)当存在一个附加层的地址寻址时,设备更易于移动和维修。例如,如果一个以太网卡坏了,可以被更换,而无须取得一个新的IP地址。如果一个IP主机从一个网络移到另一个网络,可以给它一个新的IP地址,而无须换一个新的网卡。
无论是局域网,还是广域网中的计算机之间的通信,最终都表现为将数据包从某种形式的链路上的初始节点出发,从一个节点传递到另一个节点,最终传送到目的节点。数据包在这些节点之间的移动都是由ARP(Address Resolution Protocol:地址解析协议)负责将IP地址映射到MAC地址上来完成的。
我们的网络基础硬件是工作在网卡与交换机的二层结构下的,只能识别MAC地址;
这二层结构并不能直接识别IP地址寻址,如果要走TCP /IP协议必须最终转换成MAC地址。
IP地址只是一个逻辑地址,主机相互通信时,首先要知道对方IP地址所对应的物理地址才能在物理网络上进行传输;地址解析通过ARP协议完成。
主机的以太网网卡只能识别MAC地址,而不能识别IP地址,若数据帧中不指明主机B的MAC 地址,主机B的网卡不能识别该帧是发给自己的,因此主机A仅知道主机B的IP地址还不够,还必须知道主机B的MAC地址,才能完成对主机B的访问;网络之间是用IP地址寻址,网络之内(同一物理网段或称IP子网)是用MAC地址寻址。
为了通俗易懂的解释ARP协议的作用,这里就举一个简单的PING命令例子:
假设在一个局域网中,(注意这里的前提是两台主机在同一局域网中)我们的计算机IP地址是192.168.1.1,现在DOS窗口中执行这个命令:ping192.168.1.2。该命令会通过ICMP协议发送ICMP数据
包。该过程需要经过下面的步骤:
1、应用程序构造数据包,该步骤是产生ICMP包,然后把它提交给内核(网卡驱动程序);
2、内核检查是否能够转化该IP地址为MAC地址,也就是在本地的ARP缓存中查看IP-MAC对应表;
3、如果存在该IP-MAC对应关系,那么跳到步骤7;如果不存在该IP-MAC对应关系,那么接续下面的步骤;
4、内核进行ARP广播,即发送 ARP Request,向整个网络中大喊,这个IP是谁的,这个IP是谁的(这个ARP Request中包含有我们计算机的MAC地址;
5、当192.168.1.2主机接收到该ARP请求后,就发送一个ARP 回应,即ARP REPLY命令,说道:这个IP是我的,你看这是我的MAC地址(ARP Request中包含自己的MAC地址);
6、我们的计算机获得192.168.1.2主机的IP-MAC地址对应关系,就保存到自己的ARP缓存中;
7、内核将把目标主机IP转化为MAC地址,然后封装在以太网头结构中,再把数据发送出去;
8、这样主机B看到发送过来的数据包包头里有自己的MAC地址,才会识别它,噢,这个数据是发送给我的(当数据包包头里只有B的IP地址时,主机B会不认识它,不去接收这个数据包)
IP地址具有全网范围内的寻址能力,主机A和B可能分别处在不同网络,主机A要访问主机B首先要知道主机B的IP地址,不然找不到主机B所在的网络。也就是说有了主机B的IP地址,主机A会知道主机B在哪里,知道它所在的网络,但不会把数据给它,只有得到它的MAC地址,之后,才会给它,就像验证身份证一样。
使用 arp -a 命令就可以查看本地的ARP缓存内容,所以,执行一个本地的PING命令后,ARP缓存就会存在一个目的IP的记录了。当
然,如果你的数据包是发送到不同网段的目的地,那么就一定存在一条网关的IP-MAC地址对应的记录。
知道了ARP协议的作用,就能够很清楚地知道,数据包的向外传输是非常依赖MAC地址,可以看出ARP协议在网络传输中的不可缺少的作用。
假如说两台主机不在同一局域网,即便知道目的主机的MAC地址,两者也不能直接通信,必须经过路由转发才可以。所以此时,发送主机通过ARP协议获得的将不是目的主机的MAC地址,而是一台可以通往局域网外的路由器的某个端口的MAC地址。于是此后发送主机发往目的主机的所有帧,都将发往该路由器,通过它向外发送。这种情况称为ARP代理(ARP Proxy)。也就是说,本地主机当寻求一个IP地址的MAC时,找不到,不是同一局域网,那它会收到路由器的MAC地址,说,这个数据就交给你了,剩下的事就你来处理了,你去找目的主机吧!
每次都要用ARP request来寻求MAC是很低效的,ARP cache则很好的解决了这个问题
ARP协议工作在交换机(局域网内部)那一层面
总结:
IP地址是逻辑地址寻址,工作在网络层,具有全网范围内的寻址能力,可以快速定位目标地址所在的网络
MAC地址是物理地址寻址,工作在数据链路层,要将数据包发给对方必须知道对方的MAC地址,因为主机的以太网网卡只能识别MAC地址