BSD操作系统中的ARP协议实现详解

需积分: 10 4 下载量 185 浏览量 更新于2024-08-01 收藏 1.13MB PDF 举报
"本文档详细介绍了BSD系统中的ARP(地址解析协议)实现,重点在于具体的实现机制和代码示例。ARP协议主要用于将IP地址转换为网络接口硬件地址,如以太网的48位MAC地址。在发送IP数据时,主机首先会在ARP高速缓存中查找目标IP对应的硬件地址,如果找不到,就会通过广播ARP请求来获取。在Net/3的实现中,ARP与路由表紧密关联。文中以一个示例展示了ARP缓存的结构,并简述了关键点,但未展示所有详细细节。" 在BSD系统中,ARP的实现是基于RFC826标准,该协议规定了如何将IP地址映射到物理层的硬件地址,以便在数据链路层进行通信。对于以太网环境,这个硬件地址通常是48位的MAC地址。当一个主机需要发送IP数据包给另一主机时,它首先会在本地的ARP缓存中查找目标IP对应的MAC地址。如果找到,就将MAC地址放入以太网帧的头部并发送数据;如果没有找到,主机就会发送一个ARP请求到网络中,请求的目标是未知IP地址的硬件地址。所有网络上的设备都会接收到这个请求,但只有目标IP的持有者会回应它的硬件地址。 ARP协议的工作流程包括了以下步骤: 1. 查询:主机查找ARP缓存,检查是否有目标IP的映射记录。 2. 广播请求:如果查询失败,主机将广播一个ARP请求,包含目标IP地址。 3. 回答:目标主机收到请求后,会回应自己的MAC地址。 4. 更新缓存:源主机收到回答后,将新信息添加到ARP缓存中,并重新尝试发送IP数据包。 在Net/3的实现中,ARP功能与路由表紧密结合。路由表决定了数据包应该如何转发,而ARP则负责获取这些转发决策所需的物理层地址。图21-1描绘了一个具体的ARP缓存示例,虽然没有展示全部结构,但说明了与路由表的关系以及缓存中的信息,如接口信息、IP地址和硬件地址的映射。 ARP缓存由一系列`lli_nfo_arp`结构组成,形成一个双向链表。每个元素存储了与特定IP地址相关的硬件地址信息。全局变量`lli_nfo_arp`作为链表的头节点。链表中的每个元素都有前向和后向指针,用于遍历所有已知的映射。 在深入讨论ARP的具体实现细节之前,图中的概述提供了对ARP缓存组织和工作原理的基本理解。随着章节的进展,会详细阐述各个组件和它们之间的交互,包括如何处理ARP请求和响应,以及如何更新和管理ARP缓存的内容。这种实现方式确保了网络通信的高效和正确性。