跳转到主要内容

完整的通信链路

OSI 七层模型与协议对照表

层次 功能 常见协议/标准 工业协议
物理层 定义硬件接口、电气特性、信号传输方式。 RS-232、RS-485、USB、Ethernet、CAN、Wi-Fi、蓝牙、ZigBee、LoRa、NFC Modbus RTU(基于RS-485)、CANopen(基于CAN)
数据链路层 提供可靠的数据帧传输,处理错误检测和纠正。 Ethernet(IEEE 802.3)、Wi-Fi(IEEE 802.11)、PPP、HDLC Profinet、EtherCAT
网络层 负责路由选择和逻辑地址分配,确保数据包跨网络传输。 IPv4、IPv6、ICMP、ARP Modbus TCP(基于IP)、CIP(Common Industrial Protocol)
传输层 提供端到端的通信服务,负责数据分段、重组和流量控制。 TCP、UDP MQTT(基于TCP)、CoAP(基于UDP)
会话层 管理会话(连接的建立、维护和终止)。 SMB、RPC OPC UA
表示层 数据格式转换、加密解密、数据压缩。 TLS/SSL、JSON、XML 无特定工业协议,但加密和数据格式在工业通信中广泛使用。
应用层 为用户提供直接的网络服务,定义应用程序之间的通信规则。 HTTP/HTTPS、FTP/SFTP、SMTP/IMAP/POP3、WebSocket、gRPC Modbus TCP(基于TCP)、OPC UA、BACnet(楼宇自动化控制网络)


IPC(进程间通信)方式与层次对照表

通信方式 功能 适用层次 应用场景 优点 缺点
匿名管道 单向或双向通信,适用于父子进程之间的数据传递。 操作系统层(不属于OSI模型,但常用于应用层之上)。 本地进程间通信,适用于简单的数据传递。 简单易用,操作系统原生支持。 仅限本地通信,数据量较小,父子进程关系限制。
命名管道 支持无亲缘关系的进程间通信,支持本地或网络通信。 操作系统层(不属于OSI模型,但常用于应用层之上)。 本地或网络进程间通信,适用于跨进程的数据传递。 支持跨进程和跨网络通信,灵活性高。 实现复杂度较高,性能受限于操作系统。
消息队列 通过消息队列传递数据,支持异步通信。 操作系统层(不属于OSI模型,但常用于应用层之上)。 本地或分布式系统中的任务调度和消息传递。 支持异步通信,适合任务队列和事件驱动模型。 消息队列可能存在阻塞,消息大小有限制。
共享内存 多个进程共享一块内存区域,速度快。 操作系统层(不属于OSI模型,但常用于应用层之上)。 实时性要求高的本地进程间通信。 速度快,适合大数据量传输。 需要进程同步机制(如信号量)避免竞争,开发复杂度高。
信号量 用于进程同步,避免资源竞争。 操作系统层(不属于OSI模型,但常用于应用层之上)。 进程间同步和资源管理。 简单高效,适合资源锁定和同步。 仅用于同步,不适合数据传输。
套接字(Socket) 支持本地和网络通信,基于 TCP/UDP。 传输层 本地或网络通信,适用于客户端与服务器之间的通信。 支持本地和远程通信,灵活性高,适合分布式系统。 需要手动管理连接和协议,开发复杂度较高。
信号(Signal) 用于进程间的简单通知机制。 操作系统层(不属于OSI模型)。 进程间的简单事件通知(如终止、暂停)。 简单高效,适合轻量级通知。 仅支持简单的信号传递,不适合复杂数据通信。
文件映射(Memory-Mapped Files) 通过文件共享内存区域,支持进程间通信。 操作系统层(不属于OSI模型,但常用于应用层之上)。 本地进程间通信,适用于大数据量的共享。 速度快,适合大数据量传输,支持持久化。 需要同步机制避免竞争,依赖文件系统。
gRPC 基于 HTTP/2 的高性能 RPC 框架。 应用层 微服务之间的高效通信。 高性能,支持流式通信,跨语言支持。 不适合浏览器直接使用,消息格式为二进制,调试较复杂。
REST API 基于 HTTP 的轻量级通信方式。 应用层 请求-响应模式的通信,如数据查询,前端与后端之间的通信,适用于 Web 应用。 简单易用,广泛支持,适合标准化的请求-响应模式。 不支持实时通信,延迟较高,需频繁轮询实现实时性。
WebSocket 基于 TCP 的全双工通信协议。 应用层 实时性要求高的前端与后端通信(如聊天应用、实时数据推送)。 延迟低,性能高,支持全双工通信,适合高并发场景。 需要手动管理连接和消息格式,开发复杂度较高。
SignalR 基于 WebSocket/SSE/Long Polling 的实时通信框架。 应用层 聊天、通知、仪表盘、多人协作。 自动选择最佳协议,开发简单,支持广播和组通信。 如果无法使用 WebSocket,性能可能下降(如 Long Polling)。
MQTT 基于 TCP 的轻量级发布/订阅协议。 应用层 物联网设备的轻量级通信。 轻量级,低带宽消耗,支持 QoS(服务质量)等级,适合低功耗设备。 需要专门的 MQTT Broker,消息格式简单,不适合复杂数据结构。
D-Bus Linux 系统中用于进程间通信的消息总线。 操作系统层(不属于OSI模型,但常用于应用层之上)。 Linux 系统中的进程间通信(如桌面环境组件之间的通信)。 高效,支持广播和点对点通信,适合 Linux 环境。 仅适用于 Linux 系统,跨平台支持较差。
ZeroMQ 高性能消息队列库,支持多种通信模式(如发布/订阅、请求/响应)。 应用层 分布式系统中的高性能通信。 高性能,支持多种通信模式,跨平台支持好。 需要手动管理消息格式和连接,学习曲线较陡峭。

补充说明


关于 Modbus 的位置说明

  • Modbus RTU:基于 RS-485 的物理层和数据链路层协议,主要用于工业现场设备之间的通信。
  • Modbus TCP:基于 TCP/IP 的应用层协议,适用于工业自动化中设备与服务器之间的通信。

协议的组合应用示例

1. 下位机与上位机

  • 场景:工业现场的传感器(下位机)通过 RS-485 与 PLC(上位机)通信。
  • 协议组合
    • 物理层:RS-485。
    • 数据链路层:Modbus RTU。
    • 应用层:Modbus 协议解析传感器数据。

2. 上位机与远程服务器

  • 场景:PLC(上位机)通过以太网将数据上传到远程服务器。
  • 协议组合
    • 物理层:Ethernet。
    • 数据链路层:以太网帧。
    • 网络层:IPv4。
    • 传输层:TCP。
    • 应用层:HTTP 或 MQTT。

3. 远程服务器与前端客户

  • 场景:远程服务器通过 Web 服务向前端客户提供实时数据。
  • 协议组合
    • 物理层:光纤或 Wi-Fi。
    • 数据链路层:以太网或 Wi-Fi。
    • 网络层:IPv4/IPv6。
    • 传输层:TCP。
    • 表示层:TLS(HTTPS)。
    • 应用层:REST API 或 WebSocket。

总结

  • 清晰的分层职责:每一层都有明确的功能和协议,避免混淆。
  • Modbus 的位置:RTU 属于物理层和数据链路层,TCP 属于应用层。
  • IPC 的层次划分:大部分 IPC 通信方式位于操作系统层,但也可以延伸到传输层和应用层。
  • 协议组合的灵活性:根据场景
    需求,协议可以跨层组合使用,形成完整的通信链路。