ARP属于网络接口层,它形成了只能使用IP地址的上层协议软件和只能使用硬件地址的下层设备驱动程序软件之间的分界线。
ARP软件可以分为3个模块:输出模块,输入模块,高速缓存管理程序。
发送数据报时,网络接口软件调用输出模块的一个过程,完成IP和物理地址的绑定,然后进行封装和发送分组。
输入模块处理来自网络的ARP分组,并通过增加新的绑定来修改ARP缓存中的内容。
高速缓存管理程序实现高速缓存替换策略,删除已经达到规定时限的表项。
设计方案举例:
1.ARP高速缓存的数据结构
struct arpentry
这个结构包括:
1)与绑定有关的数据结构:硬件地址,IP地址....
2)表项的状态:空闲,正在使用但是绑定尚未找到,正在使用绑定正确
3)发送此绑定的网络接口结构
4)状态信息:能在高速缓存中保留的时间,请求分组已经被广播的次数...
struct arp
这个结构定义了ARP分组的格式
2.ARP输出处理
1)网络输出进程(netwrite)调用arpfind,搜索ARP缓存中的匹配表项
2)如果找到可以匹配的表项则发送数据
3)如果没有则分配一个表项,一旦ARP缓存为某IP地址分配表项后,网络接口软件调用arpsend广播获取物理地址的ARP分组,metwrite返回主调程序,将待发送分组放入队列中等待发送。
3.ARP输入处理
arpadd:读取网路传送来的ARP分组,为它在高速缓存中分配一个表项,利用ARP分组中的信息填写此表项。
arpqsend:ARP输出过程将正在等待地址转换的分组保存在队列中ARP输入过程使用arpqsend发送正在等待发送的数据分组保存在队列中,当一个含有地址转换所需信息的ARP分组到达时,ARP输入过程调用arpqsend发送等待发送的数据分组。
arp_in:当一个ARP分组到达时,网络设备程序将其传递给arp_in做进一步处理,ARP分组可能是REQUEST或者REPLY,arp_in分别作出不同处理。在此期间会调用arpadd建立表项。
阅读(835) | 评论(0) | 转发(0) |