ARP概述

为什么要用ARP?即ARP的作用

(1) TCP/IP 的32bit的IP地址,仅知道主机的IP地址不能让内核发送数据帧给主机

(2) 网络接口的硬件地址,它是一个48bit的值,用来标识不同的以太网或令牌环网络接口

在硬件层次上,进行数据交换必须有正确的接口地址,内核必须知道目的端的硬件地址才能发送数据

在以太网中,一台主机要把数据帧发送到同一局域网上的另一台主机时

设备驱动程序必须知道以太网地址才能发送数据

而我们只知道IP地址,这时就需要采用ARP协议将IP地址映射为以太网地址

( 以太网地址即:硬件地址 MAC )

ARP在OSI模型中的位置

OSI模型有七层,TCP在第4层传输层,IP在第3层网络层,而ARP在第2层数据链路层

高层对低层是有强依赖的,所以TCP的建立前要进行ARP的请求和应答

ARP高速缓存表在IP层使用

如果每次建立TCP连接都发送ARP请求,会降低效率,因此在主机、交换机、路由器上都会有ARP缓存表

建立TCP连接时先查询ARP缓存表,如果有效,直接读取ARP表项的内容进行第二层数据包的发送;

只有表失效时才进行ARP请求和应答进行MAC地址的获取,以建立TCP连接

ARP高速缓存

每个主机都有一个ARP高速缓存表,这样避免每次发包时都需要发送ARP请求来获取硬件地址

默认老化时间是20分钟,利用arp -a命令可以查看显示系统中高速缓存的内容

Windows下arp -d命令可以清除arp高速缓存表

ARP分组帧格式

字段1 ARP请求的目的以太网地址,全1时代表广播地址

字段2 发送ARP请求(源主机)的以太网地址

字段3 以太网帧类型;于ARP协议,该字段为0x0806;对于RARP协议,该字段为0x8035

字段4 硬件地址的类型,硬件地址不只以太网一种,是以太网类型时此值为1

字段5 表示要映射的协议地址的类型,要对IPv4地址进行映射,此值为0x0800。

字段6和7表示硬件地址长度和协议地址长度,MAC地址占6字节,IP地址占4字节。

字段8 操作类型字段,ARP请求(1),ARP应答(2),RARP请求(3),RARP应答(4)

字段9 发送端ARP请求或应答的硬件地址,这里是以太网地址,和字段2相同。

字段10 发送ARP请求或应答的IP地址

字段11和12是目的端的硬件地址和协议地址。

下边两张图,分别是,ARP请求包和响应包

 

代理ARP

代理ARP就是通过使用一个主机(通常为router)

来作为指定的设备使用自己的 MAC 地址来对另一设备的ARP请求作出应答

为什么要用代理ARP

先要了解,路由器的重要功能之一就是把局域网的广播包限制在该网内,阻止其扩散,否则会造成网络风暴。

ARP请求是个广播包,它询问的对象如果在同一个局域网内,就会收到应答

但是如果询问的对象不在同一个局域网该如何处理?路由器就提供的代理ARP为这个问题提供了解决方案。

工作过程

两台主机A和B处于同一网段但不同的广播段时,主机A发送ARP请求主机B的MAC地址时

因为路由器不转发广播包的原因,ARP请求只能到达路由器

如果路由器启用了代理ARP功能,并知道主机B属于它连接的网络

那么路由器就用自己接口的MAC地址代替主机B的MAC地址来对主机A进行ARP应答

主机A接收ARP应答,但并不知道代理ARP的存在

优点:

代理ARP能在不影响路由表的情况下添加一个新的Router,使子网对该主机变得透明化

一般代理ARP应该使用在主机没有配置默认网关或没有任何路由策略的网络上

缺点:

从工作工程可以看到,这其实是一种ARP欺骗。

而且,通过两个物理网络之间的路由器的代理ARP功能

其实互相隐藏了物理网络,这导致无法对网络拓扑进行网络概括。

此外,代理ARP增加了使用它的那段网络的ARP流量,主机需要更大的ARP缓存空间

也不会为不使用ARP进行地址解析的网络工作

RARP:逆地址解析协议

将局域网中某个主机的物理地址转换为IP地址

比如局域网中有一台主机只知道物理地址而不知道IP地址

那么可以通过RARP协议发出征求自身IP地址的广播请求,然后由RARP服务器负责回答

RARP协议广泛应用于无盘工作站引导时获取IP地址。

RARP允许局域网的物理机器从网管服务器ARP表或者缓存上请求其IP地址。

存在的问题

RARP通过非常精简的交互实现了IP地址的获取,但同时也暴露了一些问题:

RARP Server必须提前将MAC和IP的映射静态绑定在本地;

若没有提前绑定,则电脑用自己MAC询问时,Server也不会回应;

RARP Server只能给电脑分配IP地址,不包括其他信息,包括网关、DNS等信息;

RARP基于二层封装,只能运行在同一网段;每个网段分配地址,都需要一个RARP Server。


在RARP的基础上,后面又有了Bootp协议,直译过来便是”启动协议”,功能同RARP

也是用于电脑接入网络时,用来获取IP地址的

但是毕竟做了增强,Bootp协议能让电脑启动时不仅仅获取IP地址

而且能获取到网关地址从而让电脑实现跨网段通信


Bootp协议虽然让电脑能够获取到更多的信息,但是仍然没有解决最大的问题:

服务器仍然需要提前手工绑定MAC和IP地址,而对于现在的移动网络或者公共网络而言,这根本无法实现。

因为用户什么时候接入,接入的MAC是多少,管理员没法提前知道。

这就有了后面的DHCP,DHCP通过动态分配的方式解决了这个诟病

并且通过DHCP中继技术实现了跨网段地址分配,实现了全网IP地址的统一管理。

小结:

RARP是一种逝去的地址分配技术,是Bootp和DHCP的鼻祖

目前我们的电脑基本不会用到这个协议,只有部分无盘工作站等情况需要用到

IARP反向地址解析协议

(Inverse Address Resolution Protocol)是DLCI到IP的映射,他应用的场景不是以太网,而是在帧中继网络里面

DLCI即数据链路连接标识(Data Link Connection Identifier)

是帧中继网络里面的二层地址,好比以太网里面的MAC地址,用于标记帧中继里面的虚拟专线

帧中继协议是一种统计复用的协议,它在单一物理传输线路上能够提供多条虚电路

DLCI由SAPI和TEI组成,用来唯一的识别一个数据链路连接

DLCI只具有局部意义,即交换机上不同的端口可以使用相同的DLCI号

IARP不像ARP协议可以实时交互,它是周期性运行的

通信双方若丢失IARP映射表,则需要等待到固定的时间交互才能重新生成并通信。

另外不同厂商不同型号对IARP的兼容性也可能不同。

基于这些原因,一般建议直接关闭IARP协议,采用静态绑定的方式生成映射表

总结

ARP是把IP地址转换为MAC地址的协议;一般ARP协议只适用于局域网

RARP用于实现MAC到IP的映射,本质就是为了获取IP地址,是Bootp和DHCP协议的鼻祖;

IARP用于实现帧中继网络中DLCI到IP地址的映射,生成帧中继映射表(类似ARP表),实现数据封装与通信;

相比ARP、免费ARP、代理ARP、ARP攻防等技术,RARP和IARP随着技术的更新迭代正在退出历史舞台

成为”被遗忘的兄弟协议” (对于初学者来说,也算是个好事,因为终于不用”翻转””反向””逆向”各种分不清了)

 

版权声明:本文为wintrysec原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/wintrysec/p/10526967.html