国标文档里到处是缩略语,而它们的含义只出现过一次。
SMS 是「信令服务」不是短信,PS 是封装格式不是附言。
上一节把「域、平台、设备、通道」摆正了位置。这一节处理另一半麻烦:缩写。 Demo 拿一张表去扫一封真实报文,看一封里能撞上几个。
一、四组必须分清的缩写
第一组:PS 与 PTZ。
PS 是节目流(Program Stream),是国标要求的媒体封装格式;PTZ 是云台控制,是一个动作。
两者只差一个字母,但一个出现在 SDP 里、一个出现在控制报文里。
第二组:CMS 与 SMS。
在国标平台的语境里,CMS 是中心管理服务、SMS 是信令服务,和手机短信一点关系都没有。
读文档看到 SMS 先想「信令」。
第三组:RTP 与 RTCP。
一个送媒体、一个送统计,
端口上永远是偶数给 RTP、奇数给 RTCP——这个「差一」是为了让对端能算出来。
第四组:CSeq 与 SN。
CSeq 是 SIP 的命令序号,用来配对请求与响应;
SN 是国标 XML 里的消息序号,用来配对查询与结果。
两个都在做「配对」,但一个在信令层、一个在应用层,所以一封报文里会同时出现两个序号。
二、缩写为什么这么多
因为国标的信令走 SIP,而 SIP 的报文天生要短。
UDP 上一个包最好别超过 1400 字节,而注册、心跳这些报文每秒都在发,
所以能省一个字节就省一个。
于是就有了那些看起来像乱码的东西:Via、From、To、Call-ID、CSeq、Max-Forwards,
每一个都是把一长串英文砍到只剩几个字母。
这套习惯是从电话网继承下来的:SIP 的设计者当年就是做电信的,
而电信协议里连字段名都恨不得用一个字母。
所以读 SIP 报文的第一课不是理解流程,是背缩写。
三、动手 Demo:把一封真实报文里的缩略语全标出来
一张十七个词的表,拿去扫一封 REGISTER 报文,看能认出几个、还漏了什么。
import re
ABBR = {"SIP": "会话初始协议", "SDP": "会话描述协议",
"RTP": "实时传输协议", "RTCP": "RTP 控制协议",
"PS": "节目流", "PTZ": "云台控制",
"CSeq": "命令序号", "SSRC": "同步源标识"}
msg = ("REGISTER sip:34020000002000000001@3402000000 SIP/2.0\r\n"
"CSeq: 1 REGISTER\r\n"
"m=video 6000 RTP/AVP 96\r\n"
"a=rtpmap:96 PS/90000\r\n")
hit = [k for k in sorted(ABBR, key=len, reverse=True)
if re.search(r"(?<![A-Za-z])" + k + r"(?![A-Za-z])", msg)]
print(len(hit), hit)
实跑输出:
--------------------------------------------------------------------
把一封真实报文里的缩略语全标出来
--------------------------------------------------------------------
**国标文档里到处是缩略语,而它们的含义只出现过一次**。
**下面把一段真实的报文丢给一张表去扫,看能认出几个。**
缩略语 含义
----------------------------------------------------------------
**REGISTER** SIP 的注册方法
**CSeq** 命令序号,用来配对请求与响应
**RTP** 实时传输协议,管媒体包
**SDP** 会话描述协议,管「用什么编解码、往哪个端口发」
**SIP** 会话初始协议,管信令
**PS** 节目流,国标的媒体封装格式
**共认出 6 个**,**而这段报文一共不到四百字节。**
**换句话说,一封报文里平均每二十多个字节就有一个缩写。**
**有两个词必须分清**:
**`PS` 是「节目流」,是封装格式;`PTZ` 是云台控制,是动作**。
**它们只差一个字母,但一个在 SDP 里、一个在控制报文里。**
**还有一组容易混的**:**`CMS` 和 `SMS` 在国标平台里是「中心管理服务」和「信令服务」**,
**和手机短信一点关系都没有**。**读文档时看到 `SMS` 先别想短信,先想「信令」。**
共认出六个,而这段报文不到四百字节。
换句话说,一封报文里平均每二十多个字节就有一个缩写。
所以「读不懂国标」这件事,八成不是流程没懂,是缩写没背。
代码里那个正则的写法值得看一眼:
(?<![A-Za-z]) 和 (?![A-Za-z]) 是「前后都不是字母」的意思,
没有它们,PS 会在一堆别的词里被误命中。
这就是「按词边界匹配」和「子串匹配」的差别——前面第八章讲 IDS 时踩过同一个坑。
还有一条经验:国标文档里第一次出现缩写时会写全称,之后只写缩写,
所以真读不下去的时候,回去找「第一次出现」那一段,比翻附录快。
30 秒实验
- 算一下:一封报文 350 字节、含 6 个缩写,平均多少字节一个?(约 58 字节)
- 想一下:为什么 SIP 的字段名都这么短?
- 想一下:
SMS在国标平台里指什么?
常见误区
- 以为
SMS是短信。 国标平台里它是「信令服务」,和手机无关。 - 以为
PS是附言。 它是节目流,国标要求的媒体封装格式。 - 以为缩写只是写法习惯。 它是被 UDP 的包长逼出来的, 省下的每个字节都在每秒的发包里乘一遍。
自测三问(点开对答案)
1. `PS` 和 `PTZ` 分别是什么? —— **节目流(封装格式)**和**云台控制(动作)**,只差一个字母。 2. `CSeq` 和 `SN` 都在做配对,差别在哪? —— **`CSeq` 在 SIP 层配对请求与响应,`SN` 在 XML 层配对查询与结果**。 3. 为什么 SIP 的字段名这么短? —— **UDP 包长有限,而注册心跳每秒都在发**,能省就省。下一节看结构:平台之间到底怎么连,为什么必须是树。
- ☐ (本节完,下一节 10.03.01 SIP监控域互联结构)