NDN全栈: 一、命名数据网络(Named Data Netwo
最近转到 NDN 方向进行一些研究,中文资料太少,特整理本人部分经验供广大爱好者参考。
一:背景
现今的互联网沙漏架构(hourglass architecture)以一个普世通用的网络层(network layer)为中心,也就是 IP[1]。在 1970 年代设计 IP 时的基本概念,是要能允许分散在各个不同地理区域的使用者都能顺利存取少数巨大而不会移动的电脑,因此当代的互联网架构也都是围绕着这种以主机对主机的会话模式而设计。 IP 中实作了要达成全球互联所需的最少功能,这种细腰架构促成了互联网爆炸性的成长,使得下层与上层的技术可以独立发展与创新。然而,IP 当初只是设计来建立一个通讯网络,因此它的封包是以通讯的端点来进行命名。
命名资料网络的基本元素是是具有名称的资料内容,有别于IP架构中是以IP地址识别两端点的点对点通讯。
命名资料网络这个专案计划试图改进 IP 架构,让细腰角色更加一般化,让它在处理封包是依据资料而非通讯端点来命名。更明确地说,之前的 IP 网络提供的服务是将封包递送到指定的位址,而命名资料网络所提供的网络服务,是依据所指定的名称来获取资料。命名资料网络中的“名称”可以是任何东西 -- 一个端点、一部电影或一本书中的一段资料内容、一个开启灯光的指令等等。期望这个概念上的简单改变的可以让互联网除了现有点对点的通讯外,更佳地应用在更广泛的应用上[2]。 命名资料网络的设计中,融合了过去三十年在网络工程上所习得的经验,在一开始就将许多重要的功能整合到协定中,像是利用兴趣封包(Interest packet)与资料封包(Data packet)的流量平衡来进行网络流量的自我调控,并对所有网络上传送的资料进行数位签章以确保安全性。
二:架构概述
在NDN的通讯中是由接收端(例如:资料消费者)透过两种不同类型的封包来沟通,分别是兴趣封包和资料封包。
兴趣封包:消费者将希望得到资料的名字放入兴趣封包中,并在网络上传送。路由器会依据该名字将兴趣封包转发给资料产生者。
资料封包:当兴趣封包抵达某一节点,而该节点有相符的资料时,该节点就会将其资料封包以相反路径回传给请求者,其中,资料封包内除了有名字和内容外,并在名字与内容外加上资料产生者的密钥当作签署资讯。
更完整的NDN封包格式请看:NDN Packet Format Specification.
为了实现兴趣封包和资料封包的转发功能,每个NDN路由器有三个数据结构和一个转发策略。
待定兴趣表:储存了路由器转发但还没有被满足的兴趣封包,每个PIT条目记录了兴趣封包中携带的资料名,以及封包进来和出去的界面。
转发讯息表:FIB本身由名字前缀的路由协定填充,而且每个前缀可以有多个界面。
内容暂存:是用来暂存路由器收到的资料封包,因为NDN资料封包的来源及转发路径是独立的,它可以被暂存以满足未来的兴趣封包。
转发策略模组:是一系列用来转发封包的策略和规则。在特殊情况下可能会决定扔掉兴趣封包,例如:当所有上游连结发生拥塞或兴趣封包被当作DoS攻击的一部分。对于每个兴趣封包,转发策略是从FIB中取得最长的前缀相符的条目,并决定何时转发兴趣封包到何地。
当兴趣封包到达时,NDN路由器会先查询内容暂存中是否有符合的资料,如果有相符的资料的话,路由器会直接透过兴趣封包传来的界面回传资料封包,否则路由器会在PIT中查询兴趣封包的名字,如果有相同的条目在PIT中的话,路由器会在该PIT的条目中简单记录兴趣封包的来源界面,但如果在PIT中没有相同的条目的话,路由器将会基于FIB中的讯息和路由器的转发策略向资料生产者转发兴趣封包,当路由器收到很多来自下游节点中相同名字的兴趣封包时,它只会向上游的资料生产者转发第一个兴趣封包。
当资料封包到达时,NDN路由器会先查询相符的PIT条目并向列在PIT条目所有的下游界面转发资料,然后在PIT中移除该条目并将此资料暂存在内容暂存中,资料封包总是沿着兴趣封包的相反路径回传,而且不会遗失封包。在每条连结中,一个兴趣封包会返回一个资料封包,提供了流平衡的机制。为了取得包含多个封包的大物件,兴趣封包提供了一个类似TCP ACKs用来控制流量的角色:被资料消费者控制的细粒度的反馈回路。
兴趣封包和资料封包都不携带任何主机或界面位置,路由器是基于封包中携带的名字来转发兴趣封包给资料生产者,并基于兴趣包在每个节点所建立的PIT状态讯息向消费者转发资料封包。兴趣封包与资料封包交换的对称性减少了hop-by-hop的控制回路(不要与对称路由或路由搞混),并消除了在资料传输中任何需要来源与目的节点的概念,不像IP的端到端的封包传送方式。
三:名字
NDN的名字在网络中是不透明的,这可以让每个应用程序去选择适合的命名方式。因此,命名能够随网络独立地演进。
NDN的设计假设为有层次化的结构命名,例如,由UCLA生产的影片可能被命名为 /ucla/videos/demo.mpg,其中“/”以文本表示法描绘了名字的构件,与URL相似,这种层次化的结构有很多的潜在好处:
关系规范:让应用程序去表示内容和资料元素的关系,例如,UCLA影片版本一中的第三段可能被名为 /ucla/videos/demo.mpg/1/3。
名字集合:可以用/ucla与产生影片的自动化系统通讯。
路由:允许扩展路由系统及帮助提供有必要的资料上下文。
为了得到动态产生的资料,消费者必须能够为想要的资料建构名字,而不是用先前看过的名字或资料。方法有以下两种:
一个算法允许生产者和消费者去达到相同有效讯息的名字。
兴趣封包选择器与最长前缀匹配的结合,透过一个或多个迭代器去取得期待的资料。
目前研究正在探索如何让应用程序去选择名字,让这个名字可以促进应用程序的开发和网络的传递。研究的目标是去发展和精进目前存在的原理及命名的指导方针,在系统库中将其加入命名的方式,用来实行简化未来应用程序的开发。
可以被全球得到的资料一定有全球唯一的名字,但用于当地通讯的名字只需要当地路由(或当地广播)来寻找符合的资料。单独的资料名称在很多范围和上下文中是有意义的,范围从“房间里的电灯开关”到“世界上所有的国家名字”。 命名空间的管理不是NDN架构中的一部分,就像位址空间的管理也不是IP架构中的一部分。然而,命名则是NDN应用程序设计中最重要的部分,让应用程序开发者和使用者去设计他们自己的命名空间作为资料交换有几项好处:
增加应用程序资料和其使用的网络之间的映射密度。
减少次要符号的需求(保持记录可以将应用程序的配置映射到网络的配置)。
将抽象可用的范围扩展到开发者。
四:路由
NDN路由器和转发封包都是以名字为基础运作,也因此而解决了三个由IP架构中位址所产生的问题:
位址空间耗尽:NDN命名空间是无边界的
NAT转发:NDN不使用位址,所以无论是对内还是对外的,都不存在有NAT转换的问题
位址管理:位址的分配及管理不再需要在局域网络中
NDN网络可以使用传统的路由算法,例如:链状路由算法和距离向量算法。代替宣告IP的前缀中,NDN路由器宣告名字的前缀让他可以覆盖路由器愿意服务的资料。传统的路由协定,比如OSPF和BGP,都可以适用于将名字视为不透明的序列组件来对名字前缀进行路由,并对兴趣封包中的名字针对FIB表做出基于组件的最长前缀匹配。
每个路由器的PIT表支援跨越NDN资料面的转发,记录了每个待定的兴趣封包和来源界面,并在收到相符的资料或超时发生后移除兴趣封包。这种每跳每个封包状态与IP的无状态资料面不同,基于FIB中的讯息和效能测量,在每个路由器中的转发策略模组会做出以下正确的决定:
控制流:由于每个兴趣封包最多只会收到一个资料封包,路由器可以直接透过控制待定兴趣封包的数量来控制流量负载,因而达到流平冲
多播的资料转发:在PIT表中记录了相同资料名字的兴趣封包的来源界面,自然就支持多播的资料转发
更新路径以适应其对网络的观点(knowledge之意)
转发:路由器可以判断哪些兴趣封包被转发到哪个界面,在PIT表中有多少未满足的兴趣封包及不同兴趣封包的相对优先权
如果路由器决定兴趣封包不能被满足,例如:上游连结是关闭的,FIB表中也没有转发的条目或极端的塞车情况发生,路由器会发送一个NACK给传送兴趣封包的下游邻居。这样的NACK可能触发接收路由器去转发兴趣封包到其它界面来寻找替代的路径。PIT状态使路由器可以去辨认和丢弃循环的封包,允许他们自由地向相同资料产生者使用多样的路径。封包不能在NDN中循环,代表不需要在IP中有生存时间或其它措施和位址的相关协定来解决这些问题。
**
五: 安全
相对于TCP/IP将安全的责任交给端节点,NDN本身就可以透过资料生产者对每个资料封包签名来确保资料的安全,资料生产者的签名能确保资料的完整性,并可以知道资料来源,让消费者可以借由如何得到资料及哪里得到资料来提高对资料的信任度。NDN网络也支援细粒度(fine-grained)的信任,允许消费者推测关于公钥的拥有者是否是在特定环境中特定资料的一个可接受的发布者。第二个主要的研究是设计和开发可用的机制来管理使用者的信任,这里有两个不同类型的信任机制:
层次化信任模组:在此模组中密钥命名空间授权使用密钥。意思是说,一个资料封包会携带一个公钥当作有效的证书,既是由第三方签名并,用来签名特定资料[12]
网络信任::启动对话安全而不需要预先同意的信任[13].
NDN的资料中心安全有固定的应用程在内容访问控制及其础建设的安全方面,应用程可以加密资料和分配密钥当命名封包使用相同命名架构去分配密钥时,有效的限制资料安全周长在单个应用程序中。为了验证资料封包的签名,应用程序可以取得适当的密钥,确认封包中密钥的位置区域,就像任何其它的内容。但信任管理,例如,如何确认在应用程序中特定的封包所提供的密钥的真实性,是一个主要的研究挑战。 一致的实验方法,NDN的信任管理研究由应用层的开发和使用来驱动:先解决特定问题,然后定义出共同模式。例如,NLSR的安任需求需要开发一个简单的层次化信任模组,利用最低层级的密钥(接近root),密钥用名字发布来当作最高层级中的密钥,该名字反应了他们之间的关系。在这个信任模组中,命名空间与层次结构的信任代表的相配,例如,/root/site/operator/router/process。在分层架构中特定命名发布的密钥,授权他们可以签名特定的资料封包并限制他们的范围。这个范例可以简单地延伸到其它真实世界信任趋向于层次化模式的应用程序,像我们建构的管理系统(BMS)中。因为NDN在控制应用程序中留下了信任模组,更有弹性和表现力的信任关系,比如ChronoChat(作者注,已经停用,目前支持的是chronochat-JS),激发了信任网络模组实验的积极性,这个安全模组是在目前的聊天室中参与者可以透过新的签名来介绍新的参与。未来的应用程序将实现一个交叉验证模组(SDSI),这个模组将提供更多的验证,让资料和密钥名字可以是独立的,这将更简单地适应各种真实世界的信任关系。
此外,NDN处理网络路由和控制讯息,比如所有NDN的资料或要求签名,这些为安全路由协定抵抗攻击提供了坚固的基础,例如,欺骗和篡改。NDN使用多路径的转发和自适转发策略模组,减缓了前缀被劫持的攻击,因为路由可以侦测到劫持后的异常现象,并透过替代路径来取得资料,由于NDN封包引用的是内容而不是设备,所以恶意地指向特定设备变得更加棘手,虽然减缓机制可以针对其他NDN的特定攻击,例如,兴趣封包泛洪的DoS攻击。此外,待定兴趣表中关于先前的要求封包,可以为如何处理兴趣封包做出明智的决定,有以下几个安全的优点:
流量平衡:PIT条目的数量是路由器负载的指引器,对PIT大小的约束限制了DDoS的攻击。
兴趣封包超时:PIT条目超时提供了相对容易的攻击检测,并每个PIT条目中到达的界面讯息能够支持推回计划,让下游的路由器可以被告知未服务的兴趣封包,这有助于检测攻击。