《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 其他 > 業(yè)界動態(tài) > 基于XMPP的即時通信網(wǎng)關(guān)應(yīng)用研究

基于XMPP的即時通信網(wǎng)關(guān)應(yīng)用研究

2008-07-16
作者:樊燕紅1, 譚 香2

??? 摘 要: XMPP最終要實(shí)現(xiàn)不同即時通信" title="即時通信">即時通信系統(tǒng)間的互通。主要介紹對XMPP與其他IM互連互通的網(wǎng)關(guān)原理及其應(yīng)用進(jìn)行的研究討論,,并以jabber系統(tǒng)與MSN Messenger進(jìn)行互發(fā)信息作為實(shí)例進(jìn)行詳細(xì)闡述,。
??? 關(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)提出的可擴(kuò)展的消息傳遞和出席協(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ò)拓?fù)浣Y(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流為通信雙方之間采用異步方式進(jìn)行數(shù)據(jù)傳輸提供標(biāo)準(zhǔn)的方法,在整個XMPP通信過程中處于最外層,,用以控制系統(tǒng)正常的通信,。流認(rèn)證采用SASL(Simple Authentication and Security Layer)和回?fù)?Dialback)協(xié)議完成通信認(rèn)證,是XMPP安全機(jī)制的重要組成部分,。XML節(jié)為通信雙方進(jìn)行真正的內(nèi)容交換提供通信框架,,是實(shí)際需要交換的信息所在處。
2 基于網(wǎng)關(guān)實(shí)現(xiàn)IM互聯(lián)互通
?? 基于XMPP的IM通過網(wǎng)關(guān)與其他協(xié)議IM實(shí)現(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ù)端之間可以直接進(jìn)行通信,而XMPP與其他IM進(jìn)行互通時,,在XMPP服務(wù)端與其他IM服務(wù)端之間就需要相應(yīng)IM的網(wǎng)關(guān)來進(jìn)行協(xié)議的翻譯,,并且不同的外部IM需要不同網(wǎng)關(guān)完成協(xié)議翻譯功能。
3 XMPP網(wǎng)關(guān)的工作原理" title="工作原理">工作原理
??? 以與MSN Messengers進(jìn)行互連互通為例說明XMPP網(wǎng)關(guān)的工作原理,。MSN Messenger是微軟公司推出的當(dāng)前很流行的即時通信軟件,,它的協(xié)議建立在TCP/IP之上。除了文件傳輸和語音聊天是直接的“點(diǎn)對點(diǎn)”通信之外,,其他所有的情況都是通過服務(wù)器進(jìn)行,。在邏輯上,一共有三種類型的服務(wù)器,,各司其職:
??? (1)派遣服務(wù)器DS(Dispatch Server):客戶端" title="客戶端">客戶端最初連接的服務(wù)器,,負(fù)責(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)客戶端之間需要進(jìn)行文件傳輸或語音聊天時,,即發(fā)送系統(tǒng)消息,建立“點(diǎn)對點(diǎn)”會話通道(可能轉(zhuǎn)為使用UDP),。服務(wù)端口通常也是1863,。“點(diǎn)對點(diǎn)”通信使用的端口由客戶端自動協(xié)商決定,如文件傳輸通常使用6891端口[2],。
MSN Messenger命令使用純ASCII碼,,對非ASCII碼字符使用URL編碼。
??? 現(xiàn)在XMPP的軟件主要是各類Jabber IM,。實(shí)現(xiàn)Jabber賬號與MSN賬號的關(guān)聯(lián)如下:
??? (1)使用Jabber客戶端Exodus軟件建立一個jabber賬號:[email protected],;使用MSN Messengers建立MSN賬號[email protected],昵稱Beauty,。
??? (2)為[email protected]加入一個好友[email protected](昵稱Handsome),,使得這兩個MSN賬號用戶互為好友。
??? (3)使用Exodus賬號[email protected]登錄到服務(wù)器jabber.com.cn,,并且把賬號[email protected]注冊到j(luò)abber MSN網(wǎng)關(guān)服務(wù)器,。
??? 在MSN 賬號[email protected]登錄后,就可以在Jabber客戶端的好友列表中看到多了一個好友boy88%hotmail.com@ msn.jabber.com.cn,,原[email protected]變成了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ù)端:
???
????
Jabber服務(wù)端接收到該請求后,網(wǎng)關(guān)按照MSN的通信協(xié)議轉(zhuǎn)發(fā)該請求給MSN的服務(wù)器(NS),。首先發(fā)送命令字“XFR TrID SB”給MSN的服務(wù)器(NS),在收到MSN服務(wù)器返回的相同命令字的命令: XFR TrID SB 64.4.13.88:1863 CKI1989487642.2070896604后,,從中獲取MSN服務(wù)器分配給這次Chat的接線服務(wù)器(SB)的地址和端口,然后再重新連接到該SB服務(wù)器上[3]
??? 在連接上SB服務(wù)器之后,,網(wǎng)關(guān)將向此SB服務(wù)器發(fā)送以下命令:USR 1 [email protected] 989487642.2070896604,,如果所發(fā)送的這個CKI雜列正確,SB服務(wù)器將返回USR 1 OK [email protected] Beauty,。以上操作完成之后,,接下來這個用戶要做的就是要把另一個用戶“叫到”此聊天session中。這可以通過發(fā)送下面的命令完成CAL 2 [email protected],,此時服務(wù)器將會向此用戶回應(yīng)一個session號,同時也會將此session號發(fā)送給另一個用戶,。
??? 如果另一個用戶準(zhǔn)備好聊天并做出回應(yīng),SB服務(wù)器將發(fā)送如下命令: JOI [email protected] Handsome,。這條命令表示另一個用戶加入了聊天當(dāng)中,,通信雙方之間就建立起一個chat通道,相互之間可以互發(fā)消息了。
3.2 MSN好友向Jabber客戶端發(fā)出一次chat的請求
??? MSN好友[email protected]并不知道[email protected]已經(jīng)注冊到了Jabber的網(wǎng)關(guān)服務(wù),,仍正常地向[email protected]發(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 [email protected] Handsome,。從該命令行中獲取SB服務(wù)器的地址和端口以及CKI雜列和發(fā)起聊天方的用戶名和昵稱,然后Gateway方連接到該SB服務(wù)器上,,并發(fā)送命令“ANS TrID LocalUserHandle AuthResponseInfo SessionID”,。其中,LocalUserHandle為C端用戶,,AuthResponseInfo和SessionID的值均要與收到的RNG命令中的值一致,。如:ANS 1 [email protected] 989495494.750408580 11742066。當(dāng)接收到SB服務(wù)器發(fā)送的命令字為IRO 1 1 1 [email protected] 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好友[email protected]發(fā)XML數(shù)據(jù)流信息,在Jabber客戶端看到的好友賬號是boy88%? [email protected]
?? ???
????
信息被Jabber服務(wù)端接后,,網(wǎng)關(guān)轉(zhuǎn)換為MSN的信息格式再發(fā)送到MSN服務(wù)端:
??? 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客戶端賬號[email protected]向他的好友[email protected]按MSN格式發(fā)信息時,,如:
????MSG [email protected] 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)[email protected]改為[email protected],,如下:

??? ??
????
Jabber客戶端從接收到的XML流獲取收到的即時信息:I am from Sichuan,。
??? 即時通信越來越流行,應(yīng)用范圍越來越大,,但因各類主流IM軟件相互間不能直接互通信息,,必然會影響人際間信息的交流。作為即時通信服務(wù)的協(xié)議標(biāo)準(zhǔn),,基于XML的XMPP提供一個網(wǎng)關(guān)服務(wù),,通過在服務(wù)端與非XMPP的信息進(jìn)行相互翻譯,在一定程度上解決了這個問題,,實(shí)現(xiàn)了各類不同IM軟件的互通,,為不同架構(gòu)的即時通信系統(tǒng)進(jìn)行通信提供了一種方式。
參考文獻(xiàn)
[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].計(jì)算機(jī)應(yīng)用研究,,2004,(6):256-257,260.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章,、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者,。如涉及作品內(nèi)容,、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118,;郵箱:[email protected],。