CCNx协议

源数据地址:http://www.ccnx.org/releases/latest/doc/technical/CCNxProtocol.html

最近在学习,看得很慢,翻译一下,以兹鼓励,与君共勉~

CCNx协议
摘要
本文档讲解CCNx协议——一种基于命名数据的通信体系结构(称为内容中心网络(CCN))的传输协议。CCN的底层没有主机的概念——将内容,而非位置作为其“地址”。CCNx协议直接快速交付命名内容,不需要将主机与另一台主机相连。每一个数据包都有可能存在任意CCNx路由器的缓冲中,结合其支持的组播或广播交付数据,就使得当所有人对相同的数据感兴趣的时候,网络的使用效率很高。

介绍
文档介绍CCNx协议,它为命名数据包提供位置独立的交付服务。这些服务包括:端到端传送的多反射转发,流量控制,使用网络中的缓冲存储器进行透明的自动广播,无回环多路径转发,与路径无关的内容完整性验证,对任意应用程序数据的传输。应用程序的CCNx协议运行在一些底层转发数据包的通信服务之上。对底层服务本身没有限制:它可以是物理传输,跨网传输或点对点传输协议。例如,应用程序可以利用现有IP的连通性,在UDP上运行CCNx协议。由于在CCNx协议中,内容的命名与地址无关,这些内容可以永久地存在于网络中,这就提供了一种有效地分布式文件系统服务。

CCNx协议是通用的,支持很多网络应用程序。它本身支持存储内容的应用程序,如视频、文档文件的分布,但CCNx模型也支持实时通信和发现协议,足以支持主机之间的会话,像TCP连接。CCNx协议将命名约定的选择权交给应用程序,从而能够支持大范围的应用程序。本文档讲述与交换的数据内容无关的通用函数。所以,本文档不仅有CCNx协议针对一个特定应用程序的完整说明,还有命名规则、数据格式和信息语义的说明。这种基于CCNx协议的应用程序协议说明(加上必要的API说明),称为配置文件。
CCNx协议用来实现应用程序之间的端到端通信,所以需要集成到应用程序中,而不是作为一个独立的模块。

定义
节点node:一个CCNx网络实体,可实现转发和缓存。
参与者party:网络中使用CCNx协议通信的任意实体。注意,参与者不仅仅是机器,也可以是使用

CCNx协议的应用程序。
信息message:一个CCNx数据包。使用这个术语,避免与底层数据包(可能携带CCNx信息)混淆。一个底层数据包(例如一个UDP数据包)可能包含有不止一个CCNx信息。

信息格式和编码
不同与许多其他的协议,CCNx协议没有固定长度的域。CCNx数据格式由XML schema定义,且编码中定义有明确的域边界。这种设计使得字段值的长度不受限制,可选域在忽略的时候不占包空间,还可实现嵌套结构。使用XML结构并不意味着字段值必须是文本串,也不要求信息编码成可直接读的文本形式。大部分域包含有任意的二进制值,包括鉴别内容的域。
CCNx信息的数据传输格式是一种高效的XML结构的二进制编码,称为ccnb(定义字节顺序等)。也有一种文本XML编码,可用于调试、测试、文件描述等,但绝不能用于数据传输。

内容鉴别
CCNx协议用名字实现内容的转发,不考虑机器的id与物理位置。
CCNx内容的名字是分级结构的,包括若干组件。这种分级结构类似于IP地址,但CCNx的名字和名字组件是任意长度的,且组件的划分是明确定义的,不似IP地址那样,没有阶层的概念。本协议只依赖名字的分级结构,所以,这些名字可以包含任意二进制数据,像加密数据。
一个CCNx名字识别一个特定的数据块,但有时候,也可以用名称树的顶部来识别数据块,而不考虑下层的多条数据。识别数据块的一个名字类似于主机列表中的IP表示的网站地址(可识别与网络连接的主机群)。为了命名数据块,CCNx名字可作为数据块中,每条内容的名字的一个前缀,就像一个IPv4网络地址作为成员主机的IP地址的前缀一样。所以,一个CCNx名字可看做一个名字前缀,或仅仅是一个前缀。
CCNx名字的结构和表现详情见http://www.ccnx.org/releases/latest/doc/technical/Name.html。一个数据块的CCNx名字总是包含数据中最特别的有决定性的组件,即摘要组件。由于摘要组件是从数据中摘取的,是冗余数据,所以不被转发。

CCNx信息类型
在CCNx协议中,有两种数据类型:兴趣包和数据(或者叫数据和数据对象)。

兴趣包是用名字来请求数据。一个兴趣包可以定义一个数据块,所以可以精确检索。或者说,一个兴趣包可以提供一个前缀名和规则,判断带有此前缀名的数据可否通过。

数据对象用来装载数据。一个数据对象不仅包含有有效数据,还有数据的识别名字(不包括摘要组件)、一个加密签名、签名证书(发布者)以及其他关于签名的信息。一般的,一个数据对象信息唯一绑定一个名字、一个发布者和一个数据块。每个数据对象信息必须有一个有效的签名。这样,所有与CCNx协议通信的数据都是可证明的。
任何CCNx参与者都可以验证它收到的任何数据对象信息的签名。应用程序在使用数据之前必须先验证签名。验证过程可能需要数据对象信息中包含的公钥,而参与者没有这些公钥。若数据对象信息没有通过验证,CCNx参与者必须丢弃它。
由于密钥的分布与其他使用协议通用特征的数据一样,CCNx协议并没有为密钥的分布提供一个单独的机制。密钥分布的配置文件是单独的说明,而非CCNx协议的一部分。由于签名验证一开始就被识别的发布者标记,所以签名验证可以保证一个数据对象信息在传输过程中没有被毁坏。但是这些验证与那些因为应用程序的特定需求,需要验证发布者是否是一个值得信赖的数据源的验证是不一样。CCNx参与者因为某些原因,需要使用可靠的管理实践来确定某些发布者发布的数据是否值得信任,但这些管理实践并没有在CCNx协议中给出说明。CCNx协议用来确保数据的正确性,不考虑密钥的分布和依赖管理。

基本交换
使用CCNx协议通信是由接收方控制的。数据请求者通过可用的连接发送兴趣包,任何参与者收到信息或者有匹配的数据,请求者(由兴趣包中的说明可获得)可能发送一个匹配的内容对象信息。数据只能作为对符合该数据的兴趣包的回应被发送出去。兴趣包可以通过底层传输的广播或多播设备发送出去,以便用最小的带宽耗费找到很多潜在的数据源。
一个参与者回应收到的一个兴趣包时,最多只能发送一个内容对象信息,即使这个参与者有很多内容对象匹配。兴趣包和数据包之间的一一映射保持动态平衡,使得接收者可以控制数据从发送者处发送的速率,避免耗费带宽将数据发送到不需要它的地方。

节点应该实现抑制机制,以降低两个不同的节点回应它们收到的同一个兴趣包(例如通过广播或多播)时,发送两个内容对象信息的可能性。抑制机制应该含有随机响应次数并探测是否有另一个节点已经广播或多播响应,以便删除兴趣包。本版的CCNx协议不提供这样的抑制规则。

若接收者需要检索一个需要多个内容对象信息的数据块时,必须发送一系列兴趣包。管道传输时,接收者在发送兴趣包时,不需要等待上一个兴趣包的相应数据。当然,只有当接收者知道内容对象的信息,并能提前构造不同的兴趣包时,才能这么做。发送多个具有相同请求的兴趣包时,经常会引起内容对象的重复发送,因为发送者必须基于它们当前拥有的内容来回应兴趣包,而不是基于它们之前转发过的内容对象的记录。
CCNx协议并不假定底层的信息传输是可靠的。为了提供可靠的交付,兴趣包在合理期限内不满足时,要被转发出去。当不满足的兴趣包仍然想要数据时,接收者必须为其设定一个计时器,并在过期时将其转发出去。本版的CNNx协议没有指定计数器的值。
上述的管理本地通信的基本兴趣包和数据包交换的规则,就是节点(相互间可以接收和发送信息)之间的通信。虽然CCNx协议基于数据包传输,但本地的定义仍然比较宽泛,包括物理上相距甚远,但维持一个长距离连接的一对节点,例如一个作为直接发送CCNx信息的通道的TCP连接。
多次反射CCNx协议通信需要转发CCNx信息。CCNx信息依据下一部分描述的节点模型来说明。

CCNx节点模型
一个完整的CCNx节点(对照一个受限CCNx参与者,如一个应用程序)包含以下的数据结构来提供缓存和无环路路由。
内容存储CS:
一个用来根据前缀名检索的缓冲存储器。由于CNNx内容对象是自识别和自验证的,每条信息都可能对很多客户有用。CS应该实现一个替换策略来最大限度的实现重用,如最近使用的和最常使用的。CS也应该有一个标识过期的位。CS中可能会保存永不过期的内容对象信息,但不需要采取任何特定措施来维持它。CS是一个缓存,而不是永久存储地。
接口:
face是接口的一般化概念:一个face可以是与一个网络的连接,也可以是直接与一个应用程序参与者的连接。一个face可通过配置来向一个特定的网络接口发送和接收广播或多播包,或者发送或接收底层P2P地址包或通道包(如TCP通道)。一个face也可以是与本地运行的应用程序进程的连接,通过一个封装像UDP或者一个操作系统特定的进程间通信路径。所有信息都通过一个face接收,并由一个face发送出去。(个人加:以下face称为接口)
转发信息库FIB:
一个兴趣的输出接口,根据匹配的最长前缀名来检索信息。每一个FIB记录可能指向一个接口列表,而不是一个接口。
挂起兴趣表:
不满足兴趣包的源列表,根据匹配的最长前缀名来检索信息。每一个PIT记录可能指向一个源列表。PIT的记录必须设定超时,不能永久维护。
注意,以上列出的各表可能只通过一个索引连接,以便把CCNx信息处理和转发的代价降至最低。此索引必须优先提高以下列出的按顺序查找操作的效率。


兴趣包处理
一个兴趣包按照以下顺序进行处理:
1、查看是否存在于CS中。如果发现匹配的内容对象,则将其从接收兴趣包的接口转发出去,作为对兴趣包的应答。注意,在匹配内容对象的时候,必须符合兴趣包中的所有说明。若是多个内容对象同时匹配,则兴趣包中的说明将决定返回哪一个对象。当在CS中发现匹配对象时,处理就结束了,而兴趣包也符合要求,就可以丢弃这个兴趣包了。
2、查看是否存在与PIT。若在PIT中发现一个匹配的兴趣包,就说明一个等价的兴趣包已经被转发出去,并处于挂起状态。兴趣包的接收接口加入到PIT记录中的不满足兴趣源列表中,并丢弃兴趣包。
3、查看是否存在与FIB中。若在FIB中发现匹配的前缀,则在FIB中增加一个记录,来定义兴趣包的接收接口,并根据策略规则将信息发送到FIB中注册到该前缀的一个或多个输出接口。注意,可能有一个与本地代理连接的输出接口使用名字的语义来动态配置新接口。
4、若前三步中都没有发现匹配项,则说明节点目前无法满足兴趣包。节点在删除兴趣包之前会将之保留一段时间,因为创建一条新的FIB记录可能会提供满足兴趣包的方法。

内容信息的处理
一个内容对象按如下顺序进行处理:
1、查看是否存在与CS中。如果发现了一个匹配的内容对象,就说明新收到的内容对象是一个副本,可以放心删除了,因为已经有兴趣包符合要求了,新收到的与CS中一致的也必然符合要求。
2、产看是否存在与PIT中。若发现匹配对象,则此内容对象因为PIT中代表的兴趣,已被所有源节点转发。一个节点在转发内容对象之前可能先验证此对象,并提供多个策略限制条件。
3、若前两步均没发现匹配项,说明这个内容是主动推送过来的。节点不能转发主动推送的数据,必须丢弃它,但可以将之存在CS中,以便之后被请求时调用。

策略规则
与IP不同,CCNx的FIB条目会同时指出多个下一跳目的地。兴趣包和数据对象的自识别特性意味着在任意节点,为任意前缀,都不会形成回环,也不会生成只有一个目的地址的生成树。多输出也意味着,在转发信息的时候,不同的策略会选择不同的路径。一个节点必须实现若干策略规则,即使它依次在所列出的输出接口上传递兴趣包。一个节点也可能有不同的策略。策略规则应该用FIB条目来进行说明,所以,FIB条目可能含有一个有效的约束程序,用以转发寻址某一前缀的兴趣包。

若PIT记录在兴趣包超时前,没被其刷新,则节点必须丢弃该PIT记录。新的兴趣包确保潜在的接受者仍然对收到的内容感兴趣。节点必须定时重传兴趣包,以确定PIT记录。节点可能使用不用的超时来刷新收到的用于确认的重传兴趣包,也可能对不同的接口使用不同的超时。所以,每一个节点都应该与上游部分和下游部分匹配。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值