1999年3月,SIP的第一版RFC2543发布,她是IETF的规范。那一年的前一年1998年的12月,3GPP制定了UMTS的规范。那一年的次年2000年的三月,3GPP发布了R99版本的UMTS规范。 紧接着,3GPP在2001年的三月发布了R4版本,在2002年的六月发布了R5版本。截至现在2015年9月,3GPP制定的标准已经到R14版了。而目前SIP的最新版是第二版,由RFC3261描述。SIP协议有它的使用领域,大部分就是建立和拆除会话。大部分SIP的应用还需要依赖一些扩展协议和相关协议,如RFC3262,SIP-I,SIP-T,SDP,RTP,RTCP,RTSP等。
3GPP的UMTS规范第一版是R99,为什么之后第二版的版本号变成了R4呢?因为千年虫问题。如果继续沿用2位数字的年号来做版本号那3GPP的UMTS的下一个2001年的版本就应该是R01了,会导致大家困惑。大家还记得公元2000年之前的几年人心惶惶的场景吗?也许那时你们还小。当时很多人担心到2000年飞机要掉下来,银行存款会变负数等,结果公司和政府只是进行一些软件的升级,就解决了这个问题,基本一切还都正常。
SIP最初是因特网的规范,由IETF定义,为什么也要说3GPP呢?因为SIP的成功很大一部分也要归功于电信行业的采用。在R5版本,3GPP定义了IMS作为包交换域(Packet Switch Domain),而SIP是IMS网络的核心协议。
说SIP的历史也不得不提它的前趋的协议HTTP/1.x,H.323,BICC, ISUP, H.248等。
H.323是由ITU-T定义的可以用来建立会话的协议族,它描述了使用几种ITU-T和IETF协议来实现VoIP通话的方法。比如它使用基于Q.931的H.225.0来做呼叫信令控制,它使用IETF的RTP协议来传输音频和视频。它涉及的协议多,定义的网元多,致使H.323很复杂。
ISUP协议是2G网络时代电信核心网的主要呼叫控制信令之一。当时它不需要控制IP承载,只需要控制电路就行了,所以通常使用ISUP协议的电信交换机网元信令控制和承载(电路)是在一起的。
3GPP的R99版本,改变了接入网。之前的GERAN变为了UTRAN。之前的基站(BTS)变为了NodeB,之前的BSC变为了RNC。3GPP的R4版本,改变了核心网,核心网的呼叫控制和承载分离,把MSC分为Call Server和MGW两部分。引入了BICC协议做呼叫控制和H.248协议(Megaco)做媒体网关的控制。这时BICC消息自己可以承载在M3UA上进而在SCTP上,而BICC消息控制的承载可以是基于ATM或IP的承载。可以说BICC也可以实现VOIP。我认为,可以粗略地说BICC是ISUP的下一代,而SIP是BICC的下一代。
H.323,ISUP,BICC都是ITU-T定义的规范。IETF想定义自己的VOIP方案,它自然想到了借鉴已经获得成功的HTTP协议和使用其他IETF的协议。Internet的内容大部分是基于WEB,而WEB是靠HTTP协议来传输内容,可见HTTP协议的成功和重要性。SIP协议制定就参考了HTTP,使用其他IETF协议如SDP,RTP等,而SIP协议也和HTTP/1.x协议一样是基于文本的。
SIP可以作为VoIP的端到端的信令解决方案,在电信网或互联网都有应用。通过SIP-T或SIP-I,SIP也可以和传统的通信协议ISUP或BICC对接,来实现电信业务的新老过渡。
在非语音应用方面,IETF的SIP SIMPLE协议族基于SIP制定了一系列的规范来实现注册呈现信息,收状态通知,发短消息等。SIP可以用于做即时消息(IM)应用(类似QQ或Lync),通过MESSAGE消息来发消息,通过SUBSCRIBE, NOTIFY等消息来做订阅和通知呈现信息(Presence),通过PUBLISH来推送状态等。
RCS是GSMA组织制定的基于IMS的跨运营商的交流服务。有了它,用户可以通过终端进行话音,视频,传文档,获取好友状态,短消息等很多服务。基本就是要啥有啥。既然是基于IMS, SIP在其中当然会扮演重要角色。
SIP协议受HTTP/1.x的影响,是基于文本的协议。SIP的消息头都是文本。下面是一个SIP消息的例子。
REGISTER sip:registrar.biloxi.com SIP/2.0
Via: SIP/2.0/UDP bobspc.biloxi.com:5060;branch=z9hG4bKnashds7
Max-Forwards: 70
To: Bob <sip:bob@biloxi.com>
From: Bob <sip:bob@biloxi.com>;tag=456248
Call-ID: 843817637684230@998sdasdh09
CSeq: 1826 REGISTER
Contact: <sip:bob@192.0.2.4>
Expires: 7200
Content-Length: 0
下面是HTTP1.x的消息的例子。
GET /docs/index.html HTTP/1.1
Host: www.test101.com
Accept: image/gif, image/jpeg, */* Accept-Language: en-us Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) (blank line)
协议基于文本有什么好处?人容易读,人处理文本的工具简单且丰富。但对计算机来说,基于文本的协议也有它的劣势,那就是不容易解析。计算机程序需要自己处理SIP包每个Header的分界,需要考虑空白字符是否有意义,有时需要用状态机或正则表达式来解析等,这无疑增加了程序设计的难度。程序难度复杂,效率往往低下并且程序包含的bug也会增多。相比较而言ISUP或BICC消息所采用的统一的TLV(Tag, Length, Value)方式,或者MAP消息采用的Asn.1的BER,PER编解码方式,也许更适合计算机处理。而且采用Wireshark这样的工具也一样可以很友好地解析这些2进制的编码格式,便于人的分析和解读。新近出现的Google的Protobuf格式,可以在产品环境中对消息进行2进制编解码,在调试环境中进行文本编解码,比Asn.1定义消息的方式简单,比文本消息更结构化,兼有基于文本的协议和基于2进制的协议的优点,这是个很好的协议和工具,不知会不会成为将来的通用的定义协议的标准。
HTTP/1.x协议基于文本有好处,也是被人诟病的一点。在HTTP/2协议的规范中替换了熟悉的包头和包体的消息格式,取而代之的是Frame, Stream等新的概念。HTTP/2已经变成一个基于2进制编码的协议了。
我们可以预测SIP的扩展协议还会增多,以更好地支持SIP应用。既然SIP参考的协议HTTP/1.x都发生了这样大的变化,从基于文本到基于2进制的消息编码,我们是否也可以期待SIP的基础协议也像HTTP协议一样,来一个从基于文本到基于2进制的转变呢?
等等。如果发生这样的转变,那它和BICC或H.323是不是又更像了呢?那为什么要发明SIP?
我们拭目以待吧。
http://www.siptutorial.net/SIP/background.html
http://nccur.lib.nccu.edu.tw/bitstream/140.119/32636/4/75301004.pdf
http://windowsitpro.com/systems-management/short-history-sip
ftp://ftp.3gpp.org/specs/2015-09/
SIP/2.0 RFC
HTTP/2 RFC
http://blog.scottlogic.com/2014/11/07/http-2-a-quick-look.html
3GPP - 3rd Generation Partnership Project
BICC - Bearer-Independent Call Control
HTTP - Hypertext Transfer Protocol
IMS - IP multimedia sub-system
ISUP - ISDN User Part
IETF - Internet Engineering Task Force
RCS - Rich Communication Services
SIP - session initiation protocol
SIMPLE - SIP for instant messaging and presence leveraging extensions
UMTS - Universal Mobile Telecommunications System