深度分析网络中各种类型ARP报文工作原理

ARP基本过程:

1) 主机发送一份称作ARP请求的以太网数据帧给以太网上的每一个主机。这个过程称作广播(注意这是数据链路层的广播,不是网络层的广播)。ARP请求包含目的主机的IP地址。这个动作的意思是“如果你是这个IP地址的拥有者,请回答你的硬件地址(MAC)”。
2) 目的主机的ARP层收到这份广播报文后,识别出这是发送端在询问它的IP地址,于是发送一个ARP应答(单播)。这个ARP应答包含IP地址及对应的硬件地址。
3) 收到ARP应答后,使ARP进行请求—应答交换的IP数据报现在就可以传送了。
4) 发送IP数据报到目的主机。
网络接口有一个硬件地址(MAC地址,48位,标识不同的以太网或令牌环网络接口)。在硬件层次上进行的数据帧交换必须具有正确的接口地址。TCP/IP有自己的地址(IP地址,32位)。但是,知道主机的IP地址并不能让内核发送一帧数据给主机。内核(如以太网驱动程序)必须知道目的端口的硬件地址才能发送数据。ARP的功能是在32bit的IP地址和采用不同的网络技术的硬件地址之间提供动态映射。
点对点链路并不使用ARP。当设置这些链路时(一般在引导过程进行),必须告知内核链路每一端的IP地址。像以太网这样的硬件地址并不涉及。

ARP代理:

如果ARP请求是从一个网络主机发往另一个网络上的主机,那么直接连接这两个网络的路由器就可以回答该请求,这个过程称作委托ARP或者ARP代理。这样可以欺骗发起ARP请求的发送端,使它误以为路由器就是目的主机,而事实上,目的主机在路由器的“另一边”,路由器相当于目的主机的代理,把分组从其他主机转发给它。注意这里源主机发送给路由器的帧中,帧地址是路由器的MAC地址,而路由发给目的主机的帧中,帧地址是目的主机的MAC地址;但是两边的目的IP地址都是目的主机的IP地址。
ARP代理也称作混合ARP或者ARP出租。这些名字来自于ARP代理的其他用途:通过两个物理网络之间的路由器可以互相隐藏物理网络。在这种情况下,两个物理网络可以使用相同的网络号,只要把中间的路由器设置成一个ARP代理,以响应一个网络到另一个网络的ARP请求。
根据上图实际分析一下arp代理过程:
当子网140.252.1(称作gemini)上的其他主机有一份IP数据报要传给地址为140.252.1.29的sun时,gemini比较网络号(140.252)和子网号(1),因为它们都是相同的,因而在图4-6上面的以太网中发送IP地址140.252.1.29的ARP请求。路由器netb识别出该IP地址属于它的一个拔号主机,于是把它的以太网接口地址 140.252.1作为硬件地址来回答。主机gemini通过以太网发送IP数据报到netb,netb通过拨号SLIP链路把数据报转发到sun。这个过程对于所有1 4 0 . 2 5 2 . 1子网上的主机来说都是透明的,主机s u n实际上是在路由器n e t b后面进行配置的。如果在主机g e m i n i上执行a r p命令,经过与主机s u n通信以后,我们发现在同一个子网1 4 0 . 2 5 2 . 1上的n e t b和s u n的I P地址映射的硬件地址是相同的。这通常是使用委托A R P的线索。gemini %arp -a 这里是子网1 4 0 . 2 5 2 . 1上其他主机的输出行netb (140.252.1.183) at :80:ad:3:6a:80 sun (140.252.1.29) at 0:80:ad:3:6a:80。另一个需要解释的细节是在路由器n e t b的下方(S L I P链路)显然缺少一个I P 地址。为什么在拨号S L I P链路的两端只拥有一个I P地址,而在b s d i和s l i p之间的两端却分别有一个I P地址?在3 . 8小节我们已经指出,用i f c o n f i g命令可以显示拨号S L I P链路的目的地址,它是1 4 0 . 2 5 2 . 1 . 1 8 3。N e t B l a z e r不需要知道拨号S L I P链路每一端的I P地址(这样做会用更多的I P地址)。相反,它通过分组到达的串行线路接口来确定发送分组的拨号主机,因此对于连接到路由器的每个拨号主机不需要用唯一的I P地址。所有的拨号主机使用同一个I P地址1 4 0 . 2 5 2 . 1 . 1 8 3作为S L I P链路的目的地址。
A R P代理可以把数据报传送到路由器s u n上,但是子网1 4 0 . 2 5 2 . 1 3上的其他主机是如何处理的呢?选路必须使数据报能到达其他主机。这里需要特殊处理,选路表中的表项必须在网络1 4 0 . 2 5 2的某个地方制定,使所有数据报的目的端要么是子网1 4 0 . 2 5 2 . 1 3,要么是子网上的某个主机,这样都指向路由器n e t b。而路由器n e t b知道如何把数据报传到最终的目的端,即通过路由器s u n。
A R P代理也称作混合A R P(p r o m i s c u o u s A R P)或ARP 出租(ARP hack)。这些名字来自于A R P代理的其他用途:通过两个物理网络之间的路由器可以互相隐藏物理网络。在这种情况下,两个物理网络可以使用相同的网络号,只要把中间的路由器设置成一个A R P代理,以响应一个网络到另一个网络主机的A R P请求。这种技术在过去用来隐藏一组在不同物理电缆上运行旧版T C P / I P的主机。分开这些旧主机有两个共同的理由,其一是它们不能处理子网划分,其二是它们使用旧的广播地址(所有比特值为0的主机号,而不是目前使用的所有比特值为1 的主机号)。

免费ARP:

指主机发送ARP查找自己的IP地址。通常发生在系统引导期间进行接口配置的时候。
两个主要的作用:
1) 一个主机可以通过它来确定另一个主机是否设置了相同的IP地址。(主机问“谁有这个IP地址(它自己的IP地址)”,如果有人回答,则说明两者设置了相同的IP地址)也就是用于检查重复地址,一个设备可以向自己的IP地址发送ARP请求,如果收到ARP响应则表明存在重复地址
2) 如果发送免费ARP的主机正好改变了硬件地址,那么这个分组就可以使其他主机高速缓存中旧的硬件地址进行相应的更新。
可以看到上图中免费arp的源和目标IP都是自己。
注意,如果主机收到某个IP地址的ARP请求(即使该IP地址不是这个主机的IP),而且它已经在这个主机的高速缓存中,那么就要用ARP请求中的发送端硬件地址(发送请求的主机的当前最新硬件地址)对自己高速缓存中相应的内容进行更新。(每有一个主机发送ARP,子网中的所有主机都要做这个操作)。

RARP(逆地址解析协议):

已知硬件地址,请求自己的IP地址。通常是用在无盘系统引导时用来获取IP地址。(概念简单,但实现起来比ARP要难)
提供一个ARP服务器很简单,通常是TCP/IP在内核中实现的一部分。由于内核知道IP地址和硬件地址,因此当它收到一个询问IP地址的ARP请求时,只需要用相应的硬件地址来提供应答就可以了。
RARP作为服务器的复杂性在于,服务器一般要为多个主机(多个无盘机)提供硬件地址到IP地址的映射。该映射包含在一个磁盘文件中。由于内核一般不读取和分析磁盘文件,因此RARP服务器的功能就由用户进程来提供,而不是作为内核的TCP/IP实现的一部分。
更为复杂的是,RARP请求是作为一个特殊类型的以太网数据帧来传送的,RARP服务器必须能够发送和接收这种类型的以太网数据帧。由于发送和接收这些数据帧与系统有关,因此RARP服务器的实现是与系统捆绑在一起的。
此外,为了让无盘系统在RARP服务器关机的状态下也能引导,通常在一个网络上(例如一根电缆)要提供多个RARP服务器。容易产生冲突。
希望本文的分享对你的学习有所帮助,转载请说明出处 数据中心农场。

weinxin
DC Farm小程序二维码
扫一扫添加博客小程序
Jim

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:2   其中:访客  2   博主  0

    • avatar 生活秀 0

      你的文章好有深度哦,不是太理解,因为俺不是专业人士。

      • avatar 常平婚纱摄影 1

        来采访,,,要回访