从OSI七层网络模型角度了解CAN通信协议

前言:先占个位置,文章内容皆来自网络,我只是搬运工,等后面理解深刻了再进行修文。

CAN通信协议的网络架构基于OSI七层模型进行设计,但实际实现中根据其应用场景(如汽车电子、工业控制等)进行了简化和优化。以下是结合OSI模型从应用层向下的分层解析,及其在CAN协议中的具体实现和应用:


一、应用层(Application Layer)

功能:定义具体的应用协议,如设备控制指令、诊断服务、数据交互格式等。
CAN实现

  • 自定义应用协议:如工业自动化中的设备控制指令格式。
  • 标准化协议
    • CANopen:实现设备参数配置、实时控制、同步通信等,支持对象字典(Object Dictionary)机制。
    • UDS(ISO 14229):用于车辆诊断,定义诊断请求与响应格式(如故障码读取、ECU编程)。
  • 数据格式:通过PDU(Protocol Data Unit)封装数据,例如通过信号打包/解包处理。

二、表示层(Presentation Layer)

功能:数据格式转换、加密/解密、压缩/解压。
CAN实现

  • CAN协议本身不直接定义表示层功能,但通过上层协议实现:
    • CANopen:使用对象字典统一数据格式,支持数据类型(如整数、浮点数)的标准化表示。
    • 诊断协议:如UDS中的ASN.1编码规则对诊断数据进行结构化封装。

三、会话层(Session Layer)

功能:管理通信会话(建立、维护、终止),同步节点间交互。
CAN实现

  • CAN总线无原生会话层,但通过应用层协议扩展:
    • CANopen:通过NMT(网络管理协议)控制节点状态(启动/停止),实现会话管理。
    • 诊断服务:UDS中的会话控制服务(如切换诊断模式)管理通信状态。

四、传输层(Transport Layer)

功能:端到端的数据可靠传输,处理大数据分片与重组。
CAN实现

  • ISO 15765-2(CAN TP)
    • 分片与重组:将超过8字节的数据分割为多帧传输(如诊断长报文)。
    • 流控制:通过流控帧(Flow Control Frame)协调发送与接收速率。
  • 经典CAN:单帧最大8字节,不涉及传输层分片。

五、网络层(Network Layer)

功能:数据路由、地址管理与逻辑寻址。
CAN实现

  • 广播通信:默认所有节点接收报文,通过标识符(ID)过滤目标数据、。
  • 报文滤波:硬件或软件配置接收过滤器,仅处理特定ID范围的帧。
  • 网关功能:通过PDU路由器(如AUTOSAR PduR模块)跨总线转发数据。

六、数据链路层(Data Link Layer)

功能:帧格式定义、错误检测、仲裁机制、流量控制。
CAN实现(ISO 11898-1)

  • 帧结构
    • 标准帧(11位ID)扩展帧(29位ID),支持优先级仲裁。
    • 帧类型:数据帧、远程帧、错误帧、过载帧。
  • 仲裁机制:非破坏性位仲裁(显性位覆盖隐性位)。
  • 错误处理:CRC校验、位填充、错误帧重传。
  • 逻辑链路控制(LLC):报文过滤与错误恢复。

七、物理层(Physical Layer)

功能:电气特性、信号编码、总线拓扑。
CAN实现(ISO 11898-2/3)

  • 电气标准
    • 高速CAN(ISO 11898-2):1 Mbps,差分信号(显性0: CAN_H=3.5V, CAN_L=1.5V;隐性1: 均2.5V)。
    • 低速容错CAN(ISO 11898-3):125 kbps,支持单线故障容错。
  • 拓扑结构
    • 闭环总线:终端电阻120Ω,最大长度40m。
    • 开环总线:独立双线,最长1km。
  • 同步机制:位定时与采样点配置(SS/PTS/PBS1/PBS2段)。

总结:CAN协议与OSI模型的对应关系

OSI层CAN实现核心标准/协议
应用层CANopen、UDS、J1939等ISO 14229, CiA 301
表示层由应用层协议(如对象字典)实现CANopen Object Dictionary
会话层网络管理协议(NMT)、诊断会话控制CiA 302, ISO 15765
传输层ISO 15765-2(CAN TP)ISO 15765-2
网络层标识符过滤、PDU路由(如AUTOSAR PduR)ISO 11898-1
数据链路层帧格式、仲裁、错误检测(ISO 11898-1)ISO 11898-1
物理层差分信号、位定时(ISO 11898-2/3)ISO 11898-2/3

扩展说明

  1. 协议灵活性:CAN仅强制要求物理层和数据链路层,上层协议可根据场景选择(如汽车用UDS,工业用CANopen)。
  2. 实时性优化:短帧设计(经典CAN 8字节)和优先级仲裁机制保障实时性。
  3. 未来演进:CAN FD支持64字节数据段和可变速率,CAN XL目标2048字节,扩展应用场景。

通过分层架构,CAN实现了从底层电气特性到高层应用协议的完整生态,成为工业与汽车领域的主流通信方案。

### OSI七层模型各层功能详解 #### 物理层 物理层负责定义硬件设备之间的电气、机械、过程和功能特性,以实现比特流的透明传输。这包括电缆标准、电压电平及时序等细节[^1]。 #### 数据链路层 数据链路层的任务是在相邻节点之间提供可靠的数据传输服务。该层处理帧同步、差错控制及流量控制等问题,并可进一步细分为逻辑链路控制子层与媒体访问控制子层[^2]。 #### 网络层 网络层主要关注路由选择算法的设计及其优化工作;它决定了分组通过通信子网的最佳路径并执行拥塞控制策略。此外,在互联网环境中还涉及到IP地址分配机制等内容[^3]。 #### 传输层 此层次提供了端到端间进程间的可靠或不可靠通讯连接建立和服务质量保障等功能。具体来说就是TCP协议可以保证消息按顺序无误到达接收方而UDP则不作任何承诺只管发送即可[^4]。 #### 会话层 会话层支持两个应用程序创建、维护和终止对话关系。其职责涵盖了同步操作状态保存点设置以及恢复断开后的继续运行能力等方面的工作。 #### 表示层 表示层涉及数据格式转换、加密解密、压缩解压等一系列为了确保不同系统能够互相理解所交换的信息所需采取的操作措施。 #### 应用层 作为最接近用户的那一级抽象层面, 它直接面向各种特定的应用程序需求设计相应的高层协议来满足实际业务场景下的交互要求; 常见的例子如HTTP用于网页浏览,Ftp文件传送等等。 ```python # Python代码示例展示如何使用socket库模拟简单的客户端服务器架构中的部分OSI层行为 import socket def create_server(): server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) host = 'localhost' port = 12345 try: server_socket.bind((host, port)) print(f'Server started on {host}:{port}') while True: server_socket.listen(5) client_conn, addr = server_socket.accept() with client_conn as conn: data = conn.recv(1024).decode('utf-8') if not data: break response_message = f'Echo from Server: {data}' conn.sendall(response_message.encode()) finally: server_socket.close() if __name__ == '__main__': create_server() ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

草莓仙生

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

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

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

打赏作者

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

抵扣说明:

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

余额充值