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时,处理会根据使用的转发器策略而变化。