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随着技术的更新迭代正在退出历史舞台
成为\"被遗忘的兄弟协议\" (对于初学者来说,也算是个好事,因为终于不用\"翻转\"\"反向\"\"逆向\"各种分不清了)