《深入理解Linux网络技术内幕》阅读笔记(二十四)
来源:互联网 发布:鹰眼图js 编辑:程序博客网 时间:2024/05/29 18:28
缓存:
1.邻居映射。由于任何数据都有可能被多次使用,那么缓存L3到L2的映射结果就是有意义的。不缓存错误结果(失败的地址解析),但是会将映射失败的neighbour结构设置为NUD_FAILED态,以便垃圾回收定时器能将其清除。
2.L2帧头。邻居基础结构会缓存L2帧头,这样可以缩短L3封包到L2帧的封装时间。否则,基础结构将要挨个初始化的L2帧头的每个字段。
当向一个目的地址发送第一个封包后,驱动程序就将其L2帧头保存在名为hh_cache的专用结构中。如果下一次若有封包发往同一个邻居,发送者就不需要挨个填充其L2帧头的每个字段,只需要从缓存中拷贝一个帧头就可以。
该表的查询函数:
416 struct neighbour *neigh_lookup(struct neigh_table *tbl, const void *pkey,417 struct net_device *dev)418 {419 struct neighbour *n;420 int key_len = tbl->key_len;421 u32 hash_val;422 struct neigh_hash_table *nht;423 424 NEIGH_CACHE_STAT_INC(tbl, lookups);425 426 rcu_read_lock_bh();427 nht = rcu_dereference_bh(tbl->nht);428 hash_val = tbl->hash(pkey, dev, nht->hash_rnd) >> (32 - nht->hash_shift);429 430 for (n = rcu_dereference_bh(nht->hash_buckets[hash_val]);431 n != NULL;432 n = rcu_dereference_bh(n->next)) {433 if (dev == n->dev && !memcmp(n->primary_key, pkey, key_len)) {434 if (!atomic_inc_not_zero(&n->refcnt))435 n = NULL;436 NEIGH_CACHE_STAT_INC(tbl, hits);437 break;438 }439 }440 441 rcu_read_unlock_bh();442 return n;443 }
垃圾回收:
1.同步清理。当邻居基础结构需要分配一个新的neighbour基础结构,并且这种结构专用的内存池已经用完时,内核就立即执行同步清理。
2,异步清理。异步清理是周期性的,目的是为了删除某段时间内没有用过的neighbour结构。
当在一个设备上完全启动代理时,那么状态信息就很简单:该设备只需要关联一个标识这个标志表明是否启动了代理。另一方面,按目的地址代理需要保存被代理的地址。这些L3地址保存在hash表neigh_table->phash_buckets.
上图中三种情况分析:
a.空缓存。处理步骤如下:
1.L3提交要传送封包的请求。该封包要发往L3地址是192.168.1.1的目的地。
2.查询缓冲,但缓冲未命中。
3.临时将封包插入到(arp_queue)队列中。
4.发出solicitation请求。
5.收到solicitation应答。
6.缓存中增加相应的邻居项。
7.队列中的等待的封包被发送出去。
b.地址解析待定。处理步骤如下:
1.L3提交要传送封包的请求,该请求要发往L3地址是192.168.1.1的目的地址。
2.查询缓存。
3.地址不在缓冲中,但是内核已经开始解析地址的工作,因此封包被临时插入队列中,等待相关的应答。只有另一个封包正在a中的第五步等待时,才会出现这种情况。
c.完成地址解析。处理步骤如下:
1.L3提交要传送封包的请求,该请求要发往L3地址是192.168.1.1的目的地址。
2.查询缓存。
3.由于缓冲命中,封包就立刻发出去。
- 《深入理解Linux网络技术内幕》阅读笔记(二十四)
- 《深入理解Linux网络技术内幕》阅读笔记(十四)
- 《深入理解Linux网络技术内幕》阅读笔记(二)
- 《深入理解Linux网络技术内幕》阅读笔记(二十)
- 《深入理解Linux网络技术内幕》阅读笔记(二十一)
- 《深入理解Linux网络技术内幕》阅读笔记(二十二)
- 《深入理解Linux网络技术内幕》阅读笔记(二十三)
- 《深入理解Linux网络技术内幕》阅读笔记(二十五)
- 《深入理解Linux网络技术内幕》阅读笔记(二十六)
- 《深入理解Linux网络技术内幕》阅读笔记(二十七)
- 《深入理解Linux网络技术内幕》阅读笔记(二十八)
- 《深入理解Linux网络技术内幕》阅读笔记(二十九)
- 深入理解网络技术内幕 阅读笔记(二)
- 《深入理解Linux网络技术内幕》阅读笔记(一)
- 《深入理解Linux网络技术内幕》阅读笔记(三)
- 《深入理解Linux网络技术内幕》阅读笔记(四)
- 《深入理解Linux网络技术内幕》阅读笔记(五)
- 《深入理解Linux网络技术内幕》阅读笔记(六)
- hdu 5496 Beauty of Sequence(高效)
- 【BZOJ1064】【NOI2008】假面舞会
- UVA - 11624 Fire!(15.10.10 搜索专题)bfs
- 【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记47 文件系统Demo
- String.Format格式说明
- 《深入理解Linux网络技术内幕》阅读笔记(二十四)
- 关于责任、钱和技术
- [PAT (Advanced Level) ]1003. Emergency 解题文档
- 图片作为背景,登陆页面相对定位
- svn版本库的拆分及迁移子目录等
- HDU 5113 Black And White (dfs神剪枝)
- explicit
- .htaccess 分布式配置文件
- 位图的重新采样以及对大图的重新处理