- 博客(79)
- 收藏
- 关注
原创 SOME/IP-SD -- 协议英文原文讲解11
结合上一条需求,针对client发送的find报文时 client回复的单播offer 不需要遵循上面的stopsub+sub的规则,因为后面的多播offer会覆盖前面的多播offer状态。SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。client在发出订阅包之后 迟迟拿不到回复,但是下一包订阅有需要发送了,则在发送下一包订阅之前 需要发送停止订阅包。之前有提:tcp订阅的事件,client要先建立TCP连接。
2025-04-02 13:53:19
805
原创 SOME/IP-SD -- 协议英文原文讲解10
**字段** | **取值要求** || **服务类型** | **otherserv值示例** | **用途** |- **禁止混用**:标准SOME/IP服务**不得**使用 `otherserv` 配置选项,避免与非SOME/IP服务混淆。
2025-03-31 19:21:32
973
原创 SOME/IP-SD -- 协议英文原文讲解9(ERROR处理)
即使选项校验([PRS_SOMEIPSD_00130])或资源检查([PRS_SOMEIPSD_00132])失败,**仍处理ACK条目**,但标记订阅为**未成功**。| **忽略条件** | **示例场景** | **处理动作** |- 若两个配置选项(Configuration Options)存在**同名参数冲突**,必须**全部处理**,禁止自动合并。
2025-03-31 15:32:00
901
原创 SOME/IP-SD -- 协议英文原文讲解8
这段注释解释了 **SOME/IP 服务发现(SD)客户端状态机** 中,当客户端处于 **“服务就绪(Service Ready)”** 状态时,**TTL(Time To Live,存活时间)到期** 的可能原因及其设计意图。这段描述是关于 **SOME/IP 服务发现(SD)服务器状态机** 中 **重复阶段(Repetition Phase)** 和 **主阶段(Main Phase)** 的状态转换规则。
2025-03-13 14:58:40
658
原创 SOME/IP-SD -- 协议英文原文讲解7
实际情况可能比这三个阶段要复杂 -- 比如:本地服务已经下线 并且 对方已经知道这个服务的存在不会(对端之前发过Offer)不会再发送find,导致通信中断。这个阶段就是正常的重复阶段 , TTL快超时时,server发送offer, client则等待server发送offer后sub订阅。因为标准中对初始化阶段的时间做了规范限定,程序员设计的协议栈部署和启动服务的耗时时间不能超过这个时间,服务实例处于 重复、主阶段 --收到上层应用“停止服务”的请求后,需要发出 stop offer的报文。
2025-02-27 19:48:39
1083
原创 SOME/IP-SD -- 协议英文原文讲解6
在 `SubscribeEventgroup` 消息中,服务实例的端点选项(Endpoint Options)**只能选择 IPv4 或 IPv6**,而不能同时支持两者。- 客户端可以发送一个特殊的 **Magic Cookie 消息** 到服务器,并等待服务器的 TCP ACK 响应。- 例如:`IPv4 Endpoint Option` 或 `IPv6 Endpoint Option`。- 或者,最多可以包含 **两个 IPv6 端点选项**(一个用于 UDP,一个用于 TCP)。
2025-02-26 19:08:50
876
原创 SOME/IP-SD -- 协议英文原文讲解5
前言SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块:1. SOME/IP协议讲解2. SOME/IP-SD协议讲解3. python/C++举例调试讲解。
2025-02-25 18:40:05
968
原创 SOME/IP-SD -- 协议英文原文讲解4
SD报文的发送端 如果知道自己的报文 需要被代理,则需要在配置项中把自己的IP和端口添加到配置数组的首项中,这样经过转发后 接收端回复时能按照真实的IP 端口进行回复。这个是IP代理选项,此选项位于选项数组最前面 ,依赖type=0x24标识,此选项不是任何entry的配置。layer port of SOME/IP-SD (currently: 30490). -- 建议值。of SOME/IP-SD (currently: 0x11 UDP). -- 建议值。
2025-02-25 17:25:56
1027
原创 SOME/IP-SD -- 协议英文原文讲解3
**安全关联状态监控**:客户端和网络系统需要实时监控安全关联的状态,确保所有的安全配置和加密通道在需要时都能正常工作。- **协议支持**:SA通常涉及到网络安全协议,例如 **IPsec**(用于IP层的加密和认证)、**MACsec**(用于数据链路层的加密和完整性校验)等。- **服务发现**:在基于安全端口的服务实例中,服务发现过程需要考虑安全关联的状态。- **定义**:安全关联是指两端通信(如客户端和服务器)之间的安全配置,它包括加密、身份验证等信息,确保通信的机密性、完整性和可用性。
2025-02-25 16:14:31
981
原创 SOME/IP-SD -- 协议英文原文讲解2
1 1001 ---> 主动发起reboot (old.reboot==1 and new.reboot==1 and old.session_id>=new.session_id)服务id的次版本号 -- 是向后兼容的变化 --- 表示新增了接口 不影响之前的接口使用 -- 可兼容 -- client对比不一致 打印报警信息 可继续订阅。此服务id的 主版本号 -- 表示已有的接口有重大变化,表示不兼容的变化 --- client对比不一致 会拒绝订阅。
2025-02-24 14:12:21
934
原创 SOME/IP-SD -- 协议英文原文讲解1
这两段内容([PRS_SOMEIPSD_00160] 和 [PRS_SOMEIPSD_00255])描述了 **SOME/IP-SD(Service Discovery)** 协议中 **Session ID** 和 **Reboot Flag** 的处理规则。- 当 SOME/IP 头部的 **Session ID** 回绕(即从最大值回到 `1`)时,Reboot Flag 应设置为 `0`。- 在系统重启后,SOME/IP-SD 消息的 **Reboot Flag** 应设置为 `1`。
2025-02-20 17:29:18
701
原创 SOME/IP--协议英文原文讲解12(完结)
这段内容讨论了 **SOME/IP 协议** 中 **接口版本(Interface Version)** 的兼容性规则,特别是关于 **Payload 格式** 和 **服务行为** 的变化。也就是说,如果配置的消息大小比实际需要的要大,那么可能会附加额外的文本,且无论标签中的消息大小如何,最终可能会被新的消息替代。:配置不当的消息大小可能导致不必要的数据被添加,或者消息内容被不期望地替换,这可能会影响系统的稳定性或传输的正确性。:如果方法参数是可选的,那么需要特别注意它们的处理方式,以保证接口的兼容性。
2025-02-20 15:19:55
829
原创 SOME/IP--协议英文原文讲解11
SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块:1. SOME/IP协议讲解2. SOME/IP-SD协议讲解3. python/C++举例调试讲解。
2025-02-20 13:00:03
1148
原创 SOME/IP--协议英文原文讲解10
前言SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块:1. SOME/IP协议讲解2. SOME/IP-SD协议讲解3. python/C++举例调试讲解。
2025-02-20 10:40:19
689
原创 SOME/IP--协议英文原文讲解9
这两段内容([PRS_SOMEIP_00750] 和 [PRS_SOMEIP_00751])涉及 **SOME/IP 分段消息** 的处理规则,特别是关于 **消息交错(Interleaving)** 和 **分段重排序(Reordering)** 的限制。如果是大包的SOME/IP数据 通过UDP直接传输 而不在SOME/IP层分包的话,数据则会直接转到IP层,IP层有MTU的限制 会进行分包发送,到接收端后IP层会重新组包。- SOME/IP 的标准 UDP 绑定只能传输适合单个 IP 数据包的消息。
2025-02-19 18:29:33
947
原创 SOME/IP--协议英文原文讲解8
建议:对于同一个服务的同一个实例 server端或client端的UDP和TCP协议可以用同一个端口号。就在服务ID的基础上 再进一步区分实例ID,实例就是实现这个服务的不同设备。由于 client端 IP+prot 同一组可以接收不同实例的数据,就不能用client的IP和port来区分实例连接。另外同一个ECU(IP)也可以有不同的实例,那就只能通过server的prt来区分不同的实例了。服务 是给一组或一种功能 编的号码。不同的实例 肯定处于不同的TCP/UDP连接中,否则区分实例就没意义了。
2025-02-19 11:23:02
669
原创 SOME/IP--协议英文原文讲解7
在此过程中,反序列化需要识别接收到的字节流中的元素,并将这些已识别的元素与相应服务接口配置的数据类型进行比较(请注意,数据类型是从接口规范中派生的,该规范定义了SOME/IP消息中所有数据结构的精确位置)。如果接收到的数据比预期的少,那么反序列化过程应该接受SOME/IP消息有效载荷中所有与配置的服务接口数据类型相对应的已知元素,并用指定的补充默认值(例如初始值)填充配置的服务接口数据类型中缺失的元素。SOME/IP消息的反序列化过程需要考虑接收到的消息长度,并处理可能大于或小于接口规范所预期的消息长度。
2025-02-18 15:03:55
667
原创 SOME/IP--协议英文原文讲解6
而对于UTF-16LE,BOM为FF FE。定义:UTF-16BE,即Unicode Transformation Format 16-bit Big Endian,同样是一种将Unicode字符转换为二进制数据的编码方式,但字节顺序与UTF-16LE相反。BOM:虽然UTF-16编码本身可以不带BOM,但带BOM的UTF-16文件可以通过BOM来区分是UTF-16LE还是UTF-16BE。UTF-16LE和UTF-16BE都是UTF-16编码的不同字节序表示方法,它们之间的主要区别在于字节的存储顺序。
2025-02-18 11:51:45
936
原创 TBOX--DSCP QoS 网络共享 服务质量优先级配置
tc用于设置流量队列和带宽管理,iptables用于标记 DSCP。tc提供精细的流量调度,允许为不同类型的流量设置不同的带宽限制和优先级。tc和iptables是可以结合使用的iptables用于标记流量的 DSCP 值,tc用于基于这些标记进行流量管理和调度。DSCP 值的范围是 0 到 63,值越大,优先级越高。EF (46)常用于实时流量,BE (0)是默认流量。
2025-02-18 09:31:50
478
原创 SOME/IP--协议英文原文讲解5
前言SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块:1. SOME/IP协议讲解2. SOME/IP-SD协议讲解3. python/C++举例调试讲解这一章节是按照规范文档顺序讲解的。按内容 这章节应该排在 string/arry数据类型讲解完 再讲 才好理解。读者可直接先阅读 后面string/arry内容后再回过来看这一节。
2025-02-09 16:39:35
1174
原创 SOME/IP--协议英文原文讲解4
前言SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块:1. SOME/IP协议讲解2. SOME/IP-SD协议讲解3. python/C++举例调试讲解4.1.3 Endianess -- 字节序[PRS_SOMEIP_00368]Upstream requirements: RS_SOMEIP_00026All SOME/IP Header Fields shall be encoded in n
2025-01-29 22:56:03
1283
原创 SOME/IP--协议英文原文讲解3
sessionID是管理会话的,是用来区分client端同一个ECU连续请求的,那对offer报文而言没有会话的概念啊(因为没有请求-回复成对出现),仅是server端自己的行为。为什么要强调版本号在SOMEIP头第15个字节的位置不可改变:因为后面如果SOMEIP的版本迭代,其它字段的位置可能会被改变,但是第15个字节必须还是版本号,因为要依赖识别版本迭代。扩展:UDP的大消息会在IP层进行分包,接收端IP层重新组包,SOMEIP的UDP大消息发送,如果没有丢包或错帧干扰,则会接收到完整的大消息。
2025-01-29 15:18:22
1311
原创 SOME/IP--协议英文原文讲解2
消息 ID(Message ID)是一个32 位标识符,用于以下目的:标识应用程序中方法的 RPC 调用。标识一个事件。这种设计确保了在并发请求场景下,客户端能够可靠地识别和处理每个响应消息,避免数据混淆或误匹配问题。保证并发时的唯一性:在未收到回复之前,或者认为回复超时之前,Request ID 不能重复。收到回复了 可以重复 -- 由client 负责。
2025-01-28 23:25:34
1207
原创 SOME/IP--协议英文原文讲解1
SOME/IP 提供基于服务的网络通信。它基于服务定义,列出了服务提供的功能。一个服务可以由零个或多个事件、方法和字段的组合组成。事件(Events)事件提供的数据会周期性地或在变化时或是门限式变化时从提供者发送给订阅者。方法(Methods)方法允许订阅者发起远程过程调用(RPC),这些调用会在提供者端执行。字段(Fields)通知器(Notifier):在数据发生变化、微小变化(epsilon change)或根据配置周期性变化时,通知器将数据从提供者发送到订阅者。获取器(Getter)
2025-01-26 14:55:08
1344
1
原创 Linux高级--3.3.2 自定义协议设计--ProtoBuf
总的来说,自定义通信协议能帮助开发者根据应用的特定需求进行优化,以提高性能、安全性、扩展性等方面的表现。在IM即时通信、节点服务器、HTTP协议、Nginx、Redis协议、SOME/IP协议、DoIP协议等场景中,通用协议虽然普遍适用,但自定义协议能为特定领域的应用提供更高效、更安全、更灵活的解决方案。自定义通信协议通常是为了满足特定应用场景、性能需求或是兼容性要求。这些协议的Header设计各具特色,针对不同的应用场景和需求优化了字段构成。IM协议和节点通信协议。
2025-01-26 12:40:12
1018
原创 Linux高级--3.3.1 C++ spdlog 开源异步日志方案
spdlog是由Gustav S.在 2015 年开发的一个高性能 C++ 日志库。开发这个库的主要目的是为了提供一个非常快速、轻量、易于使用的日志工具,特别适合需要高性能、低延迟日志记录的 C++ 应用程序。开发者:Gustav S.,2015 年开发目标:提供一个高性能、低开销、易用的 C++ 日志库,专为需要高吞吐量和多线程支持的应用设计。适用项目高性能应用(如游戏、金融服务等)多线程或并发系统(如 Web 服务器、分布式系统等)嵌入式系统和 IoT 设备实时数据处理和流处理。
2025-01-17 16:18:43
1330
原创 Linux高级--1.4 gdb调试
GDB(GNU Debugger)是 GNU 项目开发的一款强大的调试工具,支持 C、C++、Fortran 等多种编程语言。它允许开发者控制程序的执行,查看变量的值,调试崩溃的程序,并提供多种用于定位和分析程序问题的功能。如果需要调试自定义的共享库,可以使用。
2025-01-17 10:17:19
961
原创 Linux高级--3.2.7 了解分布式锁
在分布式系统中,由于不同节点(服务器、容器、虚拟机等)之间的独立性,资源和数据可能会被多个节点同时访问和修改,这就可能导致数据的不一致或竞争条件。为了解决这个问题,分布式锁被引入,确保在分布式系统中,同一时刻只有一个节点能够访问或操作共享资源。分布式锁需要跨网络或多个机器进行通信,因此加锁和解锁的过程会涉及到网络延迟,通常不是一个原子操作,存在延时和性能开销。分布式锁是一种重要的同步机制,可以有效地避免在分布式环境中出现资源竞争问题,确保系统的数据一致性和可靠性。
2025-01-17 09:59:52
503
原创 C -- 大端对齐 小端对齐 的人性化解释
网上很多资料对大小端对齐的解释 很多 很全 很准 但为啥老是记不住呢,所有的知识都是基于人性的情感原理,或是世界基本的运行规律而产生的,如果不能把知识和这两点打通,即使记住也很容易忘记。本篇文章基于这两点 分析下大小端对齐。
2025-01-15 11:00:34
458
原创 C -- 结构体内存对齐的原理
在 C 语言中,结构体成员和数组元素的内存布局有所不同,因此需要区别对待内存对齐的概念。下面是原因和细节解析:硬件访问效率:结构体中可能存在不同类型的成员:在内存中的布局可能是:总共占用 8 字节。结构体的成员之间由于类型不同且对齐要求不同,需要通过“内存对齐”来确保每个成员可以高效访问。通过对齐使结构体的成员排列接近数组的逻辑存储方式,从而在性能和灵活性之间取得平衡。数组的所有元素是同一类型:数组设计的目标是高效连续访问:假设 占 4 字节, 在内存中的布局为:由于所有元素都是
2025-01-12 11:45:22
1073
原创 Linux高级--3.2.5 “外挂式”死锁监测设计
通过图示,可以看出三个线程构成一个有向的环路,如果能把两个线程间的的指向(依赖)关系记录下来,并实时检测判断这些关系是否构成一个回路,如果发现有回路则说明有死锁现象。这就需要“图式”存储结构,我这里选择“邻接表”。根据代码逻辑,在即将加锁前,找下是否有线程持锁,有的话就构成了一个指向关系,即一条有向边。把这条边关系加入到邻接矩阵中即可。这里又有个问题,持锁前,找哪个线程已经持过这个锁,则需要在线程持锁后把这个关系保存下来才能找到,所以又需要一个数组或链表保存。1. 实现带有环路检测的“邻接表”
2025-01-03 18:27:02
1066
原创 Linux高级--3.2.4.1 Linux timer的系统调用方案
对于绝对时间模式,必须基于当前时间计算出定时器的绝对时间戳。如果使用相对时间,直接设置延迟时间即可。通过宏来方便地选择使用绝对时间还是相对时间。
2024-12-31 10:48:34
778
原创 Linux高级--3.2.4.2 常见的几种timer的设计方案
方案优点缺点方案 1简单易实现,利用map管理定时器,灵活可能存在性能瓶颈,尤其是大量定时器时方案 2一个timer_fd管理所有定时器,简化管理需要频繁更新timer_fd,性能瓶颈方案 3每个定时器都有独立timer_fd,精确管理定时器过多时资源消耗大方案 4高效管理大量定时器,适合大规模定时任务设计较为复杂,难以处理复杂场景。
2024-12-30 18:42:31
838
原创 Linux基础--1.2 Linux 的架构与工作原理
内核 (Kernel)Linux 的核心部分,负责系统资源的管理与调度,包括 CPU、内存、设备驱动等。核心功能包括:进程管理、内存管理、文件系统、网络栈和设备驱动。系统调用接口 (System Call Interface, SCI)用户程序与内核之间的桥梁,提供系统服务的调用入口,例如文件操作、进程控制。用户空间 (User Space)用户运行的应用程序和相关库位于此层,与内核通过系统调用交互。包括:Shell、桌面环境(如 GNOME、KDE)和各种用户程序。设备驱动程序。
2024-12-30 10:40:52
539
原创 Linux官文转载-- Linux 内核代码风格
(即实际函数体),编译器不允许在函数参数之后添加函 数参数属性。在这种情况下,它们应该跟随存储类型属性(例如,与上面的。
2024-12-30 09:16:28
916
原创 Linux基础--1.1 什么是 Linux 操作系统
Linux 作为一个高度灵活和可靠的操作系统,在现代技术生态中占据了不可替代的地位。从消费电子到工业控制,Linux 与硬件的结合无处不在。未来,随着 AI 技术和硬件的进步,我们可能会见证操作系统领域的更多创新。
2024-12-27 21:08:48
970
原创 工作编码案例--UDP多播 和 本地套接字bind
项目中一个封装的库负责UDP绑定,使用配置文件中指定的组播地址。排查发现,程序中组播绑定的设置在设备唤醒后失效,需要重新设置组播绑定。但绑定操作位于封装好的库(非开源)中,无法直接修改代码。在启动脚本中增加删除文件的确认步骤:循环判断管道文件是否真正被删除,只有确认文件不存在后才启动程序。命令返回成功后,文件未必立刻被删除,可能文件系统的同步延迟导致文件仍然存在。在另一个程序中重新为网卡绑定组播地址,作为唤醒后恢复组播通信的补充机制。命令删除对应的sock管道文件,然后立即启动程序完成套接字绑定及初始化。
2024-12-27 20:39:11
364
原创 TBOX--双卡双通网络共享方案
尽管 TCP 连接在网络切换时会短暂断开,但通过启用、调整重连策略、采用高可用性方案(如 Keepalived)、或者切换到UDP协议,可以有效减少网络切换带来的中断,尤其是在车机播放视频时实现无感知切换。
2024-12-27 13:59:37
982
原创 Linux高级--3.2.2.6高并发编程之“内存屏障”“CPU屏障”“编译屏障”
内存屏障的障中文意思是保护和隔离的,也有阻止的意思,阻止的是CPU对变量的继续访问,停下来更新下变量,从而保护变量的一致性。内存屏障是针对线程所有共享变量的,而原子操作仅针对当前原子变量。内存屏障是一种指令,它的作用是禁止 CPU 重新排序特定的内存操作。它确保在屏障之前的所有读/写操作在屏障之后的操作之前完成。内存屏障一般被用来控制多处理器环境中的内存可见性问题,尤其是在进行原子操作、锁和同步时。在多核处理器上,每个处理器都有自己的缓存,CPU 会将内存操作缓存到自己的本地缓存中。
2024-12-26 18:32:36
1039
原创 Linux高级--2.4.5 靠协议头保证传输的 MAC/IP/TCP/UDP---协议帧格式
简单性:UDP 的头部结构非常简单,仅有 8 字节(64 位),其中的字段非常直观:源端口、目标端口、长度和校验和。由于没有复杂的控制字段,UDP 的处理速度通常比 TCP 更快,延迟较低。无连接性:UDP 是无连接的协议,发送方和接收方不需要建立连接,每个 UDP 数据报都独立发送,且没有任何可靠性保证。它也没有流量控制、拥塞控制和顺序控制,因此 UDP 是一种不可靠的协议。应用场景。
2024-12-25 23:54:18
1684
GNSS 经纬度 所有国家的电子围栏
2024-11-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人