您现在的位置: 北大青鸟广州湘计立德培训中心 >> 学习园地 >> it培训辅导 >> linux认证 >> 复习指导 >> 正文    
 
 

Linux操作系统内核ARP的设计实现概述


ARP (Address Resolution Protocol) 是用来将IP地址转化成机器的网卡物理地址(硬件地址)。当一台机器要向另外一台物理上相连的机器发送IP包的时候,它要先检查一下自己的ARP缓存,试图找到对方的硬件地址,如果找不到的话,将要发送的IP包放入等待队列中,接着发出一个ARP请求。等到收到ARP应答的时候,构造好原来正在等待的IP包的ethernet头部(目的硬件地址,源硬件地址),再将这个IP包发送出去。

Linux的ARP实现相当复杂,部分原因是Linux不止要支持ethernet,还要支持其它类型的网络,另外一部分原因是ARP的实现实际上是和路由处理(routing)相关,所以理解起来不太容易。

首先我要讲一下ARP函数的调用过程:

(1) 当系统初始化时,调用arp_init来初始化ARP缓存(arp_tbl),并且注册ARP协议的接收函数。

(2) 当网卡驱动程序收到一个网络包(packet)的时候,会分配一个sk_buff(skb),将数据拷贝进这个缓冲区,然后调用netif_rx把skb放入等待队列(input_pkt_queue)中,并且产生一个软中断。当系统处理这个软中断的时候,会调用net_rx_action,它根据网络包的类型,调用相应的接收函数来处理。如果是ARP包,则调用arp_rcv。

(3)arp_rcv判断这个arp请求是不是询问本机或者本机代理的硬件地址,如果是的话,调用arp_send发回arp应答。另外arp_rcv还尽量保留对方机器的mac addres。

(4) arp_send分配一个sk_buff(skb),填好arp包的类型,源硬件地址,源IP地址,目的硬件地址,目的IP地址,然后调用dev_queue_xmit这个arp包发送出去。

其次,描述一下ARP主要的数据结构:

(1) neigh_table

neigh_table是一个用来描述物理上互相连接的机器的信息的哈希表,ARP缓存arp_tbl 就是这样的一个neigh_table。系统中所有的neigh_table都连在一起。下面是一些主要的域:+ struct neighbour *hash_buckets[NEIGH_HASHMASK+1]; hash_buckets存放着所有邻居(物理上相连的机器)的信息,共有32个bucket,每一个bucket存放着一条neighbor链表。

+ struct pneigh_entry *phash_buckets[PNEIGH_HASHMASK+1];phash_buckets存放着所有proxy arp的entry,每一个entry由网卡设备和ip地址组成,指明由哪个网卡设备代理哪个ip的mac地址。共有16个bucket.+ int family;

网络类型,为AF_INET

int entry_size; 大小为sizeof(struct neighbour) + 4

int key_len; 键的长度,为4

+ __u32 (*hash)(const void *pkey, const struct net_device *);



int (*constructor)(struct neighbour *);



int (*pconstructor)(struct pneigh_entry *);

这几个分别是ARP的哈希函数,neighbour和pneigh_entry的构造函数,

+ struct neigh_parms parms;

友情提示:如果您对北大青鸟的学费、课程、就业有疑问,可以点击此处留言,或拨打电话:020-34330086,我们会有专业课程顾问细心为你解答问题,免费为你定身做前景分析和职业规划!

 
相关阅读
Linux操作系统上安装Mplayer播放器的
浅谈Linux操作系统KDE桌面上的改进
Linux操作系统下的软中断问题分析
Linux操作系统中常见的桌面环境介绍
Linux操作系统下的CAD系统详细介绍(
Linux操作系统下的CAD系统详细介绍(
Linux操作系统下的CAD系统详细介绍(
Linux操作系统下APE格式文件的播放
Linux操作系统设备特性及设备管理分析
Linux操作系统下应急响应流程与步骤
揭开Linux操作系统的Swap交换区之谜
Linux操作系统的声音设备编程实例(2
 
 
 
 

姓名:  

手机:  

Q Q号:  



 
 
 
   
 
 
  • 此栏目下没有推荐文章
  •  
     
     
    关于我们 | 培训课程 | 学校位置 | 招生问答 | 在线留言 |

    地址:广州市海珠区同福东路644号天一酒店5楼全层(市二宫正门旁)
    咨询报名电话:020-34330086 020-39862039(24小时热线) 传真:020 - 34351700
    版权所有· 广州北大青鸟APTECH(湘计立德)授权培训中心