4. OPC UA通信协议栈

OPC UA 协议栈的设计遵循“传输层无关”原则,允许同一套信息模型通过多种底层协议传输。在实际工业物联网部署中,最常见的三种协议栈为 UA TCP 二进制协议、HTTPS 协议 和 UA TCP 协议栈(含安全层)。理解它们的差异与适用场景,是配置安全连接的基础。

4.1 协议栈分层架构

OPC UA 协议栈从下至上分为传输层、安全层、会话层与应用层。不同协议栈在传输层和安全层的实现方式不同,但上层接口保持一致。

核心原则: 无论底层使用二进制 TCP 还是 HTTPS,OPC UA 的地址空间、订阅、方法调用等上层功能完全一致。协议栈的选择只影响通信性能、防火墙穿透能力和安全机制。
OPC UA 协议栈分层架构 OPC UA 协议栈分层架构 应用层(地址空间、订阅、方法) 会话层(SecureChannel、Session) 安全层(加密、签名、证书验证) UA TCP 二进制协议 (opc.tcp://) HTTPS 协议 (https://) 说明: 安全层在 UA TCP 中内嵌于协议栈;HTTPS 则依赖 TLS 实现等效安全功能。

4.2 UA TCP 二进制协议(opc.tcp://)

UA TCP 是 OPC UA 原生定义的二进制传输协议,默认端口 4840。它采用紧凑的二进制编码(UA Binary),具有低延迟、高吞吐量的特点,是工业现场最常用的协议栈。

4.2.1 协议帧结构

UA TCP 消息帧由固定长度的消息头和可变长度的消息体组成。消息头包含版本号、消息类型、消息大小等字段。

字段 长度(字节) 说明
MessageType 3 ASCII 字符标识消息类型(如 "HEL"、"OPN"、"MSG")
ChunkType 1 分块类型:'F'(完整)、'C'(中间)、'A'(最后)
MessageSize 4 整个消息帧的总长度(包含消息头)
SecureChannelId 4 安全通道标识符
Body 可变 序列化的 OPC UA 服务调用数据

4.2.2 连接建立流程

  1. HEL(Hello):客户端发送 Hello 消息,包含协议版本、接收缓冲区大小、发送缓冲区大小等参数。
  2. ACK(Acknowledge):服务器回复 ACK,确认协商参数。
  3. OPN(Open SecureChannel):客户端发起 OpenSecureChannel 请求,建立安全通道。
  4. MSG(Message):在安全通道内传输服务请求与响应。
  5. CLO(Close):关闭安全通道和连接。
性能优势: UA TCP 二进制协议的消息体比等效的 XML/JSON 小 60%~80%,在 1ms 周期采样的高速场景下优势明显。

4.3 HTTPS 协议(https://)

HTTPS 协议栈将 OPC UA 消息封装在 HTTP/HTTPS 请求中,使用 UA XML 或 UA JSON 编码。它主要面向 IT 层集成、跨防火墙通信和 Web 客户端访问场景。

4.3.1 协议特点

  • 防火墙友好:使用标准 443 端口,无需开放额外端口。
  • 编码方式:支持 XML 和 JSON,便于与 RESTful API 集成。
  • 安全机制:依赖 TLS 1.2/1.3,证书管理遵循 Web PKI 体系。
  • 性能开销:HTTP 头部和 XML/JSON 编码导致带宽占用较大,延迟高于 UA TCP。

4.3.2 请求-响应模式

HTTPS 协议栈使用标准的 HTTP POST 方法传输 OPC UA 服务请求。每个 HTTP 请求包含一个 OPC UA 服务调用,响应中携带服务结果。

POST /opcua HTTP/1.1
Host: server.example.com:443
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 1248

<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Body>
    <ReadRequest xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
      <NodeId>i=85</NodeId>
      <AttributeId>13</AttributeId>
    </ReadRequest>
  </soap:Body>
</soap:Envelope>

4.4 协议栈对比与选型

对比维度 UA TCP 二进制 HTTPS
默认端口 4840 443
编码格式 UA Binary XML / JSON
传输效率 高(低开销) 中(HTTP 头部 + 文本编码)
防火墙穿透 需开放 4840 端口 天然支持(443 端口)
安全层实现 内嵌 UA Secure Conversation 依赖 TLS
典型场景 PLC、DCS、SCADA 实时通信 云端集成、Web 客户端、跨企业通信
UA TCP 与 HTTPS 协议栈对比 UA TCP 与 HTTPS 协议栈对比 UA TCP 二进制协议栈 UA Binary 编码 UA Secure Conversation TCP 传输(端口 4840) HTTPS 协议栈 XML / JSON 编码 TLS 加密 HTTP/HTTPS(端口 443) 选型建议: 现场层实时通信优先选择 UA TCP;跨网络、Web 集成场景选择 HTTPS。

4.5 安全层详解

无论使用哪种传输协议,OPC UA 的安全层都提供以下三个核心功能:

  • 身份验证:通过 X.509 证书或用户名/密码验证客户端和服务器身份。
  • 消息签名:使用对称密钥对消息进行 HMAC 签名,防止篡改。
  • 消息加密:使用 AES 等对称加密算法对消息体加密,保证机密性。

4.5.1 安全模式与安全策略

安全模式 签名 加密 适用场景
None 否 否 开发测试、无安全要求的内部网络
Sign 是 否 需要防篡改但允许明文传输的场景
SignAndEncrypt 是 是 生产环境、跨网络通信(推荐)
安全警告: 在生产环境中禁止使用安全模式 "None"。即使在内网,也建议至少使用 "Sign" 模式防止中间人篡改。

4.6 实际部署建议

在工业物联网数据采集项目中,协议栈的选择应遵循以下原则:

  1. 现场总线层(PLC、RTU、传感器):使用 UA TCP 二进制协议,端口 4840,安全模式 SignAndEncrypt。
  2. 车间汇聚层(SCADA、边缘网关):同时支持 UA TCP 和 HTTPS,根据上游系统需求切换。
  3. 云端平台层(IoT Hub、MES、ERP):优先使用 HTTPS 协议,便于防火墙策略和证书管理。

通过合理选择协议栈和安全配置,可以在保证数据安全的同时,最大化工业物联网系统的通信效率与互操作性。