XMPP and SIP

时间:2023-11-15 15:51:56

过去一年多,一直关注这方面的技术和发展,这里有一个简单的介绍,我觉得比较简洁明了。我做了一点翻译,还有我的一些评估。

 

 

 

SIP vs XMPP (Jabber)

SIP and XMPP are application layer protocols mostly used to send voice or IM over Internet. SIP is defined by RFC 3621 and XMPP is defined in RFC 3920. Basically XMPP is evolved from IM and Presence, whereas SIP evolved from Voice and Video over IP. XMPP added an extension called Jingle for session negotiation and SIP added an extension called SIMPLE to support IM and Presence.

SIP和XMPP都是应用层的协议,主要用来在互联网上发送语音和即时通信IM。RFC 3521定义了SIP,RFC3920定义了XMPP。XMPP来自即时通信系统,而SIP类似语音和视频通信。XMPP增加了Jingle扩展协议来支持面向连接的业务,如语音和视频;而SIP增加了SIMPLE协议来支持即时通信业务。

SIP (Session Initiation Protocol)

Session Initiation Protocol (SIP) is an application layer protocol used to establish, modify and terminate multimedia sessions such as VoIP Calls. SIP also can invite new sessions to existing sessions such as multicast conferences. Basically it’s referred as signalling protocol in VoIP environment that can handle call establishment, call control and call termination and generating CDR (Call Detail Record) for billing purposes.

SIP是应用层的协议,用来建立、改变和终结多媒体连接,如语音呼叫。SIP也可以在已经存在的呼叫上增加新的呼叫,实现多方会议。本质上来讲,SIP被称之为VoIP的信令协议,他可以处理呼叫的建立,呼叫的控制和呼叫的终结,并且产生CDR用来计费.

XMPP (Extensible Messaging Presence Protocol)

XMPP is an open Extensible Markup Language (XML) protocol for real time messaging, presence and request response services. Originally it was developed by Jabber open source community in 1999. In 2002 the XMPP working group developed adaptation of Jabber Protocol that is suitable for IM (Instant Messaging).

XMPP是开放的XML协议,用来实现实时消息传递、呈现和请求/响应业务。起初,他由Jabber开源社区开发。2002年,XMPP工作组将Jabber开发成支持即时通信的协议。

Difference Between SIP and XMPP

We just can’t compare SIP and XMPP because both serve different purposes like session establishment and structured data exchange respectively. But introduction SIMPLE and Jingle introduces some similar functionalities.

我们不能简单对SIP和XMPP进行对比,因为两者服务与完全不同的目标,一个服务于连接的建立,一个服务于结构化的数据交换。但是SIP增加SIMPLE和XMPP增加Jingle后,两者开始变得类似了。

(1) SIP provides session establishment, modify and termination but XMPP provides streaming pipe for structured data exchange between group of clients.

SIP提供连接的建立、改变和终结,而XMPP在客户组内部提供流管道,交换结构化的数据。这就是说:SIP的重点是终端之间连接的建立和维护,连接以后的数据和信息传送他不关注;而XMPP重点是考虑终端组内部的数据交换,连接建立是基本的功能,而不是重点。所以,XMPP对应用的支持和扩展性的考虑很充分,比SIP天生要好。

(2) SIP is text based request response protocol and XMPP is XML based client server architecture.

SIP的信令和消息传送是基于文本的,是平面化(Flat)的数据表达,解析起来缺少规律性,在新增数据消息体的时候缺少继承性,需要开发新的代码来封装和解析,原有代码的继承性比较差。而XMPP采用开放的标准的XML表达,是一种结构化的消息结构,能够方面表达层次化的消息内容,表达内容的内在逻辑。这种XML的结构对应用的扩展和内容的解析带来极大的方便,大量软件代码可以重复利用。

(3) SIP signalling messages go via SIP headers and body whereas in XMPP messages passes via streaming pipe. XMPP sends request, response, indication or error using XML via the streaming pipe.

SIP信令由SIP报文格式的头部和内容两部分组成,也就是说,SIP报文格式的头部已经包含了部分内容,类似于HTTP,与具体的上层应用直接关联,而不是通用的报文格式;而XMPP所有信息都是采用XML在流管道之间透明传送。

SIP的连接建立通道与数据传送通道是各自独立的,连接建立在SIP client与Server之间,而数据传送通道是在Client--Client之间直接进行的。这个对视频、语音和文件传送业务很合适,但是不适合其他形式的应用。

XMPP的控制和数据通道是一体的,Clent只与Server建立连接,而Client与client之间是没有之间连接的。Client之间传送的通道是:Client1---〉Server1---〉server2---〉client2。这种方式看起来扩展性差,server压力很大,但是能够实现很好的业务功能,比如留言、广播、群聊、状态更新、Blog、微博、数据共享等等。

这种Client-server模型,很多业务的控制在Server上完成,新功能的增加在server上实现,在server上定义新的XML对象和逻辑,客户端只要负责XML数据流的解析和呈现就可以了。所以,终端实现简单。

(4) SIP runs over UDP, TCP and TLS whereas XMPP uses TCP and TLS only.

(5) In SIP, user agent could be server or client hence user agent can send or receive messages whereas in XMPP client only initiates requests to server so it will work with NAT and Firewall.

SIP是双向对称,客户端和服务器都可以主动发起连接请求并响应,这种对称连接的方式在穿越NAT和firewall的时候,带来很大的复杂性,无法保证穿越NAT。而XMPP是单向的连接,只有Client可以向Server发起连接请求,server不会向Client发起连接。这样便于NAT和firewall的穿越。

(6) Both SIP and XMPP are easy to implement.

Technically comparing SIP and XMPP is like comparing apples and oranges because the core protocols serve different purposes: session rendezvous/establishment vs structured data exchange

技术上比较SIP和XMPP,就像苹果与橙子相比,因为核心协议服务的目的不一样:连接汇聚/建立功能和结构化的数据交换功能。各自在其固有的领域有各自的优势,但是两者体系架构的差异,在未来的竞争中,个人觉得XMPP/Jingle架构更加有竞争力。因为XMPP的开放性,开发了大量的开源代码和开源应用,大量是非连接的业务,如即时通信、blog、微博、社交网络