一、引言
在真实的网络上传输的数据帧不是IP地址来传的,是通过每一个网卡的特有的物理地址(MAC地址)来传输的。上层协议一般是只知道IP地址,不知道MAC地址的。因此需要有通过IP地址知道MAC地址的方法,这就是ARP(Addess Resolution Protocol)。 有时候知道一台机器的物理地址,而不知道该机器的IP地址(如,具有本地磁盘的系统引导时,一般是从磁盘上的配置文件中读取IP地址。但是无盘机/无盘工作站,则需要采用其他方法(RARP)来获得 I P地址)。通常是某主机发送一份RARP数据包到网络上,另一主机(RARP服务器)响应该RARP数据包,告诉当前主机他的IP地址。
二、ARP与RARP数据包
这是是一个完整的以太网ARP/RARP数据帧(图1中,每一域的长度单位是字节),该帧去掉了CRC校验和,前三个区域为前面介绍的链路层以太网帧格式。ARP与RARP的数据包格式是相同的,只是某些区域字段值(以太帧类型、操作数)不相同而已。除去以太帧首部外的其他域解释如下:- 以太帧帧类型:长度2个字节,0x0800-IP数据包,0x0806-ARP请求/应答数据包,0x8035-RARP请求/应答数据包。
- 硬件类型(Hardware type):指明该ARP数据包的网络硬件类型,长度2个字节,0x0001-以太网。
- 协议类型(Protocol type):指明该ARP数据包的使用协议,长度2个字节,0x0800-IP地址协议。协议类型与硬件类型共同确定后面数据存储结构,这里只是以太网ARP/RARP。
- 硬件地址长度(Hardware Size): 指明之后的硬件地址长度,长度1个字节。0x06-以太网地址长度(6个字节),该长度的单位是字节。
- 协议地址长度(Protocol Size):指明之后的协议地址长度,长度1个字节。0x04-IP地址长度(4个字节),该长度的单位是字节。
- 操作码(Opcode):指明该数据包是干嘛的,长度2个字节。0x0001-ARP请求包,0x0002-ARP应答包;0x0003-RARP请求包,0x0004-RARP应答包。
- 源以太网MAC地址(Sender MAC Address):发送端以太网物理地址,长度6个字节。
- 源IP地址(Sender IP Address):发送端IP地址,长度4个字节。
- 目的以太网MAC地址(Target MAC Address):目的以太网MAC地址,长度6个字节。ARP发送包初始化为0,ARP应答包为具体MAC地址;RARP发送包初始化为需要解析的MAC地址。
- 目的IP地址(Target IP Address):目的IP地址,长度为4个字节。ARP发送包初始化为需要解析的IP地址。RARP发送包初始化为0,RARP应答包填充对应的IP地址。
ARP与RARP数据包既可以单播(以太网目的地址为具体的某个机器的MAC地址),也可以广播(以太网目的地址为全为1的MAC地址)。
三、ARP与RARP特性
1. ARP特性
- ARP高速缓存:ARP能够高效运行的原因是每一个主机都有一个ARP高速缓存。这个高速缓存存放了最近的IP地址与硬件之间的映射关系。高速缓存一般设置的生存时间是20分钟。起始时间是从被创建时候开始算起。在命令行中,我们可以通过arp命令查看这些缓存。
- ARP代理(Proxy ARP):有时候需要将网络A中的数据包发送到网络B中某主机,当在网络A中发送ARP请求包的时候,网络A与网络B之间的路由器会响应该ARP包。这样就让ARP请求包发送端,误认为路由器是目的主机。
- 额外的ARP(gratuitous ARP):指的是主机A发送查找主机A的IP地址对应MAC的ARP请求包。发送查找自己的ARP包怪吗?不怪,因为可以通过这种方式:(1).该网络上是否具有相同IP地址的主机。(2).如果主机A的物理地址发生变化,可以通过这种方式更新其他主机中相应的ARP高速缓存。
2.RARP特性
- RARP的响应需要RARP服务器的。该服务器记录了IP地址与物理地址的对应关系。通常一个网络中有多个RARP服务器。
- 当服务器的数目增加时(以提供冗余备份),网络流量也随之增加,因为每个服务器对每个RARP请求都要发送RARP应答。发送RARP请求的无盘系统一般采用最先收到的 RARP应答(对于 ARP,我们从来没有遇到这种情况,因为只有一台主机发送 ARP应答)。另外,还有一种可能发生的情况是每个 RARP服务器同时应答,这样会增加以太网发生冲突的概率。
四、ARP抓包
上面,两图是一对。我们可以看到这是一个单播的ARP。
都看到这里了,要不要扫二维码关注一下微信公众号林湾村龙猫。