XMPP——xmpp協議詳解、優勢、缺點及優化思路

XMPP(Extensible Messaging and Presence Protocol,前稱Jabber)協議介紹

可擴展消息處理現場協議(eXtensible Messaging and Presence Protocol , XMPP) 是一種基於可擴展標記語言(eXtensible Markup Language, XML)的近端串流式即時通訊協議。它將現場和上下文敏感信息標記嵌入到XML 結構化數據中, 使得人與人之間、應用系統之間以及人與應用系統之間能即時相互通訊
XMPP是一種基於XML架構的開放式協議.XMPP的基礎部分已經在2002-2004年獲得了互聯網工程任務組(IETF)的批准,將來XMPP協議會理所固然的同Internet協議TCP/IP、HTTP、FTP、SMTP、POP同樣成爲Internet標準。安全

Xmpp協議內容

XMPP中定義了三個角色,客戶端,服務器,網關。通訊可以在這三者的任意兩個之間雙向發生。服務器同時承擔了客戶端信息記錄,鏈接管理和信息的 路由功能。網關承擔着與異構即時通訊系統的互聯互通,異構系統能夠包括SMS(短信),MSN,ICQ等。基本的網絡形式是單客戶端經過 TCP/IP鏈接到單服務器,而後在之上傳輸XML。服務器

Xmpp協議優勢

一、分佈式
XMPP網絡的架構和電子郵件十分相像;XMPP核心協議通訊方式是先建立一個stream,XMPP以TCP傳遞XML數據流,沒有中央主服務器。任何人均可以運行本身的XMPP服務器,使我的及組織可以掌控他們的實時傳訊體驗markdown

二、安全
任何XMPP協議的服務器能夠獨立於公衆XMPP網絡(例如在企業內部網絡中),而使用SASL(1)及TLS(2)等技術的可靠安全性,已自帶於核心XMPP技術規格中。
XMPP–>SASL–>TLS–>TCP–>IP網絡

(1)SASL:SASL全稱Simple Authentication and Security Layer,是一種用來擴充C/S模式驗證能力的機制。在Postfix能夠利用SASL來判斷用戶是否有權使用轉發服務,或是辨認誰在使用你的服務器。SASL提供了一個通用的方法爲基於鏈接的協議增長驗證支持,而XMPP使用了一個普通的XML名字空間來知足SASL的須要
(2)TLS:安全傳輸層協議(TLS)用於在兩個通訊應用程序之間提供保密性和數據完整性。該協議由兩層組成: TLS 記錄協議(TLS Record)和 TLS 握手協議(TLS Handshake)。架構

三、可擴展
XML命名空間的威力可以使任何人在覈心協議的基礎上建造客製化的功能。
在XMPP 中,即時消息和到場信息都是基於XML 的結構化信息,這些信息以XML 節(XML Stanza)的形式在通訊實體間交換。XMPP 發揮了XML 結構化數據的通用傳輸層的做用,它將出席和上下文敏感信息嵌入到XML 結構化數據中,從而使數據以極高的效率傳送給最合適的資源。基於XML 創建起來的應用具備良好的語義完整性和擴展性。框架

四、彈性佳
XMPP除了可用在實時通訊的應用程序,還能用在網絡管理、內容供稿、協同工具、文件共享、遊戲、遠程系統監控等,應用範圍至關普遍。分佈式

五、多樣性
用XMPP協議來建造及佈署實時應用程序及服務的公司及開放源代碼計劃分佈在各類領域;用XMPP技術開發軟件,資源及支持的來源是多樣的,使得使你不會陷於被「綁架」的困境ide

六、分佈式的網絡架構
xmpp協議的實現,都是基於client/server的網絡架構。可是xmpp協議自己並無限定非此架構不可,其和電子郵件的架構很是類似,可是其又不只限於此,因此其應用範圍十分普遍!工具

XMPP協議的組成

主要的XMPP 協議範本及當今應用很廣的XMPP 擴展性能

RFC 3920 XMPP:核心。定義了XMPP 協議框架下應用的網絡架構,引入了XML Stream(XML 流)與XML Stanza(XML 節),並規定XMPP 協議在通訊過程當中使用的XML 標籤。使用XML 標籤從根本上說是協議開放性與擴展性的須要。此外,在通訊的安全方面,把TLS 安全傳輸機制與SASL 認證機制引入到內核,與XMPP 進行無縫的鏈接,爲協議的安全性、可靠性奠基了基礎。Core 文檔還規定了錯誤的定義及處理、XML 的使用規範、JID(Jabber Identifier,Jabber 標識符)的定義、命名規範等等。因此這是全部基於XMPP 協議的應用都必需支持的文檔。

XEP-0030 服務搜索: 一個強大的用來測定XMPP 網絡中的其它實體所支持特性的協議。
XEP-0115 實體性能: XEP-0030 的一個經過即時出席的定製,能夠實時改變交變廣告功能。
XEP-0045 多人聊天: 一組定義參與和管理多用戶聊天室的協議,相似於Internet 的Relay Chat,具備很高的安全性。
XEP-0096 文件傳輸: 定義了從一個XMPP 實體到另外一個的文件傳輸。
XEP-0124 HTTP 綁定: 將XMPP 綁定到HTTP 而不是TCP,主要用於不可以持久的維持與服務器TCP 鏈接的設備。
XEP-0166 Jingle: 規定了多媒體通訊協商的總體架構。
XEP-0167 Jingle Audio Content Description Format: 定義了從一個XMPP 實體到另外一個的語音傳輸過程。
XEP-0176 Jingle ICE(Interactive Connectivity Establishment)Transport: ICE傳輸機制,文件解決了如何讓防火牆或是NAT(Network Address Translation)保護下的實體創建鏈接的問題。
XEP-0177 Jingle Raw UDP Transport: 純UDP 傳輸機制,文件講述瞭如何在沒有防火牆且在同一網絡下創建鏈接的。
XEP-0180 Jingle Video Content Description Format: 定義了從一個XMPP 實體到另外一個的視頻傳輸過程。
XEP-0181 Jingle DTMF(Dual Tone Multi-Frequency)
XEP-0183 Jingle Telepathy Transport Method。

Xmpp協議缺點

沒有二進制數據
XMPP協議的方式被編碼爲一個單一的長的XML文件,所以沒法提供修改二進制數據。文件傳輸使用HTTP協議,採用Base64(3)
(3)Base64是網絡上最多見的用於傳輸8Bit字節代碼的編碼方式之一

優化思路
優化思路
優化思路2

Xmpp提供電子名片協議

vCard是一種現存的、普遍使用的,用戶我的信息存儲的標準,有點像是電子名片。基礎的功能是存儲和獲取用戶的電子身份,該信息是用XML表示的,數據的存儲取決於全部現存的XMPP服務器的實現

XMPP系統特色

客戶機/服務器通訊模式、分佈式網絡、簡單的客戶端、XML的數據格式。

工做原理

(1)節點(client1)鏈接到服務器;
(2)服務器利用本地目錄系統中的證書對其認證;
(3)節點指定目標(client2)地址,讓服務器告知目標狀態;
(4)服務器查找、鏈接並進行相互認證;
(5)節點之間(client1與client2)進行交互.

對話栗子:
客戶端(kuusipuu)鏈接到一個XMPP服務器(amessage.de:5222/TCP),發送一條消息(主題和內容均爲「test 1449」)到另外一個客戶端(tero),而後註銷。

用戶發送鏈接請求到服務器
kuusipuu:

<?xmlversion='1.0'?>
<stream:stream xmlns:stream="http://etherx.jabber.org/streams"
xmlns="jabber:client" to="amessage.de">

server對請求應答
amessage.de:

<stream:stream xmlns='jabber:client'
xmlns:stream='http://etherx.jabber.org/streams'
from='amessage.de' id='1461777714'>

server利用本地目錄系統的證書對其認證
kuusipuu:

<iq type="set" id="auth_2" to="amessage.de" >
<query xmlns="jabber:iq:auth">
  <username>kuusipuu</username>
  <password>mypassword</password>
  <resource>Work</resource>
 </query>
</iq>

server將相應的結果返回給用戶端
amessage.de:

<iq from="amessage.de" id='auth_2' type='result'/>

用戶發送消息請求,並註銷
kuusipuu:

<message to="tero@example.com" >
    <subject>test 1449</subject>
    <body>test 1449</body>
</message>
<presence type="unavailable" >
    <status>Logged out</status>
</presence>
</stream:stream>

server返回註銷信息
amessage.de:

</stream:stream>

下篇文章主要從代碼的角度介紹基於xmpp的服務器構成、客戶端、XMPP網關、XMPP地址格式、XMPP消息格式等我最近學習的相關知識和總結,並簡單列舉相應的列子。

jessonlv——呂國棟原創文章,轉載請註明出處:個人博客http://blog.csdn.net/jessonlv

相關文章
相關標籤/搜索