XMPP協議的原理介紹


XMPP(可擴展消息處理現場協議)是基於可擴展標記語言(XML)的協議,它用於即時消息(IM)以及在線現場探測。它在促進server之間的准即時操作。這個協議可能終於同意因特網用戶向因特網上的其它不論什么人發送即時消息,即使其操作系統和瀏覽器不同。

  XMPP的前身是Jabber,一個開源形式組織產生的網絡即時通信協議。XMPP眼下被IETF國際標准組織完畢了標准化工作。標准化的核心結果分為兩部分;

 

在IETF 中,把IM協議划分為四種協議,即即時信息和出席協議(Instant Messaging and Presence Protocol, IMPP)、出席和即時信息協議(Presence and Instant Messaging Protocol, PRIM)、針對即時信息和出席擴展的會話發起協議(Session Initiation Protocol for Instant Messaging and Presence Leveraging Extensions, SIMPLE),以及可擴展的消息出席協議(XMPP)。最初研發IMPP 也是為了創建一種標准化的協議,可是今天,IMPP 已經發展成為基本協議單元,定義全部即時通信協議應該支持的核心功能集。

XMPP 和SIMPLE 兩種協議是架構,有助於實現IMPP協議所描寫敘述的規范。PRIM 最初是基於即時通信的協議,與XMPP 和SIMPLE 相似,可是己經不再使用


1.    XMPP 協議是公開的,由JSF開源社區組織開發的。XMPP 協議並不屬於不論什么的機構和個人,而是屬於整個社區,這一點從根本上保證了其開放性。

2.    XMPP 協議具有良好的擴展性。在XMPP 中,即時消息和到場信息都是基於XML 的結構化信息,這些信息以XML 節(XML Stanza)的形式在通信實體間交換。XMPP 發揮了XML 結構化數據的通用傳輸層的作用,它將出席和上下文敏感信息嵌入到XML 結構化數據中,從而使數據以極高的效率傳送給最合適的資源。基於XML 建立起來的應用具有良好的語義完整性和擴展性。

3.    分布式的網絡架構。XMPP 協議都是基於Client/Server 架構,可是XMPP協議本身並沒有這種限制。網絡的架構和電子郵件十分類似,但沒有結合不論什么特定的網絡架構,適用范圍很廣泛。

4.    XMPP 具有非常好的彈性。XMPP 除了可用在即時通信的應用程序,還能用在網絡管理、內容供稿、協同工具、檔案共享、游戲、遠端系統監控等。

5.    安全性。XMPP在Client-to-Server通信,和Server-to-Server通信中都使用TLS (Transport Layer Security)協議作為通信通道的加密方法,保證通信的安全。不論什么XMPPserver能夠獨立於公眾XMPP網絡(比如在企業內部網絡中),而使用SASL及TLS等技術更加增強了通信的安全性。例如以下圖所看到的:

 

 

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 協議的應用都必需支持的文檔。

RFC 3921:用戶成功登陸到server之后,公布更新自己的在線好友管理、發送即時聊天消息等業務。全部的這些業務都是通過三種主要的XML 節來完畢的:IQ Stanza(IQ 節), Presence Stanza(Presence 節), Message Stanza(Message 節)。RFC3921 還對堵塞策略進行了定義,定義是多種堵塞方式。能夠說,RFC3921 是RFC3920 的充分補充。兩個文檔結合起來,就形成了一個主要的即時通信協議平台,在這個平台上能夠開發出各種各樣的應用。

XEP-0030 服務搜索。一個強大的用來測定XMPP 網絡中的其他實體所支持特性的協議。

XEP-0115 實體性能。XEP-0030 的一個通過即時出席的定制,能夠實時改變交變廣告功能。

XEP-0045 多人聊天。一組定義參與和管理多用戶聊天室的協議,相似於Internet 的Relay Chat,具有非常高的安全性。

XEP-0096 文件傳輸。定義了從一個XMPP 實體到還有一個的文件傳輸。

XEP-0124 HTTP 綁定。將XMPP 綁定到HTTP 而不是TCP,主要用於不可以持久的維持與serverTCP 連接的設備。

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是一個典型的C/S架構,而不是像大多數即時通訊軟件一樣,使用P2Pclient到client的架構,也就是說在大多數情況下,當兩個client進行通訊時,他們的消息都是通過server傳遞的(也有例外,比如在兩個client傳輸文件時).採用這樣的架構,主要是為了簡化client,將大多數工作放在server端進行,這樣,client的工作就比較簡單,並且,當添加功能時,多數是在server端進行.XMPP服務的框架結構例如以下圖所看到的.XMPP中定義了三個角色,XMPPclient,XMPPserver、網關.通信可以在這三者的隨意兩個之間雙向發生.server同一時候承擔了client信息記錄、連接管理和信息的路由功能.網關承擔着與異構即時通信系統的互聯互通,異構系統可以包含SMS(短信)、MSN、ICQ等.主要的網絡形式是單client通過TCP/IP連接到單server,然后在之上傳輸XML,工作原理是:

(1)節點連接到server;(2)server利用本地文件夾系統中的證書對其認證;(3)節點指定目標地址,讓server告知目標狀態;(4)server查找、連接並進行相互認證;(5)節點之間進行交互.

XMPPclient

XMPP 系統的一個設計標准是必須支持簡單的client。其實,XMPP 系統架構對client僅僅有非常少的幾個限制。一個XMPP client必須支持的功能有:

1. 通過 TCP 套接字與XMPP server進行通信;

2. 解析組織好的 XML 信息包;

3. 理解消息數據類型。

XMPP 將復雜性從client轉移到server端。這使得client編寫變得很easy,更新系統功能也相同變得easy。XMPP client與服務端通過XML 在TCP 套接字的5222 port進行通信,而不須要client之間直接進行通信。

主要的XMPP client必須實現下面標准協議(XEP-0211):

RFC3920 核心協議Core

RFC3921 即時消息和出席協議Instant Messaging and Presence

XEP-0030 服務發現Service Discovery

XEP-0115 實體能力Entity Capabilities

 

XMPPserver

 

XMPP server遵循兩個主要法則:

l  監聽client連接,並直接與client應用程序通信;

l  與其它 XMPP server通信;

XMPP開源server一般被設計成模塊化,由各個不同的代碼包構成,這些代碼包分別處理Session管理、用戶和server之間的通信、server之間的通信、DNS(Domain Name System)轉換、存儲用戶的個人信息和朋友名單、保留用戶在下線時收到的信息、用戶注冊、用戶的身份和權限認證、依據用戶的要求過濾信息和系統記錄等。另外,server能夠通過附加服務來進行擴展,如完整的安全策略,同意server組件的連接或client選擇,通向其它消息系統的網關。

主要的XMPP server必須實現下面標准協議

RFC3920 核心協議Core

RFC3921 即時消息和出席協議Instant Messaging and Presence

XEP-0030 服務發現Service Discovery

 

 XMPP網關

 

XMPP 突出的特點是能夠和其它即時通信系統交換信息和用戶在線狀況。因為協議不同,XMPP 和其它系統交換信息必須通過協議的轉換來實現,眼下幾種主流即時通信協議都沒有公開,所以XMPP server本身並沒有實現和其它協議的轉換,但它的架構同意轉換的實現。實現這個特殊功能的服務端在XMPP 架構里叫做網關(gateway)。眼下,XMPP 實現了和AIM、ICQ、IRC、MSN Massager、RSS0.9 和Yahoo Massager 的協議轉換。因為網關的存在,XMPP 架構其實兼容全部其它即時通信網絡,這無疑大大提高了XMPP 的靈活性和可擴展性。

 

XMPP地址格式

一個實體在XMPP網絡結構中被稱為一個接點,它有唯一的標示符jabber identifier(JID),即實體地址,用來表示一個Jabber用戶,可是也能夠表示其它內容,比如一個聊天室.一個有效的JID包含一系列元素:(1)域名(domain identifier);(2)節點(node identifier);(3)源(resource identifier).它的格式是node@domain/resourcenode@domain,相似電子郵件的地址格式.domain用來表示接點不同的設備或位置,這個是可選的,比如a在Server1上注冊了一個用戶,username為doom,那么a的JID就是doom@serverl,在發送消息時,指明doom@serverl就能夠了,resource能夠不用指定,但a在登錄到這個Server時,fl的JID可能是doom@serverl、exodus(假設a用Exodus軟件登錄),也可能是doom@serverl/psi(假設a用psi軟件登錄).資源僅僅用來識別屬於用戶的位置或設備等,一個用戶能夠同一時候以多種資源與同一個XMPP服務器連接

 

XMPP消息格式
XMPP中定義了       3個頂層XML元素: Message、Presence、IQ,以下針對這三種元素進行介紹。

 

<Message>

用於在兩個jabber用戶之間發送信息。Jsm(jabber會話管理器)負責滿足全部的消息,無論目標用戶的狀態怎樣。假設用戶在線jsm馬上提交;否則jsm就存儲。

To :標識消息的接收方。

from : 指發送方的名字或標示(id)o

Text: 此元素包括了要提交給目標用戶的信息。

結構例如以下所看到的:

 

<message to= ‘lily@jabber.org/contact’ type =’chat’>

<body> 你好,在忙嗎</body>

</message>

 

 <Presence>

用來表明用戶的狀態,如:online、away、dnd(請勿打攪)等。當用戶離線或改變自己的狀態時,就會在stream的上下文中插入一個Presence元素,來表明自身的狀態.結構例如以下所看到的:

<presence>

From =‘lily @ jabber.com/contact’

To = ‘yaoman @ jabber.com/contact'

<status> Online </status>

</presence>

<presence>元素能夠取以下幾種值:

Probe :用於向接受消息方法發送特殊的請求

subscribe:當接受方狀態改變時,自己主動向發送方發送presence信息。

 

 

< IQ >

一種請求/響應機制,從一個實體從發送請求,另外一個實體接受請求,並進行響應.比如,client在stream的上下文中插入一個元素,向Server請求得到自己的好友列表,Server返回一個,里面是請求的結果.

<iq > 基本的屬性是type。包含:

Get :獲取當前域值。

Set :設置或替換get查詢的值。

Result :說明成功的響應了先前的查詢。

Error: 查詢和響應中出現的錯誤。

結構例如以下所看到的:

<iq from =‘lily @ jabber.com/contact’id=’1364564666’ Type=’result’>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM