1.ARP的工作原理

  IP层协议ARP的核心功能就是通过目的主机IP地址得到主机的硬件地址,然后通过硬件地址进行通信。和计算机网络中的很多技术一样,ARP协议也是使用了建立一个缓存表的思想。它规定每个主机都维护着一个ARP高速缓存,里面是本网络中IP地址和MAC地址的映射表且这个表会动态更新。显然当主机需要MAC地址时它会首先查找ARP高速缓存,如果有的话就直接作为MAC地址构造MAC帧,否则则会运行ARP协议寻找MAC地址。首先ARP在本局域网广播一个ARP请求数据报,里面包含自己的源MAC、源IP、目的IP,想要得到目的MAC。这个广播数据包是依赖MAC帧来实现的,下图是MAC帧格式,其中在目的MAC中将地址设置为全F则为广播,ARP请求报文则是作为MAC帧的数据部分放入MAC帧中。接下来本网络中所有主机全都收到ARP请求,若主机与数据包中目的IP相同则收下这个数据包并返回一个响应数据包,其中含有自己的MAC地址。注意此时响应数据包是单播而不是广播,发送方收到接收方回复的响应数据包后便将这条映射加入ARP高速缓存,同时接收方也会添加这条映射。接下来发送方根据得到的IP-MAC映射表找到对应的MAC,在MAC层将目的MAC设置为找到的MAC地址并封装数据包发送出去,如果映射表不变就将以这个MAC地址来进行通信了。

2.为什么需要ARP

  通过上面的ARP工作原理的介绍我们发现并不是只有通过MAC地址才能进行通信,得到MAC地址本身就是使用了IP地址。也就是说明明就可以使用IP地址进行本网络的数据转发,结果还要通过IP得到MAC然后再通过MAC进行通信,这样岂不是多此一举?再来看看这个过程,当数据包到达路由器后,路由器解析数据包后知道要从一个端口转发出去,可是路由器不知道目的主机的MAC地址,于是它广播ARP请求去得到目的MAC。假设现在路由器不寻找MAC地址,而是通过IP进行路由转发。到达交换机后,我们假设这种交换机不是根据MAC-端口转发的,而是通过IP-端口转发的。这种假想交换机会学习IP-端口而不是MAC-端口映射关系,数据包到达特殊的交换机后便可以通过路由端口表进行数据包的转发了。再来看互联网中的网络层,本来我想要不要去掉第二层直接全部使用路由器。但是由于有子网划分,一个路由器端口对应着一个网段,没必要在很小的网络里还划分子网,这样速度会变慢,因此仍然需要在第二层设置交换机。我们知道在第三层路由转发时路由器会修改源MAC与目的MAC,现在IP数据包格式不变,里面的源IP和目的IP和原来一样不会变化,而在二层帧中,完全可以使用变化的源IP和目的IP来代替原来的源MAC和目的MAC。也就是说一份以太网数据包,有4个IP地址,三层有2个不变的源IP和目的IP,二层则是随着路由转发时刻改变的源IP和目的IP。所以如果仅仅只是讨论IP代替MAC能否实现正常的网络通信,我觉得是可以代替的。

  当然如今使用三层IP二层MAC也是有原因的,因为互联网发展到今天才形成采用以太网+TCP/IP的模式。当初使用MAC地址进行点到点通信时发现MAC较难记忆,简单的IP地址能够满足通信和记忆的需要。而且曾经还有各种各样的其他网络接口层协议,由于不同的网络可能使用不同的硬件地址,这样的话这些异构网络进行通信将会很麻烦。随着前辈们不停的探索发现愈发觉得分层这种思想的重要性。采用IP的话则可以屏蔽掉下层的复杂性,而下层则可以使用不同的网络协议,只要保证上层的IP协议是统一的或者在路由器可以进行转换的基础上使用其它的网络层协议。这相当于表现层拿业务层对象时通过业务层接口来取得,而实现类可以有不同的功能。

3.针对ARP的攻击

  由于ARP协议中主机接收数据包不会有什么限制,因此任何时候攻击者都可以给主机发送ARP请求或ARP响应数据包。在局域网的ARP攻击中主要分为2类,一类就是发送大量的数据包造成洪泛,一类是ARP欺骗。再来回顾ARP解析的过程,假设A和B通信建立了正确的ARP高速缓存。现在有一个攻击者C,它向B发送伪装的ARP响应数据包,其中目的IP为B,源IP为A,源MAC为C的MAC地址。这样B收到后更新ARP高速缓存,将原来的映射关系改为A的IP地址和C的MAC地址。如下图所示,这样的话A能正常给B发送数据,但是B给A发送的数据则会被C收到。如果攻击者再对A也发送伪装的数据包,这样C就成了A和B的中间人了,C可以收到A与B之间的通信数据。ARP欺骗还有一种攻击,那就是攻击者可以给路由器网关发送大量的错误ARP响应数据包。在这个数据包中数据链路层源MAC是攻击者C的MAC,目的MAC为路由器MAC(这个MAC可通过路由器ARP广播时得到),在网络层中,攻击者可以伪造网络中任意的IP地址,但是ARP数据包的源MAC将设置为不在本网络中的任意MAC地址。这样的话将导致路由器中的ARP高速缓存中放入了大量错误的IP与MAC映射条目。当一个发往主机D的数据包到达路由器后,如下图攻击后的ARP表可以看出,路由器会解析数据包通过目的IP找到转发出去的端口然后封装数据链路层。这时路由器就要去查找ARP高速缓存了,它发现主机D对应的MAC为MACH,于是源MAC为路由器的MAC目的MAC为MACH。封装数据包后交给交换机,交换机查看目的MAC发现没有MACH这个硬件地址所对应的端口。接下来交换机广播这个数据包给ABCD,但由于根本就没MACH这个硬件地址因此ABCD四个主机将全部丢弃这个数据包,这样整个网络都不可用了。如果攻击者不持续发送响应数据包,那瘫痪的网络将会在路由器更新ARP高速缓存时恢复正常状态,如果攻击者持续发送数据包整个网络仍将瘫痪。从攻击过程我们发现攻击者需要发送大量的ARP请求数据包,可以通过这个特征来找到发起攻击的主机。为了预防ARP欺骗,最最本质的事情就是要保证ARP高速缓存是正确的,我们可以设置静态的IP-MAC映射表来达到这一目的,许多防护软件就是以这个原理为基础来设置静态映射表,从而达到防御ARP攻击的目的。

本人新手一枚,有些地方是自己的思考,如有错误还请指出!

声明:本文原创发表于博客园,作者为方小白,如有错误欢迎指出 。本文未经作者许可不许转载,否则视为侵权。

浅入ARP的更多相关文章

  1. 浅入浅出EmguCv(三)EmguCv打开指定视频

    打开视频的思路跟打开图片的思路是一样的,只不过视频是由一帧帧图片组成,因此,打开视频的处理程序有一个连续的获取图片并逐帧显示的处理过程.GUI同<浅入浅出EmguCv(二)EmguCv打开指定图 ...

  2. 浅入浅出EmguCv(一)OpenCv与EmguCv

    最近接触计算机视觉方面的东西,于是准备下手学习opencv,从官网下载windows的安装版,配置环境,一系列步骤走完后,准备按照惯例弄个HelloWord.也就是按照网上的教程,打开了那个图像处理领 ...

  3. 浅入深出之Java集合框架(上)

    Java中的集合框架(上) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,如果已经有java基础的小伙伴可以直接跳到<浅入深出之Java集合框架 ...

  4. 浅入深出之Java集合框架(中)

    Java中的集合框架(中) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,如果已经有java基础的小伙伴可以直接跳到<浅入深出之Java集合框架 ...

  5. 浅入深出之Java集合框架(下)

    Java中的集合框架(下) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,哈哈这篇其实也还是基础,惊不惊喜意不意外 ̄▽ ̄ 写文真的好累,懒得写了.. ...

  6. 浅入深出Vue:环境搭建

    浅入深出Vue:环境搭建 工欲善其事必先利其器,该搭建我们的环境了. 安装NPM 所有工具的下载地址都可以在导航篇中找到,这里我们下载的是最新版本的NodeJS Windows安装程序 下载下来后,直 ...

  7. 浅入深出Vue:工具准备之PostMan安装配置及Mock服务配置

    浅入深出Vue之工具准备(二):PostMan安装配置 由于家中有事,文章没顾得上.在此说声抱歉,这是工具准备的最后一章. 接下来就是开始环境搭建了~尽情期待 工欲善其事必先利其器,让我们先做好准备工 ...

  8. 浅入深出Vue:工具准备之WebStorm安装配置

    浅入深出Vue之工具准备(一):WebStorm安装配置 工欲善其事必先利其器,让我们先做好准备工作吧 导航篇 WebStorm安装配置 所有工具的下载地址都可以在导航篇中找到,这里我们下载的是最新版 ...

  9. 浅入深出Vue系列

    浅入深出Vue导航 导航帖,直接点击标题即可. 文中所有涉及到的资源链接均在最下方列举出来了. 前言 基础篇 浅入深出Vue:工具准备之WebStorm搭建及配置 浅入深出Vue之工具准备(二):Po ...

随机推荐

  1. 使用Httpclient来替代客户端的jsonp跨域解决方案

    最近接手一个项目,新项目需要调用老项目的接口,但是老项目和新项目不再同一个域名下,所以必须进行跨域调用了,但是老项目又不能进行任何修改,所以jsonp也无法解决了,于是想到了使用了Httpclient ...

  2. linux命令详解之挂载光驱的方法

    linux的硬件设备在/dev目录下,光驱也是其中./dev/cdrom表示光驱,挂载光驱的方法如下(以root身份): 代码如下: mkdir /mnt/cdrommount  -t auto  - ...

  3. ES5严格模式(Strict mode)

    严格模式(Strict mode)是由ECMA-262规范定义的新兴JavaScript标准,第五版发布于2009年12月.旨在改善错误检查功能并且标识可能不会延续到未来JavaScript版本的脚本 ...

  4. WEB安全--CSRF防御

    CSRF漏洞防御主要可以从三个层面进行,即服务端的防御.用户端的防御和安全设备的防御. 服务端的防御 目前服务器端防御CSRF攻击主要有5种策略(我知道的就这么多):验证HTTP Referer字段, ...

  5. WEB安全--CSRF剖析

    CSRF攻击:攻击者构造合法的HTTP请求,随后利用用户的身份操作用户帐户的一种攻击方式. 一.CSRF攻击原理CSRF的攻击建立在浏览器与Web服务器的会话中:欺骗用户访问URL.二.CSRF攻击场 ...

  6. 《TCP/IP详解 卷一》读书笔记-----TCP超时重传

    1.TCP提供的是可靠传输,它通过接收方发送一个确认报文ACK来提供这种可靠性.但是数据报文和确认报文都可能会丢失,所以TCP会给发出的数据报文设置一个时间,如果超时了则进行重传 2.Karn's A ...

  7. C++ macro(宏)使用小结

    谈起C++中的宏,我们第一个想到的应该就是“#define”,它的基本语法长得像这样: #define macroname(para1, para2, para3, ... ,paran) macro ...

  8. 软件工程实训项目案例--Android移动应用开发

    实训过程 角色分工 1.项目经理:负责项目的组织实施,制定项目计划,并进行跟踪管理 2.开发人员:对项目经理及项目负责 3.需求分析员:负责系统的需求获取和分析,并协助设计人员进行系统设计 4.系统设 ...

  9. Spring 一二事(5) - 依赖注入

    <!-- 依赖注入的装配过程 --> <bean id="person" class="com.lee.spring007.di.xml.setter. ...

  10. Linux搭建python环境

    环境: CentOS 6.4 前言:CentOS 6.4系统自带的有python2.6.6版本 一.下载文件 python官网:https://www.python.org/downloads/ 版本 ...