第四章 原则的运用课件.ppt

  1. 1、本文档共86页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章 原则的运用课件.ppt

分析 在原来的Trie结构中,使用数组索引可以直接定位到要比较的数组元素,非常高效 采用{(i, value)}列表后,我们希望仍然保持数组索引的高效性,即: 不遍历{(i, value)} 列表,也能知道下标为 i 的数组元素是否包含了非空值,若非空,该值在列表中的位置 使用什么数据结构可以快速知道数组中非空元素的分布? 使用一个比特串,标记数组中空元素及非空元素的位置 * 18年 解决方案 压缩后的trie节点由一个比特串和一个仅包含非空元素的数组组成(非空元素的位置并未保存) * 18年 压缩节点的查找 用一个block(假设值为i)查找当前节点的过程: 读入当前节点的bitmap 用 i 作为比特索引,检查bitmap中的第 i 位(最左边i=0): 若该位为“0”,查找结束 若该位为“1”,且bitmap中前 i 位中“1”的个数为c,读数组第c个元素 最多两次访存: 一次访问bitmap,一次访问数组 若压缩节点可以放入一个cache行,只需访存一次 * 18年 算法开销分析 查找一个常规trie节点的开销:一次访存 查找一个压缩trie节点的开销: 一次访存(压缩节点在一个cache行中) 一次比特位检查(bitmap) 统计bitmap中“1”的个数:使用popcount指令,只需一个指令周期就可以统计32位寄存器中“1”的个数 一次数组访问 注意:最后3个操作不涉及内存访问 查找压缩节点增加了一些计算开销,但速度的降低不会超过一个小的常数因子 * 18年 运用的原则 小规模问题使用高效的算法(P14): 注意:比特串方法仅适用于长度较小的串 利用局部性(P4a): 将空元素、非空元素的位置放在一个比特串中一次读入 大量实践表明,Bitmap在压缩稀疏的线性表时很有用 * 18年 4.7 路由器中的包过滤 有时路由器需要以较细粒度的流为单位转发包: 流:包头中特定字段的内容相同的包构成一个流(flow) 接收节点通过一个包过滤器(分类器),向路由器表明它希望接收的数据包特征(如源IP地址、源端口、目的端口等) 路由器将匹配了某个过滤器的包发送给所有声明了该过滤器的节点 * 18年 问题 功能需求: 对于每个到来的数据包,路由器将其与每一个过滤器进行匹配(抽取相关字段、比较) 若数据包匹配了某个过滤器F,路由器将其发送给所有声明了F的接收节点 问题: 如果过滤器数量很大,如何加快过滤器查找? * 18年 分析 匹配过滤器的过程是一个包分类过程: 根据包头中的一些字段将包划归到某个流,称为包分类(packet classification) 多元包分类是一种开销很高的操作,目前尚无高效的软件算法(无法平衡时空复杂度) 目前加快包分类过程的有效方法是采用缓存: 对每个流的第一个包执行包分类,然后将分类结果缓存起来,供后续数据包使用(利用cache优化预期情形,P11a) * 18年 分析(续) 缓存可以看成是由形如a, f(a)的key-value对构成的数据库,a为索引: 在IP地址查找中,a=目的IP地址,f(a)=转发表项 在五元组包分类中,a=源IP地址, 目的IP地址,源端口,目的端口,协议号,f(a)=流ID 在本例中,a=源地址,源端口,目的端口,f(a)={接收节点} 更一般地,a可能包含包头中的任何域 直接用匹配的包头域作索引的时空开销可能很大 索引可能很宽,造成空间开销大、比较时间长 * 18年 分析(续) 设想: 能否设计一个简短的标识符作为查找缓存的索引,而不是用需要匹配的包头域作为索引? 若可以,流标识放在包头的什么地方? IPv6报头中定义了流标签域,可以使用 IPv4报头中有ToS域,允许自定义用途 流标识采用全局标识还是本地标识? 全局标识需要标准化过程,采用本地标识 流标识如何产生? 应用向网络层请求一个标识,由网络层添加到包头中 * 18年 解决方案 源节点: 应用向其网络层请求一个流标识符,网络层在发送该应用的数据包时,在每个包头中加上该标识符 路由器: 数据包到达时,路由器利用源节点,流标识符作为关键字a,查找缓存: 若命中,获得一组接收节点f(a) 若不命中,利用包头中的域对所有过滤器执行顺序查找,确定一组接收节点,以源节点,流标识符作为关键字a,以这组接收节点作为f(a),缓存a, f(a) * 18年 启发 对于计算开销很高的查找操作,可以考虑将查找结果缓存起来,供后续使用 使用较短的关键字作为查找的索引,以节省时空开销 * 18年 4.8 避免链路状态分组的分片 在使用OSPF协议时: 路由器必须定期发送一个包含所有邻居节点的链路状态分组(LSP),LSP采用扩散法传输 路由器使用源IP地址,LSP序号识别重复及过时的LSP,确保只

文档评论(0)

liuxiaoyu99 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档