XMPP:可擴展消息處理現場協議,是一種基于XML流的用于即時通訊(IM)的協議,其間有三種角色,客戶端,服務器和網關,通信可以在三者之間任意兩個發生,前面兩個好理解,而網關是為了處理其他異構系統即不使用XMPP協議的系統,比如MSN,SMS等,網關可以轉換不同的協議,來達到交流互通作用??蛻舳伺c服務器是基于TCP/IP協議來建立連接,在上面傳輸XML文檔。
由圖可知,客戶端之間無法直接交流,同時服務器允許多個客戶端同時連接。客戶端通過端口5222連接服務器,服務器之間通過5269互相通信。
XMPP可用于異步通信,這也就表明了在客戶端和服務器之間存在兩條XML流和一條TCP鏈路,服務器之間需要兩條TCP鏈路來傳輸對端數據。
XML流會以標記開始,標記結束,客戶端服務器之間可能每次只發送一個XML片段或者完整的。stream標記的屬性如下:
to只能用于從客戶端到服務器的XML流中。
from只能用于從服務器到客戶端的XML流中。
id只能用于從接收實體到發送實體的XML流中,id必須唯一,用于標記會話。
xml:lang只能用于發起方,用于約定語言。如發起方沒有攜帶xml:lang屬性,接收方應使用默認語言。
version至少在“1.0”以上。
建立會話時,會先以TLS(安全傳輸層協議)建立一個安全鏈路,成功后再用SASL(簡單認證和安全層協議)進行身份認證,之后綁定資源開始傳輸XML流。
TLS原理:利用非對稱加密演算來對通信方做身份認證,之后交換對稱密鑰作為會談密鑰,就用此密鑰來加密傳輸信息。