地址解析协议——ARP

1. 什么是ARP?

    英文原义Address Resolution Protocol

    中文释义地址解析协议(RFC-826)

    是一个位于TCP/IP协议栈中的低层协议,负责将某个IP地址解析成对应的MAC地址。

    局域网中网络中实际传输的是“帧”帧里面是有目标主机的MAC地址的。所谓“地址解析就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址以保证通信的顺利进行。整个转换过程是一台主机PC1先向目标主机PC2发送包含IP地址信息的广播数据包,即ARP请求,然后目标主机向该主机发送一个含有IP地址和MAC地址的数据包(不再以广播形式发送,而是直接发送给主机PC1),通过MAC地址两个主机就可以实现数据传输了

 

2. ARP的使用环境

    ARP只在以太网中使用。就是说,它只用在本地主机认为目标主机与它直连的情况下,比如,PC1与PC2在同一网段内,那么PC1与PC2通信之前就要先用ARP得到PC2的MAC地址从而封装到MAC帧后进行通信。若PC1与PC1所在网段外的主机通信,那么它就不会用ARP而是查看主机的路由表,从而把数据包转发到网关,再由网关转发出去点对点的连接是不需要ARP协议的,ARP协议是使用在广播型网络中的协议。由于在广播型网络中主机所能连接的节点数量可以为多台,那么必须有一个地址解析协议来解析逻辑地址(IP地址) 和 主机地址(MAC地址) 。ARP协议正是被设计用来进行此种操作。而PPP协议则是一个点对点的网络一台主机只能连接唯一的对端,因此不需要将逻辑地址解析为主机标识,因此在PPP协议中,没有ARP和RARP协议。

 

3. ARP原理

    某机器A要向主机B发送报文,会查询本地的ARP缓存表,找到B的IP地址对应的MAC地址后,就会进行数据传输。如果未找到,则广播A一个ARP请求报文(携带主机A的IP地址Ia——物理地址Pa),请求IP地址为Ib的主机B回答物理地址Pb。网上所有主机包括B都收到ARP请求,但只有主机B识别自己的IP地址,于是向A主机发回一个ARP响应报文。其中就包含有B的MAC地址,A接收到B的应答后,就会更新本地的ARP缓存,接着使用这个MAC地址发送数据(由网卡附加MAC地址)。因此,本地高速缓存的这个ARP表是本地网络流通的基础,而且这个缓存是动态的

 

4. 例举ARP的工作过程

    为了解释ARP协议的作用,就必须理解数据在网络上的传输过程。这里举一个简单的PING的例子。假设我们的计算机IP地址是192.168.1.1,要执行这个命令,ping 192.168.1.2。该命令会通过ICMP协议发送ICMP数据包。该过程要经过下面的步骤:

1. 应用程序构造数据包,该示例是产生ICMP包,被提交给内核(网络驱动程序)

2. 内核检查是否能够转化该IP地址为MAC地址,也就是在本地的ARP缓存中查看IP-MAC对应表

3. 如果存在该IP-MAC对应关系,那么跳到步骤7;如果不存在该IP-MAC对应关系,那么接续下面的步骤;

4. 内核进行ARP广播目的地的ARP地址是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 -a命令就可以查看本地的ARP缓存内容,所以,执行一个本地的PING命令后,ARP缓存就会存在一个目的IP的记录了。当然,如果你的数据包是发送到不同网段的目的地,那么就一定存在一条网关的IP-MAC地址对应的记录

    知道了ARP协议的作用,就能够很清楚地知道,数据包的向外传输很依靠ARP协议,当然,也就是依赖ARP缓存。要知道,ARP协议的所有操作都是内核自动完成的同其他的应用程序没有任何关系。同时需要注意的是,ARP协议只适用于本网络

 

 

 

5. ARP协议并不只在发送了ARP请求才接收ARP应答??

    当计算机接收到ARP应答的数据包的时候,就会对本地的ARP缓存进行更新,将应答中的IP和MAC地址存储在ARP缓存中。因此,在上面的假设网络中,B向A发送一个自己伪造的ARP应答,而这个应答中的数据为发送方IP地址是192.168.10.3(C的IP地址),MAC地址是DD-DD-DD-DD-DD-DD(C的MAC地址本来应该是CC-CC-CC-CC-CC-CC,这里被伪造了)。当A接收到B伪造的ARP应答,就会更新本地的ARP缓存,将本地的IP-MAC对应表更换为接收到的数据格式,由于这一切都是A的系统内核自动完成的,A可不知道被伪造了。

 

 

6. Free ARP

    我们知道,如果网络中存在相同IP地址的主机的时候,就会报告IP地址冲突的警告。这是怎么产生的呢?

    比如某主机B规定IP地址为1923168.0.1,如果它处于开机状态,那么其他机器A更改IP地址为192.168.0.1就会造成IP地址冲突。其原理就是:主机A在连接网络(或者更改IP地址)的时候就会向网络发送ARP包广播自己的IP地址,也就是freearp。如果网络中存在相同IP地址的主机B,那么B就会通过ARP来reply该地址,当A接收到这个reply后,A就会跳出IP地址冲突的警告,当然B也会有警告。

    因此用ARP欺骗可以来伪造这个ARPreply,从而使目标一直遭受IP地址冲突警告的困扰。

 

 

7. ARP欺骗的两种方式

1. 向目标发送伪造的ARP应答数据包,其中发送方的IP地址为网关的地址,而MAC地址则为一个伪造的地址。当目标接收到该ARP包,那么就更新自身的ARP缓存。如果该欺骗一直持续下去,那么目标的网关缓存一直是一个被伪造的错误记录。当然,如果有些了解的人查看ARP -a,就知道问题的所在了。

2. 这种方式非常狠,能欺骗网关。向网关发送伪造的ARP应答数据包,其中发送方的IP地址为目标IP地址,而MAC地址则为一个伪造的地址。这样,网关上的目标ARP记录就是一个错误的,网关发送给目标的数据报都是使用了错误的MAC地址。这种情况下,目标能够发送到数据到网关,却不能接收到网关的任何数据。同时,目标自己查看ARP -a却看不出任何问题来。

 

 

8. 如何探测出局域网中的Sniffer?

    首先,让我们来看一看局域网中是怎样传输数据的。当一个数据包的目的地址是局域网内的某台计算机时,此数据包将以广播的形式被发送到网内每一台计算机上。而每台计算机的网卡将分析数据包中的目的MAC地址(即以太网址),如果此地址为本计算机MAC地址或为广播地址(FF-FF-FF-FF-FF-FF),那么,数据包将被接收,而如果不是,网卡将直接将其丢弃。但是,这里有一个前提,就是接收端计算机的网卡是在正常模式下工作的。而如果网卡被设置为混杂模式,那么它就可以接收所有经过的数据包了(当然也包括目的地不是本机的数据包) 。就是说,只要是发送到局域网内的数据包,都会被设置成混杂模式的网卡所接收!这也就是Sniffer的基本原理了。

    鉴于Sniffer的原理是设置网卡为混杂模式,那么,我们就可以想办法探测网络中被设置为混杂模式的网卡,以此来判断是否存在Sniffer。这里,让我们再来看看计算机接收数据包的规则。前面已经讲过,在正常模式下,首先由网卡判断数据包的目的MAC地址,如果为本机MAC地址或为广播地址,那么数据包将被接收进系统核心,否则将被丢弃而如果网卡设置为混杂模式,那么所有的数据包都将直接进入系统核心。数据包到达系统核心以后,系统还将进一步对数据包进行筛选:系统只会对目的MAC地址为本机MAC地址或广播地址的数据包做出响应——如果接收到的是ARP请求报文,那么系统还将回馈一个ARP应答报文

    但是,不同的是,系统核心和网卡对广播地址的判断有些不一样以Windows系统为例,网卡会判断MAC地址的所有六位而系统核心只判断MAC地址的前两位(Win98甚至只判断前一位),也就是说,对于系统核心而言,正确的广播地址FF-FF-FF-FF-FF-FF和错误的广播地址FF-FF-FF-FF-FF-FE是一样的,都被认为是广播地址,甚至FF-FF-00-00-00-00也会被系统认为是广播地址!写到这里,聪明的读者大概已经知道该怎么做了。如果我们构造一个目的MAC地址为FF-FF-FF-FF-FF-FE的ARP请求报文,那么,对于在正常工作模式下的网卡,数据包将被丢弃,当然也不会回馈任何报文;而对于在混杂模式下的网卡,数据包将被接收进系统核心。而系统核心会认为这个MAC地址是广播地址,因此就会回馈一个ARP应答报文。这样,我们就可以判断出这台机器上存在Sniffer了。

 

9. 网卡处于正常模式的情况下接收数据包的情况

    网卡处于正常模式的情况下,它只接收MAC为本机和广播地址的数据包,我想它接收广播数据包是为了检测是否有IP冲突,比如Free ARP的情况,如果没有冲突就不会做什么处理。而接收MAC为本机的就是为了响应ARP请求了。

 

 

文章出处:http://blog.chinaunix.net/u/27698/showart_311084.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值