4. OPC UA通信协议栈
OPC UA 协议栈的设计遵循“传输层无关”原则,允许同一套信息模型通过多种底层协议传输。在实际工业物联网部署中,最常见的三种协议栈为 UA TCP 二进制协议、HTTPS 协议 和 UA TCP 协议栈(含安全层)。理解它们的差异与适用场景,是配置安全连接的基础。
4.1 协议栈分层架构
OPC UA 协议栈从下至上分为传输层、安全层、会话层与应用层。不同协议栈在传输层和安全层的实现方式不同,但上层接口保持一致。
核心原则: 无论底层使用二进制 TCP 还是 HTTPS,OPC UA 的地址空间、订阅、方法调用等上层功能完全一致。协议栈的选择只影响通信性能、防火墙穿透能力和安全机制。
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 连接建立流程
- HEL(Hello):客户端发送 Hello 消息,包含协议版本、接收缓冲区大小、发送缓冲区大小等参数。
- ACK(Acknowledge):服务器回复 ACK,确认协商参数。
- OPN(Open SecureChannel):客户端发起 OpenSecureChannel 请求,建立安全通道。
- MSG(Message):在安全通道内传输服务请求与响应。
- 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 客户端、跨企业通信 |
4.5 安全层详解
无论使用哪种传输协议,OPC UA 的安全层都提供以下三个核心功能:
- 身份验证:通过 X.509 证书或用户名/密码验证客户端和服务器身份。
- 消息签名:使用对称密钥对消息进行 HMAC 签名,防止篡改。
- 消息加密:使用 AES 等对称加密算法对消息体加密,保证机密性。
4.5.1 安全模式与安全策略
| 安全模式 | 签名 | 加密 | 适用场景 |
|---|---|---|---|
| None | 否 | 否 | 开发测试、无安全要求的内部网络 |
| Sign | 是 | 否 | 需要防篡改但允许明文传输的场景 |
| SignAndEncrypt | 是 | 是 | 生产环境、跨网络通信(推荐) |
安全警告: 在生产环境中禁止使用安全模式 "None"。即使在内网,也建议至少使用 "Sign" 模式防止中间人篡改。
4.6 实际部署建议
在工业物联网数据采集项目中,协议栈的选择应遵循以下原则:
- 现场总线层(PLC、RTU、传感器):使用 UA TCP 二进制协议,端口 4840,安全模式 SignAndEncrypt。
- 车间汇聚层(SCADA、边缘网关):同时支持 UA TCP 和 HTTPS,根据上游系统需求切换。
- 云端平台层(IoT Hub、MES、ERP):优先使用 HTTPS 协议,便于防火墙策略和证书管理。
通过合理选择协议栈和安全配置,可以在保证数据安全的同时,最大化工业物联网系统的通信效率与互操作性。