一、概述

在我第一次接触ARP协议的时候,发现这协议挺简单的,"一去一回通过IP拿到MAC地址",整个过程在1s内就搞定了。后面学到了代理ARP,发现也不过是变了个法子,做了次"欺骗",本质还是一样。接下来又学到了免费ARP,顿时觉得网络协议设计者太牛了,一个协议居然能折腾出这么多玩法,连"地址检测"都能实现。等学到了ARP嗅探和欺骗,又发现其实黑帽子更爱折腾,谁能想到这么简单的协议,居然能制造工具出来做内网探测欺骗攻击,引发这么大的危害。

当我以为ARP这一知识点在我的技术旅途中应该就此翻篇了的时候,又冒出了RARP和IARP这两,对比其他ARP协议的研究,当时学这两个协议是心不甘情不愿的:

第一,无论学习还是工作,极少碰到,真正"翻篇"了的协议;

第二,名字记不住,"翻转""反转""逆向""反向",不同技术文档的中文翻译有时候完全相反,没法记。毕竟汉语这么博大精深,就记住英文就好了,后面发现更加糟糕,因为reverse和inverse这两个单词仅仅2个字母之差,老外太欺负人了,这根本没法记。

我在想,肯定也有很多朋友学到这个时候遇到了上面同样的问题和纠结,有些坚持研究通透有些中途离开。然后我又思考了一番:ARP协议通过几个字段的细微调整,便能够适用于这么多不同场景,例如ARP、PARP、GARP、RARP、IARP,这是不是证明了它在TCP/IP协议栈里面独特的位置,有哪个协议能做到这一点,有这么多花样?所以,我的建议是:既然到了这一步了,就继续搞清楚吧,不管它是否用得上。

那么,什么是RARP和IARP?中文叫法是什么?它们各自的应用场景在哪里?数据包又是怎样的


二、RARP原理与实践

RARP(Reverse ARP)即反向ARP或者翻转ARP,顾名思义,它跟常规的ARP功能恰恰是相反的,ARP是实现IP到MAC地址的映射,而RARP是实现MAC到IP地址的映射

什么样的设备或者场景需要用到RARP呢?其实RARP原先在设计的时候,是适用于大部分终端设备的,不仅仅是无盘工作站,它的功能就是根据MAC获取IP地址,功能跟DHCP是一样的

例如,一个电脑刚接入网络,没有IP地址就无法上网,此时它便会通过本地MAC地址,对外发送RARP Request广播请求,看看局域网里面是否有RARP Server,若Server上面有关于此MAC地址的映射IP,则会向此电脑返回RARP Reply回应,电脑便获取了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的鼻祖,目前我们的电脑基本不会用到这个协议,只有部分无盘工作站等情况需要用到

为了让大家更深入理解RARP,这里我们从数据包结构来解构它的功能。RARP的数据包比较难抓取,不像常规的ARP和DHCP协议,这里给大家提供一个思路:对于比较难找的协议数据包,除了搭建特殊的实验环境抓取之外,也可以借助一些[数据包生成工具]来实现,例如nmap扫描器里面集成的nping工具,可以生成非常多的协议包,包括arp、icmp、udp、tcp等等

nmap的安装以及nping的使用,可以到https://nmap.org/nping下查询。这里给大家演示如何用nping生成rarp数据包,下图是我们要"人为"构造出来的交互场景=>

我的Macbook已经安装了nmap,自带了nping工具,跟ARP/RARP相关的帮助命令如下:

jayking:~ jaykingchen$ nping

Nping 0.7.60 ( https://nmap.org/nping )

Usage: nping [Probe mode] [Options] {target specification}

TARGET SPECIFICATION:

Targets may be specified as hostnames, IP addresses, networks, etc.

Ex: scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.*.1-24

ARP/RARP PROBE MODE:

--arp-type <type>                : Type: ARP, ARP-reply, RARP, RARP-reply.

--arp-sender-mac <mac>           : Set sender MAC address.

--arp-sender-ip  <addr>          : Set sender IP address.

--arp-target-mac <mac>           : Set target MAC address.

--arp-target-ip  <addr>          : Set target IP address.

为了能够抓取到rarp的请求和回复包,首先打开wireshark抓取电脑网卡流量并设置arp过滤,然后采用两条命令:第一条命令模拟我的电脑发起的RARP请求包,第二条命令模拟局域网网关设备(极路由)返回的RARP回复包

jayking:~ jaykingchen$ sudo nping --arp-type RARP  --arp-sender-mac ac:bc:32:8b:56:df --arp-sender-ip 0.0.0.0 --arp-target-mac ac:bc:32:8b:56:df --arp-target-ip 0.0.0.0 192.168.199.255

Starting Nping 0.7.60 ( https://nmap.org/nping ) at 2017-09-04 23:57 CST

SENT (0.0077s) RARP who is AC:BC:32:8B:56:DF? Tell AC:BC:32:8B:56:DF

SENT (1.0079s) RARP who is AC:BC:32:8B:56:DF? Tell AC:BC:32:8B:56:DF

SENT (2.0084s) RARP who is AC:BC:32:8B:56:DF? Tell AC:BC:32:8B:56:DF

SENT (3.0111s) RARP who is AC:BC:32:8B:56:DF? Tell AC:BC:32:8B:56:DF

SENT (4.0159s) RARP who is AC:BC:32:8B:56:DF? Tell AC:BC:32:8B:56:DF

Max rtt: N/A | Min rtt: N/A | Avg rtt: N/A

Raw packets sent: 5 (210B) | Rcvd: 0 (0B) | Lost: 5 (100.00%)

Nping done: 1 IP address pinged in 5.02 seconds

jayking:~ jaykingchen$ sudo nping --arp-type RARP-reply  --arp-sender-mac d4:ee:07:54:c1:9e --arp-sender-ip 192.168.199.1 --arp-target-mac ac:bc:32:8b:56:df --arp-target-ip 192.168.199.153 192.168.199.153

Starting Nping 0.7.60 ( https://nmap.org/nping ) at 2017-09-05 00:03 CST

SENT (0.8094s) RARP reply: AC:BC:32:8B:56:DF is at 192.168.199.153

SENT (1.8107s) RARP reply: AC:BC:32:8B:56:DF is at 192.168.199.153

SENT (2.8114s) RARP reply: AC:BC:32:8B:56:DF is at 192.168.199.153

SENT (3.8138s) RARP reply: AC:BC:32:8B:56:DF is at 192.168.199.153

SENT (4.8159s) RARP reply: AC:BC:32:8B:56:DF is at 192.168.199.153

Max rtt: N/A | Min rtt: N/A | Avg rtt: N/A

Raw packets sent: 5 (210B) | Rcvd: 0 (0B) | Lost: 5 (100.00%)

Nping done: 1 IP address pinged in 5.82 seconds

此时,从Wireshark抓取到的RARP请求和回复包如下=>

至此,关于RARP的原理和数据包分析便完成了。

三、IARP原理与实践

IARP(Inverse ARP)即逆向ARP,这个没法"顾名思义",因为它既不是IP到MAC的映射,也不是MAC到IP的映射,而是DLCI到IP的映射。相比前面所有其他ARP协议,IARP的应用场景不是在以太网(局域网)里面,而是在帧中继网络(广域网)里面。

要真正理解DLCI和IARP,需要有一些帧中继网络技术背景,这里简单说下:

DLCI(Data Link Connection Identifier)数据链接连接标识,是帧中继网络里面的二层地址,好比以太网里面的MAC地址,用于标记帧中继网络里面的虚拟专线。示图如下:

图中R1和R2通过专线连接到帧中继交换机,对应的DLCI号分别是102和201。交换机通过转发表进行数据交换:根据接口收到数据包的DLCI,查看对应的接口,转发到匹配的线路

所以说,帧中继网络里面,DLCI类似MAC,决定了数据包的去向。那么,DLCI和IP的映射关系又是如何的呢?我们来看下帧中继网络里面的数据封装,以R1 ping R2为例:

从这里我们可以看到帧中继网络的数据封装和转发模式都不同于以太网:

①二层封装的时候,不需要源目地址,只需要本地DLCI;例如10.1.1.1 ping 10.1.1.2,源目IP地址这个跟以太网的封装是一样的,但是链路层封装不需要目标DLCI 201。

②交换机会改变二层地址信息,例如这里的DLCI从左边的102,变成了右边的201。

理解了这些差异,我们才能得到这里DLCI和IP的映射关系:即目标IP地址与本地DLCI的映射。例如R1要访问10.1.1.2,此时需要映射到本地的102;而R2要访问10.1.1.1,则需要映射到本地的201。

更完整地说明:逆向ARP解决帧中继网络里目标IP地址与本地DLCI的映射,并且让通信双方生成帧中继映射表(frame-relay map)。好比ARP解决了以太网里面目的IP与目标MAC的映射,并且让通信方生成ARP映射表

接下来,我们通过实验环境来验证,这里可以通过GNS3模拟器搭建以上环境,并且抓包验证=>

①为R1和R2打开接口,封装帧中继,并配置IP地址:

R1(config)#int s0/0

R1(config-if)#no shutdown

R1(config-if)#encapsulation frame-relay

R1(config-if)#ip address 10.1.1.1 255.255.255.0

R2(config)#int s0/0

R2(config-if)#no shutdown

R2(config-if)#encapsulation frame-relay

R2(config-if)#ip address 10.1.1.2 255.255.255.0

② 开启wireshark抓包,抓取IARP请求和回复包:

③查看R1和R2本地生成的IARP映射表:

R1#show frame-relay map

Serial0/0 (up): ip 10.1.1.2 dlci 102(0x66,0x1860), dynamic,

broadcast,, status defined, active

R2#show frame-relay map

Serial0/0 (up): ip 10.1.1.1 dlci 201(0xC9,0x3090), dynamic,

broadcast,, status defined, active

④测试R1和R2之间的联通并抓取ICMP包:

R1#ping 10.1.1.2

Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 10.1.1.2, timeout is 2 seconds:

!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 68/75/88 ms

至此,IARP的原理与实践并完成了。那么,既然IARP能够实现帧中继的通信,为什么在文章开头,我们提到说IARP跟RARP一样,在工作中已经不常见了呢?

①帧中继作为一种广域网远程连接技术,正在慢慢被其他技术代替

②IARP不像ARP协议可以实时交互,它是周期性运行的,通信双方若丢失IARP映射表,则需要等待到固定的时间交互才能重新生成并通信。另外不同厂商不同型号对IARP的兼容性也可能不同。基于这些原因,一般建议直接关闭IARP协议,采用静态绑定的方式生成映射表,这里不再深入。(有兴趣的小伙伴可以观看我之前的技术视频教程,有深入讲解了如何关闭IARP和静态绑定的做法。)

四、RARP与IARP协议总结

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

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

③相比ARP、免费ARP、代理ARP、ARP攻防等技术,RARP和IARP随着技术的更新迭代正在退出历史舞台,成为"被遗忘的兄弟协议" 。(对于初学者来说,也算是个好事,因为终于不用"翻转""反向""逆向"各种分不清了)

ARP协议大总结及下一阶段预告

到这里,我们通过六篇文章终于搞定了ARP协议的方方面面,包括它们的应用场景、设计思想、数据包结构、实验验证等等。

另外,为什么这次图解系列的开头是从ARP协议开始写,而不是从Ethernet、IP、TCP、HTTP或其他呢?

主要是因为"ARP太简单了",简单到大家在学网络和安全的时候,都容易去忽略协议背后的很多细节,例如很多人认为[ARP的请求就一定是广播的,回复就一定是单播的],但"常识"背后也有另外一些特殊的情况。所以,通过这一个足够简单的协议,为大家解构背后相对复杂的机制,为后续深入研究开个好头。

另外一个原因就是"ARP很有趣",例如协议设计者通过不同的操作代码(opcode),做了非常多的变种(arp是1和2,rarp是3和4,iarp是8和9),做一个模型便可以多处应用;而且通过精巧的构造,就可以在内网造成极大的杀伤力。

anyway,图解ARP协议只是整个系列的开篇,下一阶段,我们将进入IP协议,探讨IP协议原理、数据包结构、优缺点、地址结构、IP攻击与防御(分片攻击、欺骗攻击)……

图解ARP协议(六)RARP与IARP:被遗忘的兄弟协议相关推荐

  1. 图解ARP协议分析实例

    一 ARP协议 ARP (地址解析协议) 地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议.主机发送信息时将包含目标I ...

  2. 图解ARP协议(四)代理ARP:善意的欺骗

    首发于 跟杰哥学网络与安全 写文章 登录 图解ARP协议(四)代理ARP:善意的欺骗 拼客学院陈鑫杰 24 天前 一.代理ARP概述 我:当电脑要访问互联网上的服务器,目标MAC是什么? 很多小伙伴在 ...

  3. ARP地址解析协议与RARP逆地址解析协议

    这里写目录标题 区分ARP与RARP ARP:地址解析协议 ARP高速缓存 ARP高速缓存超时设置 用户输入命令时ARP操作流程 ARP的分组格式 ARP代理 免费ARP RARP逆地址解析协议 RA ...

  4. 计算机网络-网络层篇-ARP协议与RARP协议

    目录 问题所在 解决方案 ARP协议 RARP协议 问题所在 对于简单的网络拓扑,数据帧的转发有4个步骤 A通过网卡发出数据帧 数据帧到达路由器,路由器取出前6字节 路由器匹配MAC地址表,找到对应的 ...

  5. ARP协议以及RARP协议的工作原理

    ARP协议和RARP协议都是五层网络协议中的网络层协议. ARP(Address Resolution Protocol)地址解析协议:作用是将网络层IP地址转换为数据链路层MAC地址,即完成IP地址 ...

  6. 计算机网络 arp协议和rarp协议

    文章目录 1.arp协议 1.1 简介 1.2 功能 1.3 工作原理 2.rarp协议 2.1 简介 2.2 工作原理 1.arp协议 1.1 简介 地址解析协议,即ARP(Address Reso ...

  7. 计算机网络基础(四)---网络层-ARP协议与RARP协议

    文章内容概览 还是看在上一篇文章中提到的这张图,计算机A将数据跨设备传输给C.A发出目的地为C的IP数据报,查询路由表发现下一跳为E,A将IP数据报交给数据链路层,并告知目的MAC地址是E.那么A是如 ...

  8. 软件测试面试题:I P协议、RARP协议、ICMP协议与ARP协议的功能是什么?

    I P协议.RARP协议.ICMP协议与ARP协议的功能是什么? IP 协议(Internet Protocol,因特网协议),属于 OSI7 层参考模型中的网络层协议.它提供两个基本功能:寻址和分段 ...

  9. 图解ARP协议(五)免费ARP:地址冲突了肿么办?

    一.免费ARP概述 网络世界纷繁复杂,除了各种黑客攻击行为对网络能造成实际破坏之外,还有一类安全问题或泛安全问题,看上去问题不大,但其实仍然可以造成极大的杀伤力.今天跟大家探讨的,也是技术原理比较简单 ...

最新文章

  1. python为什么慢_python-为什么startswith比切片慢
  2. LGDT/LIDT - 加载全局/中断描述符表格寄存器
  3. 利用btrace在线监控java程序状态
  4. poj3076(16*16数独)
  5. c++ pat 乙级 ---1004 成绩排名
  6. RedisTemplate在项目中的应用
  7. java 方法 示例_Java ArrayDeque带有示例的removeFirstOccurrence()方法
  8. 包含内部类的.java文件编译后生成几个.class文件
  9. Linux和windows下多线程的区别
  10. response 设置头的类型 (转)
  11. IIS——asp上传文件大小限制
  12. 计算机coreldraw课程PPT,[计算机]CorelDRAW_12基础教程.ppt
  13. ghost服务器系统镜像文件,带RAID服务器能GHOST备份吗?
  14. OPPO芯片研发计划投入300~500亿人民币,研发人员已达千人: 还要继续努力
  15. 济南连续4年蝉联中国领军智慧城市,这六点是关键
  16. ioncube加密与解密 php代码
  17. R语言绘图-抖动点图(jitter)绘制指南
  18. 吕 思 伟 ---- 潘 爱 民 :: ATL 介 绍( 三) (转)
  19. FOFA是什么(白帽汇推出的一款网络空间资产搜索引擎)
  20. Linux升级gcc到最新版本gcc-11.2.0

热门文章

  1. matlab 若当标准型,若当标准型求解.pdf
  2. c语言多进程架构改go语言,golang多进程并发
  3. linux 配置jupyter远程访问
  4. 从零开始学习docker(十九)Swarm mode 集群服务间通信--RoutingMesh
  5. 三十、电子商务分析与服务推荐的分析方法与过程
  6. 最后 24 小时,赶紧来领取这 50 本送书福利吧!
  7. labview嵌入c代码_Raspberry pi 4B+LabVIEW_2020amp;NXG部署WebApp
  8. 华为平板安装python_极致安卓—Termux/Aid Learning安装宇宙最强VS Code
  9. 机器学习:从感知机模型体会随机梯度下降
  10. 单片机成长之路(51基础篇) - 022 N76e003 APROM模拟EEPROM驱动