??? 摘 要: XMPP最終要實現(xiàn)不同即時通信" title="即時通信">即時通信系統(tǒng)間的互通。主要介紹對XMPP與其他IM互連互通的網(wǎng)關(guān)原理及其應(yīng)用進行的研究討論,并以jabber系統(tǒng)與MSN Messenger進行互發(fā)信息作為實例進行詳細闡述。
??? 關(guān)鍵詞: 即時通信(IM)? XMPP網(wǎng)關(guān)? 網(wǎng)絡(luò)通訊
?
??? 隨著互聯(lián)網(wǎng)的普及,即時通信軟件" title="通信軟件">通信軟件IM(Instant Messaging)成為當(dāng)前Internet上非常普及的通信工具,它從根本上改變了人們的傳統(tǒng)通信方式。但是目前主流的IM產(chǎn)品都不能直接互通信息,IM成為網(wǎng)絡(luò)通信方式的瓶頸,如:微軟的MSN、Yahoo的雅虎通、ICQ以及騰訊公司的QQ等,它們所采用的相關(guān)標(biāo)準(zhǔn)和協(xié)議不統(tǒng)一,是造成瓶頸的原因。
??? 目前即時通信的相關(guān)標(biāo)準(zhǔn)主要有IBM公司和微軟公司聯(lián)合提出的SIMPLE(SIP for Instant Messaging and Presence Leveraging Extensions)和互聯(lián)網(wǎng)工程任務(wù)組IETF(The Internet Engineering Task Force)提出的可擴展的消息傳遞和出席協(xié)議XMPP(the eXtensible Messaging and Presence Protocol)。
1 基于XMPP的IM架構(gòu)
??? XMPP是在XML基礎(chǔ)上開發(fā)的用于即時通信的協(xié)議,于2004年被IETF批準(zhǔn)為Internet標(biāo)準(zhǔn)。XMPP不局限于網(wǎng)絡(luò)拓撲結(jié)構(gòu),但是網(wǎng)絡(luò)通信必須采用TCP協(xié)議,它的典型應(yīng)用是基于C/S結(jié)構(gòu)的系統(tǒng)[1]。
??? 基于XMPP的IM在結(jié)構(gòu)上由三個部分組成:XML流(XML Stream)、流認(rèn)證(Stream authentication)、 XML節(jié)(XML Stanza)。XML流為通信雙方之間采用異步方式進行數(shù)據(jù)傳輸提供標(biāo)準(zhǔn)的方法,在整個XMPP通信過程中處于最外層,用以控制系統(tǒng)正常的通信。流認(rèn)證采用SASL(Simple Authentication and Security Layer)和回撥(Dialback)協(xié)議完成通信認(rèn)證,是XMPP安全機制的重要組成部分。XML節(jié)為通信雙方進行真正的內(nèi)容交換提供通信框架,是實際需要交換的信息所在處。
2 基于網(wǎng)關(guān)實現(xiàn)IM互聯(lián)互通
?? 基于XMPP的IM通過網(wǎng)關(guān)與其他協(xié)議IM實現(xiàn)通信。XMPP的網(wǎng)關(guān)(Gateway)在服務(wù)端" title="服務(wù)端">服務(wù)端提供一種有特殊目的的服務(wù),主要功能是把XMPP即時消息翻譯成使用非XMPP的即時通信協(xié)議格式,同時把返回的數(shù)據(jù)翻譯回XMPP,例如電子郵件(Email)、在線聊天系統(tǒng)(IRC)、SIMPLE、短消息(SMS)以及現(xiàn)在流行的即時通信軟件,如AIM、ICQ、MSN、Yahoo等。XMPP網(wǎng)關(guān)原理圖如圖1所示。
??????????????????????
??? 圖1顯示,XMPP服務(wù)端之間可以直接進行通信,而XMPP與其他IM進行互通時,在XMPP服務(wù)端與其他IM服務(wù)端之間就需要相應(yīng)IM的網(wǎng)關(guān)來進行協(xié)議的翻譯,并且不同的外部IM需要不同網(wǎng)關(guān)完成協(xié)議翻譯功能。
3 XMPP網(wǎng)關(guān)的工作原理" title="工作原理">工作原理
??? 以與MSN Messengers進行互連互通為例說明XMPP網(wǎng)關(guān)的工作原理。MSN Messenger是微軟公司推出的當(dāng)前很流行的即時通信軟件,它的協(xié)議建立在TCP/IP之上。除了文件傳輸和語音聊天是直接的“點對點”通信之外,其他所有的情況都是通過服務(wù)器進行。在邏輯上,一共有三種類型的服務(wù)器,各司其職:
??? (1)派遣服務(wù)器DS(Dispatch Server):客戶端" title="客戶端">客戶端最初連接的服務(wù)器,負責(zé)給客戶端分配合適的通知服務(wù)器。域名是messenger.hotmail.com,標(biāo)準(zhǔn)服務(wù)端口是1863。完成派遣任務(wù)后,切斷TCP連接。
??? (2)通知服務(wù)器NS(Notification Server):客戶端需要一直保持連接的服務(wù)器。很多任務(wù)要在這個會話內(nèi)完成,包括登錄、改變狀態(tài)、獲取用戶列表、修改用戶信息、發(fā)起聊天、接收呼叫、郵件通知、退出等。服務(wù)端口通常也是1863,由派遣服務(wù)器指定。
??? (3)接線服務(wù)器SB(Switchboard Server):客戶端之間聊天使用的中轉(zhuǎn)服務(wù)器。每開一個聊天窗口,客戶端和服務(wù)器就建立一個TCP會話。當(dāng)客戶端之間需要進行文件傳輸或語音聊天時,即發(fā)送系統(tǒng)消息,建立“點對點”會話通道(可能轉(zhuǎn)為使用UDP)。服務(wù)端口通常也是1863?!包c對點”通信使用的端口由客戶端自動協(xié)商決定,如文件傳輸通常使用6891端口[2]。
MSN Messenger命令使用純ASCII碼,對非ASCII碼字符使用URL編碼。
??? 現(xiàn)在XMPP的軟件主要是各類Jabber IM。實現(xiàn)Jabber賬號與MSN賬號的關(guān)聯(lián)如下:
??? (1)使用Jabber客戶端Exodus軟件建立一個jabber賬號:phoenix@jabber.com.cn;使用MSN Messengers建立MSN賬號girl88@hotmail.com,昵稱Beauty。
??? (2)為girl88@hotmail.com加入一個好友boy88@hotmail.com(昵稱Handsome),使得這兩個MSN賬號用戶互為好友。
??? (3)使用Exodus賬號phoenix@jabber.com.cn登錄到服務(wù)器jabber.com.cn,并且把賬號girl88@hotmail.com注冊到j(luò)abber MSN網(wǎng)關(guān)服務(wù)器。
??? 在MSN 賬號boy88@hotmail.com登錄后,就可以在Jabber客戶端的好友列表中看到多了一個好友boy88%hotmail.com@ msn.jabber.com.cn,原boy88@hotmail.com變成了boy88%hotmail.com(為了不與Jabber賬號中的@混淆,原MSN賬號中的@改為%),并且在后面加上了jabber服務(wù)器的地址。
??? 下面以Jabber系統(tǒng)與MSN Messenger之間互發(fā)消息的過程說明XMPP網(wǎng)關(guān)的工作原理。
3.1 Jabber客戶端向MSN好友發(fā)出一次chat的請求
??? 當(dāng)Jabber客戶端想和一個MSN的好友聊天時,首先需要按如下格式發(fā)送請求給Jabber服務(wù)端:
???
????
??? 在連接上SB服務(wù)器之后,網(wǎng)關(guān)將向此SB服務(wù)器發(fā)送以下命令:USR 1 girl88@hotmail.com 989487642.2070896604,如果所發(fā)送的這個CKI雜列正確,SB服務(wù)器將返回USR 1 OK girl88@hotmail.com Beauty。以上操作完成之后,接下來這個用戶要做的就是要把另一個用戶“叫到”此聊天session中。這可以通過發(fā)送下面的命令完成CAL 2 boy88@hotmail.com,此時服務(wù)器將會向此用戶回應(yīng)一個session號,同時也會將此session號發(fā)送給另一個用戶。
??? 如果另一個用戶準(zhǔn)備好聊天并做出回應(yīng),SB服務(wù)器將發(fā)送如下命令: JOI boy88@hotmail.com Handsome。這條命令表示另一個用戶加入了聊天當(dāng)中,通信雙方之間就建立起一個chat通道,相互之間可以互發(fā)消息了。
3.2 MSN好友向Jabber客戶端發(fā)出一次chat的請求
??? MSN好友boy88@hotmail.com并不知道girl88@hotmail.com已經(jīng)注冊到了Jabber的網(wǎng)關(guān)服務(wù),仍正常地向girl88@hotmail.com發(fā)送一次chat的請求,而MSN服務(wù)器(NS)已把MSN格式信息發(fā)送到了Jabber服務(wù)端,此時網(wǎng)關(guān)首先接收到該請求(MSN通信協(xié)議中命令字為RNG的命令,格式為“RNG SessionID SwitchboardServerAddress CKI AuthchallengeInfo CallingUserHandle CallingUser FriendlyName”),如:RNG 11742066 64.4.13.74:1863 CKI 989495494.750408580 boy88@hotmail.com Handsome。從該命令行中獲取SB服務(wù)器的地址和端口以及CKI雜列和發(fā)起聊天方的用戶名和昵稱,然后Gateway方連接到該SB服務(wù)器上,并發(fā)送命令“ANS TrID LocalUserHandle AuthResponseInfo SessionID”。其中,LocalUserHandle為C端用戶,AuthResponseInfo和SessionID的值均要與收到的RNG命令中的值一致。如:ANS 1 girl88@hotmail.com 989495494.750408580 11742066。當(dāng)接收到SB服務(wù)器發(fā)送的命令字為IRO 1 1 1 girl88@hotmail.com beauty 和ANS 1 OK的命令時,通信雙方就可以互發(fā)消息了。
3.3 Jabber客戶端MSN好友互發(fā)消息過程
??? 不管是Jabber客戶端先發(fā)出chat請求還是先接收chat請求,一旦與MSN服務(wù)器為該次chat分配的SB服務(wù)器之間建立了通信通道,Jabber客戶端和他的MSN好友之間就可以收發(fā)消息了。
??? (1)Jabber客戶端向MSN好友boy88@hotmail.com發(fā)XML數(shù)據(jù)流信息,在Jabber客戶端看到的好友賬號是boy88%? hotmail.com@msn.jabber.com.cn:
??
????
??? MSG 2 N 153
??? MIME-Version: 1.0
??? Content-Type: text/plain; charset=UTF-8
??? X-MMS-IM-Format: FN=Microsoft%20Sans%20Serif;
????????? EF=; CO=0; CS=0; PF=22
??? Where are you, boy88?
其中,2是測試號,每發(fā)送一次信息,此號就會隨著增加;153是指所發(fā)送信息的長度。在上面的例子中就是頭信息和所發(fā)送的信息“Where are you, boy88?”的長度。
??? (2)當(dāng)MSN客戶端賬號boy88@hotmail.com向他的好友girl88@hotmail.com按MSN格式發(fā)信息時,如:
????MSG girl88@hotmail.com beauty 149
??? MIME-Version: 1.0
??? Content-Type: text/plain; charset=UTF-8
??? X-MMS-IM-Format: FN=Microsoft%20Sans%20Serif;
??????????? EF=; CO=0; CS=0; PF=22
??? I am from Sichuan.
??? Jabber服務(wù)端接收到MSN格式的信息后,網(wǎng)關(guān)需要把這些信息轉(zhuǎn)化為Jabber客戶端識別的XML數(shù)據(jù)流,并且發(fā)送目標(biāo)girl88@hotmail.com改為phoenix@jabber.com.cn,如下:
??? ??
????Jabber客戶端從接收到的XML流獲取收到的即時信息:I am from Sichuan。
??? 即時通信越來越流行,應(yīng)用范圍越來越大,但因各類主流IM軟件相互間不能直接互通信息,必然會影響人際間信息的交流。作為即時通信服務(wù)的協(xié)議標(biāo)準(zhǔn),基于XML的XMPP提供一個網(wǎng)關(guān)服務(wù),通過在服務(wù)端與非XMPP的信息進行相互翻譯,在一定程度上解決了這個問題,實現(xiàn)了各類不同IM軟件的互通,為不同架構(gòu)的即時通信系統(tǒng)進行通信提供了一種方式。
參考文獻
[1]?ANDRE P S. Extensible messaging and presence protocol(XMPP): core. RFC3920,.[S]. Internet Engineering Task?Force,2004.
[2]?MSN Messenger協(xié)議[EB/OL].http://www.cnitblog.com/tcpip2005/articles/879.html,2005-04-16.
[3]?黃昶,張燕,沈建國.即時消息傳遞系統(tǒng)的智能代理[J].計算機應(yīng)用研究,2004,(6):256-257,260.