- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
路由表
??? 在内核中存在路由表fib_table_hash和路由缓存表rt_hash_table。路由缓存表主要是为了加速路由的查找,每次路由查询都会先查找路由缓存,再查找路由表。这和cache是一个道理,缓存存储最近使用过的路由项,容量小,查找快速;路由表存储所有路由项,容量大,查找慢。
首先,应该先了解路由表的意义,下面是route命令查看到的路由表:
DestinationNetmaskGatewayFlagsInterfaceMetric169.254.0.0255.255.0.0*Ueth01192.168.123.0255.255.255.0*Ueth01default0.0.0.0192.168.123.254UGeth01??? 一条路由其实就是告知主机要到达一个目的地址,下一跳应该走哪里。比如发往192.168.22.3报文通过查路由表,会得到下一跳为192.168.123.254,再将其发送出去。在路由表项中,还有一个很重要的属性-scope,它代表了到目的网络的距离。
??? 路由scope可取值:RT_SCOPE_UNIVERSE, RT_SCOPE_LINK, RT_SCOPE_HOST
??? 在报文的转发过程中,显然是每次转发都要使到达目的网络的距离要越来越小或不变,否则根本到达不了目的网络。上面提到的scope很好的实现这个功能,在查找路由表中,表项的scope一定是更小或相等的scope(比如RT_SCOPE_LINK,则表项scope只能为RT_SCOPE_LINK或RT_SCOPE_HOST)。
?
路由缓存
??? 路由缓存用于加速路由的查找,当收到报文或发送报文时,首先会查询路由缓存,在内核中被组织成hash表,就是rt_hash_table。
static struct rt_hash_bucket??????????*rt_hash_table __read_mostly;??????[net\ipv4\route.c]
通过ip_route_input()进行查询,首先是缓存操作时,通过[src_ip, dst_ip, iif,rt_genid]计算出hash值
hash = rt_hash(daddr, saddr, iif, rt_genid(net));
此时rt_hash_table[hash].chain就是要操作的缓存表项的链表,比如遍历该链表
for (rth = rt_hash_table[hash].chain; rth; rth = rth-u.dst.rt_next)
因此,在缓存中查找一个表项,首先计算出hash值,取出这组表项,然后遍历链表,找出指定的表项,这里需要完全匹配[src_ip, dst_ip, iif, tos, mark, net],实际上struct rtable中有专门的属性用于缓存的查找键值?– struct flowi。
/* Cache lookup keys */
struct flowi????????????????fl;
当找到表项后会更新表项的最后访问时间,并取出dst
dst_use(rth-u.dst, jiffies);
skb_dst_set(skb, rth-u.dst);
?
路由缓存的创建
inet_init() - ip_init() - ip_rt_init()
rt_hash_table = (struct rt_hash_bucket *)
?????????alloc_large_system_hash(IP route cache,
?????????????????????????????????????sizeof(struct rt_hash_bucket),
?????????????????????????????????????rhash_entries,
?????????????????????????????????????(totalram_pages = 128 * 1024) ?
??????????????????????????????????????15 : 17,
?????????????????????????????????????0,
?????????????????????????????????????rt_hash_log,
?????????????????????????????????????rt_hash_mask,
??????????????????????????????????????rhash_entries ? 0 : 512 * 1024);
其中rt_hash_ma
您可能关注的文档
最近下载
- 初中语文新课标教学设计及反思.pptx
- 就地型馈线自动化选型技术原则(试行).ppt
- 小学生交通安全知识竞赛课件.ppt
- 科技经费管理培训通用课件.ppt
- 激光模拟打靶技术方案.pptx
- 《思想政治教育方法论》PPT课件 2.第八章 课件 第八章《思想政治教育的一般方法》201812.pptx VIP
- 餐饮劳务外包合同(五篇).doc VIP
- 2023年成都信息工程大学数据科学与大数据技术专业《操作系统》科目期末试卷B(有答案).docx VIP
- 中小型企业局域网的规划与设计.doc VIP
- 2024-2025学年新教材高中英语 Unit 3 On the move理解 课文精研读教案 外研版必修第二册.docx
文档评论(0)