【问题标题】:Can OPCUA clients send HELLO Message in Chunks?OPCUA 客户端可以在 Chunks 中发送 HELLO 消息吗?
【发布时间】:2019-07-29 10:41:34
【问题描述】:

我使用Prosys Opcua client 作为我的服务器的测试客户端。根据 OPCUA 规范,客户端必须向服务器发送 HEL 数据包,然后服务器将确认客户端,并且流程将继续到建立连接的点。

我注意到 prosys 客户端以块的形式发送 HELLO 消息,它发送 HE 然后 L 并继续发送字节,直到 HELLO 数据包完成。

我发现这种行为是异常的,而且我在规范中似乎没有任何地方说 HELLO 消息可以分块传输。

当我使用其他客户端时,HELLO 消息作为单个数据包发送。

下面是显示prosys客户端发送的数据包的wireshark快照,我突出显示了hello数据包,最终的hello仅包含端点url,HELLO消息的所有其他属性都在HELLO数据包之上发送。

这是标准行为吗?如果是,规范的哪一部分提到了这一点?

【问题讨论】:

    标签: opc opc-ua


    【解决方案1】:

    据我所知,这是合规的,尽管不是最理想的。 OPC UA TCP 映射不关心如何将消息拆分为网络数据包。为什么要呢?那是一个低级的细节。基于 TCP 的其他协议也不关心(例如 HTTP)。

    UA 规范的任何部分都不需要将其提及为“允许”,因为没有理由不应该允许它 - 它只是某些底层协议的属性,而 OPC UA 不能强制底层协议应该行为与他们的标准不同。

    请注意,您已经编写了“...以块的形式传输”。为了清楚起见,您观察到的“块”是携带 TCP 段的 IP 数据包。它们不是 OPC UA 第 6 部分(映射)描述的“消息块”——它们不能是,因为它们适用于 UA 安全对话协议,并且 Hello 消息是在该协议开始使用之前发送的。

    【讨论】:

    • 这是有道理的;由于规范提到来自客户端的第一个请求应该是一个 HELLO 消息,因此即使数据包是一次发送或分块发送,期待来自客户端的 HELLO 消息也是有效的。
    猜你喜欢
    • 2012-10-04
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    相关资源
    最近更新 更多