ARP协议的详细介绍
1. 前言
原来学习过的ARP协议的原理现在回想起来发现忘记了许多细节,当时想做笔记也因为一些事情耽误了。这次温习一下,顺便补上这个笔记吧。
ARP,全称Address Resolution Protocol,中文名为地址解析协议,它工作在数据链路层,在本层和硬件接口联系,同时对上层提供服务。
在TCP/TP协议网络层及其以上,通常是根据IP地址来标识我们想要发送数据包的目标主机。但是在网络最底层数据包传输的过程中,而是根据MAC地址来决定发送的目标主机。互联网中每台主机均有着单独唯一的MAC地址作为标识。
ARP为IP地址到对应的MAC地址之间提供动态映射。
2. ARP原理
我们能够知道,对于一个IP数据报,其要么被发送到本地网络中的其他主机,要么被转发为本地网络中的路由器。所以,在ARP协议中解析的IP地址一定在是本地网络中的。
对于一个IP地址,获得其MAC地址的具体过程如下:
- 查询ARP高速缓存表。每台主机/路由器上都有一个ARP高速缓存表,ARP高速缓存表存放着最近IP地址到MAC地址之间的映射记录。如果ARP高速缓存中存放着对应IP地址的MAC地址就可以直接取用。否则进行步骤2。
- 广播发送ARP请求到以太网上的每个主机。ARP请求中包含目的主机的IP地址。其含义为“如果你是这个IP地址的拥有者,请回答你的MAC地址”。
- 目的主机的ARP层收到这份广播报文后,识别出这是发送端在询问它的IP地址,于是单播回复一个ARP应答,包含本机的目的IP地址和硬件地址。并且将源主机的IP地址和MAAC值存放如ARP缓存表。
- 本机收到ARP应答后就将目的主机的IP地址和MAC地址存入ARP缓存表。同时使用ARP进行请求-应答交换的IP数据报现在就可以传送了。
3. ARP 的分组格式
如上步骤中有两个概念,ARP请求数据包和ARP应答数据包。
首先介绍ARP的报文格式:
- 以太网目的地址:目地MAC地址,目的地址全为1就代表广播地址
- 以太网源地址: 源MAC地址
- 帧类型: 表示后面数据的类型,对于ARP请求或者应答来说,该字段值为0x0806
- 硬件类型:表示硬件地址的类型。它的值为1表示以太网地址
- 协议类型:表示要映射的协议地址类型。它的值为0x0800即表示IP地址
- 硬件地址长度和协议地址长度分别指出硬件地址和协议地址的长度,以字节为单位。对于以太网上IP地址的ARP请求或应答来说,它们的值分别为6和4
- 操作类型(OP):1表示ARP请求,2表示ARP应答,3表示RARP请求,4表示RARP应答
- 发送端MAC地址:发送方设备的硬件地址
- 发送端IP地址:发送方设备的IP地址
- 目标MAC地址:接收方设备的硬件地址
- 目标IP地址:接收方设备的IP地址
举个具体的例子,假设同一网段下有着如下两台主机:
主机 A IP:192.168.1.A MAC: AA-AA-AA-AA-AA-AA
主机 B IP:192.168.1.B MAC: BB-BB-BB-BB-BB-BB
其他主机的IP和MAC地址忽略。
主机A发送了一个请求主机BMAC地址的ARP请求包。其包的具体内容如下:
主机B收到了这个ARP请求包,就将发送ARP回应包给主机A,对于其他收到这个ARP请求包的主机,由于目的MAC地址不是自己,就会被简单的抛弃。
比较ARP请求包和ARP回应包,发现如下:
- ARP请求包的目的MAC地址是0xFFFFFFFFFFFF,为广播发送。ARP应答包的目的MAC地址为0xAAAAAAAAAAAA,为单播发送。
- ARP请求包中的目的MAC地址被置空,表示不知道。ARP应答中将目地MAC地址,源MAC地址等待都填充完全。
4. ARP高速缓存
ARP请求报文到达目的主机的时候,目的主机会将相应的IP地址和MAC地址存入ARP高速缓存中。
当主机收到目标主机发送的ARP高速缓存后,主机会将目标主机的IP地址和MAC地址同样的存入ARP高速缓存内。
存放在ARP高速缓存中包括动态表项和静态表项,动态表项就是如上由ARP协议进行维护。这些表项都设置了一个超时值,如果在超时值内无人使用,将会被删除。如果再次被使用,将会重新更新超时值的值。
对于ARP高速缓存中的静态表项,一般是由管理员来进行设置,无超时值,永久生效。
5. ARP代理
如果ARP协议中的请求主机A和目的主机B是在同一个网段内,但是却处在不同的物理网络中。主机A将广播发送ARP请求包到以太网中,此时连接两个网络的路由器可以代替主机B应答该请求。这个过程就被称为ARP代理。这样子可以欺骗发起ARP请求的发送端,让它误以为路由器就是目的主机,然而事实上目的主机是在路由器的“另一边”。
为什么要有ARP代理?
路由器的一个重要功能是把局域网广播包限制在该网内,不让扩散,否则会造成网络风暴。ARP 请求是个广播包,它询问的对象若在同一个局域网内,就会回答。但如果查询对象不在同一个局域网,就会由路由器提供的代理ARP服务来解决。