易截截图软件、单文件、免安装、纯绿色、仅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 Bluetooth编程(六) L2CAP编程实例

例一:发送Signaling Packet:
Signaling Command是2个Bluetooth实体之间的L2CAP层命令传输。所以得Signaling Command使用CID 0x0001.
多个Command可以在一个C-frame(control frame)中发送。
 如果要直接发送Signaling Command.需要建立SOCK_RAW类型的L2CAP连接Socket。这样才有机会自己填充Command Code,Identi ......

linux系统单网卡绑定双IP的方法

linux系统单网卡绑定双IP的方法
1. 进入目录:
cd /etc/sysconfig/network-scripts/
2. 使用vi命令编辑ifcfg-eth0,如下:
# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
DEVICE=eth0
BOOTPROTO=static
BROADCAST=192.168.0.255
HWADDR=00:0C:29:25:96:A3
#第1个IP
IPADDR=192.168.0.2
NETMASK=255.25 ......

Linux与Windows系统的差异


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

Linux tty/pty/pts 概念区别

tty0-6是linux本地终端,pts/x是远程登陆需要的终端,比如某人要telnet到你的机子,就需要你的系统有pts/x。 
基本概念:
 
 1. tty(终端设备的统称):
  tty一词源于Teletypes,或者teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,后来这东西被键盘与显示器取代 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号