跳转到主要内容

完整的通信链路

OSI 七层模型与协议对照表

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

 


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

通信方式功能适用层次应用场景优点缺点
管道(Pipe)单向或双向通信,适用于父子进程之间的数据传递。操作系统层(不属于OSI模型,但常用于应用层之上)。本地进程间通信,适用于简单的数据传递。简单易用,操作系统原生支持。仅限本地通信,数据量较小,父子进程关系限制。
命名管道(Named Pipe)支持无亲缘关系的进程间通信,支持本地或网络通信。操作系统层(不属于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-BusLinux 系统中用于进程间通信的消息总线。操作系统层(不属于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 通信方式位于操作系统层,但也可以延伸到传输层和应用层。
  • 协议组合的灵活性:根据场景需求,协议可以跨层组合使用,形成完整的通信链路。