命名数据网络(NDN)介绍

news2025/1/20 12:07:37

命名数据网络的由来

IP网络最开始其解决的问题是两个实体间点对点通信需求,实现资源共享。(简单知道即可)

随着互联网的发展,互联网用户对internet的需求现已经发生了巨大变化。目前面临着以下挑战

  1. 首先是随着以内容为中心(如视频播放平台、资源下载平台及社交网络等)应用程序的不断发展,彻底改变了 internet 的使用模式,人们越来越关心数据,而不是IP地址。就像我们访问一个网站,更加关心它是什么域名一样,不会记住需要访问的主机IP。

  2. 随时互联网用户的急速攀升,造成了海量的数据分发和大量数据的复制需求。当前的IP网络体系都是实现主机到主机的数据传输,不能支持多播,也就是一对多的数据转发,这无疑对网络带宽提出了很大需求。

  3. 互联网的普及也导致使用移动设备用户的大量增加,移动设备可以很轻松的切换网络。但现在的网络体系不能给移动用户在改变网络环境的情景下提供,无间断无缝连接及无感通信的高要求,使得移动环境下互联网体验感下降。

以上需求导致,研究人员不得不对互联网的网络体系结构进行根本性的改变。

首先提出了ICN(Information Centric Networking),信息中心网络,简单来说就是要以信息为中心的网络,它不是一种特定的技术,而更像是一种思想!!!

在ICN思想下诞生了很多网络架构,这里就不列举了。其中借鉴 CCN 思想的**命名数据网络(Named Data Networking, NDN)**已逐渐成为 ICN 的主流,并很有希望成为下一代互联网体系架构。

NDN和IP网络的区别

相同地方在于:它们都是沙漏型体系架构,允许下层和上层不断革新变化去掉不必要的限制 ,这种瘦腰型网络体系架构推动了互联网的稳步发展。IP核心层传输IP数据包,NDN核心层传输NDN数据包(有两种数据包,兴趣包和数据包)

不同地方在在于:NDN架构本身增加了安全层和策略层,并在瘦腰处利用了内容数据检索模型代替了原来的主机到主机的数据交付模型。下面详细提一下。

  1. 安全层:每个数据包都会有签名,直接在网络层提供数据安全。
  2. 策略层:策略层可以对不同的兴趣包执行不同的响应,比如说,当检测到阻塞后,或者收到DDos攻击,可以拒绝转发。
  3. 传输控制:IP体系下的传输控制,内置在NDN转发平面中。
  4. Face抽象接口:NDN有Face这个盖帘,当与NDN路由器连接后,相当于通过Face建立了一个通道,可以进行数据转发。Face接口只是逻辑上的,具体可以是本地进程的通信,物理链路,或者是封装的TCP,UDP通道(来更好的兼容IP体系)。

在这里插入图片描述

NDN通信原理

首先,NDN的通信可以分为兴趣请求包 Interest 发出和内容数据包 Data 传回两个过程。它们的格式如下,简单知道即可。

在这里插入图片描述

在NDN路由器里面有三个非常重要的数据结构,它们分别是

  1. 内容缓存表 CS:CS是一个用于缓存已接收到的数据包的数据结构。当一个节点收到一个数据包后,它会检查CS以查看是否已经有相同名称的数据包被缓存。
  2. 待定兴趣表 PIT:用于跟踪未满足的兴趣包,记录兴趣包的来源
  3. 转发表 FIB:用于存储路由表信息。它记录了如何将特定的数据包传送到正确的下一跳节点

这三个数据结构,如何在路由转发的时候起到作用的?

当用户需要某个数据时候,他会发送数据包,当该数据包经过一个路由时,会发生…

  1. 查询CS:是否已经有缓存了;
  2. 查询PIT:是否已经有其他人请求过了,那就不用再重复发请求了,只需记录一下,在包回来时给所有请求都分一份就行;
  3. 查询FIB:查询哪条路径能满足请求,把兴趣包转发下去。

在这里插入图片描述

当服务端收到兴趣包后,会构造数据包返回,当数据包经过一个路由器后,会发生…

  1. 查询PIT:若有该数据的请求,发给所有请求列表;若无则直接丢弃。
  2. 访问CS:留一份缓存后,继续转发

在这里插入图片描述

了解NDN基本的转发流程后,下面这张图是具体一些的转发模型,可以看看,深入理解一下。(不看也没事,对简单学习NDN的同学来说不重要)
在这里插入图片描述

NDN几个关键要素

命名方案

数据如何命名是NDN发展中研究的重点,因为NDN体系架构中的所有层级都是基于命名机制得到的名称进行处理,比说说,路由、数据检索、权限控制、安全保证等等。

NDN中数据命名由以下特性,并不是简简单单确定唯一数据。

  1. 通过名称,通信系统可扩展且自适应性地检索内容数据,提高数据分发效率,以应对未来互连网海量数据分发。可扩展就是应对不断增长数据,自适应应对差异化的网络环境。
  2. 可以持久标识唯一数据,不会出现名称碰撞。
  3. 方便容易读。

NDN中使用类似统一资源定位符号的方式来命名数据(URL),比如说一个数据名/ndn/example/video/cat,它的含义如下。

  • /ndn 表示根命名空间,类似于互联网中的根域名(例如.com)。
  • /example 表示某个实体、组织或者应用的命名空间,类似于一个域名(例如example.com)。
  • /video 表示数据的类型或者内容类别。
  • /cat 是具体的数据标识符,代表某个视频的名称。

路由转发机制

NDN的路由层和转发层是相互隔离的,路由层决定了路由的可达性,转发层则根据其数据包传输状态来决定路由的优先级和使用情况。

NDN体系下的 FIB 和 IP 网络中的路由表类 似,用于保存全网的路由信息。

如何根据FIB得到最优的转发策略,是路由转发机制需要考虑的问题。

第一个NDN 路由协议是命名数据OSPF,OSPFN 由于不能支持动态多路径转发,并且没有建立认证路由数据的机制,现在已被命名数据链路状态路由协议(Named-Data Link State Routing protocol, NLSR)所取代。

NDN 的自适应转发策略考虑到以下内容。

  1. 哪一个兴趣请求包应该转发到哪一个接口
  2. 允许有多少未得到回应的请求包记录停留在表项 中
  3. 怎样在多个接口转发请求包的情况下实现负载均衡
  4. 以及如何在多个可选路径中选择路径以避免请求失败

这里不多讲,后面会专门写一篇NDN转发机制的介绍。

缓存机制

由于 NDN 数据包独立于数据来源及去向位置信息,因此 NDN 路由器可以对内容数据缓存。

传统的IP网络缓存,有Web缓存,内容分发网络CDN的缓存,对等网络P2P的缓存,虽然起到了一定作用,但在扩展性和安全性上,还是有很大的问题。NDN缓存有以下优点。

  1. NDN路由器缓存是可以长时间可用的,使得相同请求内容可以快速响应,IP路由器只是缓存来进行传输,传输过后立马删除。
  2. 能够满足用户的移动通信,当用户切换网络后,能尽快被最近的CS节点响应。
  3. 当多个路由器缓存了相同内容,也能有效避免单点故障。
  4. 无论是兴趣包还是数据包,里面都不包含任何信息,缓存的内容也一样,攻击者只知道有人请求了这个内容,但不知道是谁请求。

鉴于通信设施缓存不能无限大,因此缓存的数据量有一 定的上限限制,所以如何对缓存的内容合理地取舍,即缓存替换策略,一直是学术界研究的焦点。缓存替换策略主要是通过时间和访问频次两个方面对当前收到的内容是否缓存进行考量。比较早期的缓存替换策略有LRU,LFF(非常经典,知道就行)

缓存能够重用NDN架构的很大优势!!!

移动性

随着移动设备的急剧增加,使得 IP网络不得不面对在移动设备网络环境下形成的新挑战,IP网络在该挑战下,还是通过提出新协议,也就是打补丁的方式尝试解决。

NDN因为有两种身份,生产者和消费者,因此要分别对两者的移动性来进行满足。

对于消费者移动性,当其发生一个兴趣包后,移动到另一个网络环境,导致原来本该收到的数据包没有接收到,这时候只需要重新发送相同的兴趣包即可。而且鉴于网络缓存,下次本改到达消费者的数据包,会被缓存到网络中间,新的兴趣包能够被最近路由器的CS满足,大大减少延迟。能够较好的满足用户移动性的场景。

对于生产者移动性,由于网络服务的中断,导致内容不可被路由,兴趣包不会被满足。网络存储这时候就又起到了作用,对于非第一次请求的数据包,它是存储在路由器中的CS,可以重新发送给用户。但是对于第一次请求的数据包,就需要更多解决方案了,比如说多媒体实时传输的场景。这里不多介绍。

安全性

传统的 IP 网络是验证通信双方主机并保护通信信道以禁止中间人攻击的方式来提供安全性,而且这种安全是通过后续打补丁的方式加入的,如TLS,SSL协议,它们已经迭代了很多个版本。

相比之下 NDN 的安全性是通过密钥保护技术,直接将内容数据的真实性和保密性与每一个数据包绑定在一起,无需考虑数据如何及从那里获取,从根源解决了数据通信的安全问题。

每一个内容数据包都包含由内容生产者通 过数字签名生成的签名字段(Signature),以此将内容名称、 内容生产者和内容数据绑定在一起。

在这里插入图片描述

验证签名的公钥本身也是一种数据,当获取到数据包后,如何验证呢?

  1. 首先根据数据包里面的 key locator字段,来获取其公钥的Content Name
  2. 然后根据Content Name重新构造兴趣包来获取,签名的公钥。
  3. 公钥本身又是一种数据,如何验证公钥是否是安全的。
  4. 根据公钥数据包携带的 key locator字段,获取签发该公钥数据包的Content Name。
  5. 然后又获取到 上一层 的公钥数据包。
  6. 一层一层,最终要该机构的根数据包。
  7. 通过互联网上分发的该机构的公钥,可以来验证最上层的根数据包签发的公钥。

在这里插入图片描述


接下来的文章,我会提到NDN的一些应用场景,包括不限于,车联网,视频传输,物联网等。

打个广告,我在搭建以中文语言为基础的NDN交流平台(还在建设中😊),功能和 https://named-data.net 类似,还会增加我们自己创建的中文文档,当前域名为 named-data.cn且已经购买,有兴趣帮忙一起弄的话,可以联系我。能够一块在上面挂名。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1165601.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣刷题 day63:11-02

1.字符串中的第一个唯一字符 给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。 方法一:两次遍历哈希表 #方法一:两次遍历哈希表 def firstUniqChar(s):d{}for i in s:if …

Leetcode—707.设计链表【中等】双链表的设计明天再写

2023每日刷题(十七) Leetcode—707.设计链表 设计单链表实现代码 typedef struct Node {int val;struct Node* next; } MyLinkedList;MyLinkedList* myLinkedListCreate() {MyLinkedList* mList (MyLinkedList *)malloc(sizeof(MyLinkedList));mList-&…

知乎盈利来源分析与指标体系构建

知乎用户画像 知乎所属行业:内容社区平台 知乎上的内容涉及的领域: 婚恋情感(300亿总阅读量,截止2022年12月)、法律纠纷(200亿)、教育(200亿)、游戏(150亿&…

React实现文本框输入文字内容动态给图片添加文字信息(多个)并生成新的图片

文章目录 思路一思路二1. 下载html2canvas依赖包2. 搭建页面,并且创建新增节点的区域3. 初始化新增第一个节点到页面中的某个指定模块4. 当文本框发生变动,修改节点信息5. 实现节点删除6. 利用html2canvas将模块生成canvas,然后转化成图片 完整代码 收到…

Leetcode刷题详解——汉诺塔问题

1. 题目链接:面试题 08.06. 汉诺塔问题 2. 题目描述: 在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放…

【Web】TCP 和 UCP 的含义和区别

文章目录 一、两者含义二、两者区别 一、两者含义 TCP/IP 协议组为传输层指明了两个协议:TCP 和 UDP,他们都是作为应用程序和网络操作的中介物 TCP (传输控制协议):通过三次握手建立可靠的连接,发送端将数据…

Excel自学三部曲_Part3:Excel工作场景实战(二)

文章目录 二、基础概念、表格结构与常用函数1. 业务背景、字段含义2. 筛选、排序、冻结窗格3. 状态栏数据提示、调整数据显示格式4. 公式、引用、溢出5. 连接和提取函数、时间函数、IF和IFS函数、SUMIF和SUMIFS函数(1)每个业务组的成交额有多少&#xff…

解决使用IDEA启动SpringBoot项目报错 java: 警告: 源发行版 17 需要目标发行版 17 或者 java: 无效的目标发行版: 17

问题描述 今天新建了个SpringBoot项目,在启动的时候报错如下: java: 警告: 源发行版 17 需要目标发行版 17 分析问题 其实错误已经很明显了,由于我本地只有JDK8的环境,但是项目以及编译器的JDK是17,这时候把JDK版本修…

提示3D标题编辑器仍在运行如何解决 3D标题编辑器怎么使用

品牌型号:联想GeekPro 2020 系统:Windows 10 64位专业版 软件版本:会声会影2023旗舰版 3D标题因其独特的表现形式和多变的画面效果,被广泛应用于节目片头、宣传片、开幕式等诸多场景之中。掌握3D标题的使用技巧,能够…

SecureCRT 手动全部Tab窗口重连

在工作了一天后,到第二天上班的时候,前一天连接的服务会断开,因为公司内部网络自动断开了,所以一个个重新连接和登录 ,用脚本轻松搞定。 # $language "VBScript" # $interface "1.0"Dim g_objTa…

数组基础知识三

二分查找法&#xff1a;也叫折半查找算法。二分查找针对的是一个有序的数据集合&#xff0c;每次都通过跟区间的中间元素对比&#xff0c;将待查找的区间缩小为之前的一半&#xff0c;直到找到要查找的元素&#xff0c;或者区间被缩小为 0。 #include <stdio.h>int main…

干了3年“点点点”,我废了...

简单概括一下 先说一下自己的情况&#xff0c;普通本科&#xff0c;18年通过校招进入深圳某软件公司&#xff0c;干了3年多的功能测试&#xff0c;21年的那会&#xff0c;因为大环境不好&#xff0c;我整个人心惊胆战的&#xff0c;怕自己卷铺盖走人了&#xff0c;我感觉自己不…

day53【子序列】1143.最长公共子序列 1035.不相交的线 53.最大子序和

文章目录 1143. 最长公共子序列1035.不相交的线53. 最大子序和 1143. 最长公共子序列 题目链接&#xff1a;力扣链接 讲解链接&#xff1a;代码随想录讲解 题意&#xff1a;给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 …

C++并发编程实战——05.内存模型与原子操作

文章目录 内存模型与原子操作内存模型原子操作和原子类型标准原子类型std::atomic_flagstd::atomic\<bool>std::atomic<T\*>std::atomic<user_define_type> 类模板非成员函数 同步操作和强制排序同步发生与先行发生内存序**顺序一致性**(memory_order_seq_cs…

Java选择与循环

1.选择 前言&#xff1a;什么是选择呢&#xff1f;在我们的人生中处处面临着选择&#xff0c;比如说在学校你可以选择玩&#xff0c;摆烂&#xff0c;当然也可以选择努力写代码&#xff0c;刷题。什么样的选择就会面临什么样的结果。 其实程序和人生一样&#xff1a;顺序中夹杂…

intellij idea拉取最新的依赖包

intellij idea setting 拉取最新的依赖包 File --> Settings --> Build, Execution, Deployment --> Build Tools --> Maven --> 勾选 Always update snapshots. 一般情况下&#xff0c;设置完就可以拉取到最新的依赖包了。 如下&#xff1a; 安装最新的依赖…

计算机视觉基础——基于yolov5-face算法的车牌检测

文章目录 车牌检测算法检测实现1.环境布置2.数据处理2.1 CCPD数据集介绍2.1.1 ccpd2019及20202.1.2 文件名字解析 2.2数据集处理2.2.1 CCPD数据处理2.2.2 CPRD数据集处理 2.3 检测算法2.3.1 数据配置car_plate.yaml2.3.2 模型配置2.3.3 train.py2.3.4 训练结果 2.4 部署2.4.1 p…

activiti的核心对象与API与对应操作的表与核心字段

【Deployment】 &#xff08;创建并部署一个新的流程定义&#xff09; 获取方式&#xff1a; repositoryService.createDeployment().deploy(); 对应的表&#xff1a;act_re_deployment 用于存储流程部署的相关信息。该表记录了每个流程部署的唯一标识符&#xff08;ID&#x…

【Redis】Redis在Linux与windows上的安装基本操作语法

一、Redis简介 Redis 是完全开源免费的&#xff0c;遵守BSD协议&#xff0c;是一个高性能的key-value数据库。 Redis 与其他 key - value 缓存产品有以下三个特点&#xff1a; Redis支持数据的持久化&#xff0c;可以将内存中的数据保持在磁盘中&#xff0c;重启的时候可以再…

Python条件判断的运用

问题 在生活中&#xff0c;我们可以通过判断条件是否成立&#xff0c;来决定执行哪个分支。选择语句有多种形式&#xff1a;if语句&#xff0c;if-else语句&#xff0c;if-elif-else语句等。 Python使用if条件判断语句来实现条件判断时&#xff0c;可以在多个循环中实现对问题的…