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. Effective Java 55 Optimize judiciously

    Principle Strive to write good programs rather than fast ones. Strive to avoid design decisions that ...

  2. 读书笔记——网络编程与开发技术(3)基于TCP/IP协议的网络编程相关知识

    TCP/IP协议:数据链路层,网络层,传输层,应用层. IP地址分为5类:A类.B类.C类.D类.E类. (A类.B类.C类是基本类,D类多用于多播传送,E类为保留类.) "*"表 ...

  3. iOS -数据库网络之xml解析

    XML文件有2种解析方式 1.基于文档(document) 2.基于事件(sax)   1.IOS中XML文件获取   首先要将XML导入工程中 在ViewController的按钮事件中,代码如下: ...

  4. POJ 2513 Colored Sticks(欧拉回路,字典树,并查集)

    题意:给定一些木棒,木棒两端都涂上颜色,求是否能将木棒首尾相接,连成一条直线,要求不同木棒相接的一边必须是相同颜色的.   无向图存在欧拉路的充要条件为: ①     图是连通的: ②     所有节 ...

  5. URAL 1430 Crime and Punishment

    Crime and Punishment Time Limit:500MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u ...

  6. css3 animation动画技巧

    一,css3 animation动画前言 随着现在浏览器对css3的兼容性越来越好,使用css3动画来制作动画的例子也越来越广泛,也随着而来带来了许多的问题值得我们能思考.css3动画如何让物体运动更 ...

  7. uva 120 stacks of flapjacks ——yhx

     Stacks of Flapjacks  Background Stacks and Queues are often considered the bread and butter of data ...

  8. 最小生成树 kruskal hdu 5723 Abandoned country

    题目链接:hdu 5723 Abandoned country 题目大意:N个点,M条边:先构成一棵最小生成树,然后这个最小生成树上求任意两点之间的路径长度和,并求期望 /************** ...

  9. Unity 跑酷Demo难题总结

    问题1:路面拼接处理 在拼接路的时候,如果两个路挨的太近就会出现贴图闪烁,如下所示 解决办法 如果把路改小就会出现断层,但不会出现贴图闪烁 PS:我是把贴图放在Cube上的,所以路是有厚度. 附注 刚 ...

  10. Facebook或成云领域黑马 冲击亚马逊

    [摘要]目前,云计算领域最大的服务是亚马逊AWS,据称此服务年度营收约为100亿美元. 转播到腾讯微博 BI中文站 3月22日报道 如今,多数人认为亚马逊在云计算领域的发展势头无人可档,不过,这个市场 ...