4、OPC UA 通信协议:二进制协议与 UA TCP、HTTPS 与 WebSocket、安全信道与会话管理

好,咱们进入第四讲。这一讲的内容,说白了就是OPC UA到底是怎么把数据从A点搬到B点的。你可能会想,这不就是网络通信吗?有什么好讲的?嗯,还真不一样。OPC UA为了兼顾工业场景的实时性、安全性和穿透性,搞出了好几套通信方案。我个人习惯把它们分成两类:一类是给局域网内高性能场景用的,另一类是给跨网络、跨防火墙用的。

4.1 二进制协议与 UA TCP

先说说最核心的二进制协议。OPC UA的二进制协议,不是像HTTP那样传文本,而是直接传字节流。为什么这么做?效率。我在一个汽车焊装车间项目里遇到过,一个控制器要同时上报上千个点位数据,如果用文本协议,光解析报文就能把CPU吃满。二进制协议就不同了,它紧凑、解析快,非常适合工业现场。

UA TCP是OPC UA自定义的传输层协议,它直接跑在TCP/IP之上。你可以把它理解成OPC UA的“专用高速公路”。它的报文结构很简单,我画个表格给你看:

字段 长度(字节) 说明
消息类型 4 如HEL、ACK、OPN、MSG、CLO
Chunk类型 4 标识是单个消息还是分片
消息体长度 4 整个消息体的字节数
安全头 可变 用于安全信道
序列号 4 防重放攻击
请求ID 4 关联请求与响应
消息体 可变 实际数据内容

你看,每个字段都是定长的,解析器直接按偏移量读取就行,不需要像JSON那样逐个字符匹配。这就是它快的原因。

核心要点:UA TCP的握手过程是:客户端发HEL(Hello),服务端回ACK(Acknowledge),然后双方协商最大消息大小、最大Chunk数等参数。协商完成后,才能进入后续的OpenSecureChannel阶段。

4.2 HTTPS 与 WebSocket

但是,UA TCP有个硬伤——它过不了防火墙。企业IT网络通常只开放80和443端口,UA TCP的4840端口被堵得死死的。怎么办?OPC UA提供了两种替代方案:HTTPS和WebSocket。

HTTPS方案,说白了就是把OPC UA的二进制数据包塞进HTTP的body里。我记得有个项目,客户IT部门死活不给开4840端口,最后我们就是用HTTPS+JSON的混合方式搞定的。虽然性能比UA TCP差一些,但胜在兼容性好,任何支持HTTPS的中间件都能处理。

WebSocket方案就更灵活了。它先通过HTTP升级握手,然后建立全双工的长连接。我在一个远程运维项目里用过WebSocket,客户端是浏览器,服务端是工厂的OPC UA服务器。浏览器通过WebSocket订阅报警,实时性比轮询好太多了。

我的建议:如果你在局域网内,优先用UA TCP。如果你要跨公网、过防火墙,用HTTPS或WebSocket。如果你要对接Web前端,WebSocket是首选。

4.3 安全信道与会话管理

接下来是重头戏——安全信道(SecureChannel)和会话(Session)。这两个概念容易搞混,我帮你理一理。

安全信道,是通信层面的安全机制。它负责加密、签名、防重放。你可以把它想象成一条加密的隧道。建立安全信道的过程是这样的:

  1. 客户端发送OpenSecureChannel请求,包含安全策略(如Basic256Sha256)
  2. 服务端验证客户端证书,协商密钥
  3. 双方建立共享密钥,后续所有报文都用这个密钥加密
  4. 安全信道有生命周期,到期后需要续期

会话,是应用层面的逻辑连接。它负责身份认证、权限控制、订阅管理。一个安全信道上可以承载多个会话。会话的建立过程:

  1. 客户端发送CreateSession请求,包含客户端证书、会话名称
  2. 服务端返回SessionId、认证令牌
  3. 客户端发送ActivateSession请求,包含用户名密码或证书
  4. 服务端验证身份,激活会话

避坑指南:我曾经在一个项目中,安全信道超时了但会话还在,结果客户端发请求时服务端直接拒绝。后来我养成了一个习惯:每次请求前检查安全信道是否有效,如果失效先续期再发请求。另外,会话也有超时时间,默认一般是1小时,但你可以根据场景调整。

为什么要把安全信道和会话分开?你想想看,安全信道是“怎么传”,会话是“谁在传”。不同的用户(会话)可以共享同一条加密隧道(安全信道),这样既保证了安全,又减少了握手开销。这个设计,我个人觉得非常巧妙。

4.4 实际项目中的选择策略

讲了这么多,你可能想问:实际项目中到底怎么选?我根据经验给你列个表:

场景 推荐协议 理由
车间内PLC与SCADA通信 UA TCP + 二进制 低延迟、高吞吐
跨工厂数据采集 HTTPS + 二进制 防火墙友好
Web端实时监控 WebSocket + 二进制 浏览器原生支持
移动端App HTTPS + JSON 开发简单、调试方便

嗯,这里要注意一点:不管你用哪种协议,安全信道和会话的管理逻辑是一样的。OPC UA把安全机制抽象成了独立层,底层协议怎么变,上层都不用改。这也是OPC UA设计的高明之处。

总结一下:二进制协议是OPC UA的“母语”,效率最高;UA TCP是它的专属通道;HTTPS和WebSocket是它的“外交官”,负责跨网络通信。安全信道管加密,会话管认证,两者配合,既安全又灵活。

下一讲,我们会深入OPC UA的地址空间与节点模型,看看数据在服务器里是怎么组织的。到时候你会明白,为什么OPC UA能成为工业4.0的通信基石。