第三节实现原则.pdfVIP

  • 1
  • 0
  • 约1.54万字
  • 约 12页
  • 2021-10-31 发布于湖北
  • 举报
标题页 本章介绍作者归纳的 15 条实现原则。这些实现原则是从比较成功的协议实 现中归纳出来的。 其实许多实现者已经有意无意地使用了这些原则, 本章只是更 清楚地将它们表达出来,以使实现者可以更加主动地去运用它们。 3.1 运用实现原则的例子:更新 TCAM 下面用一个例子来说明为什么要使用原则。 使用 TCAM 进行 IP 地址查找 图 3.4 是 TCAM 用于 IP 地址查找的例子。 IP 地址前缀是长度为 32 比特的三 态字符串,通配符都在字符串的尾部。我们稍微改变一下表示法,使得 * 表示任 意数量的通配符。 按照 TCAM 的工作原理以及最长前缀匹配的要求, TCAM 中的地址前缀必 须按照前缀长度从大到小的顺序排列。 路由表是动态变化的,如何在 TCAM 中添加或删除一条地址前缀,与此同 时仍然保持前缀长度从大到小的排列顺序? 假定在图 3.4 的 TCAM 中需要添加一条新的前缀 11*。假定 TCAM 是向上扩 展空间的,最朴素的方法是在长度为 2 的前缀表项中插入前缀 11*,比如插在前 缀 0* 的前面,为此,需将前缀 10*至前缀 010001*整体向上移动一个位置。对于 包含大量路由表项的路由器来说,这种更新的速度太慢了。 有没有快一点的方法呢?我们再来看一下图 3.4 的前缀排列方法:长度相同 的前缀排列在一起, 按照从长到短的顺序排列, 相同长度的前缀还按照大小进行 了排序。 事实上,相同长度前缀的顺序对于 TCAM 执行最长前缀匹配不是必须的, 因为一个 IP 地址不可能同时匹配两个相同长度的前缀。我们只需要按照前缀长 度进行排序,并不需要相同长度前缀之间排序, 因此这是一个可以利用的自由度。 理解并利用自由度( 1) 利用该自由度, 我们可将 11*插入到 00* 和 111*之间。当然,如果为此将 111* 及以上前缀向上移动一个位置, 则不会有多大优化的效果。 我们的想法是将 111* 移出,将 11*插入 111*的位置,然后再为 111*寻找一个插入位置。 尽管这个问题 和原来的差不多,仍然要向 TCAM 中插入一条前缀,但是问题的规模缩小了一 点。 理解并利用自由度( 2 ) 我们可以将这个方法推广: …… 。显然我们可以采用递归的思想来设计一个 算法。 使用算法技术 — 采用递归 实现的时候展开递归: …… 。 如果每一种长度的前缀都有(即最坏情况) ,需要(32-i )次访存。对于较小 的 i ,访存次数接近 32。这个算法已经比朴素的算法好了很多,但是不是最好了 呢?还能减小最坏情况下的访存次数吗?(想一想) 我们再来看这张图,这张图假设空闲空间在 TCAM 的顶部,实际上空闲空 间可以放在 TCAM 的任何地方,因此空闲空间的位置也是一个设计自由度。 进一步利用自由度 利用这个自由度,可以将空闲空间放在中间,比如放在长度为 16 的前缀项 后面,这时最坏情况下的访存次数可以减少一半。 当然,空闲空间的数量也可以是一个自由度,可以进一步减少最坏情况下的 访存次数。 除了空闲空间的位置及数量之外,还有没有可以利用的自由度了呢?提示: 长的前缀是否一定要出现在短的前缀之前?比如, 010* 能否放在 1110

文档评论(0)

1亿VIP精品文档

相关文档