NFD中的Tables

Tables

FIB、PIT、策略选择表和度量表在指标结构上有很多共性。为了提高性能和减少内存使用,在这四个表之间设计了一个公共索引,即名称树。

FIB

NFD中的Tables
最长前缀匹配算法。

用法

FIB manager从RIB守护进程(第7节)接收命令,而后者则接收由应用程序手动配置或注册的静态路由,以及来自路由协议的动态路由。由于大多数FIB条目最终都来自动态路由,所以如果网络只有少量的已发布的前缀,那么FIB应该只包含少量的条目。预计FIB将相对稳定。FIB更新是由RIB更新触发的,而这些更新又是由手动配置、应用程序启动或关闭以及路由更新引起的。这些事件在一个稳定的网络中很少发生。但是,每个RIB更新都可能导致大量FIB更新,因为一个RIB条目中的更改可能会因为继承而影响它的后代。最长前缀匹配算法通过转发传入兴趣管道(4.2.1节)实现。每一项进入的兴趣包最多只调用一次。

CS

内容库(CS)是数据包的缓存。到达的数据包尽可能长地放在这个缓存中,以满足将来请求相同数据的需要。内容库在传入的兴趣被赋予转发策略以进行进一步处理之前进行搜索。这样,缓存的数据(如果可用)就可以用来满足兴趣,而不必实际将兴趣转发到其他任何地方。下面3.3.1将定义CS的语义和算法,关于当前实现的细节将在3.3.2节中讨论。
用两个数据结构实现:名称索引(Name index)、CachePolicy
缓存策略有:FIFO\LRU
不多加描述,具体看文档。

Interest Table(PIT)

既包含为解决的兴趣包、也包含最近满足的兴趣包。只被转发使用。

NFD中的Tables
PIT中包含in-record、out-record、两个计时器。

in-record

记录中(nfd::pit:: InRecord)表示兴趣的下游face。下游face是内容的请求者:兴趣来自下游,数据流向下游。
in-record存储:

  • face的记录
  • 最后一个来自face的兴趣包中的nonce(随机数)
  • 最后一个从face到达的兴趣包中的timestamp(时间戳)
  • 最后一个兴趣包
    插入或更新记录的传入兴趣管道(4.2.1节)。当一个未决的兴趣被满足时,所有的记录被输入数据管道(4.3.1节)删除。在最后一个兴趣包到达后,当兴趣生存期结束时,记录中的内容过期。当所有的in-record过期时,一个PIT条目过期。如果一个PIT条目包含至少一个未过期的in-record,那么它就被称为pending。

out-record

out-record (nfd::pit::OutRecord)表示兴趣的上游face。上游face是一个潜在的内容来源:兴趣被转发给上游,数据来自上游。

  • face的记录
  • 最后发送给face的兴趣包中的nonce
  • 发送到此face的最后一个兴趣包的时间戳
  • Nacked字段:表示最后一个传出的兴趣已被Nacked;此字段还记录Nack原因
    输出记录由输出兴趣管道插入或更新(4.2.5节)。当一个面内的数据满足了一个待处理的兴趣时,incomingData管道(4.3.1节)会删除一个输出记录。当兴趣生存期在最后一个兴趣包发送之后结束时,输出记录将执行。

Timer

两个计时器用于转发管道。(未满足计时器)
数据匹配算法。

(未完待续)

疑问

  1. 为什么大多数FIB路由来自动态路由,如何配置?