• SOME/IP 协议介绍(五)指南


    指南(信息性)

    选择传输协议

    SOME/IP直接支持互联网上使用最广泛的两种传输协议:用户数据报协议(UDP)和传输控制协议(TCP)。UDP是一种非常简洁的传输协议,仅支持最重要的功能(多路复用和使用校验和进行错误检测),而TCP则添加了额外的功能以实现可靠的通信。TCP不仅可以处理位错误,还可以处理分段、丢失、重复、重排序和网络拥塞等问题,因此TCP是更强大的传输协议。

    对于车辆内部使用,需求与互联网上的需求不同。对于许多应用程序,我们需要非常短的超时时间以在非常短的时间内做出反应。使用UDP可以更好地满足这些要求,因为应用程序本身可以处理不太可能的错误事件。例如,在循环数据的使用情况下,最好的方法通常是等待下一次数据传输,而不是尝试修复上一次的传输。UDP的主要缺点是它不处理分段,因此只能传输较小的数据块。

    指南:

    • 如果需要非常严格的延迟要求(<100毫秒)以及在出现错误时的需求,使用UDP。

    • 如果需要传输非常大的数据块(> 1400字节)且在出现错误时没有严格的延迟要求,使用TCP。

    • 如果适用于使用情况,尝试使用外部传输(网络文件系统,APIX链接,1722等)。只需传输文件句柄或类似内容。这样可以给设计师更多的自由度(缓存等)。

    所使用的传输协议由接口规范在每个消息的基础上进行指定。方法、事件和字段通常只使用单个传输协议。

    实现AUTOSAR应用程序中的高级特性

    从AUTOSAR 4.0.3开始,将支持SOME / IP。不幸的是,并非所有SOME / IP的功能都可以在AUTOSAR中直接支持(例如,动态长度数组)。在AUTOSAR实现中需要高级功能的罕见情况下,存在一种解决方案:通过将SOME / IP有效负载或其部分通过uint8缓冲区传递来在应用程序内实现高级功能。对于AUTOSAR,这些字段似乎只是动态长度的uint8数组,并且应相应配置。

    请注意,在AUTOSAR 4.0.3中,只能有一个单独的uint8数组,并且它必须位于有效负载的末尾。

    包含指针的数据结构的序列化

    对于包含指针的数据结构(例如内存中的树)的序列化,不能仅仅使用数据类型(例如uint8)来传输指针,而是应该将其转换为传输格式。存在不同的指针序列化方法。我们推荐以下方法。

    隐式ID的数据结构数组

    当传输一组包含指针的数据结构,且这组数据结构足够小以适应单个RPC消息时:

    • 将数据结构(例如树节点)存储在数组中

    • 使用数组中的位置作为存储的数据结构的ID

    • 将指针替换为指向的数据结构的ID

    具有显式ID的数据结构数组

    对于较大的数据结构集,必须解决其他问题。由于并非所有数据结构都适合单个消息,因此ID必须在不同消息之间唯一。这可以通过不同的方式实现:

    • 在每个消息中添加偏移字段。数组元素的ID将通过将偏移量加到其在数组中的位置来计算。请记住,需要仔细选择偏移量。例如,如果每个消息最多可以包含十个数据结构(0-9),则可以选择0、10、20、30等作为偏移量。

    • 通过使用结构体数组存储显式ID。结构体中的第一个字段将是ID(例如uint32),第二个字段将是数据结构本身。出于安全和可靠性原因,指针(即内存地址)永远不应直接用作ID。

  • 相关阅读:
    备战数学建模2——MATLAB导入数据,处理缺失值
    【NLP的Python库(04/4)】:Flair
    个人练习-PAT甲级-1143 Lowest Common Ancestor
    如何检验谷歌开发者账号注册资料的可靠性?
    医院项目-预约挂号-第一部分
    接收网络视频数据并解码的探索
    972信息检索 | 第八章 移动搜索
    Maya v2024(3D动画制作软件)
    DemographicTable 新的基线特征表绘制 R包
    内网双击鼠标左键出现字符c
  • 原文地址:https://blog.csdn.net/Xuesengxinyi/article/details/134491769