注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

TCP/IP驱动十二 ——内核中路由的算法和路由表的初始化  

2013-08-22 17:34:17|  分类: TCPIP驱动 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

TCP/IP驱动十二   ——内核中路由的算法和路由表的初始化

大家都知道,在网络通信中路由的重要性,没有它,网络通信的意义基本就没有了,在LINUX内核中,路由的算法支持两种,一种是hash算法的路由表;另外一种是trie算法的路由表。后者的效率比前者要高,但更耗费内存,因此它更适应于大型机。

Hash表的效率仁者见仁,智者见智,这里不做讨论。

所以大家在fib_table的创建函数中fib_hash_table中可以看到有两个文件中都有这个同名的函数,即在:net\ipv4文件夹下有两个文件: Fib_trie.c Fib_hash.c。一般情况,大家只要看后者就可以了。

LINUX的内核中,为了防止路由表的过度膨胀,可以采用多个路由表的方法。而这也是支持策略路由的基础。如果不支持策略路由,那么,创建路由表的时候只有两张表,即本地表和转发表。而如果使用策略路由的话,需要支持添加策略,所以函数:

Static int __net_init   fib4_rules_init(struct net *net)这个函数象上面的路由表函数一样有两个:一个是开启了多个路由表(即支持策略路由),一个没有开启多路由表。一个在Fib_frontend.c 另外一个在Fib_rules.c

在这里有一个问题点没有搞得太清楚,那就是在本地路由中,路由表的创建是有明显的代码的,在Fib_frontend.c中的fib4_rules_init中。

而另外一个文件中的多路由表中则没有类似的代码,但多路由表是可以指定路由的,是不是在:ip rule add from 10.1.1.0/24 table TR1添加路由的过程中会动态创建路由表,因为在内核中看到了:

struct fib_table *fib_new_table(struct net *net, u32 id) Fib_frontend.c中的fib4_rules_init下面。

至于详细的代码讲解,就不再这里说明了,网上太多了,其实学习这类东西,协议还是要搞清楚的。

今天又不淡定了。

  评论这张
 
阅读(594)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017