GIGE 协议摘录 —— GVCP 协议(二)(上)

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: GIGE 协议摘录 —— GVCP 协议(二)

    GVCP 协议描述了程序与设备之间遵守的通信规范,重点介绍了三种类型的通道,即控制通道消息通道流通道,并列举了各种事件命令。

概览

   GVCP 是一种依赖于 UDP 传输层协议的应用层协议。它基本上允许应用程序在设备上配置设备(通常是照相机),并在设备上实例化流通道( GVSP 发射器或接收器,如果适用),以及设备在特定事件发生时通知应用程序。


   GVCP 仅为一个应用程序(主应用程序)提供必要的支持,以控制设备(写入设备)。然而,如果主应用程序允许这样做,那么许多应用程序就可以监视一个设备(从一个设备中读取)。应用程序也可以请求对已经在主应用程序控制下的设备的控制,前提是设备支持并且主应用程序允许这样做。在 GVCP 下,应用程序是主程序,设备是从程序。命令请求总是由应用程序发起的。


   命令和确认消息必须分别包含在一个数据包中。应用程序必须等待确认消息(当请求时)才能发送下一个命令消息。这就创建了一个非常基本的握手,以确保最小的流量控制。确认消息提供设备实际接收到命令的反馈,它还提供命令请求的任何响应数据。


   该规范的当前版本使用 UDP IPv4作为传输层协议。由于 UDP 是不可靠的, GVCP 定义了机制来保证数据包传输的可靠性和确保最小的流量控制。

一、 基本概念

    在 GVCP 协议报文中,最大传输单元 MTU 定义为 576byte ,包括 IP 头、 UDP 头、 GVCP 头以及数据负载部分。

   GVCP 控制头和数据段部分大小必须是4字节的倍数。


   GVCP 是基于 UDP 无连接服务的,因此,设计了消息重传机制。消息重试次数可以由用户设定,默认值为 3 。reg_d≠0 ,在控制通道关闭后,其值会被初始化。此外,还启用了端到端连接,通过设置心跳计数来侦听链路是否断开。同理,其值是可以自定义的。一般来说,应用程序端的心跳频率应略低于设备端的 13,这样可以在 UDP 包发送丢失时排除心跳因素的干扰。

    GVCP 头包含了键值 0x42,用于设备与应用程序识别 GVCP 包。

    设备的第一个 GVCP 端口号必须为 3956 。

二、通道

    通道即虚拟连接。在本说明中包含 1 个控制通道,0-512 个流通道,0 或 1 个消息通道。

(1) 控制通道

    控制通道被应用程序用于与设备进行通信。 GVCP 定义了两种类型的控制通道:

  1. 主控制通道:主控制通道由主应用程序创建。主应用程序是指允许写入设备寄存器的应用程序。只允许一个应用程序作为一个设备的主要应用程序。
  2. 辅助控制通道:任何辅助应用程序都会创建辅助控制通道。辅助应用程序只能从设备寄存器中读取(它们不能写入其中)。这可以用于监视或调试。一个设备可能支持许多辅助应用程序。一个设备不允许支持任何辅助应用程序。

    在消息或流通道创建前,必须实例化一个控制通道。例如,有程序请求对一个寄存器进行写操作,以实现一个图像捕获,设备应该在寄存器被写入时返回一个响应,而不是捕获已完成时。

1、控制通道权限

  GVCP 定义了四个级别的特权:

  1. 独家访问,通过写 CCP 寄存器授权访问。主程序能对设备进行读写,其他程序则不能,也不允许创建一个第二控制通道,除其发送的 DISCOVERY_CMD、FORCEIP_CMD 等少数命令,其他命令请求设备一概返回一个错误。


  1. 控制访问权限,与前者不同在于,其他程序可以读设备,也允许具有控制访问权的二级程序创建一个控制通道。

  1. 具备切换能力的控制访问,与控制访问不同在于,该模式主程序能对设备进行读写,允许具有正确凭据的其他程序控制设备。
  2. 监控访问,条件最弱一般用于调试帮助。只要无独占访问的程序连接设备就可以读该设备。

   设备必须记录主程序相关的上下文信息,至少包括程序 IP 地址、源 UDP 端口和授予特权类型,以确定其是否可授权给其他程序(如果收到的命令消息合法)。


   在程序端使用一个动态端口号(任意),设备端使用标准 GVCP 端口(除非通过 mDNS 通告了一个不同的端口)就可以创建控制通道,再通过 GVCP DISCOVERY 命令创建链接。在软件开发阶段,对设备使用非独占方式访问,有助于其他调试工具监控该设备。

2、控制通道寄存器

  1. 控制通道特权寄存器(Control Channel Privilege register ( CCP ))
  2. 控制切换键寄存器(Control Switchover Key register)
  3. 心跳超时寄存器(Heartbeat Timeout register)
  4. 待定超时寄存器(Pending Timeout register)

3、打开/关闭控制通道

    程序通过对 CCP 寄存器写请求特权,并检查设备 ACK 消息返回的状态,根据状态码内容决定是否有打开通道的资格。允许主程序在不关闭控制通道时请求相同的特权类型,如可通过写 CCP 寄存器来直接切换到另一控制特权。通过对 CCP 寄存器写 0 来关闭通道,并释放主程序的特权。

4、控制通道心跳

   使用心跳序列可以定期检测控制通道是否处于活动状态,心跳速率是可自定义的,默认每秒 1 次。设备在接收到主程序任一有效命令后,必须重置心跳计数,少数命令除外,如 ACTIONCMD 。心跳计数可通过读 CCP 寄存器来重置,且只能由主程序执行。若设备在超过用户设置的心跳超时时间(默认 3 秒)后,且没有禁用心跳性能寄存器仍没有收到一个控制消息,则必须断开控制通道。如果主程序不能读 CCP 寄存器或读取非预期数值时,即可判定链路断开,此时,必须实例化控制通道以建立与设备的新链接。

5、设备控制

    主程序可以在打开通道后,发送任何受 GVCP 支持的命令,二级程序可发送 READREG 和 READMEM 命读取设备速率。 DISCOVERY、ACTION 和 PACKETRESEND 命令可以在任何时间由任一程序发送,且设备总是在收到后返回一个 ACK 消息。

6、使用待定应答

    若设备执行命令时间比程序预期的要长,则下述机制有助于相互间通信:

  1. 执行一个请求所需的最大执行时间。
  2. 当请求执行时间将超过①中的值,使用使用 PENDING_ACK 消息通知程序使其可以等待额外必需的时间来完成该请求。

PENDING_ACK 的 ack_id 值与程序初始请求的 reg_id 值相同。若设备支持该消息,则必需在一个PENDING_ACK 和 ACK 命令发出之间响应 DISCOVERY_CMD,且不能用该消息响应一个DISCOVERY_CMD、FORCEIP_CMD 和 PACKETRESEND_CMD。

GIGE 协议摘录 —— GVCP 协议(二)(下):https://developer.aliyun.com/article/1598396


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
21天前
|
XML 存储 网络安全
GIGE 协议摘录 —— GVCP 协议(二)(下)
GIGE 协议摘录 —— GVCP 协议(二)
39 3
|
21天前
|
存储
GIGE 协议摘录 —— GVSP 协议(三)(下)
GIGE 协议摘录 —— GVSP 协议(三)
26 1
|
21天前
|
传感器 XML 编解码
GIGE 协议摘录 —— GVSP 协议(三)(中)
GIGE 协议摘录 —— GVSP 协议(三)
37 1
|
21天前
|
传感器
GIGE 协议摘录 —— GVSP 协议(三)(上)
GIGE 协议摘录 —— GVSP 协议(三)
48 1
|
21天前
|
存储 网络协议 Linux
GIGE 协议摘录 —— 设备发现(一)
GIGE 协议摘录 —— 设备发现(一)
38 3
|
3月前
|
网络协议
技术笔记:modbus通讯协议详解
技术笔记:modbus通讯协议详解
41 0
|
4月前
|
存储 监控 网络协议
【MODBUS】Modbus协议入门简介
【MODBUS】Modbus协议入门简介
103 1
|
设计模式 缓存 网络协议
Linux网络编程 --- 以太网帧格式简析
Linux网络编程 --- 以太网帧格式简析
125 0
|
网络协议 网络性能优化
三十九、传输层概述和UDP协议
三十九、传输层概述和UDP协议
三十九、传输层概述和UDP协议