路由表插入流程分析探究.docx

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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

文档评论(0)

希望之星 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档