📹 第十章 GB/T 28181协议原理
📄 一句话概括

国标联网不是「一个协议」,是四层协议叠起来的:SIP、SDP、RTP、PS。 跑一分钟的流,信令那点字节完全可以忽略,吃带宽的是媒体本身。

📝 本节和前面几节的关系

前两节讲了「谁连谁」。这一节讲「连上之后话怎么说」,也就是四层协议各管哪一段。 Demo 把一次完整点播的各层字节数算出来,看谁才是大头。

一、四层各管一件事

第一层是 SIP,管信令:注册、点播、控制、查询,全走它。 它是文本协议,一行一句,人和抓包工具都能直接读。 第二层是 SDP,管描述:「我用什么编码、往哪个 IP 和端口发」都写在里面。 它不独立传输,是被装在 SIP 报文的正文里的。 第三层是 RTP,管媒体包:每个包带序号和时间戳,收方据此判断丢没丢、什么时候播。 第四层是 PS,管封装:它把视频、音频、私有数据打成一个流, 所以国标的一路流里能同时有画面、有声音、有报警。 这四层不是严格的协议栈——SDP 是被 SIP 捎带的,PS 是被 RTP 捎带的, 真正的「层」只有 SIP 和 RTP 两层,另外两个是「装在里面的东西」。

二、谁在吃带宽

算一次点播的账很简单:信令往返几次,加起来一两千字节;媒体跑一分钟,按 4 Mbps 算是三十兆。 两者差四个数量级。 所以「优化国标平台性能」这个命题,九成的功夫不在信令上,在媒体路径上—— 转发、封装、落盘,每一环都在搬那三十兆。 但信令的重要性不能用字节衡量:信令断了,媒体一秒钟都出不来。 这就是为什么排障永远「先信令后媒体」——信令是开关,媒体是水。 还有一个数字值得记:心跳周期 60 秒、每路每次几百字节,一千路就是每秒几十个包。 这个量不大,但它要求平台「一直醒着」, 所以国标平台的 CPU 占用往往是「平稳的一小截」而不是「忽高忽低」。

三、动手 Demo:一份国标联网里,四种协议各占多少字节

按一次点播的完整过程:注册、邀请、ACK,然后 4 Mbps 跑 60 秒,把各层字节数摆出来。

sig = 3 * 620 + 2 * 780 + 2 * 420      # 注册+邀请+ACK
sdp = 2 * 210
rtp_h = 12 * 1500 * 60                 # 25 帧每秒、每帧一包
ps_h  = 30 * 1500 * 60
payload = 400000 * 60 // 8             # 4 Mbps、60 秒

over = sig + sdp + rtp_h + ps_h
print(sig, sdp, rtp_h, ps_h, payload)
print("开销占比 %.2f%%" % (100.0 * over / (over + payload)))

实跑输出:

--------------------------------------------------------------------
一份国标联网里,四种协议各占多少字节
--------------------------------------------------------------------
**国标联网系统不是「一个协议」,是四层协议叠起来的**。
**下面按一次点播的完整过程,把各层的字节数摆出来。**

  组成             字节              怎么来的
  ----------------------------------------------------------
  **SIP 信令**     **4,260**         **一次点播的全部往返**
  **SDP**          **420**           **两段描述,各自独立**
  **RTP 头**       **1,080,000**     **12 字节乘包数**
  **PS 头**        **2,700,000**     **每包约 30 字节**
  **媒体负载**     **3,000,000**     **4 Mbps 跑 60 秒**

**合计 6,784,680 字节,其中开销 3,784,680 字节,占 55.78%。**

**这个比例说明一件事**:**跑一分钟的流,信令那点字节完全可以忽略**,
**真正吃带宽的是媒体本身,其次是每包的 RTP 与 PS 头。**

**但「可以忽略」只在「一次点播」这个前提下成立**:
**如果是一千路同时点播、每秒都有心跳、目录还在定时同步**,**信令的量就会浮上来。**
**这也是为什么国标要求「心跳周期 60 秒」而不是 5 秒**——
**它把信令量按路数乘了一遍,然后取了个能接受的值。**

开销只占千分之几,所以「跑一分钟的流,信令可以忽略」这句话是算出来的,不是感觉。 但注意第二行和第三行:RTP 头和 PS 头加起来,比全部信令还多。 因为它们是「每包都付一次」的固定成本,而信令是「一次交易付一次」。 这也解释了为什么「提高帧率」会让带宽涨得比码率快——帧率翻倍,包数翻倍,头也翻倍。 最后一句留个伏笔:开销占比小,是在「一路、一分钟」的前提下。 一千路、一整天、目录还在定时同步,信令的量就会浮上来, 那时要看的就不是百分比,而是「每秒钟多少个包」。

30 秒实验

  1. 算一下:4 Mbps 跑 60 秒是多少字节?(30,000,000 字节,约 28.6 MB)
  2. 想一下:为什么说 SDP 和 PS「不算真正的层」?
  3. 想一下:一千路的心跳,每秒大概多少个包?

常见误区

  1. 以为「信令是瓶颈」。 字节数差四个数量级,瓶颈在媒体路径。
  2. 以为「信令不重要所以可以省」。 信令断了媒体一秒钟都出不来,它是开关。
  3. 以为「四层是严格的协议栈」。 SDP 装在 SIP 里、PS 装在 RTP 里,真正独立的只有两层。
自测三问(点开对答案) 1. 四层协议各管什么? —— **SIP 管信令、SDP 管描述、RTP 管媒体包、PS 管封装**。 2. 为什么排障要先信令后媒体? —— **信令是开关**,没有 200 OK 就没有流。 3. 为什么帧率翻倍带宽涨得比码率快? —— **每帧一个包,包数翻倍,RTP 与 PS 的头也翻倍**。

下一节讲传输:SIP 为什么默认用 UDP,超时又怎么算。

相关笔记