命名数据网络 | TLV 编码

网络通信协议TLV解析器 /* * Copyright (c) 2005-2010 Tony Zhengjq zhengjq@163.com> * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided tha 阅读详情

命名数据网络 | TLV 编码

参考网站:https://docs.named-data.net/NDN-packet-spec/current/tlv.html

每个 NDN(Named Data Network) 报文以 TLV(Type-Length-Value) 格式编码。NDN 兴趣包(Interest packet)和数据包(Data packet)通过第一个 TLV0 和最外层 TLV0 的类型号来区分。

NDN 报文主要是 TLV0 内部 TLV 的集合。一些 TLV 可能包含子 TLV,每个子 TLV 也可能进一步嵌套。一个指导性的设计原则是保持这些 TLV 的顺序是确定的,并保持嵌套级别尽可能小,以最小化处理开销和出错的机会。

请注意,NDN 包格式没有固定的包头,也没有编码协议版本号。相反,设计使用 TLV 格式来提供随着协议的发展而增加新类型和逐步淘汰旧类型的灵活性。没有固定的报头使得可以有效地支持非常小的数据包,而不需要报头开销。在网络级别也没有数据包碎片支持。在任何需要的时候,NDN 包都可以被逐跳分割和重新组装。

类型和长度的可变大小编码

注意,下面的文本和 NDN TLV 编码部分的文本改编自 Mark Stapp 早期的数据包规范草案。

为了尽量减少早期部署期间的开销,并允许将来的协议扩展灵活地满足不可预见的需求,类型(T)和长度(L)都采用可变大小的格式。为了实现简单,类型和长度都采用相同的编码格式。

我们为 NDN 中的数字定义一个变长编码,如下所示:

VAR-NUMBER-1 = %x00-FC
VAR-NUMBER-3 = %xFD 2OCTET
VAR-NUMBER-5 = %xFE 4OCTET
VAR-NUMBER-9 = %xFF 8OCTET

本规范中 NDN 包格式的正式语法是使用 语法规范的增强 BNF 给出的。

数字的第一个八位字节要么携带实际数字,要么表示存在多八位字节编码,定义如下:

  • 如果第一个八位字节小于或等于 252 (0xFC),则在该八位字节中编码数字。
  • 如果第一个字节是 253 (0xFD),则数字按网络字节顺序编码为接下来的 2 个字节。这个数字必须大于 252 (0xFC)。
  • 如果第一个字节是 254 (0xFE),则该数字按网络字节顺序编码为接下来的 4 个字节。该数字必须大于 65535 (0xFFFF)。
  • 如果第一个字节为 255 (0xFF),则该数字按照网络字节顺序编码为后面的 8 个字节。该数字必须大于 4294967295 (0xFFFFFFFF)。

NDN TLV 编码

NDN 报文的 TLV 编码定义如下:

NDN-TLV = TLV-TYPE TLV-LENGTH TLV-VALUE
TLV-TYPE = VAR-NUMBER-1 / VAR-NUMBER-3 / VAR-NUMBER-5
TLV-LENGTH = VAR-NUMBER-1 / VAR-NUMBER-3 / VAR-NUMBER-5 / VAR-NUMBER-9
TLV-VALUE = *OCTET

TLV-TYPE 必须在 [1,4294967295] 范围内。类型 0 被保留来指示无效的 TLV 元素,并且绝对不能出现在线路上。TLV-TYPE 在所有嵌套层中应该是唯一的。

TLV-LENGTH 字段表示 TLV-VALUE 使用的字节数。它不包括 TLV-TYPE 和 TLV-LENGTH 字段本身占用的字节数。特别地,一个空值的 TLV 元素的 TLV-LENGTH 将等于 0。

这种编码在紧凑性和灵活性之间提供了一个合理的平衡。最常见的是,标准化的 TLV-TYPE 数值将从一个小整数数字空间分配,这些常见的类型将能够使用紧凑的单字节编码。

非负整数编码

NDN 报文格式中的许多 TLV 元素都以非负整数作为 TLV-VALUE,定义如下:

NonNegativeInteger = 1OCTET / 2OCTET / 4OCTET / 8OCTET

包含 NonNegativeInteger 的 TLV 元素的 TLV-LENGTH 必须为 1、2、4 或 8。根据 TLV-LENGTH 的不同,NonNegativeInteger 的编码方式如下:

  • 如果长度为 1,则 NonNegativeInteger 以 1 个八位字节编码;
  • 如果长度为 2,则 NonNegativeInteger 按网络字节顺序编码为 2 个八位字节;
  • 如果长度为 4,则 NonNegativeInteger 按网络字节顺序编码为 4 个八位字节;
  • 如果长度为 8,则 NonNegativeInteger 按网络字节顺序编码为 8 个字节。

下面展示了一些以十六进制格式(其中 TT 表示 TLV-TYPE,然后是 TLV-LENGTH,然后是 TLV-VALUE)作为其值组件的 TLV 示例:

0     => TT0100
1     => TT0101
255   => TT01FF
256   => TT020100
65535 => TT02FFFF
65536 => TT0400010000

基于 TLV 的编码可演化性的思考

为了确保基于 TLV 的协议可以随时间发展,TLV-TYPE 的最低有效位(除非被特定网络/库/应用程序 TLV 元素的规范覆盖)被保留,以指示该 TLV 元素是关键还是非关键。一个兼容的 TLV 格式解码器应该遵循相应规范中定义的已识别元素的顺序、数量和存在要求。同时,如果解码器遇到无法识别或无序的元素,其行为应如下所示:

  • 如果元素的 TLV-TYPE 编号的最低有效位为 1,则中止解码并报告错误;
  • 如果元素的 TLV-TYPE 编号的最低有效位为 0,则忽略该元素并继续解码;
  • 在 [0,31] 范围内的 TLV-TYPE 编号是“祖父号”,并且都被指定为数据包处理的关键号。

如果已识别的元素以违反规范的元素顺序出现,则认为它是无序的。

例如:

  • 当规范定义了序列 {F1 F2 F3} 时,元素 F3 在序列 {F1 F3 F2} 中是乱序的;
  • 对于 {F1 F2?F3} 规范,即当 F2 为可选时,F2 将在相同的序列 {F1 F3 F2} 中乱序。
命名数据网络(NDN)与TCP/IP网络 之前面试时遇到一个十分有趣的开放性的问题: 当前TCP/IP协议存在哪些问题?如何改进? 当时没有回答好,然后提到了NDN可以针对TCP/IP做出改进,但是在行家面前就漏洞百出,一是对TCP/IP网络理解不够深入,另外一方面是自己对NDN比较陌生。趁着这段时间比较得闲,在网上搜了《Named Data Networking(NDN) Project》(2010.10)和初略看了看北大出版的 阅读详情

相关推荐

【信息科学与工程学】【通信工程】第四篇 通信网络的数学架构10 通信网络核心数学方程式01

卸载:Toffload​=L/R+C/fserver​+Tback​, Eoffload​=Ptx​⋅(L/R)。下层:在切片 s内,为用户 u分配资源,最大化对数效用函数 ∑u​log(ru​), 其中 ru​=∑n∈NRBs​​au,n​⋅SEu,n​, au,n​∈{0,1}表示分配。:在时隙 t, 能量到达 Et​, 电池能量状态 Bt​更新:Bt+1​=min(Bt​−pt​+Et​,Bmax​)。:基站发送:x=α1​P​s1​+α2​P​s2​, α1​+α2​=1, α1​>α2​。

weixin_49199313的博客 370

命名数据网络NDN中的概念小总结

命名数据网络NDN中的概念 1.命名数据网络NDN (named data network) 2.NDN中的两类报文 (1)请求报文(interest报文):当路由结点请求内容时,则发送包含该内容名字的Interest报文 (2)数据报文(data报文):若中间路由结点缓存了该内容,或内容服务器收到 Interest报文,则返回包含内容数据的Data报文。 3.NDN转发模型主要有三类数据结构...

weixin_44525657的博客 1605

【信息科学与工程学】【通信工程】第一百五十五篇 SRv6/SDN网络中的算法01

1 确定性路由算法 SRv6 控制平面 显式路径计算 SRv6段列表优化算法 1. 输入:源节点S,目标节点D,约束条件集合C={c₁,...,cₘ}<br>2. 构建有向图G(V,E),V为节点集

weixin_49199313的博客 254

计算机网络-未来网络前沿技术-02命名数据网络

文章目录命名数据网络(Named Data Networking ,NDN)NDN的具体实现 命名数据网络(Named Data Networking ,NDN) 重点是内容,而不是ip,所以不需要依靠ip地址来查找。 NDN的具体实现 无限套娃的NDN报文格式 想要学就去看: 转发信息表的作用和ip一样 经过三次判断,处理请求。 经过两次判断,答复请求。 ...

weixin_42522733的博客 340

【信息科学与工程学】计算机科学与自动化——第三十五篇 调度理论和调度算法01——资源调度算法

算法逻辑

weixin_49199313的博客 682

Robosuite实战:通过Xbox手柄实现机械臂6-DoF精准控制的完整指南

本文详细介绍了如何通过Xbox手柄实现机械臂的6-DoF精准控制,结合Robosuite仿真环境与MuJoCo物理引擎,提供从环境配置到代码实现的完整指南。文章重点解析了手柄映射原理、核心控制代码以及数据采集优化技巧,帮助开发者高效完成机械臂控制任务。

weixin_29169505的博客 419

ICMPv6和ND协议介绍

ICMPv6和ND协议介绍ICMPv6和ND协议介绍定义ICMPv6报文格式ND协议ND协议功能介绍ND协议ND协议功能ND协议报文介绍 ICMPv6和ND协议介绍 定义 ICMPv4 ICMPv6 MTU PMTU 邻居发现协议(ND)是IPv6的一个关键协议,如:ARP、ICMP路由器发现、ICMP重定向等协议,还提供其他功能:前缀发现、重复地址检测、地址自动配置等。 ICMPv6的协议类型号(即IPv6 Next Header)为58,说明:ICMPv6的消息封装在IPv6的报头当中 ICMPv6报文

baidu_38693912的博客 4513

Nordic nRF52832实战:手把手教你搭建智能手环BLE通信框架(附完整代码)

本文详细介绍了如何使用Nordic nRF52832芯片搭建智能手环的BLE通信框架,涵盖芯片优势、协议栈初始化、低功耗广播策略及健康数据服务实现。通过完整代码示例和架构设计,帮助开发者快速掌握蓝牙低功耗通信技术,适用于可穿戴设备开发。

weixin_29192141的博客 246

【NDN学习】NDN的定义,基础,解决什么问题

NDN的作用:替代TCP/IP框架,用数据内容替代管道的地位 要点: 1.用户只需提供数据名字,无需地址 2.无需从服务器拿数据,可以从就近的缓存拿,数据可以来自任何节点 3.所有数据包都要有数字签名 TCP/IP 只提供一个通讯管道,重视管道的维护,不关心内容的...

chualam的博客 3283

半导体EAP系统入门指南:从零开始理解设备自动化程序(附实战案例)

本文深入浅出地介绍了半导体制造中EAP(设备自动化程序)系统的核心作用与工作原理。EAP作为连接MES与生产设备的桥梁,负责指令翻译、数据采集与实时控制,是实现晶圆厂全自动化的关键。文章通过对比手动与自动模式,阐述了EAP在提升效率、保障良率方面的价值,并提供了一个实战案例,帮助读者从零构建对半导体CIM体系中这一关键组件的理解。

weixin_29200741的博客 734

YOLO26-seg分割优化:FPN涨点&轻量化篇 |多级特征融合金字塔(HS-FPN),助力小目标检测

​​​​​摘要:本研究对Ultralytics YOLO26进行了全面分析,重点阐述了其关键架构改进及其在实时边缘目标检测中的性能基准测试。YOLO26于2025年9月发布,是YOLO系列最新、最先进的成员,专为在边缘及低功耗设备上实现高效、精确且易于部署的目标而构建。本文依次详述了YOLO26的架构创新,包括:移除了分布焦点损失(DFL);采用端到端的无NMS推理;集成了渐进损失(ProgLoss)与小目标感知标签分配(STAL);以及引入了用于稳定收敛的MuSGD优化器。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 280

NDN网络学习笔记(一)——NDN基础

NDN(Named Data Networking)是用来取代IP 张北川:命名数据网络(NDN)

zhang35的博客 1万+

AttributeError: module ‘numpy‘ has no attribute ‘int‘解决方案

本文主要介绍了AttributeError: module ‘numpy’ has no attribute 'int’解决方案,希望能对使用numpy的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案 2.1 方案一 2.2 方案二

weixin_43178406的博客 28万+

命名数据网络 | NDN 包格式规范版本变更一览

命名数据网络 | NDN 包格式规范版本变更一览

ProgramNovice的博客 1129

python爬虫:采集求职者简历信息并进行人才分析

通过 Python 爬虫抓取求职者简历信息并进行人才分析,可以帮助企业快速筛选和匹配人才。但在实施过程中,必须严格遵守法律法规,确保数据来源合法合规。如果需要更复杂的分析,可以结合自然语言处理(NLP)和机器学习技术,进一步挖掘数据价值。

数据知道的博客 1万+

RDKit | 基于Murcko骨架聚类化合物库

化合物多样性评估 一种方法是使用合适的指纹技术将化合物矢量化并评估他们之间的距离。这种方法经常被使用,但是对于人类很难直观地理解化合物之间的距离。 基于Murcko骨架,分子大致聚集在化合物骨架中,并且每个簇中的顶部化合物都作为候选化合物。此方法非常符合人类的直觉,因此可以预期人将通过查看候选化合物列表来自动缩小化合物的范围。 Murcko骨架 Mur...

DrugOne 3766

命名数据网络 | 名称(Name)

命名数据网络 | 名称

ProgramNovice的博客 934

【离线OCR】微信离线实现图片OCR文本和表格识别

基于微信本地OCR引擎(由最新版微信自动安装)。通过Python对其官方调用逻辑进行完整翻译和封装,使开发者可以用简单的API调用其强大的OCR功能。

专注于医院数据分析技术与系统开发的创作与分享。 2622

命名数据网络 | TLV 类型注册表

命名数据网络 | TLV 类型注册表

ProgramNovice的博客 1115

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

命名数据网络 | 签名(Signature)

命名数据网络 | 签名(Signature)

ProgramNovice的博客 2328

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

命名数据网络 | 兴趣包(Interest Packet)

命名数据网络 | 兴趣包(Interest Packet)

ProgramNovice的博客 1233

命名数据网络 | 数据包(Data Packet)

命名数据网络 | 数据包(Data Packet)

ProgramNovice的博客 951

命名数据网络 | 证书(Certificate)

命名数据网络 | 证书(Certificate)

ProgramNovice的博客 1197

ndn-dpdk:高速命名数据网络转发器

ndn-dpdk:高速命名数据网络转发器 随着网络技术的发展,命名数据网络(NDN)作为一种新型的网络架构,正日益受到业界的关注。ndn-dpdk 是一套基于数据平面开发工具包(DPDK)的高性能 NDN 程序,旨在为开发者提供一种高效的网络转发解决方案。 项目介绍 ndn-dpdk 项目由美国国家标准与技术研究院(NIST)的智能连接系统部门开发,目前处于公测阶段,并会持续更新。项目包括了网络转...

gitblog_00734的博客 718

Networking Named Content相关问题总结

1、原文第1页,翻译第2页原文:(1)Availability: Fast, reliable content access requires awkward, pre-planned,application-specific mechanisms like CDNs and P2P networks, and/or imposesexcessive bandwidth costs.翻译:(1)实...

Missfufu123的博客 541

NDN命名网络工作机制和优点

工作机制 NDN中的通信是由接收端(即数据消费者)驱动的。为了接收数据,一个消费者发出一条兴趣(Interest)报文,该报文携带一个名字,由名字识别期望的数据(见1)。例如,一个消费者可请求/parc/videos/WidgetA.mpg。一台路由器记住请求到达的接口,之后通过在其转发信息表(FIB)(是由一种基于名字的路由协议传播的)中查找该名字而转发兴趣报文。一旦兴趣到达拥有被请求数据的...

caoyongsheng的博客 2859
上一篇: Rust 项目实战:单线程 Web 服务器
下一篇: 命名数据网络 | 名称(Name)
UestcXiye
博客等级 码龄8年 9028粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值