ARP——根据IP地址查询MAC地址
当一台设备需要发现另一台设备的数据链路标识符(MAC地址)时,建立一个ARP请求数据包,数据包中包括目标设备的IPv4地址以及请求设备的源点IPv4地址和数据链路标识符。ARP请求数据包封装在数据帧中,其中带有作为源的发送者的MAC地址和作为目标的广播地址。
特别注意:请求数据中的目标MAC地址为全0,二层帧头中的目的MAC地址为全1(广播地址)
数据链路上所有其他设备都可以收到这个ARP请求数据包,并且检测帧内封装的数据包,除了目标主机可以识别此数据包,其他所有设备都会丢弃此数据包。同时,目标主机将向源地址发送ARP响应数据包 。
ARP数据包格式 ![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/ad779e19b4d7bd9c70f0762accd4de39.png)
- 硬件类型——Hardware Type
指定硬件的类型
编号 | 硬件类型 |
---|---|
1 | 以太网 |
3 | X.25 |
4 | Proteon ProNET Token Ring |
6 | IEEE 802 网络 |
7 | ARCnet |
11 | Apple LocalTalk |
14 | SMDS |
15 | 帧中继 |
16 | 异步传输模式(ATM) |
17 | 高速数据链路控制(HDLC) |
18 | 光纤信道 |
19 | 异步传输模式(ATM) |
20 | 串行链路 |
- 协议类型——Protocol Type
指定发送者映射到数据链路标识符的网络层协议的类型
IP对应0x0800 - 硬件地址长度——Hardware Address Length
指定数据链路标识符的长度
单位为八位组(1Byte)
MAC地址的长度为6 - 协议地址长度——Protocol Address Length
指定网络层地址的长度
单位是八位组(1Byte)
IPv4地址的长度为4 - 操作——Operation
指明数据包的用途
编号 | 类型 |
---|---|
1 | ARP请求 |
2 | ARP响应 |
3 | 反向ARP请求 |
4 | 反向ARP请求响应 |
8 | 反转ARP请求 |
9 | 反转ARP响应 |
代理ARP
也称为混杂ARP,代理ARP被路由器作为向主机表明自身可用的一种手段。
列如主机192.168.1.1/24需要向192.168.2.1/24发送数据包,但是没有配置缺省网关信息,故而不知道如何到达路由器。
此时向192.168.2.1发送一个ARP请求,本地路由器收到这一请求,并且本地路由器知道如何到达192.168.2.0网络,路由器讲话回复请求,把自己的数据链路标识作为ARP回复数据包中的硬件地址。
实际上,路由器欺骗了本地主机,让他认为路由器的接口就是192.168.2.1的接口,最终所有发向192.168.2.1的数据包都被发送到路由器。
另外一种情况——实现子网划分的透明性
这里特别关注地址的掩码,路由器配置的掩码是28位,主机配置的是标准的C类地址掩码(24位)
主机并不知道子网的存在,当主机192.168.20.66想发送数据包到192.168.20.20时,首先发送ARP请求,路由器识别出数据包的目的地址属于另外一个子网,因而向请求主机回复自己的硬件地址
这种代理ARP使得子网化网路拓扑结构相对主机透明。
当多个IPv4地址映射到单一MAC标识符时,说明正在是使用代理ARP
无敌ARP
主机偶尔会使用自己的IPv4地址作为目标地址发送ARP请求,这种ARP请求称为无敌ARP
- 无敌ARP可以用于检测重复地址
一台设备可以向自己的IPv4地址发送ARP请求,如果收到ARP相应则表明存在重复地址 - 无敌ARP可以用于通告一个新的数据链路标识符
当一台设备收到一个ARP请求,如果ARP高速缓存中已有发送者的IPv4地址,那么与此IPv4地址相对应的硬件地址将会被发送者新的硬件地址更新 - 某个子网内运行热备份路由协议(HSRP协议)的路由器如果从其他路由器变成主路由器,通过发送一个无敌ARP来更新子网主机上的ARP缓存
现实中很多 情况不存在无敌ARP功能
反向ARP
实现IPv4地址到已知硬件地址的映射(根据MAC地址查IP地址)
RARP在很大程度上正在被动态主机配置协议(DHCP)和自举协议(BOOTP)的扩展协议所替代