3. OPC UA 通信模型:客户端/服务器架构、发现服务、会话管理、安全模型
OPC UA 采用面向服务的架构(SOA),其通信模型围绕 客户端(Client) 与 服务器(Server) 两个角色展开。服务器负责提供数据、告警、历史数据等地址空间资源;客户端则负责发起连接、读取/写入数据、订阅事件。理解这一模型是构建可靠工业数据采集通道的基础。
3.1 客户端/服务器架构
OPC UA 的通信架构并非简单的点对点连接,而是包含 发现、会话建立、安全握手 三个核心阶段。下图展示了客户端与服务器之间的典型交互流程:
架构要点:
- 服务器:托管地址空间(AddressSpace),包含所有节点(变量、对象、方法)。
- 客户端:通过服务调用(Service Call)访问服务器资源,不直接操作底层硬件。
- 传输层:支持 OPC UA 二进制(UA Binary)和 OPC UA XML(UA XML)两种协议。
3.2 发现服务(Discovery Service)
发现服务允许客户端在不知道服务器具体端点的情况下,找到可用的 OPC UA 服务器及其支持的协议、安全策略。这是工业物联网自动组网的关键环节。
| 服务名称 | 功能描述 | 典型使用场景 |
|---|---|---|
| FindServers | 客户端向已知的发现服务器(LDS)查询可用服务器列表 | 首次连接时扫描网络中的 OPC UA 设备 |
| GetEndpoints | 获取指定服务器的所有端点信息(协议、安全策略、证书要求) | 客户端选择匹配的安全模式进行连接 |
| RegisterServer | 服务器向发现服务器注册自身信息 | 服务器启动时自动注册,便于客户端发现 |
实践建议: 在工业现场,建议部署 本地发现服务器(LDS) 或 全局发现服务器(GDS),统一管理所有 OPC UA 服务器的注册与发现,避免客户端逐个扫描 IP 地址。
3.3 会话管理(Session Management)
会话是客户端与服务器之间逻辑上的持久连接。一个会话对应一个客户端身份,服务器通过会话 ID 跟踪客户端的操作状态。会话管理包含创建、激活、续约和关闭四个阶段。
常见陷阱: 会话创建后必须调用
ActivateSession 才能进行数据操作。部分 SDK 在连接成功后自动完成激活,但手动实现时容易遗漏此步骤,导致后续读写请求被拒绝。
3.4 安全模型(Security Model)
OPC UA 的安全模型是工业物联网的核心保障,涵盖 身份认证、消息签名、加密传输 三个层面。安全模式(SecurityMode)决定了通信的保护等级。
| 安全模式 | 签名 | 加密 | 适用场景 |
|---|---|---|---|
| None | 无 | 无 | 仅用于测试或隔离网络环境 |
| Sign | 有 | 无 | 需要验证消息来源,但数据可明文传输 |
| SignAndEncrypt | 有 | 有 | 生产环境推荐,同时保证完整性和机密性 |
安全模型还定义了以下关键组件:
- 应用证书(Application Certificate):每个 OPC UA 应用(客户端/服务器)必须拥有 X.509 证书,用于身份标识。
- 信任列表(Trust List):服务器维护可信任的客户端证书列表,拒绝未授权连接。
- 安全策略(SecurityPolicy):指定加密算法(如 AES-256、SHA-256)和密钥长度。
安全最佳实践:
- 生产环境始终使用
SignAndEncrypt模式。 - 定期轮换应用证书,避免使用自签名证书长期有效。
- 部署 GDS(全局发现服务器)统一管理证书生命周期。
3.5 通信模型总结
下表对比了 OPC UA 通信模型各核心要素的职责与关系:
| 要素 | 职责 | 关键服务/方法 |
|---|---|---|
| 发现服务 | 定位可用服务器和端点 | FindServers, GetEndpoints |
| 会话管理 | 维护客户端身份与状态 | CreateSession, ActivateSession, CloseSession |
| 安全模型 | 认证、签名、加密 | OpenSecureChannel, CloseSecureChannel |
| 地址空间 | 组织和管理数据节点 | Browse, Read, Write, Subscribe |