《深入理解Linux网络技术内幕》阅读笔记(三十)

路由缓存用于减少路由表查找的时间。路由缓存的核心是与协议无关的目的缓存(Protocol Independent Destination Cache DST)。尽管采用策略路由可有效地创建多张路由表,但所有这些路由表都共享一个路由缓存。
这里写图片描述
这里写图片描述
rttable结构的第一个字段是一个联合,这使得rtable和dst_entry结构很容易共享一些数据,例如,指向下一个冲突的hash表项的指针。虽然指针的名称不同,但他们所指向的内存位置是相同的。
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
上图中,函数名以_slow结尾是为了强调缓存查找和路由表查找在速度上的差异,这两种查找途径也被称为快速途径(fast)和慢速途径(slow)。
Raw IP 和 UDP:当通过一个套接字发送数据时,用户可以设置MSG_DONTROUTE标识。当应用程序从一个已知接口向直连的目的地(不需要网关)发送封包时,可以使用该标识。这样内核就不需要确定出口设备。在路由协议和诊断性应用程序中使用这种发送方式。
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
IPsec创建一个dst_entry实例链表,只有最后一个实例中的input和output方法被实际应用于路由策略,而前面实例中的input和output方法被应用于所要求的变换。
缓存路由项可以被插入到两个地方:
1.路由缓存
2.dst_garbage_list链表。该链表将所有应该被删除的,但由于引用计数非0而还没有被删除的表项链接在一起。
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
如上图所示:
1.hash表的大小为rt_hash_mask+1,或2^rt_hash_log.当缓存内的表项数目超过gc_thresh时,就调用rt_garbage_collect,gc_thresh的默认值为hash表的大小。
2.缓存内能够容纳的表项最大数目是ip_rt_max_size,其默认值大小是hash表的大小乘以16.
3.当缓存内的表项数目超过ip_rt_gc_elasticity*(2^rt_hash_log)时,其默认值为hash表的大小的8倍,就认为缓存容量太大,存在风险,垃圾回收开始设置goal更为严格。
这里写图片描述
这里写图片描述
这里写图片描述
指数回归算法:
如果目的地持续地忽略ICMP REDIRECT消息,内核就持续发送ICMP REDIRECT消息给它,直到发送数目达到ip_rt_redirect_number。每发送一个消息就将时间间隔增加一倍。ip_rt_redirect_number个这样的消息被发送出去后,内核就停止发送,等待ip_rt_redirect_silence秒。若ip_rt_redirect_silence秒后,收到了能够触发内核生产ICMP重定向消息的输入封包,内核就重新开始发送ICMP REDIRECT消息,否则,就一直停止。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值