网络层及适配层解析填充

  • 一、适配层
  • 二、网络层(DSMP)
  • 备注

一、适配层

  适配层提供底层接入技术与上层协议栈之间的传输适配功能。其中,适配层接收上层发送的DSMP 数据包、IP 数据包或DME 数据包,区分待发送数据包所使用的底层接入技术,并将相应数据包递交到符合对应接入技术的底层进行传输;或接收来自底层的数据包,区分相应数据包所属的上层协议类型,并将数据包递交给指定的上层协议栈。
  合作式智能运输系统专用短程通信网络层业务需支持无连接无确认的LLC 操作、子网接入协议和IP 数据报传输协议。
  适配层帧格式如下图所示,适配层帧包含适配层帧头以及适配层有效载荷两部分。适配层有效载荷用于封装上层数据包。适配层帧格式中的比特顺序为高位在前(大端模式)。

  其中协议类型(Protocol Type),用于指示上层数据包所使用的协议类型,目前所用的为DSMP协议,即“04”,具体见下表:

取值 协议类型(Protocol Type)
0 IPV6
1 保留
2 保留
3 保留
4 DSMP协议
5 IPV4
6~255 保留

二、网络层(DSMP)

  DSMP协议即专用短程通信短消息协议,关于DSM消息的逐层定义如下图所示:

  DSM 的数据帧格式见下表。DSM 数据帧格式中的比特顺序为高位在前(大端模式)。

字段一 字段二 字段三 字段四 字段五 字段六 字段七
3 bits 1bit 4bits Var Var 2octets var
DSMP Version DSMP Option Indicator Reserved Extension AID Length Data
DSMP 版本 DSMP 可选域指示 预留 扩展域 应用标识 数据长度 数据
  注1: DSMP 版本(Version),区分不同的DSMP 版本号(0~7)。本标准中DSMP 版本取值为0。
  注2: DSMP 可选域指示(DSMP Option Indicator),取值为1 表示后面的扩展域出现,取值为0 表示后面的扩展域不出现。
  注3:预留域(Reserved),预留比特,此版本全部取0。
  注4:扩展域(Extension),预留可用于其它信息,包含其它信息标识、其它信息长度和其它信息内容三部分,其它信息标识就是Element ID,具体见5.2.3.3 节。扩展域长度、内容等信息将与标准版本相关联。
   注5:应用标识(Application ID,AID),应用服务商的应用标识,区分不同的应用。
  注6:数据长度(Length),表示应用层数据实体的字节长度。
  注7:数据(Data),是承载的应用层或管理子层数据实体。

  其中字段一至四填0x00即可,字段五AID应用标识用于区分不同的应用,详见下表:

AID 应用领域或其它描述 消息
17 在“四跨”活动前所有的应用标识均为17 -
111 车车基本安全应用-普通车辆状态 BSM,常规
112 车车基本安全应用-普通车辆关键事件提醒 BSM,事件
113 车车基本安全应用-紧急车辆状态 BSM,常规
114 车车基本安全应用-紧急车辆关键时间提醒 BSM,事件
3617 车车基本安全应用-后装车载终端 BSM
3618 地图类应用 MAP
3619 信号灯类应用 SPAT
3620 道路信息-静态类应用 RSI
3621 道路信息-半静态应用 RSI
3622 道路信息-动态应用 RSI
3623 道路提醒类应用 RSM

  需要注意的是,AID 采用变长字节表示形式,目前最多支持2 个字节的表示,最少采用1 个字节表示,方式见下表:

字节0的最高两位(x表示不关心)b7 b6 AID长度(byte
0 x 1
1 0 2
1 1 >=3 保留

  如上表中AID区分,对于“车车基本安全应用-普通车辆状态”,即aid为111,填充aid时则填充0x6F;而对于“地图类应用”,即aid为3618,填充aid时则应填充为0x8E22,其中字节0的前两位“10”表示aid长度为2字节,剩余的14位“0xE22”表示为3618。
  字段六直接填应用层数据实体的数据长度即可,即不包含DSM报头的数据载荷长度,其大小为2字节,大端模式。
  字段七为应用层有效载荷,即经UPER编码后的应用层数据。

备注

  在上文中曾多次提及到大端模式,即对于一个多字节的数据,其高字节数据存放在低地址,而低字节数据存放在高地址,与小端模式(intel)正相反,
  假如有一个4字节的数据为 0x12 34 56 78(十进制:305419896,0x12为高字节,0x78为低字节),若将其存放于地址0x4000 8000中,则有:


  如“网络层(DSMP)”一节中我们谈到的aid为3618的地图类应用,虽然其值为0x8E22,但是若我们的计算机默认是小端模式的,当经过如下赋值

aid = 0x8e22;

  则实际DSM协议解析出来的数据却是“0x22 0x8E”,所以需要进行大端的转换,由于网络字节序一律为大端,而目前个人PC大部分都是X86的小端模式,因此网络编程中不可避免得要进行网络字节序和主机字节序之间的相互转换,下面是 socket 提供的转换函数,

#define ntohs(n)     // 16位数据类型网络字节顺序到主机字节顺序的转换
#define htons(n)     // 16位数据类型主机字节顺序到网络字节顺序的转换
#define ntohl(n)     // 32位数据类型网络字节顺序到主机字节顺序的转换
#define htonl(n)     // 32位数据类型主机字节顺序到网络字节顺序的转换

  或者可以声明一个大小为2的字节数组,手动将高字节数据放置低地址中去,如:

byte aid[2];
aid[0] = 0x8e;
aid[1] = 0x22;

  更多关于大小端模式的介绍,参考此篇博客。

C-V2X 网络层及适配层解析填充相关推荐

  1. 基于CAN总线的汽车诊断协议UDS(上位机开发网络层及错误代码解析)

    UDS协议栈的开发和测试对于刚刚接触UDS协议的开发人员来说,不但需要阅读大量的标准文档,短时间内很难理解透彻,标准协议栈代码的编写更加困难,刚入门又没有快捷简单的测试工具帮助加快理解和验证,使得UD ...

  2. 【数据结构与算法】之深入解析“填充每个节点的下一个右侧节点指针”的求解思路与算法示例

    一.题目要求 给定一个完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点. 二叉树定义如下: struct Node {int val;Node *left;Node *right;No ...

  3. java给excel填充数据_使用poi操作Excel的处理工具类自动解析填充数据

    直接传入对应的对象直接生成Excel中的数据集合 Excel模板-表头所在行为1(所在行从一开始) image.png 首先需要导入的Excel表头行中要添加批注,内容为对应JavaBean的属性值. ...

  4. CAN-TP(15765-2协议)网络层协议解析

    CAN-TP 层位于 UDS诊断层和CAN Driver层中间,主要作用是 当CAN数据长度超过8Byte(CAN-FD为64Byte)时,对CAN数据进行分包和解包. TP层在 OSI分层中的位置 ...

  5. C-V2X(五)网络层技术要求

    1. 简述 理解C-V2X网络层. 2. 网络层框架 适配层接收上层发送的DSMP数据包.IP数据包或DME数据包,区分待发送数据包所使用的底层接口,并将相应数据包递交到符合对应接入层接口的底层进行传 ...

  6. ffmpeg av_read_frame函数解析

    av_read_frame的作用是读取一帧视频数据或者读取多帧音频数据,读取的数据都是待解码的数据,该函数的流程如下所示: 函数的源码如下所示: int av_read_frame(AVFormatC ...

  7. 音视频学习笔记(雷神)—技术解析

    音视频技术解析 封装技术+视频压缩编解码+音频压缩编解码 这是技术层 流媒体传输协议 这是网络层 视频播放器解析 解协议 从视频播放器的角度做解析,拿到传输而来的视频数据后,首先要解协议(传输协议) ...

  8. java无极树形结构_Java爬虫框架:SeimiCrawler——结构化解析与数据存储

    本文将介绍如何使用SeimiCrawler将页面中信息提取为结构化数据并存储到数据库中,这也是大家非常常见的使用场景.数据抓取将以抓取博客园的博客为例. 建立基本数据结构 为了演示,简单起见只建立一个 ...

  9. 《Spring源码深度解析 郝佳 第2版》XML标签的解析

    目录 往期博客<Spring源码深度解析 郝佳 第2版>容器的基本实现与XML文件的加载 分析了xml文件的加载,接下来就是标签的解析,入口函数有两个 默认标签的解析 自定义标签的解析 一 ...

  10. 考试三级网络技术笔试

    考试三级网络技术笔试   网络技术知识点总结 第一章计算机基础 一.计算机的四个特点: 1.有信息处理的特性: 2.有程序控制的特性:3.有灵活选择的特性:4.有正确应用的特性. 二.计算机发展经历5 ...

最新文章

  1. 清华学长免费分享Java基础核心知识点基础篇(2)
  2. 十四:桥接者模式(发送各类短信案例)
  3. unable to contact ip driver
  4. git 修改历史提交信息
  5. linux下 命令 实验,实验一:Linux命令实验
  6. SAP 电商云 Spartacus UI 代码提交的 commit 信息规范
  7. Java会话技术之 —— Spring Session
  8. poj 2653 Pick-up sticks(判断线段相交)
  9. 手把手教你强化学习 (三)马尔可夫决策过程与贝尔曼方程
  10. chrome安装测试打包插件
  11. java长连接_java如何实现http长连接
  12. 人工智能的发展历程和未来发展趋势
  13. 银行卡格式化(每四位空格,删除添加,更变等)
  14. 电子商务平台到底是什么?这就告诉你!
  15. Android新的网络请求框架volley源码解释及示例
  16. 第2章 SystemVerilog断言
  17. 【混合云小知识】混合云应用场景包含哪些?
  18. 方舟端游进服务器无限闪退,【求助】方舟一进服务器 过一会儿 闪退 弹白框求解...
  19. R语言--MCMC算法介绍以及例子
  20. 刘汝佳算法竞赛入门 UVA-11809 Floating-Point Numbers 暴力写法。

热门文章

  1. 机器学习(二)简单逻辑回归python算法+代码(实例:体检阳性阴性预测患不患病)
  2. python mp3转wav
  3. 怎样实现VLAN间通信,三种解决方案,一节课带你掌握
  4. eclipse快捷方式打不开解决方法
  5. 802.1x准入控制技术
  6. 【jzoj 5336】Timi / 提米树(DP)
  7. Windows蓝屏为什么是蓝底白字?微软程序员揭开了秘密
  8. html5添加音波波形图,wavesurfer.js绘制音频波形图的实现
  9. arcgis语言如何中文改英文_ArcGIS的概述及中英文切换——附GIS名词解释大全(一)...
  10. 计算机毕业设计ssm网上花店系统0716c系统+程序+源码+lw+远程部署