C-V2X 网络层及适配层解析填充

C-V2X 网络层及适配层解析填充网络层及适配层解析填充一 适配层二 网络层 DSMP 备注一 适配层 适配层提供底层接入技术与上层协议栈之间的传输适配功能

大家好,欢迎来到IT知识分享网。

网络层及适配层解析填充


一、适配层

  适配层提供底层接入技术与上层协议栈之间的传输适配功能。其中,适配层接收上层发送的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 的数据帧格式见下表。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(十进制:,0x12为高字节,0x78为低字节),若将其存放于地址0x4000 8000中,则有:

C-V2X 网络层及适配层解析填充
  如“网络层(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; 

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

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/115473.html

(0)
上一篇 2025-12-03 07:26
下一篇 2025-12-03 07:47

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信