原文地址:NFD开发指南-1.介绍

NDN转发守护程序( NFD )是一个网络转发器,它与命名数据网络( NDN )协议 [1] 一起实现和发展。 本文档介绍了NFD的内部结构,并且适合有兴趣扩展和改进NFD的开发人员。 有关NFD的其他信息,包括有关如何编译和运行NFD的说明,可在NFD主页上找到 [2] 。

NFD的主要设计目标是支持NDN体系结构的各种实验。 该设计强调 模块化modularity ) 和 可扩展性extensibility ),以便使用新协议功能,算法和应用程序进行实验。 我们尚未完全优化代码以提高性能,目的是性能优化是开发人员可以通过尝试不同的数据结构和不同的算法来进行的一种实验。随着时间的流逝,在相同的设计框架内可能会出现更好的实现。

NFD将在三个方面不断发展: 改进模块化框架符合NDN协议规范 以及 添加新功能 。 我们希望保持模块化框架的稳定和精益,使研究人员能够实施和试验各种功能,其中某些功能最终可能会成为协议规范。

1.1 NFD模块

NFD的主要功能是转发兴趣( Interest packet )和数据包( Data packet 。为了实现这个目的,它将底层的网络传输机制抽象到 NDN Faces 中,并维护诸如 CSPITFIB 之类的基本数据结构,并实现数据包( packet )处理逻辑。 除了基本的数据包转发外,它还支持多种转发策略以及一个用于配置,控制和监视NFD的管理接口。 如下图1所示,NFD包含以下相互依赖的模块:

  • ndn-cxx Library, Core, and Tools (第10节)

    这些库提供不同NFD模块之间共享的各种通用服务。 其中包括哈希计算例程,DNS解析器,配置文件, Face 监控和其他几个模块。

  • Faces(第2节)

    在各种较低级别的传输机制之上实现 NDN Face 抽象。

  • Tables(第3节)

    实现内容存储( CS, Content Store )、待定兴趣表( PIT, Pending Interest Table )、转发信息库( FIB, Forwarding Information Base )、策略选择( Strategy Choice )、测量(Measurements)和其他数据结构,以支持NDN数据包和兴趣包的转发。

  • Forwarding(第4节)

    实现基本的数据包( packet )处理路径( processing pathways ),该路径与 FacesTablesStrategies 模块交互(第5节)。策略是转发模块的主要部分,转发模块以转发管道的形式实现了一个框架,以支持不同的转发策略,有关详细信息,请参见第4节。

  • Management(第6节)

    实现NFD管理协议 [3] ,该协议允许应用程序配置NFD并设置/查询NFD的内部状态。 协议交互是通过NDN在应用程序和NFD之间进行的兴趣/数据交换来完成的。

  • RIB Management(第7节)

    本模块负责管理路由信息库( RIB, Routing Information Base )。 RIB 可以由不同方以不同方式进行更新,包括各种路由协议,应用程序前缀注册以及 sysadmins 进行的命令行操作。 RIB 管理模块处理所有这些请求以生成一致的转发表,并将其与NFD的FIB同步,该FIB仅包含转发决策所需的最少信息。

本文档的剩下部分将更详尽地描述所有这些模块。

1.2 在NFD中是如何处理数据包( packet )的

为了使读者更好地了解NFD的工作原理,本节介绍了如何在NFD中处理数据包。

数据包通过 Faces 到达NFD。 Face 是广义的接口( Interface

  • 它可以是物理接口( physical interface )——NDN直接在以太网之上运行;
  • 也可以是覆盖隧道( overlay tunnel )——NDN作为TCP,UDP或WebSocket之上的覆盖;
  • 另外,NFD和本地应用程序之间的通信可以通过也是Face的Unix域套接字来完成。

FaceLinkServiceTransport 组成。 LinkServiceFace 提供高级服务,例如分片和重组,网络层计数器和故障检测,而Transport充当基础网络传输协议(TCP,UDP,以太网等)的包装,并提供链路层计数器之类的服务。Face通过操作系统API读取传入的流或数据报,从链路协议数据包中提取网络层数据包,并将这些网络层数据包(NDN数据包格式Interests,Datas或Nacks)传递给转发( Forwarding )模块。

网络层数据包(Interest,Data或Nack)由转发管道( forwarding pipelines )处理,转发管道定义了对数据包进行的一系列操作步骤。NFD的数据平面是有状态的,NFD对数据包的处理方式不仅取决于数据包本身,还取决于存储在表中的转发状态。

当转发器( Forwarder )接收到兴趣包( Interest packet )时,首先将其插入到兴趣表( PIT, Pending Interest Table )中,其中每个条目代表未决兴趣或最近满足的兴趣。在内容存储库(CS)上执行匹配数据的查找,内容存储库是数据包的网络内缓存。如果CS中有匹配的数据包,则将该数据包返回给请求者。 否则,该兴趣包需要被转发。

转发策略( forwarding strategy )决定了如何转发兴趣包。NFD允许按名称空间选择转发策略,它在包含策略配置的“策略选择”表上执行最长的前缀匹配查找,来确定使用哪个策略来转发兴趣包。转发策略将决定是否,何时以及在何处转发兴趣包(或更准确地说是PIT条目)。在使用某个策略作转发时,策略模块:

  • 可以从转发信息库(FIB)中获取输入,该信息库包含来自本地应用程序的前缀注册和路由协议的路由信息;
  • 还可以使用存储在PIT条目中的特定的策略信息;
  • 也可以记录和使用存储在 Measurements 表项中的数据面的性能测量结果。

在策略模块决定将兴趣包转发到指定的 Face 后,该兴趣包将在转发管道( forwarding pipelines )中经过更多步骤,然后将其传递给 FaceFace 根据基础协议,在必要时将兴趣包分片,将网络层数据包封装在一个或多个链路层数据包中,然后通过操作系统 APIs 将链路层数据包作为输出流或数据报发送。

NFD对一个数据包( Data packet )到来的处理方式有所不同。它的第一步是检查兴趣表(PIT),以查看是否有此数据包可以满足的PIT条目,然后选择所有匹配的条目以进行进一步处理。 如果此数据包( Data packet )不能满足任何PIT条目,则它是未经请求的( unsolicited )并且将被丢弃。 否则,数据将添加到内容存储( CS )中,接着通知负责每个匹配的PIT条目的转发策略。通过此通知,以及另一个“无数据返回”超时,该策略能够观察路径的可访问性和性能。该策略可以在 Measurements 表中记住其观察结果,以改进其将来的决策。最后,将数据包( Data packet )发送给所有匹配的记录在PIT条目的下游记录中的请求者。通过 Face 发送数据包( Data packet )的过程类似于发送兴趣包( Interest packet )。

当转发器收到Nack时,处理过程将根据使用的转发策略( forwarding strategy )而有所不同。

1.3 NFD如何处理管理兴趣( Management Interests

NFD管理协议( Management protocol ) [3] 定义了三种基于兴趣包数据包交换的进程间管理机制:控制命令control commands ),状态数据集status datasets )和**通知流**( notification streams )。 本节简要概述了这些机制的工作方式以及它们的要求。

控制命令control commands )是已签名(已认证)的兴趣包,用于在NFD中执行状态更改。由于每个控制命令兴趣包的目标都是到达目的管理模块,而不是被内容缓存(CS)所满足,因此,通过使用时间戳( timestamp )和随机数( nonce )组件,可以使每个控制命令兴趣变得唯一。 有关更多详细信息,请参见控制命令规范 [4]。

NFD收到控制命令请求后,会将请求定向到一个被称为“内部 Face ”( Internal Face )的特殊 Face 。当请求转发到此Face时,它会在内部分配给指定的管理员( manager )。例如,以/localhost/nfd/faces 作为前缀的兴趣包会分配给Face管理员,请参见第6节。然后,管理员查看请求名称,以确定请求哪个操作。如果名称表示有效的控制命令,则调度程序( dispatcher )将验证命令(检查签名并验证请求者是否有权发送此命令),如果验证成功,则管理器将执行请求的操作。响应以数据包的形式发送回请求者,该数据包由转发和Face处理,其处理方式与常规数据相同。

Internal Face :在FIB中始终有一个FIB条目匹配管理协议前缀,并指向 Internal FaceThere is always a FIB entry for the management protocol prefix that points to the Internal Face.

上述过程的一个例外是RIB管理(第7节),它是在单独的线程中执行的。 使用与转发到任何本地应用程序相同的方法,将所有RIB管理控制命令转发给RIB线程而不是 Internal Face (RIB线程在启动时会使用NFD为RIB管理前缀“注册”自身)。

状态数据集status dataset )是包含定期或按需生成的NFD内部状态的数据集(例如NFD常规状态或NFD Face状态)。任何人都可以使用规范 [3] 中定义的针对特定管理模块的简单的没有签名的兴趣包( unsigned Interest )来请求这些数据集。请求状态数据集新版本的兴趣将转发到内部Face,然后以与控制命令相同的方式转发到指定的管理器。但是,管理器不会验证此兴趣,而是会生成请求数据集的所有的段( segments )并将其放入转发管道中。这样,数据集的第一部分将直接满足初始兴趣,而其他部分将通过CS满足后续兴趣。在不太可能发生的情况下,如果后续段在被提取之前已从CS中驱逐,则请求者负责从头开始重新启动提取过程。

通知流notification streams )与状态数据集相似,因为任何人都可以使用未签名的兴趣来访问它们,但是操作方式不同。想要接收通知流的订户( Subscribers )仍将兴趣发送到指定的管理员。但是,这些利益将由调度员丢弃,并且不会转发给管理者。相反,无论何时生成通知,管理器都会将数据包放入转发中,以满足所有未完成的通知流的兴趣,然后将通知传递给所有订户。 预计这些兴趣将不会立即得到满足,并且订阅者将在到期时重新表达通知流兴趣。

NFD开发指南-1.介绍相关推荐

  1. DigWS 短消息和WapPush 快速开发指南-接口介绍

    DigWS 短消息和WapPush 快速开发指南-接口介绍 SendSms:发送短消息 Parameter<?xml:namespace prefix = o /> Description ...

  2. NFD开发指南-2.Face系统

    Face 是广义的网络接口.与物理网络接口类似,可以在 Face 上发送和接收数据包.Face 比网络接口更通用. 它可能是: 物理网络接口以在物理链路上进行通信( a physical networ ...

  3. qdir 类似工具_Qt 5.9 C++开发指南 PDF 高质量影印版

    给大家带来的一篇关于Qt开发相关的电子书资源,介绍了关于QT5.9编程方面的内容,本书是由人民邮电出版社出版,格式为PDF,资源大小276.3 MB,王维波编写,目前豆瓣.亚马逊.当当.京东等电子书综 ...

  4. Rockchip Android13 GKI开发指南

    Rockchip Android13 GKI开发指南 文章目录 Rockchip Android13 GKI开发指南 GKI介绍 Google upstream kernel下载及编译 Rockchi ...

  5. 如何开发API,这样一份完整的API开发指南足够了

    API一词相信每一个开发人员都不陌生,API是软件系统之间或不同组成部分之间进行连接的约定.特别是移动应用程序和微服务架构的不断普及,API就是他们成功背后的功臣,这个时候如何设计和开发API就显得格 ...

  6. 开发指南专题十四:JEECG微云快速开发平台MiniDao 介绍

    开发指南专题十四:JEECG微云快速开发平台MiniDao 介绍 13.MiniDao 介绍 13.1.  MiniDao简介及特征 MiniDao是Jeecg自己的持久化解决方案,具备了Hibern ...

  7. 开发 系统键盘发送按钮不可点击_HoloLens开发指南(2)---HoloLens模拟器介绍

    上一篇(HoloLens开发指南(1)---安装工具)我们介绍了配置开发环境,本部分我们来了解如何使用Hololens模拟器. 使用 HoloLens 仿真器可以在未配备物理 HoloLens 的电脑 ...

  8. 离线语音识别芯片-开发指南及芯片规格介绍

    ​   云知声(Unisound)作为行业内领先的人工智能企业,针对AI语音芯片各个不同的细分市场,共发布5款离线语音识别芯片,芯片及模块出货量已达百万级别.   下面介绍这5款芯片的各自特点:   ...

  9. 微信小程序开发指南介绍

    一.小程序介绍与开发环境: 1.helloworld代码 [1]请前往https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/download.html  ...

最新文章

  1. 用python画玫瑰花教程-利用Python的turtle库绘制玫瑰教程
  2. Oracle 通用查询:表、字段、表说明、所有用户、库版本
  3. 怎么制作升温曲线图_利用金字塔原理制作PPT,完整有逻辑
  4. Oracle 多行记录合并/连接/聚合字符串的几种方法
  5. np.newaxis——np.ndarray增加维数
  6. 微软太良心,这么强大的软件竟然完全免费!
  7. android studio 65536错误的解决
  8. 在3D模型上选择顶点
  9. Linux的三种权限含义,Linux chmod命令及权限含义
  10. 第J题-=数组中等于K的数对(详解) =======给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数
  11. 腾讯云和百度贴吧web端支付成功页面模板(根据实际页面修改整理)
  12. STM32配置全速USB与Python上位机传输数据步骤
  13. 关于配色常见的几种搭配方式
  14. python基础教程 ppt_Python基础教程第2章ppt
  15. 关于汽车诊断OBD的理解(ISO15031-5)
  16. 百度地图定位功能的错误has leaked ServiceConnection 解决
  17. 疫情大考,文旅央企华侨城出台有力措施保障游客安全
  18. Kotlin + AndroidX + Tablayout + ViewPager + Fragment 实现Tab切页
  19. 2021年高考防骗预警,6大骗局,防骗指南,考生、家长请注意
  20. 杜克大学计算机专业,杜克大学计算机专业怎么样?过来人告诉你

热门文章

  1. openvswitch 2.3.1 配置详解
  2. 当渲染遇上边缘计算,打造视频交互新模式
  3. 季度工作总结PPT模板,懂你所需
  4. 时间的表示格式,精确到毫秒
  5. ADIS16465基本读写程序及资料
  6. 【MATLAB】几种求矩阵伪逆的方法
  7. Bloxorz I POJ - 3322 bfs
  8. 密立根油滴实验的计算机仿真实验报告,密立根油滴实验的计算机仿真.docx
  9. pytorch YoLOV3 源码解析 train.py
  10. 高铁、动车到底啥区别?看完彻底懂了