读书频道 > 网络 > 计算机网络:一种开源的设计实现方法
算法的实现
2014-03-13 14:07:58     我来说两句 
收藏    我要投稿   
本书是目前国内外出版的计算机网络类教材中第一本以开放源代码实现形式介绍网络及应用问题的教科书。本书自底向上介绍网络的各层协议,每部分内容不仅介绍网络的基本概念、原理,而且还介绍网络的实现原理并给出  立即去当当网订购

Linux在net/bridge/br_fdb.c中实现查找表,其中fdb标识转发数据库。查找过程将提取MAC地址来标识数据库中的一个表项,并计算散列函数br_mac_hash()以确定正确的散列表桶。下面的代码段br_fdb.c说明如何查找表。

 

宏hlist_for_each_entry_rcu()搜索由&br->hash\[br_mac_hash(addr)\]指针指向的链表,以便找到在net_bridge_fdb_entry中的正确表项,其中还包含将要转发的端口。这里rcu (Read-Copy-Update)(读取-复制-更新)是在内核2.5版本的开发过程中添加到Linux内核中的同步机制,用来提供线程之间的互斥。用老化机制查找以避免搜索。如果一个表项已经过期,搜索就被忽略。如果网络拓扑发生变化,这种机制就更新数据库。

当接收到一个帧时,就将一个新表项插入转发数据库中。这就是网桥运行中的自学习机制。本代码段也在br_fdb.c中,如下所示。

 

插入是以在转发数据库中查找到达的MAC地址开始的。如果找到一个表项,就将它替换成新的表项;否则,就将新的表项插入数据库中。

练习

1.跟踪源代码,并了解老化定时器是如何工作的。

2.在Linux内核源代码的fdb散列表中查找,看能找到多少表项。

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:数据结构
下一篇:3.5.2 生成树协议
相关文章
图文推荐
1.2.2 包与帧
1.2.1 网络协议栈
云数据中心网络技术
3.4.6 文本约定
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站