GB28181教程————SIP基础

这一篇的目标是:读完 15 分钟后,随手拿起 Wireshark 抓到的任何一条国标 SIP 包,都能一眼看懂它在干嘛,99% 的注册不上、心跳超时、点播失败问题都能秒定位。

1. 先一句话说清楚:SIP 到底是个啥?

SIP(Session Initiation Protocol)本身是一个 信令协议,只负责“建会话、改会话、拆会话”,真正的视频数据根本不走它。

类比成生活:
SIP 就像电话的拨号、振铃、挂机过程,真正说话的声音不是通过电话线里的拨号音传的。
在国标里,SIP 就是公安平台和几万个摄像头之间那根“指挥电话线”。

官方文档: RFC 3261 主协议https://www.ietf.org/rfc/rfc3261.txt
国标真正用到的只有 RFC 3261 的前 20 页 + 后面几段,后面 300 页基本可以无视。

2. 一条 SIP 消息长什么样?(国标真实样子)

下面是一条最常见的设备注册包(已删掉部分无关字段),以后 99% 的包都长这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
REGISTER sip:34020000002000000001@3402000000 SIP/2.0
Via: SIP/2.0/TCP 192.168.5.188:5060;rport;branch=z9hG4bK123456789
From: <sip:11010000001100000001@3402000000>;tag=987654
To: <sip:11010000001100000001@3402000000>
Call-ID: 123456789@192.168.5.188
CSeq: 1 REGISTER
Contact: <sip:11010000001100000001@192.168.5.188:5060>
Max-Forwards: 70
User-Agent: GoSIP v1.0
Expires: 3600
Content-Length: 0

Authorization: Digest username="11010000001100000001",realm="3402000000",
algorithm=MD5,uri="sip:34020000002000000001@3402000000",
nonce="5e5f8a1c",response="a8f7d6c9e3b2a1"

三分钟记住结构(以后看包只看这四部分):

部分 内容 国标里必看字段
请求行/状态行 REGISTER sip:… SIP/2.0 方法名 + 设备ID/平台ID
头字段 Via/From/To/Call-ID/CSeq 这 5 个字段几乎每包都有,排错全靠它们
特殊头字段 Expires/Authorization/Contact 注册专属
消息体 通常为空,或 MANSCDP+xml MESSAGE/INFO 才会带 XML 体

3. GB28181 里真正会用到的 7 个 SIP 方法(其余全部忽略)

序号 方法 用途 出现频率 必须掌握度
1 REGISTER 设备/下级平台注册、心跳保活 ★★★★★ 100%
2 MESSAGE 目录通知、告警、Keepalive、保活、心跳 ★★★★★ 100%
3 INVITE 实时点播、历史回放、语音对讲发起 ★★★★★ 100%
4 ACK INVITE 的最终确认 ★★★★☆ 必须会
5 BYE 主动结束会话(停止点播) ★★★★☆ 必须会
6 INFO 云台控制、预置位、拖动回放、设备控制 ★★★★☆ 必须会
7 CANCEL 取消正在建立的 INVITE(很少用) ★☆☆☆☆ 了解即可

4. 国标里最最最重要的 12 个头字段(直接背下来)

头字段 含义 国标里典型值/注意点
Via 路径记录,防止环路 必须带 branch 参数
From / To 谁发的、发给谁 带 tag 参数,tag 用来区分会话
Call-ID 一次会话的全局唯一ID 同一设备所有包 Call-ID 都一样(极重要!!)
CSeq 序列号,同一个 Call-ID 下递增 排错神器
Expires REGISTER 注册有效期(秒) 国标强制 3600 秒,平台可通过 200 OK 修改
Contact 设备联系地址 必须带 IP 和端口
Authorization 注册认证头(MD5) 第一次 401 后必须带
Max-Forwards 最大跳数,防止环路 国标一般填 70
Content-Type 消息体类型 application/MANSCDP+xml(国标专用XML)
Content-Length 消息体长度 必须准确
Subject 只在 INVITE 里出现(点播用) 格式:通道ID:SSRC,流类型,0,0
User-Agent 设备标识 随便填,建议带设备型号

5. 传输层:TCP vs UDP vs 长连接 vs 短连接(国标强制答案)

项目 国标推荐/强制要求 实际项目建议
传输协议 强烈推荐 TCP(2016/2022 版都写死了) 99.9% 项目强制走 TCP
是否长连接 必须长连接(注册成功后不能断) 一条 TCP 连接要扛几千路信令
端口 默认 5060(TCP) 可改,但甲方基本不让改
UDP 场景 几乎没人用(丢包严重、防火墙穿透难) 除非极端特殊情况,否则别用

6. 国标里最常见的 3 种包类型(抓包只看这三种)

  1. 注册类:REGISTER(带 Authorization)
  2. 目录/告警类:MESSAGE(带 MANSCDP+xml)
  3. 点播类:INVITE → 200 OK → ACK(带 SDP)

记住这三板斧,90% 的国标问题都能在 Wireshark 里 10 秒定位。