一、问题现象
【设备信息】型号:DS-8664N-I16-V3 V4.63.000 build 230412
【问题现象】HIK录像机使用GB28181对接异常相机无法正常上线,对接HIK相机可以正常上线。
【现场拓扑】现场拓扑如下
- NVR侧使用固定公网IP地址。
- IPC侧使用家用宽带的方式,通过国标跨公网接入NVR。
图1.1:网络拓扑
上述拓扑与NVR使用GB接入三方平台的拓扑类似,只不过NVR此时充当了平台的角色。
二、问题排查过程
1、异常相机接入过程抓包及收集打印
现场反馈HIK相机接入正常,但是三方相机接入异常,所以我们先抓包查看异常的三方相机完整的注册过程
图2.1:三方相机异常抓包1
图2.2:三方相机异常抓包2
从上图可发现,三方相机抓包分析结果如下
- 录像机发起Invite请求
- 三方相机回复200 OK
- 录像机回复ACK并发起三次握手请求
- 未收到回复设备一直在重传三次握手(详见图2.2)
由上图分析,设备侧发起主动请求,但是未收到回复,目前看起来应该是异常相机的问题?因为相机并未正常回复相关三次握手,导致设备一直在重传,无法获取相关参数。但结果真的如此吗?
因为HIK相机是正常的,我们先抓取HIK相机的包,对比分析下是否有区别。
2、HIK相机正常抓包过程
因上述分析,我们决定抓取HIK相机的报文,对比分析下两个抓包有何区别。
图2.3:HIK相机正常抓包1
图2.4:HIK相机正常抓包2
图2.5:HIK相机正常抓包3
由上述现象可以判断出:
- HIK的相机正常接入是存在一个切换被动的机制在的。
- 先主动取流,取不到之后,会切换被动取流。
那么问题来了,为什么第一次主动取流总会失败呢?
3.为什么主动取流会失败呢?
要确定这个问题,我们时候首先得对Invite报文中的报文进一步分析
图2.6 异常相机Invite回复分析
图2.7 HIK相机第一次Invite回复分析
图2.8 HIK相机第二次Invite回复分析
由上图分析可知,相机200OK的C字段,IP一直是相机的内网IP,所以,在主动取流是取不到的,所以录像机必须得被动取流,即让相机主动和录像机建立连接。
根据上述分析录像机肯定是存在一个主动切换被动的逻辑在里面的,但是为什么三方相机无法正常上线,HIK相机可以正常上线呢?
4.进一步确认问题并检查相关逻辑。
根据上述分析,我们在确定下正常HIK相机抓包和异常相机抓包有何不同。
图2.9:相机异常抓包1
图2.10:三方相机异常抓包2
图2.11:HIK相机正常抓包1
图2.12:HIK相机正常抓包2
由上述抓包信息可以看出:
- 相机C字段回复的内网地址,录像机主动取流是取不到的(公网IP无法主动访问私网IP),所以问题点目前在于,录像机是否可以正常切换被动取流(invite中a字段setup:passive)。
- 异常的相机三次握手一直没有回应,导致设备侧一直在重传三次握手报文,取不到流。
- 正常的HIK相机在未收到录像机的三次握手后,会主动BYE掉连接,回收资源。
如上述分析,目前仅存在此一个疑点。是否此怀疑疑点便为三方相机无法接入的原因呢?
三、问题解决
【问题原因】将收集到的抓包提供给HIK同事分析,目前定位出原因为:
- HIK的NVR会先active去取流,海康的IPC 有超时机制,tcp建立连接超时,海康的IPC 会发bye 。NVR这个时候会发passive的invite.
- 现场的异常ipc超时没有发BYE造成HIK的NVR的主动的取流session一直没有释放,所以就不发invite了。导致问题出现
定位到问题原因与我们之前分析到的一致
四、问题遗留
此问题中抓包发现,存在以下遗留问题
- 目前HIK的录像机使用国标协议添加通道,协议类型自适应模式下虽然下发的是TCP取流但是仍无法切换passive取流
- 需要手动将通道管理界面,更改为TCP,才会切换被动取流。所以在国标跨公网接入IPC时候,仍需如下配置通道才可正常在线,配置如下图。