命名数据网络(NDN)介绍

2023-11-03 08:28
文章标签 介绍 命名 数据网络 ndn

本文主要是介绍命名数据网络(NDN)介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

命名数据网络的由来

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且已经购买,有兴趣帮忙一起弄的话,可以联系我。能够一块在上面挂名。

这篇关于命名数据网络(NDN)介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/336883

相关文章

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

Python实现html转png的完美方案介绍

《Python实现html转png的完美方案介绍》这篇文章主要为大家详细介绍了如何使用Python实现html转png功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 1.增强稳定性与错误处理建议使用三层异常捕获结构:try: with sync_playwright(

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir

Pytorch微调BERT实现命名实体识别

《Pytorch微调BERT实现命名实体识别》命名实体识别(NER)是自然语言处理(NLP)中的一项关键任务,它涉及识别和分类文本中的关键实体,BERT是一种强大的语言表示模型,在各种NLP任务中显著... 目录环境准备加载预训练BERT模型准备数据集标记与对齐微调 BERT最后总结环境准备在继续之前,确

Linux命名管道方式

《Linux命名管道方式》:本文主要介绍Linux命名管道方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、命名管道1、与匿名管道的关系2、工作原理3、系统调用接口4、实现两个进程间通信二、可变参数列表总结一、命名管道1、与匿名管道的关系命名管道由mkf

JAVA SE包装类和泛型详细介绍及说明方法

《JAVASE包装类和泛型详细介绍及说明方法》:本文主要介绍JAVASE包装类和泛型的相关资料,包括基本数据类型与包装类的对应关系,以及装箱和拆箱的概念,并重点讲解了自动装箱和自动拆箱的机制,文... 目录1. 包装类1.1 基本数据类型和对应的包装类1.2 装箱和拆箱1.3 自动装箱和自动拆箱2. 泛型2

通过Python脚本批量复制并规范命名视频文件

《通过Python脚本批量复制并规范命名视频文件》本文介绍了如何通过Python脚本批量复制并规范命名视频文件,实现自动补齐数字编号、保留原始文件、智能识别有效文件等功能,听过代码示例介绍的非常详细,... 目录一、问题场景:杂乱的视频文件名二、完整解决方案三、关键技术解析1. 智能路径处理2. 精准文件名

linux如何复制文件夹并重命名

《linux如何复制文件夹并重命名》在Linux系统中,复制文件夹并重命名可以通过使用“cp”和“mv”命令来实现,使用“cp-r”命令可以递归复制整个文件夹及其子文件夹和文件,而使用“mv”命令可以... 目录linux复制文件夹并重命名我们需要使用“cp”命令来复制文件夹我们还可以结合使用“mv”命令总

Python脚本实现图片文件批量命名

《Python脚本实现图片文件批量命名》这篇文章主要为大家详细介绍了一个用python第三方库pillow写的批量处理图片命名的脚本,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言源码批量处理图片尺寸脚本源码GUI界面源码打包成.exe可执行文件前言本文介绍一个用python第三方库pi