标题:Qt/C++开发监控GB28181系统/协议解释说明/SIP内容解释/每一行数据什么含义
作者:liudianwu
日期:2025-04-24 10:44
内容:
## 一、前言
搞gb28181开发,首要任务就是解析协议,按照gb28181的文档来,还是非常详细的,通过抓包工具可以查看到具体的收发数据,也可以打开网络调试助手工具,监听5060端口,看到上报的数据,都是一个通用规则的协议。
```cpp
//设备端发送
REGISTER sip:34020000002000000001@3402000000 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.64:5060;rport;branch=z9hG4bK1945388331
From: ;tag=33226951
To:
Call-ID: 1455222403
CSeq: 1 REGISTER
Contact:
Max-Forwards: 70
User-Agent: IP Camera
Expires: 3600
Content-Length: 0
//服务端应答
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.0.64:5060;rport;branch=z9hG4bK1494593151
From: ;tag=33226951
To:
Call-ID: 1455222403
CSeq: 2 REGISTER
User-Agent: wx_feiyangqingyun
Date: 2025-04-22T10:48:38.234
Content-Length: 0
```
### 消息头
- 第1行表明这条SIP消息的方法(Method)是REGISTER。
- 34020000002000000001是SIP服务器的国标编码。
- 国标编码指的是由中心编码(8位) 、行业编码(2位) 、类型编码(3位)、序号(7位)四个码段共20位十进制数字字符构成。
- 具体国标编码方法可以参考GB/T 28181—2016中的附录D。
- 3402000000指的是SIP服务器的域国标ID。
- SIP/2.0指的是SIP协议版本。
### Via头
- 第2行为Via头,Via头中包含了发送请求方的相关信息,后续需要使用这些信息进行回复。
- SIP/2.0/UDP表示使用的是2.0版本的SIP协议,使用的传输协议是UDP,也可以使用TCP协议,大部分设备默认是UDP协议,GB2016以前只支持UDP协议。
- 192.168.0.64:5060为请求发送方的IP地址和端口号。
- Via头中必须包含branch参数,具体值是一个在整个SIP通信过程中不重复的数值。
- branch是一个事务ID(Transaction ID),用于区分同一个UA所发起的不同Transaction,它不会对未来的request或者是response造成影响,对于遵循IETF RFC3261规范的实现,
- **这个branch参数的值必须用 z9hG4bK 字符串打头**。
-其它部分是对To, From, Call-ID头域和Request-URI按一定的算法加密后得到,也可以是随机数或者UUID,目前没发现有什么用途。
-&nb ..