NDN-lite 命名数据网络 -----第一章:关于Interest和Data

声明:

  博主这里参考的是NDN-lite 格式规范的0.3版本,不同版本中的数据包和兴趣包中所包含的参数会有细微的差异。

关于NDN网络

  命名数据网络(Named-Data Networking,NDN)早前也被称为内容中心网络(Content Centric Networking,CCN),由于其特殊的传输方式,其协议架构设计上可以彻底解决TCP/IP设计上的诸多不适应性,但依旧保留了细腰沙漏模型。
在这里插入图片描述
  NDN网络也中有十分灵活的路由选择策略,可以自动同时支持各种路由协定,以及较高的基于数据本身的安全机制。NDN不仅从原理上避免了网络冲突和堵塞,还彻底实现了多链路路由,同时基于网络内缓存(Content Store,CS)实现了就近获取、负载均衡和容断能力,从而提高了大规模的内容分部的性能、效率和可靠性。

什么是兴趣包、数据包

兴趣包:
  消费者希望得到的东西的name放入兴趣包中,并在网络上传递。路由器全依据该名字将兴趣包转发给资料生产者。

数据包:
  当兴趣包在网络上传送时抵达某一基点的时候,当该基点有与之相符的数据后,该基点就将所需要的数据进行封装,以相反的路径回传给请求者。其中,数据包中除了有名字和内容以外,还要在名字和内容的基础上加上资料生产者的密钥当做前述资讯。

关于兴趣包和数据包的结构

  关于兴趣包和数据包的结构大致如下图所示:
在这里插入图片描述

兴趣包内:

  Name:

  限制获得的数据包是具体的哪一个

  CanBePrefix:

  当有这个属性的时候,传回来的数据包中的name可以和兴趣包中的name相同,也可以是以兴趣包中的name为前缀的name

  MustBeFresh:

  存在这个参数的时候,则节点不得返回“非新鲜”的数据包以响应此兴趣包。效果与“非新鲜”数据不存在的情况相同(即,兴趣可能与商店中的某些其他数据匹配,或者,如果失败,则转发到其他节点)。当具有正值的“非新鲜”数据包的精确副本FreshnessPeriod到达节点时,节点应该在指定的持续时间内将其重新标记为“新鲜”。

  ForwardingHint:

  ForwardingHint元素包含名称委托列表,每个委托意味着可以通过沿委托路径转发兴趣来检索所请求的数据分组。每个委托都还对应着一个相关的优先级priority,在link content里面会按照优先级,按照升序的方式去进行排列。(及从小到大)

  Nonce:

  Nonce携带一个随机生成的4个八位字节长字节串。Name和Nonce的组合应唯一标识Interest数据包。这用于检测循环兴趣包。

  InterestLifeTime:

  InterestLifetime表示兴趣包超时前的剩余(近似)时间。该值是毫秒数。超时是相对于当前节点的兴趣包的到达时间。转发兴趣包的节点可能会缩短生命周期以计算转发前在节点上花费的时间。如果InterestLifetime省略该元素,则使用默认值4秒(4000)。可以在转发之前添加缺少的元素。

  Hoplimit:

  可选HopLimit元素指示允许转发兴趣包的次数。该值被编码为0到255范围内的1字节无符号整数值。如果该HopLimit值大于或等于1,则节点应接受该数据包并将编码值减1。如果HopLimit值变为0,若节点可以在本地满足此兴趣包(缓存或绑定到本地面的应用程序),则可以依旧发送数据包回去,但不能将兴趣包转发;若本地不能满足,则只能将其丢弃。

  ApplicationParameters[InterestSignature]:

  ApplicationParameters元素可以携带任何参数化Data请求的任意数据。兴趣包的名称必须包含兴趣包中参数的摘要组件,以确保参数化兴趣的唯一性和完整性。

数据包内:

  Name:

  这里与上方兴趣包中的name为同一个类型的东西。

  MetaInfo:其中有三个组成部分

   ContentType:

  当ContentType为0的时候,数据类型为BLOB。是由数据名称标识的有效负载; 这是默认的ContentType
  当它为1的时候,数据类型为LinkObject,是一个授权列表。
  当为2的时候,数据类型为Key,为公钥。
  当为3的时候,数据类型为NACK,是应用程序级NACK

   FreshnessPeriod:

  可选项FreshnessPeriod指示节点在到达此数据包之后应等待多长时间,然后将其标记为“非新鲜”。编码值是毫秒数。请注意,“非新鲜”数据包的数据仍然是有效数据; 到期只意味着生产者可能产生了更新的数据。
  如果数据包携带的FreshnessPeriod大于零,则节点应该首先将其视为“新鲜”。数据包在节点中驻留了FreshnessPeriod几毫秒后,它将被标记为“非新鲜”。如果数据包中没有FreshnessPeriod或如果它FreshnessPeriod等于零,则必须立即标记为“非新鲜”。

   FinalBlockID:

  选的FinalBlockId标识片段序列中的最后一个块。它应该存在于FinalBlock本身中,并且还可以存在于其他片段中以向消费者提供结束的高级警告。此处的值应等于最后一个Block的最后一个显式名称组件。

  Content:

  Content元素可以携带任意字节序列。

结束语

  关于兴趣包和数据包里面的内容就讲到这里,其实如果没有一定的NDN基础的话,看这篇文章可能会有点云里雾里的,因为这牵扯到这些参数的运用以及数据包和兴趣包的传递方式和命名方法,下一章会继续讲解这一部分的知识。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值