一文搞明白ARP

Posted 思源湖的鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一文搞明白ARP相关的知识,希望对你有一定的参考价值。

前言

较详细的学习下ARP

1、ARP简介

ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写,其作用是将已知IP地址转换为MAC地址

在链路层传输的是“帧”,帧里面是有目标主机的MAC地址的,但这个目标MAC地址是如何获得的呢?它就是通过ARP获得的。所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行

ARP是IPv4中网络层必不可少的协议,不过在IPv6中已不再适用,并被邻居发现协议(NDP)所替代

2、ARP映射

(1)静态映射

静态映射的意思是要手动创建一张ARP表,把逻辑(IP)地址和物理地址关联起来。这个ARP表储存在网络中的每一台机器上

知道其机器的IP地址但不知道其物理地址的机器就可以通过查ARP表找出对应的物理地址。这样做有一定的局限性,因为物理地址可能发生变化:

  • 机器可能更换NIC(网络适配器),结果变成一个新的物理地址

  • 在某些局域网中,每当计算机加电时,他的物理地址都要改变一次

  • 移动电脑可以从一个物理网络转移到另一个物理网络,这样会使物理地址改变

要避免这些问题出现,必须定期维护更新ARP表,此类比较麻烦而且会影响网络性能

(2)动态映射

动态映射时,每次只要机器知道另一台机器的逻辑(IP)地址,就可以使用协议找出相对应的物理地址

已经设计出的实现了动态映射协议的有ARP和RARP两种

  • ARP把逻辑(IP)地址映射为物理地址
  • RARP把物理地址映射为逻辑(IP)地址

3、ARP原理

假设主机A和B在同一个网段,主机A要向主机B发送信息,具体的地址解析过程如下:

  • 主机A首先查看自己的ARP表,确定其中是否包含有主机B对应的ARP表项。如果找到了对应的MAC地址,则主机A直接利用ARP表中的MAC地址,对IP数据包进行帧封装,并将数据包发送给主机B

  • 如果主机A在ARP表中找不到对应的MAC地址,则将缓存该数据报文,然后以广播方式(即以太网帧的目的MAC全为F)发送一个ARP请求报文。ARP请求报文中的发送端IP地址和发送端MAC地址为主机A的IP地址和MAC地址,目标IP地址和目标MAC地址为主机B的IP地址和全0的MAC地址(注意是报文中)。由于ARP请求报文以广播方式发送,该网段上的所有主机都可以接收到该请求,但只有被请求的主机(即主机B)会对该请求进行处理

  • 主机B比较自己的IP地址和ARP请求报文中的目标IP地址,当两者相同时进行如下处理:将ARP请求报文中的发送端(即主机A)的IP地址和MAC地址存入自己的ARP表中。之后以单播方式发送ARP响应报文给主机A,其中包含了自己的MAC地址

  • 主机A收到ARP响应报文后,将主机B的MAC地址加入到自己的ARP表中以用于后续报文的转发,同时将IP数据包进行封装后发送出去

在这里插入图片描述

4、ARP报文

(1)报文格式

ARP报文总长28字节,格式如下:

在这里插入图片描述

  • 硬件类型:2字节,用来定义运行ARP的网络类型。每个局域网基于其类型被指派一个整数。例如:以太网的类型为1。ARP可用在任何物理网络上

  • 协议类型:2字节,用来定义使用的协议。例如:对IPv4协议这个字段是0800。ARP可用于任何高层协议

  • 硬件长度:1字节,用来定义物理地址的长度,以字节为单位。例如:对于以太网的值为6

  • 协议长度:1字节,用来定义逻辑地址的长度,以字节为单位。例如:对于IPv4协议的值为4

  • 操作码:2字节,用来定义报文的类型。已定义的分组类型有两种:ARP请求是1,ARP响应是2

  • 源硬件地址:这是一个可变长度字段,用来定义发送方的物理地址。例如:对于以太网这个字段的长度是6字节

  • 源逻辑地址:这是一个可变长度字段,用来定义发送方的逻辑(IP)地址。例如:对于IP协议这个字段的长度是4字节

  • 目的硬件地址:这是一个可变长度字段,用来定义目标的物理地址,例如,对以太网来说这个字段位6字节。对于ARP请求报文,这个字段为全0,因为发送方并不知道目标的硬件地址

  • 目的逻辑地址:这是一个可变长度字段,用来定义目标的逻辑(IP)地址,对于IPv4协议这个字段的长度为4个字节

封装在以太网帧中:
在这里插入图片描述

  • 以太网目的地址:即目的MAC地址,是ARP请求的目的以太网地址,FF-FF-FF-FF-FF-FF表广播
  • 以太网源地址:即源MAC地址,是发送ARP请求的以太网地址
  • 以太网帧类型:是后面的数据类型,ARP请求和ARP应答这个值为0x0806
  • 在整个帧的最后,有个CRC字段来校验以太网帧的正确性。在数据包填充完成后,回去通过算法计算一个值放到数据包的CRC字段中。当接受端收到数据包后,会同样使用算法计算一个值,然后和CRC字段的值进行对比,查看是否相同。如果不同则证明数据包被更改,如果相同则证明数据包并未被更改

(2)报文长度

  • ARP报文总长度是28字节
  • 封装后的以太网帧头是14字节
  • ARP请求中ARP包已经是最高层,所以总长度为:帧总长度 = 帧头 + ARP包头 = 14 + 28 = 42 bytes
  • 但实际发送的时候会添加一个padding,使得总长度为64字节
  • 使用wireshark抓包时,抓到的包为60 bytes。比以太网帧的最小帧长少了4 bytes,原因是因为wireshark抓包时不能抓到数据包最后的CRC字段

(3)抓包看看

在这里插入图片描述

请求包

在这里插入图片描述
响应包

在这里插入图片描述

5、ARP缓存表

计算机中会维护一个ARP缓存表,这个表记录着IP地址与MAC地址的映射关系

在这里插入图片描述
ARP表项的生存时间是一般为5-10分钟(LwIP中默认是5分钟),而ARP请求的等待时间是5秒钟,当这些时间到达后,就会更新ARP表项,如果在物理链路层无法连通则会删除表项

因此每个协议栈的实现都必须维护着一个定时器(超时机制)来管理ARP缓存表,在必要的时候更新及删除ARP表项,关于怎么处理的我们就不多追究,有兴趣的可以看LwIP的etharp_tmr()源码

因为ARP协议是一个动态的协议,很多网络攻击都是利用ARP协议进行的,如ARP欺骗,ARP洪水攻击等等,而且这种攻击是很难防御的,当然也有办法,直接将动态的ARP缓存表设置为静态就行了,但是这就违背了ARP协议的动态地址解析特性

6、其他

(1)ARP攻击

  • 简单的诈骗攻击
    通过发送伪造的ARP包来诈骗路由和主机,让主机认为这是一个合法的主机,便完成了诈骗,这种诈骗多发生在同一网段内,因为路由不会把本网段的包向外转发,当然完成不一样网段的攻击也有办法,便要经过ICMP协议来告诉路由器从头挑选路由。

  • 根据ARP的DOS
    当大量的衔接请求被发送到一台主机时,因为主机的处理才能有限,不能为正常用户提供服务,便呈现拒绝服务。这个过程中假如运用ARP来躲藏自己,在被攻击主机的日志上就不会呈现真实的IP攻击,也不会影响到本机

  • MAC Flooding
    溢出交流机的ARP表,使全部网络不能正常通讯

  • 交流环境的嗅探
    在开始的小型局域网中咱们运用HUB来进行互连,这是一种广播的办法,每个包都会经过网内的每台主机,经过运用软件,就能够嗅探到全部局域网的数据。在ARP欺骗的基础之上,能够把自己的主机伪造成一个中心转发站来监听两台主机之间的通讯

(2)ARP攻击的防护

  • ARP 高速缓存超时设置
    在ARP高速缓存中的表项一般都要设置超时值,缩短这个这个超时值能够有用的避免ARP表的溢出。

  • IP+MAC访问操控
    单纯依托IP或MAC来树立信赖联系是不安全,抱负的安全联系树立在IP+MAC的根底上,这也是咱们校园网上网有必要绑定IP和MAC的因素之一

  • 静态ARP缓存表
    每台主机都有一个暂时寄存IP-MAC的对应表ARP攻击就经过更改这个缓存来到达诈骗的意图,运用静态的ARP来绑定正确的MAC是一个有用的办法,在命令行下运用arp -a能够检查当时的ARP缓存表

  • 自动查询
    在某个正常的时间,做一个IP和MAC对应的数据库,以后定时检查当时的IP和MAC对应联系是否正常,定时检查交流机的流量列表,检查丢包率

结语

搞明白ARP原理

以上是关于一文搞明白ARP的主要内容,如果未能解决你的问题,请参考以下文章

一文搞明白 Domain Borrowing

一文搞明白 Domain Borrowing

流媒体服务器(16)—— 一文搞明白直播和点播的区别

流媒体服务器(16)—— 一文搞明白直播和点播的区别

一文搞明白 Padding Oracle Attack

一文搞明白 Padding Oracle Attack