Linux C基于OpenTCN trdp的SDTv2安全协议实现

1、SDTv2 协议

       1.1  SDTv2协议基本概述

        安全数据传输协议(Safe Data Transmission version 2,SDTv2)是一种在应用数据层增加安全数据传输的协议,主要适用于列车以太网通信,也可用于 MVB 通信。定义在IEC61375-2-3 的附录 B 中。SDTv2提供了在一个安全相关(重要)数据源(SDSRC)和一个 / 多个安全相关数据宿(SDSINK)之间的安全通信路径。该安全通信路径称作“SDTv2 通道”。SDSRC 侧SDTv2 层的主要任务是添加协议信息,在发送之前构成传输层数据安全传输所必需的 VDP。SDSINK 侧 SDTv2 层确认已接收的 VDP,如果确认成功则在 SDTv2 应用接口呈现已包含的重要数据。所有安全相关数据源(SDSRC)都应由一个源标识符(SID)标识。SID 是按照下列数据结构,通过 SC-32 循环冗余校验计算得到的一个 UINT32 值。初始值应为‘FFFFFFFF’H。

源标识符(SID)

图1

重要数据包(VDP)

     重要数据包(Vital Data Packet,VDP)置于 TRDP 过程数据报文的用户数据部分中,数据结构如图

图2

VDP 数据格式如图下图 所示:

图3

SDSRC 使用图1 中计算的 SID 作为初始值,对重要过程数据、用户数据版本、安全序列计数器进行 SC-32循环冗余校验计算得到 SafetyCode,生成 VDP 发送出去。SDSINK 接收到 VDP 后,通过 TRDP 定义的源 IP、目的 IP、ComId 找到对应发送方,根据发送方的预定义信息得到 SMI 等数据,使用 SC-32 计算对应 SID,然后用SID 作为初始值,对接收到的重要过程数据等信息再次使用 SC-32 计算应该得到的 SafetyCode,与实际接收到的SafetyCode 进行对比,判断 VDP 的是否正确。

SDTv2数据包

  1.2  安全数据收发

SDTv2 需要配置下列时间参数:

        T tx_period :VDP 发送周期,为 SDSRC 定义。
        T rx_period :VDP 接收(采样)周期,为 SDSINK 定义。
        T rx_safe :SDSINK未收到新的重要数据的最大容忍时间。
        T guard :SDSINK 用 于 检 测 出 SDSRC 冗 余 组 中 多 个SRSRC 处于激活状态的时间。

1.2.1 安全数据发送(SDSRC)

        SDSRC 根据定义的 T tx_period 周期性的发送 VDP,每发一个 VDP 安全序列计数器(SSC)增加 1。冗余 SDSRC 同一时刻只有一个在发送 VDP,另外一个不发送。

冗余切换时间:
T red ≤ T rx_safe – 2 × max(T tx_period ,T rx_period )

1.2.2 安全数据接收(SDSINK)

        SDSINK 接收并验证 VDP,将验证通过的数据呈现给SDTv2 应用程序接口。

1.2.2.1 VDP 种类

VDP 可以分为以下种类:
正确 VDP:SafetyCode 校验正确且用户数据版本正确的 VDP。
重复 VDP:本次经过校验的 SafetyCode 与上次经过校验的 SafetyCode 相同的 VDP。
初始 VDP:不是重复 VDP,或者上电 / 重启后第一个
正确 VDP,或者通信中断恢复后第一个正确 VDP,或者SDSRC 冗余切换后第一个正确 VDP。
新鲜 VDP:正确 VDP,且不是初始 VDP,且 SID 是初始 SID,且 SSC 延续上个初始或新鲜 VDP 的 SSC。
有效 VDP:新鲜或者重复 VDP。

1.2.2.2 VDP 有效性检查

        SDSINK 在收到初始 VDP 之后,记录下当前 SSC i ,然后等待接收下一个 VDP。如果下一个 VDP 的 SSC i+1 范围在:SSC i +1 <= SSC i+1  <= SSC i+ T rx_safe / T tx_period ,则为新鲜
VDP,如果 SSC i = SSC i+1 ,则为重复 VDP。此时 SSC i+1 作为新的 SSC i 记录下来,再次等待接收下一个 VDP。其他 SSC无效。SDSINK 将通过校验正确且 SSC 新鲜或者重复的 VDP判断为有效 VDP,呈现给应用程序接口。

1.2.2.3 宿时间监测

        SDSINK 接收到初始 VDP 之后开始计时,如果在 T rx_safe时间内收到新鲜 VDP,则重新开始计时。当超过该时间未收到新鲜 VDP 时,SDSINK 判断数据接收超时,安全通信丢失,等待再次收到初始 VDP 后开始计时,安全通信恢复。

1.2.2.4 保护时间检查

        保护时间检查用于检测两个冗余 SDSRC 均激活的情况。保护时间 T guard 应从接收初始 VDP 之后开始计时,并且持续时间为 T rx_safe 的倍数(可配置)。SDSINK 在接收到一个 SDSRC 初始 VDP 之后开始计时,如果在 T guard 时间内收到了其冗余 SDSRC 的初始 VDP,则 SDSINK 判断保护时间违反,安全通信丢失。此时保护时间重新开始计时,直到Tguard 内未收到冗余 SDSRC的初始 VDP 停止计时,安全通信恢复。

1.2.2.5 延迟监测

        延迟监测用于监督 VDP 传输的延迟。在网络故障的情况下,延迟时间平均值可能会随时间增加。SDSINK 在接收到新鲜 VDP 的 SSC i 之后,对于下个 VDP 有一个预期SSC E =SSC i +1,实际采样得到的是 SSCs,当 SSC E -SSCs >=T rx_safe / T tx_period 时,SDSINK 判断延迟时间违反,安全通信丢失。当 SSC E -SSCs < T rx_safe / T tx_period 时,安全通信恢复。

1.2.2.6 通道监测

        通道监测用于检测 SDTv2 通道发生硬件或者软件故障后,传输故障率突然增加的情况。如果单位时间内接收到的带有不正确 SafetyCode 的 VDP 数量超过预定义的阈值(通道监测阈值),则SDSINK判断通道故障,指示安全通信丢失。当不正确 SafetyCode 的 VDP 数量小于阈值时,安全通信恢复。

二、Linux 系统基于OpenTCN TRDP的SDTv2实现

        本次是在Linux系统基于tcnopen-trdp-r2439-trunk开源源码实现trdp通讯,并实现SDTv2安全数据收发。

        具体实现源码:见附件

遇到的问题记录:

1、

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

诺水城子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值