ARP-地址解析协议(Address Resolution Protocol)
一、ARP请求
在一个小型局域网内,某源终端不知道目的终端的MAC地址,则发送ARP请求报文,在改网段内广播,第一个报文如下:目标MAC为广播MAC地址,其后为正常的目的MAC地址
源终端IP | 目标终端IP |
---|---|
源终端MAC | FFFF.FFFF.FFFF |
二、ARP应答
在接收到ARP请求报文后,会发送ARP应答报文,含有源终端所需要的MAC地址并且封装发送给源终端,报文如下:
目标终端IP | 源终端IP |
---|---|
目标终端MAC | 源终端MAC |
三、正常通信
当源终端接收到ARP应答报文后,即可进行正常通信。
四、ARP表
- ARP高效运行的关键
每一个主机都有一个ARP高速缓存,即ARP表;
ARP表记录了最近的映射记录。 - ARP表的关键
-
UNIX实现中完整表项的生存时间为20分钟,不完整表项的生存时间为3分钟
所谓的不完整表项就是在以太网上对一个不存在的主机发出ARP请求时,在本地保留的一个只有IP地址没有MAC地址的表项。 -
Windows实现中没有被使用的ARP表项老化时间2分钟,正在使用的ARP表项老化时间10分钟。
在表项正在使用时,超时值就应该启动,但是大多数的从伯克利系统演变而来的系统没有这样做—它们每次都是在访问表项进重设超时值。 -
路由器ARP老化时间可以设置,时间范围一般是1-1440分钟之间,缺省为20分钟
注:没有UNIX中的完整表项和不完整表项的概念,也不存在Windows中区分ARP表项是否被上层协议所正在使用,只是固定一个老化时间,时间到了,表项就老化,正在使用的表项也一样被老化。
五、ARP帧的格式
以太网目的地址 | 以太网源地址 | 帧类型 | 硬件地址类型 | 协议类型 | 硬件地址长度 | 协议地址长度 | OP | 发送端以太网地址 | 发送到IP地址 | 目的以太网地址 | 目的IP地址 |
---|---|---|---|---|---|---|---|---|---|---|---|
6 | 6 | 2 | 2 | 2 | 1 | 1 | 2 | 6 | 4 | 6 | 4 |
- 前14字节以太网首部
- 指定后四个字段的类型和长度
- 最后28字节ARP请求/应答
具体解释:
- 硬件地址类型:本地网络的硬件类型,例如10Mb的Ethernet是以0001为代码;
- 协议类型:表示ARP提供解析的协议类型,常为IP协议,IP是以0080为代码;
- 硬件地址长度:表示该类型的硬件地址长度,例如Ethernet和Token Ring为06,而Frame Relay为02;
- 协议地址长度:通常表示IP地址的长度,IPv4为04;
- …
六、ARP代理
当主机A想要访问主机D,但是主机A不知道网关地址,这时候该如何完成?
主机A将网关设置成自己的IP地址,在访问非本网段目的地址时,也会发生ARP请求(当PC不知道网关地址或者网关地址经常发生变化时,常常将网关设置为自己的IP地址)
如果ARP请求是从一个网络的主机发往另一个网络上的主机,那么连接这两个网络的路由器就可以回答该请求,这个过程成为ARP代理(ARP Proxy)
ARP代理—检查自己是否具有请求的目的地址的路由,如果有,则回应ARP请求(此时填充的是路由器的接口MAC地址)
七、无故ARP(免费ARP)
- 为什么要免费ARP?
- 什么是免费ARP?
- 当一个主机配置的IP地址与你一样,怎么办?
- 我如果改变了自己的IP地址,别人是怎么知道的呢?
其实很简单,当某设备更改自己的IP地址时,会向网络中广播一个ARP报文来告诉别人更改了IP地址,要求对ARP表进行更新,并且查看ARP表是否具有相同的IP地址。