E2E通信保护协议学习笔记

2023-05-16

E2E通信保护协议学习笔记

最近在做功能安全方面工作,想了解E2E保护的问题。本文试着说明两个点:

  • 功能安全需要考虑通信失效造成的影响,因此E2E通信保护协议被提出,以满足功能安全要求;

  • 简单介绍E2E通信保护协议机制。

一、E2E通信保护协议的由来

如果系统的功能安全依赖于数据的完整性,那么发送方(Sender)和接收方(Receiver)之间的数据交换就可以对系统的功能安全造成影响。根据ISO 26262 Part 6的 附录D:信息交换章节,对于信息交换的接收方或发送方,一般需要考虑以下失效模式:

引自[1]

这里,对上述的这些失效模式稍作解释:

  • 信息重复:多次收到同一条信息;

  • 信息丢失:传输的信息流中,信息或部分信息被移除;

  • 信息延迟:信息接收比预期晚;

  • 信息插入:传输的信息流中,额外信息被插入;

  • 伪装:非真实信息被接收方接收为真实信息;

  • 不正确寻址:接收了不正确的发送方的信息或被不正确的接收方接收了信息;

  • 信息序列不正确:修改了传输的信息流中的信息序列;

  • 信息损坏:改变信息;

  • 从发送方发送到多个接收方的非对称信息:接收方从同一发送方接收到了不同信息;

  • 来自发送方的信息仅由一部分接收方接收:有些接收方没有接收到信息;

  • 阻塞访问通信通道:通信通道的访问被阻塞。

这些失效一般由软件故障,随机硬件故障和瞬态故障引起。

  1. 软件故障:像通信栈模块,RTE等软件可能存在故障,而这些故障是系统性的,可能发生在系统生命周期的规范,设计,制造,运行和维护的任一阶段,并且在情况(例如根本原因的触发条件)相同时,它们总会出现,其后果可能导致通信失败,比如发送数据中断,接收器溢出等故障。

  2. 随机硬件故障:通常是电气过载、退化、老化的结果或暴露于硬件部件的外部影响(例如环境压力)。随机硬件故障无法完全避免,但可以评估其概率并且可以实施适当的技术措施(比如诊断)。

  3. 瞬态故障:由外部影响或环境应力引起,包括EMI、ESD、湿度、腐蚀、温度或机械应力(比如振动)等影响。

对应基于AUTOSAR架构的通讯部分,上述的故障表现如下示意:

引自[4]

上图包括软硬件导致的通信失效,其中硬件导致的通信失效有:

  • H1:通信的物理网络存在故障;

  • H2:是通信网络的接口存在电磁兼容性问题;

  • H3:微控制器故障,例如上下文切换时寄存器失效等

软件导致的通讯失效有:

  • S1: RTE生成代码出错

  • S2: COM服务层代码出错;

  • S3: 通信接口层和通信的驱动层之间可能存在问题;

  • H3:微控制器故障,例如上下文切换时寄存器失效等.

针对这些通讯失效,在AUTOSAR中就提出了E2E通信保护协议,即在系统运行过程中,动态地识别软硬件故障引起通信失效,保证ECU之间以及ECU内部不同核之间,不同SWC 之间数据的安全通信。

引自[2]

基于E2E需求,E2E通信保护协议采用结合CRC(循环冗余校验),Counter(计数器),Timeout monitoring(超时监控)和Data ID来实现,如下所示:

E2E保护机制检测出的失效模式
Counter信息的重复,丢失,插入,不正确的序列,阻塞
Time monitoring信息的丢失,延迟,阻塞
Data ID + CRC信息的伪装,不正确寻址,插入
CRC信息的损坏,不对称

具体这些机制是如何能够检测出对应的失效呢?

考虑到E2E通信保护协议需要涵盖各种大小的交换数据和不同类型的物理总线介质。因此就创建了多种E2E profiles(配置文件),即每个profiles包括一组保护机制,如下所示:

引自[3]

在[3] E2E Protocol Specification 中可以详细了解到8中E2E profiles 1,2,4,5,6,7,11,22的定义。这些E2E profiles是根据ISO26262开发,用于与安全相关的项目,没有特定于某控制器,可以满足ASIL D需求的安全相关通信(之前思考一个问题:对于不同ASIL等级,需要采用哪种E2E profiles,我觉得都可以,因为每种E2E profiles都满足ASIL D等级,就看各家如何选取,谁有补充么?)。

二、 E2E通信保护协议机制

以E2E profiles 2为例,它包含3个保护方式:分别是循环冗余校验,计数器和数据ID,如下:

引自[3]

这四种E2E机制可检测出的失效如下:

引自[3]

这套机制是如何运行呢?借助[7]解释如下:

[7]: 通过E2E Profile 2处理后的数据 Buffer分布如下所示。E2E Profile 2规定Data[0]必须存放CRC校验和,Data[1]的低4个位必须存放Sequence Counter。从Data[2]开始存放需要保护的数据。

[7]: 其中参与CRC校验和计算的字段可以根据用户配置而定, 我们采用的是下图的方式,校验和包含Data ID部分和排除 CRC存储字段外的所有的数据,虽然Data ID并没有显性的通过报文发送出去,但是它的校验信息包含在CRC中,其中需要填充的部分统一填充为0xF。

[7]: 采用E2E Profile 2安全通信需要 额外的引入两个数据元素,分别是 Sequence CounterCRC校验和,它们 必须随着被保护数据一起从发送端传送到接收端。在进行软件组件接口定义的时候必须定义相关的数据元素,尤其是在跨ECU通信中还必须在DBC中预留出相关的信号用于传输Sequence Counter与CRC校验和。
E2E ProfiIe 2的发送端和接收端,分别维护着一个E2E 发送端的状态机和一个E2E接收端的状态机。在发送端, E2E 会根据发送端的状态机,首先计算Sequence Counter并写入数据Buffer,然后根据被保护的数据、静态配置好的数据ID列表以及Sequence counter,计算CRC校验和,并写入发送 Buffer。完成上述操作后,E2E就返回数据Buffer给调用者, 最终由调用者将CRC校验和、Sequence Counter与被保护的数据一起发送出去。被保护的数据并不会被E2E改变, E2E并不负责加密
在接收端,E2E根据接收端状态机先计算出预期的Sequence Counter,再根据静态配置好的数据ID列表、Sequence Counter和接收到的数据,计算出CRC校验和。这里,接收到的数据仅仅指发送端发送的需要被保护的数据。
计算出CRC校验和后,E2E会与发送端发过来的CRC校验和进行比较,如果一致,则继续判断Sequence Counter是否与期望的Sequence Counter一致。 如果校验结果完全正确或者在容忍的范围内,则E2E Profile 2返回正确的返回值;如果校验结果有问题, 则需要进一步解析出错的类型,并将错误状态更新到E2E的状态机。
E2E只做数据准确性的校验,至于出现数据丢失或者重复,应用层是否采用此数据,那是应用层数据访问的策略,与E2E无关。

三、待解释问题

  • 为什么根据CRC,Counter,ID可以检测出相应的通讯失效?

  • AUTOSAR是怎么实现E2E通信保护协议机制?

  • 待理解更深入,能更通俗易懂地更新本文,比如失效模式的详细解释。

  • 。。。。。。

附录1:CRC计算原理

CRC(Cyclic Redundancy Check),即循环冗余检验,是基于数据计算一组校验码码,用于核对数据传输过程中是否被更改或传输错误。假设有一组原始数据:1101011011,如何获取其CRC?见下图右方:

第1步:选取CRC算法,即生成多项式,也就是E2E profiles就采用了CRC-8,CRC-16, CRC-32。像E2E profile 1采用x8 + x4 + x3 + x2 + 1,即1 0001 1101。此处选用4位CRC算法,x4 + x1 + 1,即1 0011。

第2步:因此选用4位CRC算法,1 0011,注意宽度是4位,不是5位,这时原始数据需要在右边填充4位,0000,后面用来存放4位CRC,变为:1101011011 0000。

第3步,使用XOR运算,计算CRC,过程如下图左方:

第4步:将CRC更新到原始数据的右4位,则数据变为:11010110111110。这个数据将发送给其他控制器。

Reference:

[1] ISO26262-6: Road vehicles - Functional safety Part 6: Product development at the software level

[2] Requirements on E2E

[3] E2E Protocol Specification

[4] Specification of SW-C End-toEnd Communication Protection Library

[5] Specification of Module E2E Transformer

[6] Specification of CRC Routines

[7] 基于AUTOSAR的点到点安全通信的实现

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

E2E通信保护协议学习笔记 的相关文章

  • 任务间通信 | 邮箱、消息队列

    本文分享自中移OneOS公众号 任务间通信 上篇讲解了任务间同步 xff0c 在本篇中主要讲解任务间通信机制 xff0c 并对邮箱及消息队列进行详细介绍 通过对其概念 详细设计 接口设计等的讲解帮助开发者更好的理解其在操作系统中的应用 任务
  • c++ 条件变量的使用,实战

    include lt iostream gt include lt thread gt include lt mutex gt include lt condition variable gt using namespace std 线程通
  • SOA架构和微服务架构的区别

    1 SOA架构和微服务架构的区别 首先SOA和微服务架构一个层面的东西 xff0c 而对于ESB和微服务网关是一个层面的东西 xff0c 一个谈到是架构风格和方法 xff0c 一个谈的是实现工具或组件 1 SOA xff08 Service
  • 浅谈AP autosar 之 runtime 基础

    AP Autosar Architecture overview AP autosar在SOC 中的位置 xff0c 起到的作用 下面图可以看出 xff0c AP autosar封装了操作系统的接口 xff0c 封装了功能安全 xff0c
  • 「冰羚」— 撑起自动驾驶未来的“中间件”

    每当谈到自动驾驶的软件开发 xff0c 人们首先想到的 xff0c 是深不可测的人工智能算法 xff0c 是各种感知融合 xff0c 是各类路径规划 但是 xff0c 就算是再智能再高深的算法 xff0c 如果没有底层操作系统的支持 xff
  • 多核处理器的关键技术

    英特尔的cpu是从前代gt atom一路供货到第7代 xff0c 想必日常使用不会有太大区别 xff0c 而在系统之外可能存在一些散热方面的问题 而上市越早的处理器 xff0c 硬件供货越好 xff0c 可能在某些特殊时间段会出现不足 xf
  • LD_PRELOAD作用

    一 LD PRELOAD是什么 LD PRELOAD 是Linux系统的一个环境变量 xff0c 它可以影响程序的运行时的链接 xff08 Runtime linker xff09 xff0c 它允许你定义在程序运行前优先加载的动态链接库
  • C++ 之父的多线程编程建议——现代 C++ 对多线程/并发的支持(下)

    本文承接前文 现代 C 43 43 对多线程 并发的支持 xff08 上 xff09 xff0c 翻译自 C 43 43 之父 Bjarne Stroustrup 的 C 43 43 之旅 xff08 A Tour of C 43 43 x
  • C++关键字之Future promise and async()

    主线程将x传递给子线程 xff0c 子线程将结果x再传递给主线程 include lt iostream gt include lt future gt include lt thread gt using namespace std vo
  • C++ thread::hardware_concurrency 获取硬件支持并发数

    一 功能 获取硬件支持的并发线程数 二 返回值 正常返回支持的并发线程数 xff0c 若值非良定义或不可计算 xff0c 则返回 0 四 示例 include lt iostream gt include lt thread gt int
  • C++并发编程 unique_lock and condition_variable

    在t1线程中插入值 xff0c 在t2线程中取出值 include lt iostream gt include lt thread gt include lt vector gt include lt string gt include
  • ubuntu18.04+安装ros-melodic+安装realsense-ros包

    自己在安装的时候参考了很多博客 xff0c 但许多的方法很杂乱最后还失败了 xff0c 这里综合下自己尝试成功且比较方便的方法 xff0c 参考链接会在下文列出 安装ros melodic 参考 xff1a https www guyueh
  • [C++11 并发编程] 动态选择并发线程的数量

    C 43 43 标准模板库提供了一个辅助函数 std thread hardware concurrency xff0c 通过这个函数 xff0c 我们可以获取应用程序可以真正并发执行的线程数量 下面这个例子 xff0c 实现了一个并发版本
  • [C++11 并发编程] 17 超时等待 - clock和duration

    之前我们看到的所有等待机制都是不会超时的 xff0c 也就是说 xff0c 等待某个同步事件的线程会一直挂起 有些情况下 xff0c 我们希望设置一个最长等待时间 xff0c 使得程序可以继续与用户进行交互 xff0c 使得用户可以取消这个
  • 激光雷达和相机感知融合简介

    本文介绍激光雷达和相机融合的两种方法 xff1a 前融合 xff1a 融合原始数据 xff08 点云和像素 目标框 xff09 后融合 xff1a 融合目标框 前融合 前融合一般指融合原始数据 xff0c 最容易 最普遍的方式是将点云投影到
  • 聚焦芯片:GPU,CPU,SOC,DSP,FPGA,ASIC,MCU,MPU,GPP,ECU等都是什么?

    先上部分概念 xff1a CPU xff1a 中央处理器 xff08 Central Processing Unit xff09 是一块超大规模的集成电路 xff0c 是一台计算机的运算核心 xff08 Core xff09 和控制核心 x

随机推荐

  • 怎么样实现车辆信息安全

    1 车载IDS 正成为持续网络安全保护的核心要素 持续的网络信息安全风险管理正成为VTA的要求 通过IDS车载入侵检测可以为整个车队提供信息安全保护 但是 xff0c 分布式IDS的指导原则是什么 xff1f 为了满足UNECE WP29法
  • SOA通信架构和SOME/IP-SD的主要功能

    1 SOA面向服务的通信交互 如上图所示 xff0c 女神去热水澡堂洗澡 xff0c 想搓背 xff08 find服务 xff09 xff0c 于是她付要付搓背钱给澡堂老板 xff0c 这时澡堂老板知道通过小王和小明的毛遂自荐 xff08
  • OTA升级的实现原理

    一 简介 1 1 概念 OTA xff1a Over the Air Technology xff0c 即空中下载技术 OTA升级 xff1a 通过OTA方式实现固件或软件的升级 只要是通过无线通信方式实现升级的 xff0c 都可以叫OTA
  • 为什么特斯拉自动驾驶汽车不需要激光雷达

    光 糖果Autosar 2022 02 14 08 08 特斯拉仪表板 打造全自动驾驶汽车所需的技术堆栈是什么 xff1f 公司和研究人员对该问题的答案存在分歧 自动驾驶的方法范围从相机和计算机视觉到计算机视觉和高级传感器的组合 特斯拉一直
  • 架构与中台

    做架构工作最重要的是练好内功 什么是内功 xff1f 大局观 认知层次 xff0c 思维方式 xff0c 方法论 概念抽象能力等等都属于内功 零件设计主外 xff0c 架构设计主内 零件设计五花八门 xff0c 紧随新技术新热点 架构设计苦
  • UDS服务简易教程

    本文主要以简单易懂的描述向大家介绍CAN诊断基础知识 xff0c 本文主要介绍CAN诊断中UDS服务的基本内容 xff0c 主要参考文件ISO15765 2 ISO15765 3 ISO14229 1 xff0c 读完本篇文章后希望进一步了
  • 五万字读懂c++

    const作用 修饰变量 xff0c 说明该变量不可以被改变 xff1b 修饰指针 xff0c 分为指向常量的指针 xff08 pointer to const xff09 和自身是常量的指针 xff08 常量指针 xff0c const
  • 在AP_EM上的骚操作

    最近大家都对AP兴趣很大 xff0c 也不知CP大家玩转了木有 xff0c 反正咱也不知道咱也不敢问 xff0c 这次楼主就扯下AP中的状态管理SM和执行管理EM部分 言归正传 xff1a AP的应用 xff0c 在通过工具配置后 xff0
  • 编译型语言和解释型语言的区别

    我们编写的源代码是人类语言 xff0c 我们自己能够轻松理解 xff1b 但是对于计算机硬件 xff08 CPU xff09 xff0c 源代码就是天书 xff0c 根本无法执行 xff0c 计算机只能识别某些特定的二进制指令 xff0c
  • 什么情况下需要加extern “C“,通俗易懂

    下午看了一些关于extern 34 C 34 的博客 xff0c 都写得很啰嗦 xff0c 看来看去还是有一些细节不怎么了解 xff0c 自己开了个程序测试了一下 xff0c 总结了什么情况下需要加入extern C 首先c 43 43 和
  • POSIX介绍

    POSIX表示可移植操作系统接口 xff08 Portable Operating System Interface of UNIX xff0c 缩写为 POSIX xff09 xff0c POSIX标准定义了操作系统应该为应用程序提供的接
  • Linux crond 命令使用实例

    每一分钟调用一次 ls l etc gt tmp to txt crontab e 进行编辑 1 ls l etc gt tmp to txt 1 代表每一分钟执行一次 1 第二个 代表一天中的某个小时 案例2 xff1a 写一个脚本 vi
  • DoIP诊断技术一点通

    DoIP的全称是Diagnostic Over Internet Protocol xff0c 即基于TCP IP协议的诊断协议 随着以太网技术在车载领域的应用范围逐步扩大 xff0c 越来越多的控制器支持通过以太网进行诊断通信 xff0c
  • 嵌入式必备基础一

    嵌入式必备知识 Oliver H的博客 CSDN博客 一 进程与线程 1 1 进程和线程的概念 1 1 1 什么是进程 线程 xff0c 各自有什么优点 概念 xff1a 进程是对运行时程序的封装 xff0c 是系统进行资源调度和分配的的基
  • 嵌入式基础二——C/C++

    二 C C 43 43 2 1 c和c 43 43 区别 概念相关面试题 2 1 1 new和malloc的区别 属性 xff1a new delete是C 43 43 关键字 xff0c 需要编译器支持 malloc free是库函数 x
  • ​Linux 黑话解释:什么是 POSIX?

    POSIX xff0c 你肯定在各种在线论坛和文章中 xff0c 听到过这个缩写 xff0c 或读到过关于它的信息 程序员和系统开发人员似乎最关心这个问题 它听起来很神秘 xff0c 虽然有很多关于这个主题的好资料 xff0c 但一些讨论区
  • 科研进阶篇——论文完结

    终于完成了人生的第一篇学术论文 xff0c 对这次的科研做个总结 xff0c 画上一个完美的问号 xff0c 让我们快乐的继续进阶 xff0c 投了会议 xff0c 中了的话应该会推荐到CCF C期刊 虽然还没出结果 xff0c 还是为自己
  • AP AUTOSAR 平台设计总体框架全解

    AP AUTOSAR 平台设计总体框架全解 01 简介 1 1内容 本规范描述技术范围和方法 AP的背景 逻辑和物理视图的架构 xff0c 是AUTOSAR自适应平台设计的总体框架 全文32000余字 xff0c 建议收藏阅读 02 技术范
  • 谈谈Bootloader自更新

    目录 01 Supplier Boot SB 43 Customer Boot CB 02 将Boot先放到RAM中运行 xff0c 然后更新Boot的Flash区域 03 两个CB 43 minBoot 04 小结 汽车控制器的BootL
  • E2E通信保护协议学习笔记

    E2E通信保护协议学习笔记 最近在做功能安全方面工作 xff0c 想了解E2E保护的问题 本文试着说明两个点 xff1a 功能安全需要考虑通信失效造成的影响 xff0c 因此E2E通信保护协议被提出 xff0c 以满足功能安全要求 xff1