地址解析协议 ARP

来源:互联网 发布:知乎网易云音乐 编辑:程序博客网 时间:2024/06/11 19:43

基本功能

  在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址。而在TCP/IP协议栈中,网络层和传输层只关心目标主机的IP地址。这就导致在以太网中使用IP协议时,数据链路层的以太网协议接到上层IP协议提供的数据中,只包含目的主机的IP地址。于是需要一种方法,根据目的主机的IP地址,获得其MAC地址。这就是ARP协议要做的事情。所谓地址解析(address resolution)就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。
  另外,当发送主机和目的主机不在同一个局域网中时,即便知道目的主机的MAC地址,两者也不能直接通信,必须经过路由转发才可以。所以此时,发送主机通过ARP协议获得的将不是目的主机的真实MAC地址,而是一台可以通往局域网外的路由器的某个端口的MAC地址。于是此后发送主机发往目的主机的所有帧,都将发往该路由器,通过它向外发送。这种情况称为ARP代理(ARP Proxy)

工作原理

  

ARP

  在每台安装有TCP/IP协议的电脑里都有一个ARP缓存表,表里的IP地址与MAC地址是一一对应的。
  

ARP工作原理

  以主机A(192.168.1.5)向主机B(192.168.1.1)发送数据为例。当发送数据时,主机A会在自己的ARP缓存表中寻找是否有目标IP地址。如果找到了,也就知道了目标MAC地址,直接把目标MAC地址写入帧里面发送就可以了;如果在ARP缓存表中没有找到目标IP地址,主机A就会在网络上发送一个广播,A主机MAC地址是“主机A的MAC地址”,这表示向同一网段内的所有主机发出这样的询问:“我是192.168.1.5,我的硬件地址是"主机A的MAC地址".请问IP地址为192.168.1.1的MAC地址是什么?”网络上其他主机并不响应ARP询问,只有主机B接收到这个帧时,才向主机A做出这样的回应:“192.168.1.1的MAC地址是00-aa-00-62-c6-09”。这样,主机A就知道了主机B的MAC地址,它就可以向主机B发送信息了。同时A和B还同时都更新了自己的ARP缓存表(因为A在询问的时候把自己的IP和MAC地址一起告诉了B),下次A再向主机B或者B向A发送信息时,直接从各自的ARP缓存表里查找就可以了。ARP缓存表采用了老化机制(即设置了生存时间TTL),在一段时间内(一般15到20分钟)如果表中的某一行没有使用,就会被删除,这样可以大大减少ARP缓存表的长度,加快查询速度。
  ARP攻击就是通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞,攻击者只要持续不断的发出伪造的ARP响应包就能更改目标主机ARP缓存中的IP-MAC条目,造成网络中断或中间人攻击。
  ARP攻击主要是存在于局域网网络中,局域网中若有一个人感染ARP木马,则感染该ARP木马的系统将会试图通过“ARP欺骗”手段截获所在网络内其它计算机的通信信息,并因此造成网内其它计算机的通信故障。
  RARP的工作原理:
  1. 发送主机发送一个本地的RARP广播,在此广播包中,声明自己的MAC地址并且请求任何收到此请求的RARP服务器分配一个IP地址;
  2. 本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址;
  3. 如果存在,RARP服务器就给源主机发送一个响应数据包并将此IP地址提供给对方主机使用;
  4. 如果不存在,RARP服务器对此不做任何的响应;
  5. 源主机收到从RARP服务器的响应信息,就利用得到的IP地址进行通讯;如果一直没有收到RARP服务器的响应信息,表示初始化失败。

  6.如果在第1-3中被ARP病毒攻击,则服务器做出的反映就会被占用,源主机同样得不到RARP服务器的响应信息,此时并不是服务器没有响应而是服务器返回的源主机的IP被占用。

RARP 反向地址解析协议

  反向地址解析协议用于一种特殊情况,如果站点被初始化后,只有自己的物理网络地址而没有IP地址,则它可以通过RARP协议,并发出广播请求,征求自己的IP地址,而RARP服务器则负责回答。这样无IP的站点可以通过RARP协议取得自己的IP地址,这个地址在下一次系统重新开始以前都有效,不用连续广播请求。RARP广泛用于获取无盘工作站的IP地址。

ARP缓存表查看方法及修改

  ARP缓存表是可以查看的,也可以添加和修改。在命令提示符下,输入“arp -a”就可以查看ARP缓存表中的内容了,如附图所示。

 

  

arp -a

  用“arp -d”命令可以删除ARP表中所有的内容;

  用“arp+空格+ <指定ip地址>+空格-d” 可以删除指定ip所在行的内容

  用“arp -s”可以手动在ARP表中指定IP地址与MAC地址的对应,类型为static(静态),静态ARP缓存除非手动清除,否则不会丢失。无论是静态还是动态ARP缓存,重启启动计算机后都会丢失。

ARP 常见问题

1. 什么是ARP

  ARP (Address Resolution Protocol) 是个地址解析协议。最白的说法是:在IP-以太网中,当一个上层协议要发包时,有了节点的IP地址,ARP就能提供该节点的MAC地址。

2. 为什么要有ARP?

  OSI 模式把网络工作分为七层,彼此不直接打交道,只通过接口(layer interface). IP地址在第三层,MAC地址在第二层。协议在发生数据包时,得先封装第三层 (IP地址),第二层 (MAC地址)的报头,但协议只知道目的节点的IP地址,不知道其地址,又不能跨第二、三层,所以得用ARP的服务。

3. 什么是ARP cache

  ARP cache 是个用来储存(IP,MAC)地址的缓冲区。当ARP被询问一个已知IP地址节点的MAC地址时,先在ARP cache 查看,若存在,就直接返回MAC地址,若不存在,才发送ARP request向局域网查询。

4. ARP 有什么命令行?

  常用的包括:(格式因操作系统、路由器而异,但作用类似)
  - 显示ARP cache: show arp;arp -a
  - 清除ARP cache:arp -d

5. 路由器有ARP cache吗

  有的。路由器若有接口连接到局域网,就会有ARP cache。如果路由器的接口都是点对点的接口(serial interface),就不会有ARP cache。

6. 路由器怎么使用ARP cache

  路由器在转发数据包到下一站时,得用下一站的MAC地址来封装链路报头 (Link header),它向ARP查询这个地址。如果ARP cache里没有这个地址,路由器的ARP会发送ARP Request去查询。

7. ARP 和Ping 有什么关系?

  Ping是个常用的网络工具,检查远程主机、路由器是否在线。
  从源主机到目的主机,一路上ping可能被几个路由器转发,只要有一个ARP cache里没有下一站的MAC地址,路由器就会把ping丢弃 (称为ARP Miss)。由于ARP Miss而掉包,是个常见的掉包原因。

ARP协议

  ARP(Address Resolution Protocol)地址解析协议用于将计算机的网络地址(IP地址32位)转化为物理地址(MAC地址48位)[RFC826]。ARP协议是属于链路层的协议,在以太网中的数据帧从一个主机到达网内的另一台主机是根据48位的以太网地址(硬件地址)来确定接口的,而不是根据32位的IP地址。内核(如驱动)必须知道目的端的硬件地址才能发送数据。当然,点对点的连接是不需要ARP协议的。
 
 
注:有人说arp属于数据链路层的,也有人说它属于网络层的,我看的视频中说它是网络层的,但TCP详解中又说它属于中间层。在网络上关于这个问题搜了一下,发现回答最好的是:谈论ARP协议究竟属于第几层一点意义也没有,就跟讨论ICMP属于3层还是4层一样,搞清楚原理和应用场合就可以了。
        另附一篇文章:很多教科书和培训教材上,都把ARP协议划分到网络层。我想主要的原因在于ARP协议属于TCP/IP协议簇,而在TCP/IP模型中,所有定义的协议至少是在网际层(或称网络层,IP层)。但是,按照OSI的标准,当数据向下传递时,每层会加上自己的信息,各层互不干扰.这样当网络层的IP包进入链路层时,链路层该如何加这个头部的目标信息呢?它要依靠ARP协议来完成.显然如何加链路头并不是网络层的功能.而且,ARP协议工作时,并不使用IP的包头。所以也有很多人说,ARP是链路层的。
可以说,在TCP/IP模型中,ARP协议属于IP层;在OSI模型中,ARP协议属于链路层。

在sniffer软件中,捕获协议数据时,如果使用IP地址是无法捕获到ARP包的,因为IP地址是ARP协议的载荷,不在包头中。但ARP协议的载荷中,也并不包含任何上层的IP数据包。所以,构造和使用ARP协议的主体理解IP地址。从这个角度考虑,将ARP协议划分到IP层也有一定道理。

总之,具体到某个协议,它到底属于哪一层,并不是那么严格。到目前为止,理解到此。

原创粉丝点击