這篇文章主要介紹XMPP與SIP,很多人容易混淆這兩個概念,轉載請說明出處(博客園RTC.Blacker).
簡介:XMPP和SIP都是應用層協議,主要用於互聯網上發送語音和即時通訊. SIP在RFC 3621中定義,XMPP在RFC 3920中定義,
XMPP是從即時通訊中演變而來,SIP是從VOIP中演變而來,XMPP為了會話協商添加了一個擴展叫做Jingle,SIP為了即時通訊業務添加了一個擴展叫做SIMPLE.
SIP (Session Initiation Protocol)
SIP是一個應用層協議,是用在類似VOIP這樣的場合,用來建立,修改,中止會話,同時在多人會議中他也能在已有會話中加入新的會話.
基本上SIP是VOIP中的信令協議,它處理呼叫建立,呼叫轉移和產生CDR(Call Detail Record,供通話計費用).
XMPP (Extensible Messaging Presence Protocol)
XMPP是一個為即時通訊和請求響應業務服務的XML協議.
最早由Jabber開源社區在1999年開發,2002年XMPP工作組為了更適合即時通訊對Jabber進行了擴展.
SIP和XMPP的異同
其實我們不能簡單地拿SIP和XMPP做比對,就像我們不能直接比較比較蘋果和橘子,前者主要是為了會話協商,后者主要是為了結構化數據交換,只不過隨着各自對Simple和Jingle的引入,他們有了一些相似.
1,SIP提供連接的建立、修改和終止,而XMPP在客戶端內部提供流管道,交換結構化數據。
也就是說:SIP的重點是終端之間連接的建立和維護,連接以后的數據和信息傳送他不關注;而XMPP重點是考慮終端內部的數據交換,連接建立是基本的功能,而不是重點。所以,XMPP對應用的支持和擴展性的考慮很充分,比SIP天生要好.
2,SIP的信令和消息傳送是基於文本的,不太好解析,或者說解析起來缺少規律性,在新增數據消息體的時候缺少繼承性,需要開發新的代碼來封裝和解析,原有代碼的繼承性比較差。而XMPP采用XML,是一種結構化的消息結構,能夠方便地表達層次化的內容,以及內容之間的內在邏輯。這種XML結構對應用的擴展和內容的解析帶來極大的方便,大量軟件代碼可以復用。
3,SIP信令由header和body兩部分組成,也就是說,SIP報文格式的header已經包含了部分內容,類似於HTTP,與具體的上層應用直接關聯,而不是通用的報文格式;而XMPP所有信息都是采用XML在流管道之間透明傳送。
SIP的連接建立通道與數據傳送通道是各自獨立的,連接建立在SIP client與Server之間,而數據傳送通道是在Client--Client之間直接進行的。這個對視頻、語音和文件傳送業務很合適,但是不適合其他形式的應用。
XMPP的控制和數據通道是一體的,Clent只與Server建立連接,而Client與Client之間是沒有之間連接的。Client之間傳送的通道是:Client1---〉Server1---〉Server2---〉Client2。這種方式看起來擴展性差,server壓力很大,但是能夠實現很好的業務功能,比如留言、廣播、群聊、狀態更新、Blog、微博、數據共享等等。
這種C-S模型,很多業務的控制在Server上完成,新功能的增加在server上實現,在server上定義新的XML對象和邏輯,客戶端只要負責XML數據流的解析和呈現就可以了, 所以,終端實現簡單
4,SIP可以使用UDP,TCP,TLS進行傳送,而XMPP僅僅使用TCP和TLS進行發送.
5,SIP是雙向對稱,客戶端和服務器都可以主動發起連接請求並響應,這種對稱連接的方式在穿越NAT和Firewall的時候很麻煩,無法保證穿越NAT。而XMPP是單向的連接,只有Client可以向Server發起連接請求,Server不會向Client發起連接。這樣便於NAT和Firewall的穿越。
參考文檔:http://www.differencebetween.com/difference-between-sip-and-xmpp-jabber/