命名数据网络 | 兴趣包(Interest Packet)
命名数据网络 | 兴趣包(Interest Packet)
- 命名数据网络 | 兴趣包(Interest Packet)
- Name
- CanBePrefix
- MustBeFresh
- ForwardingHint
- Nonce
- InterestLifetime
- HopLimit
- ApplicationParameters
- InterestSignature
命名数据网络 | 兴趣包(Interest Packet)
参考文档:https://docs.named-data.net/NDN-packet-spec/current/interest.html
NDN 的 Interest 包是 TLV,定义如下:
Interest = INTEREST-TYPE TLV-LENGTHName[CanBePrefix][MustBeFresh][ForwardingHint][Nonce][InterestLifetime][HopLimit][ApplicationParameters [InterestSignature]]
Name 是 Interest 包中唯一必需的元素。
当 Interest 包通过网络链接传输时,需要 Nonce,也就是说,如果缺少的话,兼容的转发器必须用 Nonce 元素来补充 Interest 包。
CanBePrefix、MustBeFresh、InterestLifetime 和 ForwardingHint 是可选元素,用于指导 Interest 包匹配或转发。
Interest 包还可以包含一个可选的 ApplicationParameters 元素。
如果一个 Interest 包含 InterestSignature,它被认为是一个已签名的 Interest 包。详情请参阅 Signed Interest section 。
根据 TLV 可演化性指南 的建议,未被识别的非关键 TLV 元素可能出现在 Interest 包中。但是,它们不能出现在 Name 元素之前。
Name
有关详细信息,请参见:Name。
可以放在 Interest 包中的 Name 元素被进一步限制为至少有一个 Name 组件。
包含名称 TLV 但没有名称组件的 Interest 包必须被丢弃。
CanBePrefix
CanBePrefix = CAN-BE-PREFIX-TYPETLV-LENGTH ; == 0
当 Interest 包中出现 CanBePrefix 元素时,Interest 包中的 Name 元素是所请求数据包的前缀、确切名称或全名。
当 CanBePrefix 元素不存在时,Name 元素是数据包的确切名称或全名:
-
如果 Name 的最后一个组件的类型是 ImplicitSha256DigestComponent,那么Interest只能匹配到一个全名包含隐式摘要组件的数据包;
-
如果最后一个组件有任何其他类型,如果 Interest 包的 Name 元素中的所有名称组件都等于 Data 的 Name 元素中的组件,则 Interest 包与 Data 包匹配,而不考虑隐式摘要组件。
MustBeFresh
MustBeFresh = MUST-BE-FRESH-TYPETLV-LENGTH ; == 0
MustBeFresh 元素的存在与否表明内容存储是否可以用陈旧的数据满足 Interest 包。
有关更多信息,请参阅:FreshnessPeriod。
ForwardingHint
ForwardingHint = FORWARDING-HINT-TYPE TLV-LENGTH 1*Name
ForwardingHint 元素包含一个名称列表(“委托”)。转发提示的存在意味着可以通过转发列出的名称所指向的路径上的 Interest 包来检索数据。
使用 ForwardingHint 的 Interest 包的转发逻辑的细节将在一个单独的文档中定义。
Nonce
Nonce = NONCE-TYPETLV-LENGTH ; == 44OCTET
Nonce 携带一个随机生成的 4 字节长的字节串。
Name 和 Nonce 的组合应该唯一地标识一个 Interest 包。
这用于检测循环 Interest 包。
InterestLifetime
InterestLifetime = INTEREST-LIFETIME-TYPE TLV-LENGTH NonNegativeInteger
InterestLifetime 表示 Interest 包超时前剩余的(近似)时间。该值为毫秒数。超时时间是相对于当前节点上 Interest 包的到达时间的。
转发 Interest 包的节点可能会减少生存期,以考虑转发前在节点上花费的时间,但不是必须这样做。建议仅针对相对较大的延迟(以秒为单位)进行这些调整。
是应用程序设置了 InterestLifetime 的值。如果省略了 InterestLifetime 元素,则使用默认值 4000(即 4 秒)。缺失的元素可以在转发之前添加。
HopLimit
HopLimit = HOP-LIMIT-TYPETLV-LENGTH ; == 1OCTET
可选的 HopLimit 元素表示允许转发的跳数。该值被编码为 1 字节的无符号整数值,范围为 [0, 255]。
如果 HopLimit 元素存在:
- 如果 HopLimit 值大于等于 1,则接收报文,并将编码值减 1。
- 如果 HopLimit 值变为 0,则节点可以在本地满足此 Interest 包(缓存或绑定到本地面的应用程序),但不能将兴趣转发到任何非本地节点。
- 如果 HopLimit 为 0,则节点必须丢弃该报文。
如果当前 Interest 包没有 HopLimit 元素:
- 节点应该接受数据包;
- 如果需要,节点可以向 Interest 包增加 HopLimit 元素。
ApplicationParameters
ApplicationParameters = APPLICATION-PARAMETERS-TYPE TLV-LENGTH *OCTET
ApplicationParameters 元素可以携带任何参数化 data 请求的任意数据。
Interest 包的名称必须包含一个兴趣参数摘要组件,以确保参数化的 Interest 包的唯一性和完整性。
参见 参数摘要组件 了解更多细节。
InterestSignature
参见 Interest Signature.。