浅析arp协议

一、前言

1. 什么是ARP?   
ARP (Address Resolution Protocol) 是个地址解析协议。最直白的说法是:在IP以太网中,当一个上层协议要发包时,有了该节点的IP地址,ARP就能提供该节点的MAC地址。  
2。为什么要有ARP?
OSI 模式把网络工作分为七层,彼此不直接打交道,只通过接口(layre interface). IP地址在第三层, MAC地址在第二层。
协议在发生数据包时,首先要封装第三层 (IP地址)和第二层 (MAC地址)的报头, 但协议只知道目的节点的IP地址,不知道其物理地址,又不能跨第二、三层,所以得用ARP的服务。
详细说明:
A 在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址,而数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃。因此在通讯前必须获得目的主机的硬件地址。ARP协议就起到这个作用
B 当一台主机把以太网数据帧发送到位于同一局域网上的另一台主机时,是根据 48位的以太网地址来确定目的接口的,设备驱动程序从不检查 IP数据报中的目的IP地址。ARP(地址解析)模块的功能为这两种不同的地址形式提供映射:32位的 IP地址和 48位的以太网地址

二、ARP报文

这里写图片描述

注意:在ARP操作中,有效数据的长度为28个字节,不足以太网的最小长度46字节长度,需要填充字节,填充字节最小长度为18个字节

三.ARP协议工作过程:

原理:(ARP协议只使用于局域网中)

1> 在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。
2> 在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。
3> ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。
4> 点对点的连接是不需要ARP协议的

工作过程:

1> 当主机A向本局域网上的某个主机B发送IP数据报时,就先在自己的ARP缓冲表中查看有无主机B的IP地址。
2> 如果有,就可以查出其对应的硬件地址,再将此硬件地址写入MAC帧,然后通过以太网将数据包发送到目的主机中。
3> 如果查不到主机B的IP地址的表项。可能是主机B才入网,也可能是主机A刚刚加电。其高速缓冲表还是空的。在这中情况下,主机A就自动运行ARP。
(1)ARP进程在本局域网上广播一个ARP请求分组。ARP请求分组的主要内容是表明:我的IP地址是192.168.0.2,我的硬件地址是00-00-C0-15-AD-18.我想知道IP地址为192.168.0.4的主机的硬件地址。
(2)在本局域网上的所有主机上运行的ARP进行都收到此ARP请求分组。
(3)主机B在ARP请求分组中见到自己的IP地址,就向主机A发送ARP响应分组,并写入自己的硬件地址。其余的所有主机都不理睬这个ARP请求分组。ARP响应分组的主要内容是表明:“我的IP地址是192.168.0.4,我的硬件地址是08-00-2B-00-EE-AA”,请注意:虽然ARP请求分组是广播发送的,但ARP响应分组是普通的单播,即从一个源地址发送到一个目的地址。

事例说明:用ping说明ARP工作的原理
假设我们的计算机IP地址是192.168.1.1,要执行这个命令:ping192.168.1.2。该命令会通过ICMP协议发送ICMP(以太网控制报文协议)数据包
该过程需要经过下面的步骤:  
1> 应用程序构造数据包,该示例是产生ICMP包,被提交给内核(网络驱动程序);   
2> 内核检查是否能够转化该IP地址为MAC地址,也就是在本地的ARP缓存中查看IP-MAC对应表;
3> 如果存在该IP-MAC对应关系,那么跳到步骤 7;
如果不存在该IP-MAC对应关系,那么接续下面的步骤;
4> 内核进行ARP广播,目的MAC地址是FF-FF-FF-FF-FF-FF,ARP命令类型为REQUEST(1),其中包含有自己的MAC地址;   
5> 当192.168.1.2主机接收到该ARP请求后,就发送一个ARP的REPLY(2)命令,其中包含自己的MAC地址;   
6> 本地获得192.168.1.2主机的IP-MAC地址对应关系,并保存到ARP缓存中;   
7> 内核将把IP转化为MAC地址,然后封装在以太网头结构中,再把数据发送出去;
 
特殊情况:

ARP是解决同一个局域网上的主机或路由器的IP地址和硬件地址的映射问题。如果所要找的目标设备和源主机不在同一个局域网上。
1>此时主机A就无法解析出主机B的硬件地址(实际上主机A也不需要知道远程主机B的硬件地址);
2>此时主机A需要的是将路由器R1的IP地址解析出来,然后将该IP数据报发送给路由器R1.
3>R1从路由表中找出下一跳路由器R2,同时使用ARP解析出R2的硬件地址。于是IP数据报按照路由器R2的硬件地址转发到路由器R2。
4>路由器R2在转发这个IP数据报时用类似方法解析出目的主机B的硬件地址,使IP数据报最终交付给主机B.
说明:
A 如果你的数据包是发送到不同网段的目的地,那么就一定存在一条网关的IP-MAC地址对应的记录。   
B 知道了ARP协议的作用,就能够很清楚地知道,数据包的向外传输很依靠ARP协议,当然,也就是依赖ARP缓存。要知道,ARP协议的所有操作都是内核自动完成的,同其他的应用程序没有任何关系。同时需要注意的是,ARP协议只使用于本网络。

ARP地址解析协议常用在局域网内实现IP地址到MAC地址转化。从而或得目的主机的硬件地址 。
每台主机都维护一个ARP缓存表。可以用arp -a命令查看
用arp脚本也可以查看缓存表,下面给出脚本代码及运行结果

代码:

#!/bin/bash

head='192.168.137'
i=1
count=0
while [ $i -le 254 ]
do
    if [ $count -gt  20 ];then
        count=0
        sleep 1
    fi
    ping -c1 "${head}"".$i" &
    let i++
    let count++
done
wait 
echo '###############'
arp -a | grep -v 'incomplete'
echo '###############'

结果:
这里写图片描述

* ARP缓冲表*
1> ARP协议的本质是完成网络地址到物理地址的映射。从概念上将就是找到一个映射方法f,使得“物理地址 = f(网络地址)“。物理地址有两种基本类型:以太网类型和令牌环网类型。网络地址特指IP地址,对映射方法的要求就是高效。具体到以太网,它使用的是动态绑定转换的方法。一般是设置ARP高速缓存,通过学习,老化,更新,溢出算法处理ARP映射表来解决这些问题。
Ø 学习指ARP收到任何指向本结点IP地址的ARP/IP包,从中提取出地址对,当ARP缓冲表中无对应项时,由ARP接收部分添加;
Ø 老化指为每项设置寿命域,以便代谢掉陈旧的地址映射项;
Ø 更新指ARP提取到新的地址对时,用其更新缓存里已有的对应项;
Ø 溢出算法指当缓存慢时,采取何种方法替代旧有的地址对。
2> ARP缓存表由状态,寿命,IP地址,MAC地址4个字段组成。状态字段指示地址对是否有效;寿命字段用于老化操作,初始存入最大值,以后由OS时间函数调用,每秒减1,直至为0清除;IP地址和MAC地址字段保存网络地址和物理地址的映射。围绕ARP缓存表,完成了4种操作:学习,老化,更新,表满处理。
3> 当ARP被询问一个已只IP地址节点的MAC地址时,先在ARPcache 查看
l 若存在,就直接返回MAC地址,
l 若不存在,才发送ARP request向局域网查询。
4> 当主机A向B发送数据报时,很可能以后不久主机B还要向A发送数据报,因而主机B可能要向A发送ARP请求分组。
所以,为了减少网络上的通信量,主机A在发送其ARP请求分组时,就将自己的IP地址到硬件地址的写入主机B自己的ARP高速缓冲表中。这对主机B以后向A发送数据报时就更方便了。

arp命令
1. 使用arp-a命令就可以查看本地的ARP缓存内容,所以,执行一个本地的PING命令后,ARP缓存就会存在一个目的IP的记录了。
2. 使用arp –d来删除ARP高速缓存中的某一项内容
3. 使用arp –s来增加高速缓冲表中的内容,这个命令需要主机名和以太网地址。新增加的内容是永久性的,除非在命令行的末尾加上关键字temp。
arp –s 157.55.85.212 00-aa-aa-562-c6-09
增加一个静态的ARP表项。
4. arppub –s:使系统起着主机ARP代理功能。系统将回答与主机名对应的IP地址的ARP请求。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值