命名数据网络工作机制
内容名称 |
选项(order preference,publisher filter,scope...) |
随机数 |
兴趣包(Interest Packet)
内容名称 |
签名(digest algorithm,witness...) |
签名信息(publisher ID,key locator,stale time) |
数据内容 |
数据包(data packet)
三种重要的数据结构
转发信息库(Forwarding Information Base,FIB):记录当前节点到达内容提供节点的下一跳接口,相当于IP网中的FIB,由路由协议自动生成,是转发兴趣包的依据。NDN允许有一组转发接口,不限于一个。
待定兴趣表(Pending Interest Table,PIT):用于记录已经转发但未响应数据包的内容名及其来源接口,目的是使相应的数据包能够准确的到达请求者,当响应数据包利用某条PIT条目转发后,后者某PIT条目超出阈值,则将该条目删除。
内容缓存库(Content Store,CS):用于保存路由节点的缓存内容,路由器会定期更新CS缓存的信息,对于热点请求的数据,路由器持续进行缓存,而对于超时的数据,路由器则将其从缓存中删除。
转发过程:
(1)兴趣包的转发过程:
当内容请求者需要请求内容时,首先广播兴趣包,兴趣包到达路由节点后,路由器根据兴趣包中的内容名,查询CS,如果CS中包含所请求的数据包,则直接向兴趣包的来源接口返回该数据包的副本并丢弃该条已经被满足的兴趣包,否则在PIT中继续查询。
如果PIT中有该内容条目,则说明之前已经收到过相同的兴趣包,且已经转发,但是没有获得返回结果,需要把该兴趣包的来源接口加入PIT对应的接口列表中,同时将该兴趣包丢弃。当对应的数据包返回时,根据接口列表向对应接口恢复数据的副本,并将该数据包存储在CS中以满足未来潜在的请求。
如果CS和PIT中均没有结果,则查询FIB,如果在FIB中发现有对应内容名的条目,则说明该节点第一次收到该兴趣包,这时根据FIB的接口列表(不包含兴趣包进来的接口)转发兴趣包,并在PIT中增加新的条目。
如果在三个数据结构中均没有结果,说明不存在相关的路由匹配,该节点无法处理这个兴趣包,于是将其丢弃。
(2)路由器对数据包的处理:
当数据包到达节点后,根据数据包的内容名字段,先在CS中进行查找。如果CS中存在,则丢弃该数据包;如果CS中没有,则在PIT中进行查找。如果存在对应条目,则将数据转发给该PIT匹配条目中的所有接口,并缓存内容到CS中;如果PIT中没有匹配条目,则丢弃该数据包。
当兴趣包到达缓存有对应的请求数据的节点后,就会沿原路径返回一个包含该数据名和数据内容以及发送者签名的数据包到请求节点。需要注意的是:兴趣包和数据包并不携带主机或者接口地址(如IP地址),兴趣包根据所要请求的数据名称路由到数据的持有者,数据包则通过兴趣包经过各个节点时所建立的状态信息反向传输给数据请求方。