《TCP IP 详解卷1:协议》阅读笔记 - 第四章

阅读须知:笔记为阅读《TCP IP 详解卷1:协议》后摘抄的一些知识点,其间也有加入一些根据英文原版的自己翻译和结合网上知识后的理解,所以有些段落之间并不能够串联上或者知识点与书上略有差别(基本差别不大,参考的资料属RFC官方文档)。

 

第四章:地址解析协议

地址解析协议(ARP)提供了一种在IPv4地址和各种网络技术使用的硬件地址之间的映射。ARP仅用于IPv4,IPv6使用邻居发现协议,它被合并入ICMPv6。地址解析是发现两个地址之间的映射关系的过程,ARP提供从网络层地址到相关硬件地址的动态映射。

使用地址解析协议,可根据网络层IP数据报头部的IP地址信息解析出目标硬件地址(MAC地址)信息,以保证通信的顺利进行。

直接交付

直接交付发生在一个IP数据报被发送到一个IP地址,而该地址与发送方具有相同IP前缀的情况下,数据报可被直接发送到这个地址而不经过任何路由器。

假设一个发送方主机要向一个接收主机发送数据报直接交付的基本操作:

  1. 假设以太网兼容地址被用于IPv4子网,发送主机必须将32位的IPv4目的地址转换成48位的以太网地址(需要从逻辑Internet地址想对应物理硬件地址转换)。ARP工作在正常模式下仅适用于广播网络,链路层能将一个消息交付到它连接的所有网络设备;在非广播网络中,可能需要更复杂的映射协议。

  2. 在一个共享的链路层网段上,ARP向所有主机发送一个称为ARP请求的以太网帧(被称为链路层广播)。

  3. 通过ARP,同一广播域中的所有主机可接收ARP请求,接收ARP帧后针对IP做对比,如果匹配则发送应答;不匹配则丢弃ARP请求。

  4. ARP应答被原始请求的发送方接收,现在可发送引起"这次请求的ARP请求/应答交换过程"的数据报。

  5. 发送方可将数据报封装在以太网帧中直接发送到目的主机,并使用有ARP交换得到的以太网地址作为目的地址。(由于以太网地址仅指向正确的目的主机,所以其他主机或路由器不会接收到这个数据报)。

以上一次简单的直接交付中对ARP(以初次应用,无缓存的情况为例)应用的基本过程,简化后:发送主机在发送数据时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址,以此建立正确的链接来发送数据报。

ARP用于运行IPv4的多接入链路层网络,每个主机都有自已首选的硬件地址;第三章提到例如PPP的点到点链路不使用ARP。ARP高效运行的关键是维护每个主机和路由器上的ARP缓存(或表),其本质是记录IP地址和MAC地址的映射关系数据。当地址解析协议被询问一个已知IP地址节点的MAC地址时,先在ARP缓存中查看,如果存在,就直接返回与之对应的MAC地址了;如果不存在,才发送ARP请求向局域网查询。

可以通过 arp 命令可以查看arp缓存,arp命令及使用参数如下图:

《TCP IP 详解卷1:协议》阅读笔记 - 第四章

缓存中完整的条目会比不完整的条目超时时间长,[RFC1122]规定每个条目即使在使用也应启动超时,但很多实现中是每次使用条目后重新启动超时。

ARP帧格式

《TCP IP 详解卷1:协议》阅读笔记 - 第四章

对于ARP请求,目的以太网地址ff:ff:ff:ff:ff:ff(全为1)是广播地址,在同一个广播域的所有以太网接口可接收这些帧。在以太网帧中,ARP2字节的长度或类型字段必须为0x0806。

硬件类型字段指出硬件地址类型(对于以太网,值为1);

协议类型宁段指出映射的协议地此类型(对于IPv4,值为0x0800);

硬件大小和协议大小分别指出硬件地址和协议地址的字节数(对于IPv4的ARP,值分别为6和4);

Op字段指出该操作是ARP请求(1)、 ARP应答(2)、 RARP请求(3)或RARP应答(4)。

代理ARP

代理ARP使一个系统可回答不同主机的ARP请求,使的发送方认为做出响应的系统就是目的主机,但实际上目的主机可能在其他地方。

代理ARP也称混杂ARP或者黑客ARP,它具有"两个物理网络相互隐蔽自己"的用途。

在这种情况下,两个物理网络可使用相同的IP前缀,只要将中间的路由器配置为一个代理ARP,在一个网络中由代理系统来响应其他网络中主机的ARP请求。

免费ARP和地址冲突检测

现在有一个"一台主机发送ARP请求以寻找自己的地址"的骚操作,这操作也被称为"免费ARP"。

免费ARP需要达到两个目标:

  1. 允许一台主机确定另一台主机是否配置相同的IPv4地址。如果收到了ARP应答,则表示同一广播域中有一个系统地址配置错误。

  2. 如果发送免费ARP的主机已玫变硬件地址,该帧导致任何接收广播并且缓存中有该条目的其他主机将该条目的旧硬件地址更新为与该帧一致(更新缓存)。

IPv4地址冲突检测(ACD)定义了ARP探测分组和ARP通告分组。探测分组用于查看一个候选IPv4地址是否被广播域中的任何其他系统所使用;通告分组则用于通告发送方使用侯选IPv4地址的意图。

ACD和免费ARP的区别在于免费ARP是一次ARP请求/应答过程,而ACD被认为是一个持续的过程。

当一台主机通告它正使用的地址后,它会继续检查输入的ARP流量(请求和应答),查看自已的地址是否出现在发送方协议地址字段中。如果是的话,说明其他系统与自已在使用相同的地址。在这种情况下,[RFC5227]提供了3种可能的解决方案:停止使用这个地址;保留这个地址,但发送一个“防御性”ARP通告,如果冲突继续,则停止使用它;不理会冲突,仍继续使用。对于最后一个选择,仅建议那些真正需要一个围定、稳定地址的系统(例如打印机或路由器等嵌人式设备)使用。

[RFC5227]对尝试获得地址设置了10次的冲突限制,在请求的主机进入限速阶段之前,它被允许每60秒执行一次ACD,直至成功。

RARP

地址解析协议是根据IP地址获取物理地址的协议,而反向地址转换协议(RARP)是局域网的物理机器从网关服务器的ARP表或者缓存上根据MAC地址请求IP地址的协议,其功能与地址解析协议相反。

与ARP相比,RARP的工作流程也相反:

  1. 查询主机向网路送出一个RARP请求,向别的主机查询自己的IP地址。

  2. 网络上的RARP服务器就会将发送端的IP地址用RARP应答给查询者,这样查询主机就获得自己的IP地址。

小结 

ARP是TCP/IP中的一个基本协议。通过上述知识点能感知到ARP也是很重要的:功能方面用以确保数据正确的传送到目的主机;安全方面简单的比如代理ARP伪装主机,复杂的涉及ARP缓存条目的安全或者欺骗。

 

上一篇:《TCP IP 详解卷1:协议》阅读笔记 - 第七章


下一篇:《TCP IP 详解卷1:协议》阅读笔记 - 第二章