NFD模块功能介绍和包处理过程

NFD模块功能介绍

本文主要翻译自nfd开发者指南文档,为自己理清数据包和兴趣包在NFD模块中的转发过程。
NFD功能模块

  • ndn-cxx library,core,NFD-Tools,NFD Essential Tools:提供不同NFD模块之间的公共服务,包括hash运算、DNS解析器、配置文件、接口控制等。
  • Faces:在各种底层传输机制上实现NDN端口抽象。
  • Table:三种数据结构(CS\PIT\FIB)以支持兴趣包和数据包的转发。
  • Forwarding:与Faces、Table、Strategies交互实现基本的包处理路径。转发模块实现了一个框架,支持不同的转发策略,
  • Management:实现NFD管理协议,允许应用程序配置NFD和设置/查询NFD的内部状态。协议交互是通过NDN的兴趣包/数据包交换在应用程序和NFD之间完成的。
  • RIB Management:不同的各方可以通过不同的方式更新RIB,包括各种路由协议、应用程序前缀注册和系统管理员的命令行操作。RIB管理模块处理所有这些请求以生成一致的转发表,并将其与NFD的FIB同步,后者只包含转发决策所需的最小信息。

NFD中包的处理过程

Face的作用

  • 数据包通过Faces到达NFD模块;“Face”是“interface”的概括。它可以是物理接口(NDN直接通过以太网操作)或覆盖隧道(其中NDN作为TCP、UDP或WebSocket之上的覆盖操作)。
    (此外,NFD和本地应用程序之间的通信可以通过一个unix域套接字(可用与一台主机的两个进程间的通信,不需要绑定ip地址和port)来完成,它也是一个Face。)
  • Face由一个LinkService(链接服务)和一个Transport(传输器)组成
  • LinkService为Face提供高级服务,如碎片和重新组装、网络层计数器和故障检测,
  • 而Transport充当底层网络传输协议(TCP、UDP、以太网等)的包装器,并提供链路层计数器等服务。
  • Face通过操作系统API读取传入流或数据报,从链路协议包中提取网络层包(兴趣包、数据包、Nacks),并将这些网络层包发送给Forwarding。

Forwarding(包括Face、Table、Strategies)的作用

  • 一个网络层数据包(兴趣、数据或Nack)是通过forwaring pipelines(转发管道)处理的,管道定义了一系列对包进行操作的步骤。NFD对包的处理取决于转发状态,转发状态存储在表中。
  1. 兴趣包的转发
  • 当转发器收到兴趣包时,传入的兴趣包首先被插入到兴趣表(PIT)中,PIT表中每个条目表示一个未决的兴趣包或一个最近满足的兴趣包。对内容存储(CS)执行匹配数据的查找,如果CS中有匹配的数据包,则将该数据包返回给请求者;否则,兴趣包需要转发。
  • 转发策略决定如何转发兴趣包。NFD允许每个名称空间的策略选择;要确定哪个策略负责转发某个兴趣,需要对策略选择表执行最长的前缀匹配查找。其中包含策略配置。负责某一利益的策略将决定是否、何时和何处转发兴趣包。在进行决策时,该策略可以从转发信息库(FIB)获取输入,其中包含来自本地应用程序的前缀注册和路由协议的路由信息,使用存储在PIT条目中的特定于策略的信息,并在度量条目中记录和使用数据平面性能度量。
  • 在策略决定将一个兴趣包转发到指定的Face之后,兴趣包在forwaring pipelines(转发管道)中再经过几个步骤,然后被传递到Face。根据底层协议的不同,Face根据需要将兴趣包分解,将网络层包封装在一个或多个链路层包中,并通过操作系统api将链路层包作为传出流或数据报发送。
  1. 数据包的转发
  • 第一步是检查兴趣表,看看是否有PIT条目可以满足这个数据包。然后选择所有匹配的条目进行进一步处理。如果这些数据不能满足任何一个PIT条目,那么它会被丢弃。否则,数据将被添加到内容存储(CS)中。负责每个匹配的PIT条目的转发策略将被通知。通过此通知和“无数据返回”超时,能够观察路径的可达性和性能;该策略可以在度量表中记住它的观察结果,以改进其未来的决策。最后,将数据发送给所有请求者,并记录在PIT条目的下游记录(in-record)中;通过Face发送数据的过程与发送兴趣包的过程一致
  • 当转发器收到一个Nack时,处理会根据使用的转发器策略而变化。

NFD中如何处理Management Interests

  • control command(控制命令):是在NFD中执行状态更改的已签名(已验证)的兴趣包。既然每个控制命令的兴趣是到达目标管理模块,而不是从CS中得到满足,每个控制命令的兴趣是通过使用时间戳和nonce组件来实现的。NFD收到控制命令的请求时,它将请求特殊的face,称为内部face。当请求被转发到这个face,派遣内部指定的管理者(例如,/ localhost / NFD /faces下的兴趣包被分派到端口管理者)。管理者看着请求的名字来决定哪些行动是被请求的。如果名称引用了有效的控制命令,那么分配者将验证该命令(检查签名并验证请求者是否被授权发送此命令),如果验证成功,则管理器将执行所请求的操作。响应以数据包的形式发送回请求方,以常规数据相同的方式转发和处理。
    p.s.上述过程的例外是RIB管理。所有使用与转发到任何本地应用程序相同的方法将RIB管理控制命令(而不是内部face)转发给RIB线程(当它启动时,RIB线程用NFD“register”自身作为RIB管理前缀)。【第七节】
  • status dataset(状态数据集):状态数据集是一个包含内部NFD状态的数据集,该状态可以定期生成,也可以按需生成(例如,NFD一般状态或NFD Face状态)。任何人都可以使用指向特定管理模块的简单无签名兴趣包来请求这些数据集。请求状态数据集的新版本的兴趣包将被转发到内部face,然后以与控制命令相同的方式转发给指定的管理器。但是,管理器不会验证这个兴趣,而是生成所请求的数据集的所有段,并将它们放到forwarding pipeline(转发管道)中。这样,数据集的第一部分将直接满足初始兴趣,而其他部分将通过CS满足后续兴趣。
  • notification streams:通知流类似于状态数据集,因为任何人都可以使用未签名的兴趣包来访问它们,但是以不同的方式运作。希望接收通知流的订阅者仍然将兴趣包定向到指定的管理器。但是,分配者将删除这些兴趣包,而不将其转发给manager。相反,无论何时生成通知,管理器都会将一个数据包放入转发中,满足所有未完成的通知流兴趣,并将通知发送给所有订阅者。预期这些兴趣不会立即得到满足,当它们到期时,订阅者需要重新表达通知流的兴趣。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值