易截截图软件、单文件、免安装、纯绿色、仅160KB

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 (*constr


相关文档:

linux中的动静链接库

生成静态库:
  假如有文件  main.c、1.c、2.c    将1.c和2.c生成一个静态库的方法为,编写Makefile:
   mylib.a:1.c 2.c
       $(CC) -c $<    # $<表示所有最新的依赖项,若没有旧的则是全部依赖项
       ar crv  libmy.a 1.o 2.o   # 1.o 2.o为1.c和2. ......

Linux与Windows系统的差异


1)  文件命名的规则不同
Windows系统下文件名不区分大小写,文件名中不能包含[/,\,<,>,|,”,:,*,?]等字符。Unix系统下文件名区分大小写,文件名中可以使用转义符[\]来处理特殊字符[\,<,>,|,”,:,*,?],唯一不允许的是表示路径的字符[/]。
2)  文本文件的换行 ......

Linux与windows C++开发异同


1) 使用的库不同。windows下图形开发一般用微软的MFC或.net库,而Linux下则常用qt库。C/C++通用库(c库,STL库)的接口相同,但内部实现不同。
2) 编译器不同。windows下用的是微软编译器VC或.net,而Linux下则用gcc。
3) 开发环境不同。windows的编译器自动生成makefile,而Linux则需要手动编写makefil ......

Linux文件压缩和解压


1) .tar
解压:tar xvf filename.tar
解压:tar xjvf filename.tar.bz2
解压:tar xzvf filename.tar.gz
打包:tar cvf filename.tar dirname1 dirname2
打包:tar czvf filename.tar.gz dirname1 dirname2
2) .gz和.Z
解压:gunzip filename.tar.gz
解压:gunzip filename.Z
打包:gzip  ......

4.1. Introduction to Linux Routing


4.1. Introduction to Linux Routing
The design of IP routing allows for very simple route definitions for small networks, while not hindering the flexibility of routing in complex environments. A key concept in IP routing is the ability to define what addresses are locally reachable as oppose ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号