SIP or H.323我们应该选择谁?又如何实现互通?
在企业融合通信、视频会议领域,SIP协议被越来越广泛的使用,而H.323协议仍应用于传统的企业视入驻式频会议系统,还包括其他新兴的互联网基因的厂商进军企业云通信、视频会议市场,另辟蹊径,采用的自家私有协议。而在实际业务推广中,我们常会被问到到底是SIP还是H.323好?客户前期已经建设了基于H.323的视频会议系统,如何做互通?本文就视频会议领域控制协议的发展、演进趋势,及使用不同协议的系统如何互通做个深入的探讨。
说到协议的演进,让我们先从最古老的,大家不那么熟悉的H.323协议说起吧。H.323诞生于上世纪90年代后期(没错,处在我们这个飞速发展,变化的行当,90后出生就已经是“古老”了),协议被设计用于分组交换网络上的多媒体通信,简而言之,是VoIP通信协议的鼻祖。标准由ITU(国际电信联盟)制定,ITU的文章和标准不像IETF的RFC那么友好和开放,也不太容易从网上免费获得,而H.323的协议过程较之SIP要复杂,这里我通过和SIP的协议过程类比的方式,让大家简单又快速的熟悉他。
H.323组件
H.323定义的主要组件有:终端(Terminal)、网守(GK:Gatekeeper)、网关(Gateway)和多点控制单元(Multipoint Control Unit),Terminal就相当于SIP中的UA(User Agent),至于大家常听到的网守(GK),主要功能包括:终端认证、地址解析、带宽管理和路由控制等,就相当于SIP server,不同的是SIP将前述这些功能分配到不同的SIP Server来执行:SIP Proxy Server, SIP Redirect Server和SIP Registrar(在实际的技术实现上,往往集成在一个网元实体上),而这个GK则是兼具了这所有的功能。网关顾名思义就是处理和其他协议的翻译和互通。多点控制单元就我们常说的视频会议中的MCU,MCU的称谓来源于H.323协议,H.323在视频会议领域的历史地位可见一斑。
H.323协议过程
H.323定义了一组协议族,核心协议是H.225和H.245。让我们来看一个典型的H.323呼叫流程吧。
![](https://pic1.zhimg.com/80/v2-269142f99026abab04e16d9e5b207d6c_720w.webp)
首先是终端和GK之间的H.225 RAS消息(Registration、Admission、Status),用于终端的向GK注册,呼叫接纳控制及状态查询。类似于SIP流程中的UA向SIP Proxy进行SIP register和注册刷新,用于终端注册及状态查询,商用实现中SIP Proxy通常都会启用的呼叫接纳控制(CAC:Call Admission Control)。
终端完成注册了,呼叫也被GK成功接纳了,接着就是H.225呼叫控制流程,SETUP携带主被叫的地址,GK根据被叫地址信息将呼叫路由至被叫,被叫回送CONNECT消息,携带H.245控制信道的传输层地址(IP地址+端口号)。听起来是不是有点像SIP INVITE和200 OK,所不同的是,SIP INVITE/200 OK/ACK的过程不但完成了呼叫选路,同时通过message body中的SDP协议完成了媒体能力的协商,而H.225的过程只完成了呼叫选路,并建立起H.245媒体控制信道,媒体协商的事情交给H.245去做。
接着我们来看我认为是H.323协议最精彩的部分,也是最不同于SIP的部分,同时也是SIP和H.323之间进行协议转换最挑战的部分:H.245媒体控制。分为三个过程:媒体能力交换、主从确定和建立媒体信道。媒体能力交换(Terminal Capability Set),H.323终端以数据库表的形式携带其媒体能力和优先级(可选能力集:alternative Capability Set),以及同时处理多种媒体能力的可能的组合(同时能力:Simultaneous Capabilities),例如使用某种视频编解码的时候,允许同时使用的某(几)种音频编解码;主从确定(Master Slave Determination)用于解决呼叫控制信道冲突,尤其在多点视频会议中确定哪个是MCU;这之后就是建立媒体信道(Open Logical Channel),可以由通信双方逐个建立由本端到对端的单向信道,也可以一次建立双向信道,至此完成媒体通道的建立。听起来是不是有点类似SIP协议过程中的SDP协商?但是不同于SDP的offer-answer mode,H.323媒体协商过程要复杂得多,当然功能也更强大,不仅可以协商音视频的能力,而且还可以协商音视频的组合能力,不仅可以建立双向对称信道,还可以建立非对称信道,即发送和接收可以使用不同的编解码。那媒体信道建立之后,就可以开始媒体的交互了,媒体流跑的也是RTP流。另外,H.245中还有两个很有用的命令,分别是Flow Control和Fast Update,用于收端发现丢包后,通知发送端降速和重传指定的媒体报文。
H.323和SIP协议的比较
H.323标准由ITU(国际电信联盟)制定,而SIP标准由IETF(国际互联网工程任务组),一个是纯搞通信的,一个是研究互联网的,两个组织的性质天然决定了俩协议各自的特点。H.323协议处处体现出对于传统PSTN的继承,例如采用E.164号码格式进行寻址,而SIP采用SIP URI应用范围更广。终端侧发送被叫号码,H.323除了支持整体发码(EnBlock,和SIP UA一样,终端侧号码收全了一次性发出去),也可以支持边收边发,这也是典型的传统PSTN的特征。
H.323协议定义严谨,异厂家互通性好,直至现在,不同厂家间的视频会议系统要做互通,大家还是首选H.323。编码方式上,H.323采用ASN.1二进制编码,效率高、消息短,但可读性差;SIP协议采用纯文本编码,扩展性强,对于开发者和使用者都非常友好。当然你可以说用Wireshark这类的抓包软件H.323和SIP都能够解读,但是如果你是从服务器上直接TCP Dump下来的文件,SIP的文本格式可以直接读,H.323那就是看天书了。传输层协议方面,H.323 除了RAS消息用UDP传输,其他H.225和H.245消息用的是TCP,SIP协议可以选用UDP或TCP,关于SIP传输层协议的选择,可以参见我的另一篇文章《深度解析IP分片原理及SIP over UDP or TCP》(点击文章即可转跳阅读)
关于媒体协商的能力,H.323的确比SIP强大和完善。个人认为,这个在当年视频终端的CPU、GPU的计算能力不如现今强大,而高性能的编解码又带来更多的终端CPU资源消耗,通讯双方若使用不同配置的视频终端,音视频编解码的能力相差很大,媒体协商过程非常关键,H.245协议提供的完善的媒体协商能力在当时是非常有意义的。而现今随着芯片的计算能力指数级的跃进,哪怕是最入门级的视频终端对于现今主流的音视频编解码都能够支持,媒体协商也变得简单多了。
事物总是向着融合的方向发展,H.323为了简化协议过程,进而缩短呼叫接续的复杂度和时延,H.323引入了快速协议机制(fast start),将呼叫控制的过程和媒体信道建立的过程融合在一起,就像SIP INVITE和200 OK中同时携带SDP完成媒体协商及建立媒体信道一样,大有殊途同归的意思。