第三十三章:路由:路由缓存

路由缓存初始化:

路由缓存容量可以从dmesg命令输出中找到”IP:routing cache...“字符串。内核指定的默认容量可以被用户启动选项rhash_entries所覆盖。

主要的缓存操作:

缓存中与协议无关的(DST)部分是一组dst_entry数据结构。操作dst_entry结构的所有函数名都是以dst_为前缀。

每次为封包选择路由时,如果查找缓存失败,则内核就查找路由表并将结构保存到路由缓存中,dst_alloc用于分配内存,rt_inter_hash用于插入到缓存表。下图是rt_inter_hash的主要逻辑:

大多数路由缓存表项要被绑定到该路由下一跳地址对应的ARP缓存表项。目的地址为广播地址和多播地址的出口路由不需要相关联的ARP表项。调用arp_bind_neighbour来为路由创建与ARP的绑定。

缓存查找:

查找路由时,先查找缓存,没有命中则查找路由表,下面介绍缓存查找函数,路由表查找函数在第三十五章会介绍。

ip_route_input函数: 用于入口流量的路由查找,这些流量可能是本地提交或要被转发。

ip_route_output_key函数:用于出口流量的路由查找,这些流量是本地成。

多路径缓存:

注册一个缓存算法,缓存算法被定义为ip_mp_alg_ops的一个实例,该结构由一些函数指针组成。向内核注册和注销缓冲算法分别使用multipath_alg_register和multipath_alg_unregister,所有的缓存算法都是实现为模块,在net/ipv4目录中。常用的缓存算法有随机算法,加权随机算法,循环算法,设备循环算法。

DST与调用协议间的接口:

DST缓存是一个独立的子系统,他有自己的垃圾回收机制。,它提供了一组函数,各种协议可以使用这些函数来改变或调整其行为。这些DST函数被包裹为另外一组函数,拥有自己的路由缓存的L3协议通过初始化一个dst_ops实例可以使用这组函数。

DST向更高层提供的主要数据结构是dst_entry。针对每一个L3协议有一个dst_ops实例,如ipv4使用的实例为ipv4_dst_ops。其初始化为:

dst_entry结构除了存储与协议无关的路由信息,其另一个用途是用于ipsec。IPsec使用dst_entry结构来构造变换束,一个变换是针对一个封包的操作,如加密操作。一个束就是一连串的变换。一般情况下,一个路由项和一个dst_entry结构相关联,该结构的input和output字段描述了如何处理匹配封包,但IPSec创键一个dst_entry实例链表,只有最后一个实例中的input和output方法被实际应用与路由决策,前面实例中的input和output方法被应用于变换。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值