关于ARP的那些事儿

来源:互联网 发布:淘宝试用网 编辑:程序博客网 时间:2024/05/09 03:24

在了解ARP之前,赘述两句基本的网络知识,在TCP/IP结构中,将网络分为了四层,分别是应用层,运输层,网络层,链路层。

他们分别对应的常用协议是:

应用层:FTP,HTTP等等。运输层:TCP,UDP。网络层:IP,ICMP,IGMP。链路层:ARP,RARP。

 

所以说,ARP仅仅是在链路层的一个协议而已,是根据IP地址获取物理地址的一个协议。它解决的是同一个局域网下IP地址和硬件地址的映射问题。

 

为 什么要使用ARP协议,首先我们要明白是IP地址是不能直接用来通信的。这是因为IP地址只是主机在抽象的网络层中的地址。若要讲网络层中传送的而数据报交给目的主机,还要传到链路层转变成MAC帧后才能发送到实际的网络上。因此,不管网络层中用的是什么协议,在实际网络的链路上传送数据帧时,最终还是必须使用硬件地址。

 

地 址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其 记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。相关协议有RARP代理ARPNDP用于在IPv6中代替地址解析协议。(这段摘抄自百度百科哈哈)

ARP的工作流程如下:

1.  首先,每台主机都会在自己的ARP缓冲区 (ARP Cache)中建立一个 ARP列表,以表示IP地址和MAC地址的对应关系。

 

2.  当源主机需要将一个数据包要发送到目的主机时,会首先检查自己 ARP列表中是否存在该 IP地址对应的MAC地址,如果有﹐就直接将数据包发送到这个MAC地址;如果没有,就向本地网段发起一个ARP请求的广播包,查询此目的主机对应的MAC地址(注意,已知的是IP地址,未知的是MAC地址)。此ARP请求数据包里包括源主机的IP地址、硬件地址、以及目的主机的IP地址。

 

3. 网络中所有的主机收到这个ARP请求后,会检查数据包中的目的IP是否和自己的IP地址一致。如果不相同就忽略此数据包;如果相同,该主机首先将发送端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP表中已经存在该IP的信息,则将其覆盖,然后给源主机发送一个 ARP响应数据包,告诉对方自己是它需要查找的MAC地址;

 

4. 源主机收到这个ARP响应数据包后,将得到的目的主机的IP地址和MAC地址添加到自己的ARP列表中,并利用此信息开始数据的传输。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。

 

ARP 高效运行的关键是由于每个主机上都有一个ARP告诉缓存。这个告诉缓存存放了最近的Internet地址到硬件地址的而映射记录,这样我们每次寻找MAC 地址的时候就不用进行查询,再等待目的主机进行返回消息,告诉缓存中每一项的而生存时间一般为20分钟,起始时间从被创建时开始算起。

 

当然我们有必要再提一句RARP,根据字面意思就很好理解,RARP是ARP的逆向过程,是通过物理地址查询对应的IP地址。

为什么要这样做?

具有本地磁盘的系统引导是,一般从磁盘上的配置文件中就可以读取IP地址。但是无盘机,如X终端或者无盘工作站,则需要采用其他方法获得IP地址。就是RARP,具体方法就不在这里说了。

 

那么就可能会产生这样的问题:既然在网络链路上传送的帧最终是按照硬件地址找到目的主机的,那么为什么我们不直接使用硬件地址进行通信,而是要使用抽象的IP地址并调用ARP来寻找出相应的硬件地址呢?

这个问题必须弄清楚。

由于全世界存在着各式各样的网络,它们使用不同的硬件地址。要使这些异构网络能够互相通信就必须进行非常复杂的硬件地址转换工作,因此几乎是不可能的事。但统一的IP地址把这个复杂问题解决了。连接到因特网的主机都拥有统一的IP地址,它们之间的通信就像连接在同一个网络上那样简单方便,因为调用ARP来寻找某个路由器或主机的硬件地址都是由计算机软件自动进行的,对用户来说是看不见这种调用过程的。

设想有两个主机可以直接使用硬件地址进行通信(具体实现方法暂不必管)。再假定其两个主机的网卡都同时坏了,然后又都更换了一块,因此它们的硬件地址也都改变了。这时,这两个主机怎样能够知道对方的硬件地址呢?显然很难。但IP地址是独立于主机或路由器的硬件地址的。硬件地址的改变不会影响使用IP协议的主机的通信。

因此,在虚拟的IP网络上用IP地址进行通信给广大的计算机用户带来很大的方便

 





1 0
原创粉丝点击