GigE Vision 详解 · 01:设备发现与网络配置(§2~6)
GigE Vision 详解 · 01设备发现与网络配置§2~6覆盖 GigE Vision 3.0 第 2~6 章物理链路、IP 配置、设备枚举、设备插拔。这是「相机上线」的第一段旅程——一根网线插进去到主机「看到」这台相机中间发生了很多你平时根本不会去想的事。一、物理链路先得有「路」IP 配置之前先得有物理连接。GigE Vision 支持 4 种物理链路配置配置全称说明主机视角SLSingle Link单链路1 个网口1 个 IPMLMultiple Links多链路最多 4 个网口各自独立 IPN 个 IPsLAGStatic Link Aggregation静态链路聚合IEEE 802.1AX1 个虚拟链路 1 个 IPdLAGDynamic Link Aggregation动态链路聚合LACP 自动协商1 个 IP几个硬性要求[R-xxx]是标准条款号下同设备必须有至少 1 个网络接口且必须支持 SL 配置[R-001cd]、[R-002cd]网络接口最多 4 个[R-003cd]接口 #0 是「主接口」——只有它支持 GVCP控制通道和消息通道都挂在它上面其他接口只跑 GVSP/GVRSP 流[R-006cd]。记一个关键结论设备发现永远发生在接口 #0 上。这是为了保证「一台相机不会被当成多台」因为其他接口也有自己的 IP。可以把接口 #0 理解成「相机的正门」流数据走的是「侧门」。LAG 的一个坑链路聚合把多根线绑成一个逻辑链路带宽看似翻倍但普通交换机不一定能把 GVSP 流均匀分到多根线上因为它看不到 GVSP 层只按以太网/IP 头分发。所以标准「宽松地」建议流通道的分布算法用轮询[CO-011st]并提醒接收端要能容忍乱序包。二、IP 配置相机的「户口本」2.1 三种拿 IP 的方式设备上电、复位、或以太网链路协商成功后必须执行 IP 配置[R-013cd]。三种方式方式说明地址段/来源DHCP向 DHCP 服务器动态申请服务器分配Persistent IP持久 IP用户配置的固定 IP存非易失存储用户指定LLALink-Local自动私有地址也叫 Auto IP169.254.x.x出厂默认持久 IP关闭、DHCP开启、LLA永远开启[R-016cd]。为什么 LLA 永远开启因为它是「兜底」。哪怕没有 DHCP 服务器、用户也没配持久 IP相机也能靠 LLA 给自己搞到一个169.254.x.x的地址保证「至少能连上」。2.2 选择流程一个简单的状态机开始 │ ├─ DHCP 开启 ──是──→ 用 DHCP ──成功──是──→ 结束 │ │否 │ ↓ ├─ 配了持久IP ──是──→ 用持久IP ──→ 结束 │ │否 │ ↓ └──────────────────→ 用 LLA兜底──→ 结束一个「有效 IP」IP 地址 子网掩码 默认网关三件套标准 §4 明确这么定义。时间要求标准希望设备上电 20 秒内可达[R-xxx]理想最坏情况。为此 DHCP 的重传策略被压缩了——最多重传 2 次首次 2 秒超时第二次 4 秒超时而不是照搬 RFC2131 的慢节奏。毕竟没人愿意插上相机等一分钟。2.3 相关的 Bootstrap 寄存器IP 配置的结果会写进 Bootstrap 寄存器第 05 篇会展开整个寄存器表这里先混个脸熟寄存器接口 #0 地址作用Network Interface Capability0x0010能力位bit31持久IP、bit30DHCP、bit29LLANetwork Interface Configuration0x0014配置位对应能力位的开关Current IP Address0x0024当前 IPCurrent Subnet Mask0x0034当前子网掩码Current Default Gateway0x0044当前默认网关Persistent IP Address0x064C持久 IP存非易失注意0x0010/0x0014是「网络接口 #0」的地址其他接口有各自的偏移。这些寄存器主机都能通过 GVCP 的READREG读出来——这也是「发现」之后主机能拿到相机 IP 信息的原理。三、设备枚举怎么「找到」相机GigE Vision 提供2 种枚举机制§5GVCP Device Discovery强制支持mDNS / DNS-SD可选也叫 Zeroconf DiscoveryGigE Vision 2.0 引入3.1 GVCP 发现广播「喊一嗓子」最经典的方式主机发一个DISCOVERY_CMD广播包子网内所有相机回DISCOVERY_ACK。主机(Application) 设备(Device) │ │ │── DISCOVERY_CMD (广播 255.255.255.255) ──→│ 所有相机都收到 │ │ │←──────── DISCOVERY_ACK (单播) ──────────│ 每台相机各自回 │ │广播发现目标 IP255.255.255.255RFC1122 的「受限广播」不过路由器只能发现同一子网的设备单播发现已经知道相机 IP 时直接往那个 IP 发DISCOVERY_CMD。两条铁律[R-030cd]、[R-031cd]IP 配置完成后相机必须应答任何应用的发现请求IP 配置完成前相机禁止应答。翻译成人话相机没拿到 IP 之前你喊破喉咙它也不会理你——因为它的 ACK 里要填自己的 IP而它还没有。DISCOVERY_ACK里带的信息和下面 mDNS 的 TXT 记录几乎一一对应版本、模式、MAC、厂商、型号、序列号、用户定义名……这就是主机「认出这是哪台相机」的依据。3.2 mDNS / DNS-SD更「标准」的发现GVCP 广播发现有个局限跨子网就不好使。GigE Vision 2.0 引入了基于mDNS DNS-SD的 Zeroconf 发现更贴近标准互联网协议。关键参数§5.2.1项值IPv4 组播地址224.0.0.251UDP 端口5353域名.local.服务类型_gvcp._udp主机名格式厂商-型号-MAC.local.一个相机实例 一个 GVCP 控制通道 一个_gvcp._udp服务。它的 TXT 记录至少包含这些键[CR-038cd]SpecVer2.0 # 规范版本对应 Version 寄存器 DevMode80000001 # 设备模式 MacAddr000102030405 # MAC 地址全局唯一标识 VendorMy Vendor Name # 厂商名 ModelMy Model Name # 型号 SerialNum30405 # 序列号 UserDefNameMyConverter instance0 # 多实例设备的实例号mDNS 的妙处它能区分「一台硬件上的多个相机实例」。比如一个双口的「模拟→GigE 转换器」可以对外暴露两个服务Port 1._gvcp._udp端口 3956和Port 2._gvcp._udp端口 15000。GVCP 广播发现做不到这么细。四、设备插拔来了要知道走了也要知道4.1 移除靠「心跳」发现人没了UDP 是无连接的相机被拔线不会「通知」主机。主机怎么知道相机没了两个信号控制通道超时主机发心跳命令等不到 ACK超时 → 判定相机离线流超时GVSP 图像流断了或 GVRSP 的队列对断开。这也是为什么 GVCP 要有「心跳」机制第 02 篇细讲——它不只是保活还兼职「发现设备消失」的探测器。4.2 接入新相机怎么被发现DHCP 助攻新相机上电发 DHCP 请求服务器知道「来了个新设备」——但这要求服务器和应用关系紧密实践中不总是可行周期扫描应用周期性地重新广播DISCOVERY_CMD或做 mDNS 查询捡到新设备。标准只要求应用应该能动态响应拓扑变化[O-039ca]具体「多久扫一次」留给实现。本篇小结这一篇串起了「相机上线」的前半程建链路 → 配 IP → 被发现。一句话记忆接口 #0 是正门只走 GVCPDHCP→持久IP→LLA 三级兜底拿 IP发现靠「广播喊话」或「mDNS 报户口」。下一篇02 GVCP 控制通道——主机拿到相机之后怎么「命令」它报文长什么样命令字典里都有哪些家伙。