TRIAD (Translating Relaying Internet Architecture Integrating Active Directories) [1] 与NDN [2] 共同提出了一种具有层次性的文件内容命名方法。这种层次命名法规定每个内容文件通常都拥有一个类似 Web URL 的标识名,而此标识名通常可以由类似“/lab/video/Widget.mpg”的字符串构成。其中,符号“/”表示各个子域之间的分隔定界符。另外,层次结构文件名可以与基于URL的Web应用或服务兼容。进一步而言,这些应用或服务能够直接使用互联网中的内容文件而不需要进行数据包的编码解码,因此,数据内容的易读性得到了进一步提升。
层次命名法的优势还体现在信息名称具有可聚合性。例如,对于任何以“/lab/”作为起始路径名的内容文件都可以被存储在同一条路由表记录中,只需找到起始路径为“/lab/video/”的路由表记录,即可定位到这条路由表下聚集的所有数据。
TRIAD是2000年提出的方案,其在网络层之上构建了内容层,提供内容传输、内容缓存和内容转换等功能。与传统NAT一样,TRIAD由一个互联的地址域集合以分层方式组成。在叶子层中,一个地址域可能对应一个企业网、校园网、军事设施,或者更小的单元,如一批自治的传感器或一个家庭网络,甚至可能是在一个单一物理机器上的虚拟主机集合。在该层中,防火墙或者边界路由器被扩展为域间的 TRIAD中继代理(Relay Agent),并进行报文地址翻译,因为该设备需要在所互联的不同域之间传输报文。更高层的地址域对应局部和全局互联网服务提供商(Internet Service Providers,ISP)。骨干网或广域网ISP能够如当前一样在对等点相连,但是这些点需要有高速中继代理路由器。
在TRIAD中,端到端互联网规模的主机接口或组播通道标识是通过分层的字符串名字提供的。这个名字是所有端到端标识、认证和传递的基础。TRIAD采用“shim”协议定义一套寻址路径,保证分组可到达目的端。TRIAD定义了URL作为信息名字,采用后缀聚合方式。路由器中存储了信息名字、下一跳IP地址及跳数等信息。当用户请求信息时,名字查找服务返回转发路径和反转路径,存储在“shim”分组格式的转发令牌(Forward Token)和反转令牌(Reverse Token)中,根据令牌确定下一跳。路由过程中,逐跳改变令牌,改变源IP地址和目的IP地址。请求分组根据转发路径到达目的源。中间路由器若有相应缓存,则该路由器会返回相应信息。返回的信息分组根据反转路径返回请求端。
在任意域内,命名、寻址和路由等操作跟当前的IPv4体系相同。TRIAD并不需要修改主机和路由器。连接一个域与其他域的一个或多个中继代理提供命名和路由服务。类似于IP封装协议,WRAP(Wide-Area Relay Addressing Protocol)是一种“shim”协议,将传输头部和数据作为负载承载。WRAP头部保护一对互联网中继令牌(Internet Relay Tokens,IRT),即Forward Token和Reverse Token。一个IRT是一个潜在的不透明变长域,扩展了IPv4的寻址能力。
图2-1描述了两个主机src.Harvard.EDU和dst.Ietf.ORG在域间的TRIAD操作,假设Harvard.EDU和Ietf.ORG是两个分离的域,通过一个单独的中间域(外部互联网)相连。对于 src 向 dst 的发送过程,dst.Ietf.ORG 的名字查找操作由该域的中继代理relay.Harvard.EDU完成,其内部IPv4地址为RA1,外部IPv4地址为RA1'。该中继代理根据Ietf.ORG的目录映射决定合适的下一跳中继代理,然后通过互联网与Ietf.ORG域的中继代理relay.Ietf.ORG进行通信并完成名字查找(该中继代理的内部IPv4为RA2,外部IPv4为RA2')。
图2-1 TRIAD的域间报文传输
在域间层中,路由中继使用基于名字的路由(Name-Based Routing),因为地址不是一种有意义的标识广域网端点和确保名字的有效性的方式(域内路由能够使用现有路由协议,而且域内名字服务的可靠性由副本服务器保证,或者由集成在路由器中的目录服务保证)。路由信息在中继节点中分发,并且被局部地维护,使得下一跳和目的地按照名字和名字后缀被指定。通过这一步骤,名字目录和路由表在逻辑上变为单一实体,从而降低目录和中继代理软件的整体复杂度。值得注意的是,传统路由表是一个简单目录,它是通过查询IP地址来确定转发信息。而在TRIAD中,中继节点的等价目录是使用DNS名字进行查询。
TRIAD主要优势为:
(1)支持主机移动;
(2)支持NAT/Firewall和VPN;
(3)基于策略路由;
(4)防止源假冒;
(5)具有高效性。
TRIAD采用后缀聚合方式聚合所有信息,造成了路由表膨胀问题更加严重,可扩展问题仍待解决;TRIAD采用了复杂的目录服务换取传输的高效性,目录服务采用了多次映射,比较烦琐,在大规模数据情况下,可能会带来可扩展问题和网络性能问题;传输时采用逐跳改变令牌的方式,协议复杂,传输开销大。
Named Data Network(NDN)是NSF FIA用来探索和设计未来网络体系结构的四个项目之一。NDN的目标是通过使用内容块作为传输的通用元素来替换传统的IP,从而完全重新设计互联网。NDN采用分层命名,类似URLs,如果请求内容的名字是某个名字的前缀,则这两个名字就成功匹配。NDN的命名是由多个组件按照分层结构组成的,每个组件都可以是任意长度的字符串,如图2-2所示。
图2-2 NDN的层次命名方案
NDN传输层除了对组件结构进行限制之外,对名字并未施加任何限制,因为名字是由用户自己生成和赋予的。NDN只提出结构,而期望随着不同业务类型应用的发展,名字将逐渐标准化。名字包含诸如版本和分段号等信息,所有NDN中的名字为了避免歧义,都隐含一个SHA256的内容摘要。为了提供内容真实性和完整性,名字到内容的映射被数字签名,并且与内容一起传输。NDN中的名字是人性化的,而且是不可持续的,这是由分层结构造成的。虽然带SHA256摘要的内容全名是唯一的,但是名字中被用户赋予的部分可能不是唯一的。
NDN的名字对于网络是不透明的,即路由器不知道名字的含义(虽然路由器知道名字中不同组件之间的边界)。这样,每个应用都可以选择适合需求的命名方案,而且命名方案可以独立于网络而演化。名字不需要具有全局唯一性,用于局部通信的名字可能很大程度上基于局部上下文,而且只需要局部路由(或局部广播)来发现相应的数据。
为了检索动态生成的内容数据,订阅者必须在看到数据之前,能够确定性地构造名字。为了做到这一点,可通过一个确定性算法使订阅者和发布者基于对双方都有效的数据得到相同的名字,或者订阅者能够基于部分名字检索数据。例如,订阅者可能请求/parc/videos/WidgetA.mpg,并返回得到一个名为/parc/videos/WidgetA.mpg/1/1 的数据报文。然后,订阅者能够指定后续的分片,并且发起请求,这是根据第一个数据报文显示的信息,以及订阅者与发布者所达成的命名惯例组合得到的。
订阅者发出兴趣分组请求信息,并得到Data分组。所有信息在内容路由器(CR)转发,每个CR维护三个数据结构,转发信息表(FIB)、待处理请求表(PIT)和内容存储器(CS)。FIB保存内容名字到转发接口的映射,PIT暂存输入接口到未处理的兴趣分组请求内容名字的映射,CS暂存信息对象和其名字的映射。
当CR收到兴趣分组时,首先查看CS中是否缓存兴趣分组请求的数据,如果有,则返回数据;否则,查看PIT是否有同样请求的名字,如果有,则丢弃兴趣分组,并在表中匹配的名字后添加兴趣包的输入接口;如果没有,则根据FIB转发兴趣分组,并在PIT表中增加兴趣包的输入接口和请求名字。发布者收到兴趣分组,就返回数据包。之后每个CR收到数据包后,根据PIT中的输入接口转发数据包,删除PIT中的对应项,并在CS中暂存一段时间。
NDN中的内容名字对比于IP地址而言,更具扁平性和可扩展性,但其聚合难度高于IP地址。命名系统是NDN体系中最重要的部分,目前仍然处于火热研究中,尤其是如何定义和分配顶层名字仍然具有很大的挑战性。名字对于网络的不透明性及对于应用的不依赖性,意味着NDN体系的设计必须与名字结构、名字查找等同步开展。