NDN Protocol Design Principles
[1] 普遍性:NDN应成为所有应用和网络环境通用的网络协议。
[2] 以数据为中心和数据不可变性:NDN应通过使用“兴趣包”请求来获取具有唯一命名、不可变的“数据包”。
[3] 直接保障数据安全:安全性应是数据包的属性,无论数据包是在传输中还是静止状态,安全性都应保持不变。
[4] 层次化命名:数据包应携带层次化名称,以便进行解复用并提供结构化上下文。
[5] 网络内名称发现:兴趣包应能使用不完整的名称来检索数据包。
[6] 逐跳流量平衡:在每个链路上,一个兴趣包应带回不超过一个数据包。
详细描述:
[1] 普遍性:NDN应成为所有应用和网络环境通用的网络协议。NDN应支持的应用和网络环境包括但不限于:
- 基于现有基础设施的通信(如Web、YouTube、实时会议等)
- 有或无基础设施的临时通信(如物联网应用、无线网状网络、车辆间网络、车辆与基础设施间网络等)
- DTN风格的通信,即通过间歇性和破坏性链路的通信(如应急响应环境),以及使用单向链路的应用(例如卫星通信)
因此,NDN协议和NDN数据包格式应支持从受限环境(如物联网)到大数据科学应用的广泛范围: - NDN数据包格式应具有灵活性和可扩展性。
- NDN协议和数据包格式应支持协议的演进,无需特定日期的标志性变更:头部不应有固定部分或固定长度字段。
- 核心网络协议操作不应依赖于时钟同步。
[2] 数据中心性和数据不可变性:NDN 应该通过使用“兴趣包”请求唯一命名的、不可变的“数据包”。
- NDN 协议和数据包格式应只包含与数据直接相关的元素,即在所有通信环境中普遍需要、必需且有意义的元素。其他在特定环境(例如在当今的基于基础设施的互联网中)需要的元素应放置在网络适配层中。
- 数据包的不可变性允许在可能并非始终连接的分布式系统中消除协调上的歧义。尽管数据包是不可变的,应用程序可以通过创建新的不可变数据包版本来对传输的内容进行更改。
相关阅读材料:《Immutability Changes Everything》作者:P. Helland
[3] 直接保障数据安全:安全性应该是数据包的属性,无论数据包是在传输中还是在静止状态,安全性都应保持不变。
- 直接保障安全且唯一命名的数据消除了通信双方之间需要直接通道的要求,并使得命名和安全数据的异步生产和消费成为可能,例如使用网络内缓存和管理存储库。
- 消费者应该能够验证单个数据包。理想情况下,每个数据包应该可以单独验证。作为一种工程优化,数据包可以在其他数据包的上下文中进行验证,前提是可以从数据包本身(其名称或签名字段中的信息)推断出上下文。
“并使得命名和安全数据的异步生产和消费成为可能”这句话的意思是,在 Named Data Networking (NDN) 中,数据包的直接安全性和唯一命名特性允许数据的生产者和消费者不必同时在线或直接通信,从而实现数据的异步生产和消费。具体来说:
1)异步生产和消费:数据的生产者可以在任何时候创建和发布数据包,而消费者可以在以后任何时间请求和获取这些数据包。这种异步性消除了生产者和消费者必须同时在线的需求。
2)网络内缓存:由于数据包是安全的并且唯一命名,它们可以被存储在网络内的缓存中。消费者可以从这些缓存中检索数据,而不需要直接从生产者那里获取。
3)管理存储库:数据包可以被存储在管理存储库中,这些存储库可以在需要时提供数据包,而不需要生产者的参与。
这种机制提高了网络的灵活性和效率,使得数据可以更方便地在不同时空的节点之间传输和使用。
[4] 分层命名:数据包应携带分层名称,以实现多路复用和提供结构化上下文。
- 名称层次结构提供了实现和执行各种安全模型的上下文,即对哪些密钥可以签署哪些数据施加结构化的限制。
- 分层名称允许在需要或应用程序期望的情况下使用“扁平”命名模型。
“扁平”命名模型指的是没有层次结构的命名方式。相对于分层命名模型,扁平命名模型中的每个名称都是独立的,没有上下级关系或嵌套结构。如 lecture1, lecture2,它们之间没有层次关系。
分层命名模型:这种模型中,名称具有层次结构,可以反映数据的组织方式。例如,类似于文件系统中的路径,/org/university/course/lecture1 这样的名称表示一个层次结构,从机构(org)到具体的讲座(lecture1)。
[5] 网络内名称发现:兴趣包应能使用不完整的名称来检索数据包。消费者可能不知道数据的完整网络级名称,因为名称的某些部分无法事先猜测、计算或推断。一旦接收到初始数据,命名约定可以帮助确定其他相关数据的完整名称。
- 大多数兴趣包将携带完整的名称。
- 网络内名称发现预计将用于启动通信
[6] 逐跳流量平衡:在每个链路上,一个兴趣包应带回不超过一个数据包。逐跳流量平衡使每个节点能够控制其链路上的负载。通过决定向某个链路发送兴趣包,路由器承诺为返回的数据预留带宽。通过限制发送的兴趣包数量,网络中的每个路由器和客户端节点控制其将接收的数据量。