Combined Broadcast and Content Based Routing(CBCB) [7] 是一个应用层 Overlay,其在点对点网络之上覆盖了基于内容的通信服务。在CBCB的发布−订阅体系中,发布者使用 Messages发布内容,订阅者使用 Predicates公告兴趣。Message 是属性值对的集合,而 Predicate 是对每个属性的约束。被发布的 Message 沿着从源节点开始的广播树进行传播。节点使用 Predicates来减掉广播树分支,从而确保消息只传递到兴趣节点。
CBCB认为根据内容文件的一系列属性值对(Attribute-Value Pairs,AVPs)能够对文件内容、文件位置进行判定识别。这种方法通常需要进一步抽象用户的兴趣内容,将信息内容本身压缩为若干对属性值对AVPs。用户通过对感兴趣的AVPs匹配信息文件。属性命名在文件名称的语义性与自我认证能力之间找到了一个平衡点,兼顾了网络路由的可扩展性与信息冗余。
然而,属性命名方法依旧带来了新的问题。首先,单个AVPs可能拥有不同的语义,需要用户提供大量的AVPs保证信息匹配的精准性;其次,AVPs的语义性也会影响用户搜索的判断结果,一个错误的AVPs可能导致整个匹配结果出现极大的误差;最后,路由缓存需要保存内容文件本身及大量内容文件对应的AVPs,对路由缓存能力提出了苛刻的要求。
CBCB采用一系列属性值对命名内容信息。一个属性包含一个名字、一个类型和一系列可能的值。例如,在CBCB中,位于uwaterloo.ca/mfbari/srv_naming.pdf的内容名字将采用如下形式:
CBCB的命名范式是独特的,它不同于传统的基于URL的命名方案,也不同于其他面向内容网络体系结构的扁平命名方案。但是该方案既不确保名字的唯一性,也不确保安全内容命名。CBCB是一个发布−订阅体系。CBCB根据内容名字(即属性值对)完成“Publish”消息的路由。
CBCB路由器实现了两个协议:广播路由协议、基于内容的路由协议。CBCB路由器维护一个基于内容的转发表,其中每个接口i k 都被映射到一个Predicate p k 。如果该消息的属性值满足Predicate p k ,则路由器转发一个消息给接口i k 。路由表中的 Predicates使用两种机制构建和更新:接收者广告(Receiver Advertisements,RAs)、发送者请求(Sender Requests,SRs)/更新回复(Update Replies,URs)。
CBCB路由器利用广播树周期性地分发Predicates作为RAs将兴趣推送给网络中所有潜在的发送者。例如,图2-6(a)中的路由器6使用带Predicate p 6 的RA广播兴趣包。当路由器4通过接口i 6 收到该RA时,该路由器在路由表中更新接口的关联Predicate,使其从False更新为p 6 ,并转发给其他接口。如果接收到的RA是已被接口映射的Predicate的特殊RA,那么路由器将删除接收到的RA的传播路径。图2-6(a)描述了如下场景:路由器3在接口i 4 中接收到带Predicate p 2 的一个RA,并停止转发该RA,因为Predicate p 6 的内容形式覆盖了Predicate p 2 ,而且Predicate p 6 在接口i 4 上已经形成表项映射。
SRs/URs在路由器之间用来通告基于内容的地址,并更新路由表。一个路由器广播一个SR[如图2-6(b)中的路由器5],接收SR的每个路由器都发回UR给广播树的根路由器。广播树的叶子路由器包括UR中基于内容的地址,如图2-6(b)所示。其他非叶子路由器累积所有接收到的UR,将基于内容的地址增加到集合中,执行逻辑OR操作来构建UR,并沿原路径回传给SR,SR则根据接收到的UR更新路由表项。
图2-6 CBCB路由表