计算机网络原理(TCP/IP协议四):地址解析协议
- ARP
- ARP缓存
- ARP帧格式
- ARP缓存超时
- 代理ARP
- 免费ARP和地址冲突检测
- 与ARP相关的攻击
关于地址解析协议在之前计算机网络原理(六):链路层与局域网的4.1中就有原理的介绍,可以先参考之前的内容,这篇博客将更多的关注协议的细节做一些补充。
一、ARP
IP协议的设计目的是为了跨越不同类型的物理网络的分组交换提供服务,这需要网络层软件使用的地址和低层硬件使用的地址之间进行转换。网络接口硬件通常有一个主要的硬件地址(例如以太网或802.11无线接口的48位地址)。硬件交换的帧需要使用正确的硬件地址定位到正确的接口,否则无法传输数据。但是一个传统的IPv4网络需要使用自己的地址:32位的IPv4地址。如果一台主机要将一个帧发送到另一台主机,仅知道这台主机的IP地址是不够的,还需要知道主机在网络中的有效硬件地址。操作系统软件必须知道目的主机的硬件地址,以便直接向它发送数据。对于TCP/IP网络,地址解析协议ARP提供了一种在IPv4地址和各种网络技术使用的硬件地址之间的映射。ARP仅用于IPv4,IPv6使用邻居发现协议,它被合并入ICMPv6(在后面的网络控制平面和Internet控制协议相关博客中会有详细的介绍)。
地址解析是发现地址之间的映射关系的过程,对于使用IPv4的TCP/IP协议族,这时运行的ARP来实现。ARP是一个通用的协议,从这个角度上来说,它被设计为支持多种地址之间的映射。实际上,ARP几乎总是用于32位IPv4地址和以太网的48位MAC地址之间的映射。
ARP提供从网络层地址到相关硬件地址的动态映射,这是因为它会自动执行和随时间变化,而不需要系统管理员重新配置。也就是说,如果一台主机改变它的网络接口卡,从而改变它的硬件地址,ARP可以在一定延时后继续正常运作。ARP操作通常与用户或系统管理员无关。
1.1基于一个本地Web服务的ARP示例:
假设在浏览器打开一个网页,它首先是判断该服务位于本地还是远程,如果是远程的需要一台可达目的地的路由器。仅在到达同一IP子网的系统时,ARP才能工作。假设使用Web浏览器打开以下网址:http://10.0.0.1。这里的URL使用一个IPv4地址,而不是更常见的域名或主机名,这是为了明确这个服务是在内联网络中,即一个本地服务,以此来讨论直接交付的运行原理。随着嵌入式设备(打印机、VoIP适配器)使用內置Web服务器进行配置,这种本地服务器越来越常见。下面就是这个例子的直接交付和ARP的详细过程:
1.应用程序是Web浏览器,调用一个特殊的函数来解析URL,看URL是否包含主机名。这里是一个32位的IPv4地址10.0.0.1,就不会执行DNS的域名解析过程了,直接进入运输层相关操作;
2.应用程序要求TCP协议建立一条到10.0.0.1的连接;
3.通过向10.0.0.1发送一个IPv4数据报,TCP尝试向远程主机发送一个连接请求;
4.这里假设地址10.0.0.1使用与发送主机相同的网络前缀,数据报可被直接发送到这个地址而不经过路由器;
5.假设以太网兼容地址被用于IPv4子网,发送主机必须将32位的IPv4目的地址转换为48位的以太网地址。就是需要从逻辑Internet地址相对应的物理硬件地址进行转换。这就是ARP的功能,ARP工作在正常模式下,仅适用于广播网络,链路层能将一个消息交付到它连接的所有网络设备。如果是在非广播网络中,需要更复杂的映射协议。
6.在一个共享的链路层网段上,ARP向所有主机发送一个称为ARP请求的以太网帧,这被称为链路层广播。ARP请求包含目的主机的IPv4的地址(10.0.0.1),并寻找以下问题的答案:“如果你将IPv4地址10.0.0.1配置为自己的地址,请向我回应你的MAC地址”;
7.通过ARP,同一广播域中的所有系统可接收ARP请求,这个包括可能根本不运行IPv4或IPv6协议的系统,但不包括位于不同VLAN中的系统。如果某个系统使用请求中的IPv4地址,它仅需要响应一个ARP应答。这个应答包含IPv4地址(与请求相匹配)和对应的MAC地址。这个应答通常不是广播,而仅直接发送给请求的发送方。同时,接收ARP请求的主机学习IPv4(ARP请求帧会写到请求方的协议地址和MAC地址)到MAC地址的映射,并记录在内存中供以后使用。
8.ARP应答被原始请求的发送方接收,现在可发送引起这次ARP请求/应答交换过程的数据报。
9.发送方可将数据报封装在以太网帧中直接发送到目的主机,并使用由ARP交换学到的以太网地址作为目的地址。由于这个以太网地址仅指向正确的目的主机,所以其他主机或路由不会接收到这个数据报。因此,当仅使用直接交付时,并不需要经过路由器;
1.2ARP缓存
ARP高效运行的关键是维护每个主机和路由器上的ARP缓存(表),该缓存使用地址解析为每个接口维护从网络层地址到硬件地址的罪行映射。当IPv4地址映射到硬件地址时,它对应于高速缓存中的一个条目,其正常到期时间是条目创建开始后的20分钟。在Linux或Windows中可以使用arp命令查看ARP缓存:
arp -a
1.3ARP帧格式
上图显示了以太网中转换一个IPv4地址时常用的ARP请求和应答分组格式,前面14字节构成标准的以太网头部,假设没有802.1p/q或其他标记,其余部分由ARP协议来定义。ARP帧的前8个子直接是通用的,这个例子中剩余部分专用于将IPv4地址映射到48位的以太网地址。
对于ARP请求,目的以太网地址ff:ff:ff:ff:ff:ff(全部为1)是广播地址,在同一广播域中的所有以太网接口可接收这些帧,对于ARP,2字节的长度或类型字段必须为0x0806。
关于ARP帧结构中的字段大部分都可以从字面上了解它们就不做过多的介绍,其中Op字段指出该操作是ARP请求(值为1)、ARP应答(值为2)、RARP请求(3)、RARP应答(值为4)。
1.4ARP缓存超时
超时通常余ARP缓存中的每个条目相关,在大多数实现中,完整条目的超时为20分钟,而不完整条目的超时为3分钟。arp命令中允许管理员设置缓存条目永远不超时,当强制执行以此不存在主机的ARP请求时会生成一个不完整的条目,这是关于软状态的一个重要例子。软状态是指超时到达前没有更新而被丢弃的信息,如果网络条件发生改变,软状态有助于启动自动重新配置,因此很多Internet协议使用软状态。软状态成本是协议必须刷新状态以避免过期。
1.5代理ARP
代理ARP使一个系统可以回答不同主机的ARP请求,它使ARP请求发送者认为做出响应的系统就是目的主机,但实际上目的主机可能在其他地方(或不存在)。ARP代理并不常见,通常应避免它。
代理ARP也被称为混杂ARP或ARP黑客。两个物理网络相互隐蔽自己,在这种情况下,两个物理网络可使用相同的IP前缀,只要将中间的路由器配置为一个代理ARP,在一个网络中由代理响应对其他网络中主机的ARP请求。这种技术可以用于向一组主机隐藏另一组主机。这样做有两个常见原因:有些系统无法进行子网划分,有些系统使用比较旧的广播地址(全0的主机ID,而不是当前全1的主机)。
1.6免费ARP和地址冲突检测
免费ARP发生在一台主机发送ARP请求以寻找自己的地址时,这通常发生在主机启动时,当接口被配置为“上行”时常这样做。在免费ARP中发送方协议地址与目的协议地址相同,这也从协议的角度说明了免费ARP请求是寻找自己的硬件地址。
免费ARP为了达到两个目的:
1.允许一台主机确定另一台主机是否配置相同的IPv4地址,发送免费ARP的主机并不期望它的请求获得应答。但是,如果它接收到一个应答,通常显示的是错误消息“以太网地址...发送的重复IP地址”。这是对系统管理员和用户的警告,在同一个广播域中有一个系统配置出错(即有其他主机配置与当前主机相同的IPv4地址)。
2.如果发送免费ARP的主机以改变硬件地址(关闭主机或替换接口卡,然后重新启动主机),该帧导致任何接收广播并且其缓存中又该条目的其他主机,将该条目中的就硬件地址更新为与该帧一致。
IPv4地址冲突检测(ACD):
免费ARP提供的一些迹象显示,当多个站尝试使用IPv4地址,但它实际上没有对这种情况提供解决机制。在[RFC5227]描述了IPv4地址冲突检测(ACD):ACD定义了ARP探测分组和ARP通告分组。
ARP探测分组:它也是一个ARP请求分组,其发送方协议(IPv4)地址字段被设置为0。探测分组用于查看一个候选IPv4地址是否被广播域中的任何其他系统所使用,通过将发送方协议地址字段设置为0,避免候选IPv4地址被另一台主机使用时的缓存污染。
ARP通告分组:通告分组与探测分组相同,但要注意的是通告分组的发送发协议地址和目的协议地址被填充为IPv4地址,它用于告诉其他主机当前主机正在使用候选的IPv4地址。
ACD的执行方式:
当一个接口被启用或从睡眠中唤醒,或一个新链路建立时,这台主机在等待一个随机时间后发送三次ARP探测分组。
当探测被应答或受到其他相同目的地址的探测请求,就说明其他系统也在同时尝试获得候选地址IPv4。在这两种情况下,该系统将会显示一个地址冲突消息,并采用其他可选地址。
如果发送请求的主机没有发现冲突,它会间隔2秒向广播域发送两个ARP通告,以表明它现在使用这个IPv4地址。发送这些通告的目的是确保更新缓存地址映射,以正确反映发送方当前使用的地址。
当一台主机通告它正在使用的地址后,它会继续检查输入的ARP流量,如果查看到自己的地址出现在发送方协议地址字段中,说明其他系统与自己在使用相同的地址,这种情况有三种解决方案:①保留这个地址,但发送一个“防御性”ARP通告,如果冲突继续,则停止使用它;②不理会冲突,继续使用;③建议那些正真需要一个固定、稳定地址的系统使用。
1.7与ARP相关的攻击
与ARP相关的攻击一般包含三种情况:
使用代理ARP功能假扮主机,对ARP请求做出应答,这种代理攻击存在两种情况,一种是受害主机不存在,另一种是受害主机存在;第三种情况是ARP涉及静态条目处理,也就是修改地址映射表。
关于这些攻击具体的解决方案到后面网络安全相关博客内容中介绍。