【命名资料网路】
命名资料网路（Named Data Networking，NDN）是一个未来的互联网架构（Future Internet Architecture），灵感来自多年在网路使用上的实证研究，导致人们逐渐意识到，现今的互联网架构中在旧有的 IP 协定上悬而未决的问题 。
NDN根源于一个Van Jacobson在2006年首次公开展示的专案计划「Content centric networking」(CCN)。NDN的目标在于检视如何依据Jacobson的提议，从现今以主机为中心的网路架构IP演进到以资料为中心的网路架构NDN。一般相信这项概念上的简单转变，将对人们如何设计、开发、部署和使用网路以及应用程式产生深远的影响
。
网际网路目前主要用作信息散布的平台，但这并非 IP 的强项。因此，未来互联网的“瘦腰”（thin waist）架构应当基于命名资料，而非以数字定址的主机。基本原则是，通信网路应该允许用户专注于他或她需要的资料，也就是所谓的「内容」（content），而不必指定资料要取自哪个实际位置，也就是所谓的「主机」（host）。由于当前的互联网中，绝大多数（“高达流量的90％”）的网路使用方式都是由单一来源传播到多个用户, 命名资料网路的许多机制均具有广泛的优势潜力，例如内容快取，以减少拥塞并提高传递速度，简化网路设备配置，以及在资料层级就直接内建网路安全性。
== 背景 ==
现今的互联网沙漏架构（hourglass architecture）以一个普世通用的网路层（network layer）为中心，也就是 IP。在 1970 年代设计 IP 时的基本概念，是要能允许分散在各个不同地理区域的使用者都能顺利存取少数巨大而不会移动的电脑，因此当代的互联网架构也都是围绕著这种以主机对主机的会话模式而设计。 IP 中实作了要达成全球互联所需的最少功能，这种细腰架构促成了互联网爆炸性的成长，使得下层与上层的技术可以独立发展与创新。然而，IP 当初只是设计来建立一个通讯网路，因此它的封包是以通讯的端点来进行命名。
随著电子商务、数位媒体、社交网路、智慧手机等应用逐步地成长，互联网不再只是一个（像电话网路一般）点对点的通讯网路；目前互连网上大多数的用途是作为一个散布网路（distribution network）。散布网路比起通讯网路在功能上更加地一般化，因此借由传统点对点对点的通讯协定来试图解决散布的问题，不但复杂而且容易出错。
命名资料网路这个专案计划试图改进 IP 架构，让细腰角色更加一般化，让它在处理封包是依据资料而非通讯端点来命名。更明确地说，之前的 IP 网路提供的服务是将封包递送到指定的位址，而命名资料网路所提供的网路服务，是依据所指定的名称来获取资料。命名资料网路中的「名称」可以是任何东西 －－ 一个端点、一部电影或一本书中的一段资料内容、一个开启灯光的指令等等。期望这个概念上的简单改变的可以让互联网除了现有点对点的通讯外，更佳地应用在更广泛的应用上。  命名资料网路的设计中，融合了过去三十年在网路工程上所习得的经验，在一开始就将许多重要的功能整合到协定中，像是利用兴趣封包（Interest packet）与资料封包（Data packet）的流量平衡来进行网路流量的自我调控，并对所有网路上传送的资料进行数位签章以确保安全性。
== 历史 ==
===先期研究===
命名资料网路的哲学始于1979年由 Ted Nelson 率先提出，其后 Brent Baccala 在 2002 年持续发扬光大。在 1999 年时，史丹佛在 TRIAD 计划date=20160305143858  中提出，使用一个物件的名称直接绕送到一个邻近的复本，即可避免再去名称伺服器（DNS server）查询。在 2006 年，柏克莱的「资料导向网路架构」（Data Oriented Network Architecture， DONA）计划提出一个以内容为中心的网路架构，它进一步改善了 TRIAD，在架构中加入了安全性（认证）的机制。Van Jacobson 在2006年至Google演讲有关网路的演进  A New Way to Look at Networking，主张命名资料网路将是网路发展的下一步。在 2009年，PARC 在 CCNx 计划内宣布了他们的内容中心架构，该计划是由当时身为 PARC 研究院士的 Jacobson 所领导。2009年9月21日,PARC 发布了他们内容中心网路研究计划的互操作性规格，并且以GPL首次释出公开原始码（见  CCNx 计划网站date=20160317121029 ）。有一个更加广义的网路研究方向叫「资讯中心网路」（information-centric networking ，ICN），许多不同的架构设计都由此发展出来，命名资料网路只是其中的一例。网际网路研究任务小组（Internet Research Task Force，IRTF）在2012年成立了研究 ICN 的工作小组。
===现状===
命名资料网路包含国家科学基本所赞助的16个计划主持人，涵盖12个校园，以及来自学术界与产业界研究社群与日渐增的兴趣 。 目前有许多关于命名资料网路的  研究成果date=20201022231005  被陆续发表，以及迅速成长的  程式码date=20200513103025  被贡献至相关社群。
==架构上的关键原则==
* 端点至端点原则: 应用程式的开发只需两端点的支援，不需顾虑到中间的路由器等节点（路由器只需要支援IP即可）。命名资料网路保有此一原则。
* 路由学习与封包转发之机制分离：这个原则已被证实对互联网的发展有其必要，它允许路由学习的演算法可以自由改变和尝试，而不影响到封包转发的稳定运作。命名资料网路采用同样的原则，使得现有最佳的封包转发技术可被布建，同时新的路由研究也可易于进行。
* 全状态的转发机制（Stateful forwarding）: 命名资料网路会记录最近转发的封包状态，以进行回路侦测、流量平衡、普遍暂存（ubiquitous caching）等智慧型的转发机制。
* 内建安全性：在命名资料网路中，任何有名称的资料，在传送时都必须进行签章及验证，以在网路层（network layer）确保其安全。
* 提供使用者选择以促进竞争：虽然这不是互联网一开始设计时就存在的概念（一开始的互联单位只限于学术单位之间，商业的引进与电信业者的竞争是1990年代以后的事），但目前全球的网路布建已展现出电信网路的基础架构并不中立，命名资料网路在技术上提供机制让终端使用者可自由选择的权利，以促进竞争。
==架构概述==
===封包类型：===
在NDN的通讯中是由接收端(例如：资料消费者)透过两种不同类型的封包来沟通，分别是兴趣封包和资料封包。
Overview of the Packet Contents for NDN Packet
* 兴趣封包：消费者将希望得到资料的名字放入兴趣封包中，并在网路上传送。路由器会依据该名字将兴趣封包转发给资料产生者。
* 资料封包：当兴趣封包抵达某一节点，而该节点有相符的资料时，该节点就会将其资料封包以相反路径回传给请求者，其中，资料封包内除了有名字和内容外，并在名字与内容外加上资料产生者的密钥当作签署资讯。
更完整的NDN封包格式请看：  NDN Packet Format Specificationdate=20180217095021 .
===路由器架构===
为了实现兴趣封包和资料封包的转发功能，每个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应用程式设计中最重要的部分，让应用程式开发者和使用者去设计他们自己的命名空间作为资料交换有几项好处：
* 增加应用程式资料和其使用的网路之间的映射密度。
* 减少次要符号的需求(保持记录可以将应用程式的配置映射到网路的配置)。
* 将抽象可用的范围扩展到开发者。.
==路由==
===解决IP问题的方法===
NDN路由器和转发封包都是以名字为基础运作，也因此而解决了三个由IP架构中位址所产生的问题：
* 位址空间耗尽：NDN命名空间是无边界的
* NAT转发：NDN不使用位址，所以无论是对内还是对外的，都不存在有NAT转换的问题
* 位址管理：位址的分配及管理不再需要在区域网路中
===协定===
NDN网路可以使用传统的路由演算法，例如：链状路由演算法和距离向量演算法。代替宣告IP的前缀中，NDN路由器宣告名字的前缀让他可以覆盖路由器愿意服务的资料。传统的路由协定，比如OSPF和BGP，都可以适用于将名字视为不透明的序列组件来对名字前缀进行路由，并对兴趣封包中的名字针对FIB表做出基于组件的最长前缀匹配。
=== PIT状态===
每个路由器的PIT表支援跨越NDN资料面的转发，记录了每个待定的兴趣封包和来源介面，并在收到相符的资料或超时发生后移除兴趣封包。这种每跳每个封包状态与IP的无状态资料面不同，基于FIB中的讯息和效能测量，在每个路由器中的转发策略模组会做出以下正确的决定：
* 控制流：由于每个兴趣封包最多只会收到一个资料封包，路由器可以直接透过控制待定兴趣封包的数量来控制流量负载，因而达到流平冲
* 多播的资料转发：在PIT表中记录了相同资料名字的兴趣封包的来源介面，自然就支援多播的资料转发
* 更新路径以适应其对网路的观点
* 转发：路由器可以判断哪些兴趣封包被转发到哪个介面，在PIT表中有多少未满足的兴趣封包及不同兴趣封包的相对优先权，
===兴趣封包===
如果路由器决定兴趣封包不能被满足，例如：上游连结是关闭的，FIB表中也没有转发的条目或极端的塞车情况发生，路由器会发送一个NACK给传送兴趣封包的下游邻居。这样的NACK可能触发接收路由器去转发兴趣封包到其它介面来寻找替代的路径。PIT状态使路由器可以去辨认和丢弃循环的封包，允许他们自由地向相同资料产生者使用多样的路径。封包不能在NDN中循环，代表不需要在IP中有生存时间或其它措施和位址的相关协定来解决这些问题。
==安全==
===概述===
相对于TCP/IP将安全的责任交给端节点，NDN本身就可以透过资料生产者对每个资料封包签名来确保资料的安全，资料生产者的签名能确保资料的完整性，并可以知道资料来源，让消费者可以借由如何得到资料及哪里得到资料来提高对资料的信任度。NDN网路也支援细粒度(fine-grained)的信任，允许消费者推测关于公钥的拥有者是否是在特定环境中特定资料的一个可接受的发布者。第二个主要的研究是设计和开发可用的机制来管理使用者的信任，这里有两个不同类型的信任机制：
*层次化信任模组：在此模组中密钥命名空间授权使用密钥。意思是说，一个资料封包会携带一个公钥当作有效的证书，既是由第三方签名并，用来签名特定资料
* 网路信任:：启动对话安全而不需要预先同意的信任.
===应用层的安全===
NDN的资料中心安全有固定的应用程在内容访问控制及其础建设的安全方面，应用程可以加密资料和分配密钥当命名封包使用相同命名架构去分配密钥时，有效的限制资料安全周长在单个应用程式中。为了验证资料封包的签名，应用程式可以取得适当的密钥，确认封包中密钥的位置区域，就像任何其它的内容。但信任管理，例如，如何确认在应用程式中特定的封包所提供的密钥的真实性，是一个主要的研究挑战。 一致的实验方法，NDN的信任管理研究由应用层的开发和使用来驱动：先解决特定问题，然后定义出共同模式。例如，NLSR的安任需求需要开发一个简单的层次化信任模组，利用最低层级的密钥(接近root)，密钥用名字发布来当作最高层级中的密钥，该名字反应了他们之间的关系。在这个信任模组中，命名空间与层次结构的信任代表的相配，例如，/root/site/operator/router/process。在分层架构中特定命名发布的密钥，授权他们可以签名特定的资料封包并限制他们的范围。这个范例可以简单地延伸到其它真实世界信任趋向于层次化模式的应用程式，像我们建构的管理系统(BMS)中。因为NDN在控制应用程式中留下了信任模组，更有弹性和表现力的信任关系，比如ChronoChat，激发了信任网路模组实验的积极性，这个安全模组是在目前的聊天室中参与者可以透过新的签名来介绍新的参与。未来的应用程式将实现一个交叉验证模组(SDSI)，这个模组将提供更多的验证，让资料和密钥名字可以是独立的，这将更简单地适应各种真实世界的信任关系。
===路由安全===
此外，NDN处理网路路由和控制讯息，比如所有NDN的资料或要求签名，这些为安全路由协定抵抗攻击提供了坚固的基础，例如，欺骗和篡改。NDN使用多路径的转发和自适转发策略模组，减缓了前缀被劫持的攻击，因为路由可以侦测到劫持后的异常现象，并透过替代路径来取得资料，由于NDN封包引用的是内容而不是设备，所以恶意地指向特定设备变得更加棘手，虽然减缓机制可以针对其他NDN的特定攻击，例如，兴趣封包泛洪的DoS攻击。此外，待定兴趣表中关于先前的要求封包，可以为如何处理兴趣封包做出明智的决定，有以下几个安全的优点：
* 流量平衡：PIT条目的数量是路由器负载的指引器，对PIT大小的约束限制了DDoS的攻击。
* 兴趣封包超时：PIT条目超时提供了相对容易的攻击检测，并每个PIT条目中到达的介面讯息能够支持推回计划，让下游的路由器可以被告知未服务的兴趣封包，这有助于检测攻击。