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

基于XMPP的即時通信網(wǎng)關應用研究

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

??? 摘 要: XMPP最終要實現(xiàn)不同即時通信" title="即時通信">即時通信系統(tǒng)間的互通,。主要介紹對XMPP與其他IM互連互通的網(wǎng)關原理及其應用進行的研究討論,,并以jabber系統(tǒng)與MSN Messenger進行互發(fā)信息作為實例進行詳細闡述。
??? 關鍵詞: 即時通信(IM)? XMPP網(wǎng)關? 網(wǎng)絡通訊

?

??? 隨著互聯(lián)網(wǎng)的普及,,即時通信軟件" title="通信軟件">通信軟件IM(Instant Messaging)成為當前Internet上非常普及的通信工具,,它從根本上改變了人們的傳統(tǒng)通信方式。但是目前主流的IM產(chǎn)品都不能直接互通信息,,IM成為網(wǎng)絡通信方式的瓶頸,,如:微軟的MSN、Yahoo的雅虎通,、ICQ以及騰訊公司的QQ等,,它們所采用的相關標準和協(xié)議不統(tǒng)一,是造成瓶頸的原因。
??? 目前即時通信的相關標準主要有IBM公司和微軟公司聯(lián)合提出的SIMPLE(SIP for Instant Messaging and Presence Leveraging Extensions)和互聯(lián)網(wǎng)工程任務組IETF(The Internet Engineering Task Force)提出的可擴展的消息傳遞和出席協(xié)議XMPP(the eXtensible Messaging and Presence Protocol),。
1 基于XMPP的IM架構
??? XMPP是在XML基礎上開發(fā)的用于即時通信的協(xié)議,,于2004年被IETF批準為Internet標準。XMPP不局限于網(wǎng)絡拓撲結構,,但是網(wǎng)絡通信必須采用TCP協(xié)議,它的典型應用是基于C/S結構的系統(tǒng)[1],。
??? 基于XMPP的IM在結構上由三個部分組成:XML流(XML Stream),、流認證(Stream authentication)、 XML節(jié)(XML Stanza),。XML流為通信雙方之間采用異步方式進行數(shù)據(jù)傳輸提供標準的方法,,在整個XMPP通信過程中處于最外層,用以控制系統(tǒng)正常的通信,。流認證采用SASL(Simple Authentication and Security Layer)和回撥(Dialback)協(xié)議完成通信認證,,是XMPP安全機制的重要組成部分。XML節(jié)為通信雙方進行真正的內容交換提供通信框架,,是實際需要交換的信息所在處,。
2 基于網(wǎng)關實現(xiàn)IM互聯(lián)互通
?? 基于XMPP的IM通過網(wǎng)關與其他協(xié)議IM實現(xiàn)通信。XMPP的網(wǎng)關(Gateway)在服務端" title="服務端">服務端提供一種有特殊目的的服務,,主要功能是把XMPP即時消息翻譯成使用非XMPP的即時通信協(xié)議格式,,同時把返回的數(shù)據(jù)翻譯回XMPP,例如電子郵件(Email),、在線聊天系統(tǒng)(IRC),、SIMPLE、短消息(SMS)以及現(xiàn)在流行的即時通信軟件,,如AIM,、ICQ、MSN,、Yahoo等,。XMPP網(wǎng)關原理圖如圖1所示。

??????????????????????
??? 圖1顯示,,XMPP服務端之間可以直接進行通信,,而XMPP與其他IM進行互通時,在XMPP服務端與其他IM服務端之間就需要相應IM的網(wǎng)關來進行協(xié)議的翻譯,,并且不同的外部IM需要不同網(wǎng)關完成協(xié)議翻譯功能,。
3 XMPP網(wǎng)關的工作原理" title="工作原理">工作原理
??? 以與MSN Messengers進行互連互通為例說明XMPP網(wǎng)關的工作原理。MSN Messenger是微軟公司推出的當前很流行的即時通信軟件,,它的協(xié)議建立在TCP/IP之上,。除了文件傳輸和語音聊天是直接的“點對點”通信之外,其他所有的情況都是通過服務器進行,。在邏輯上,,一共有三種類型的服務器,,各司其職:
??? (1)派遣服務器DS(Dispatch Server):客戶端" title="客戶端">客戶端最初連接的服務器,負責給客戶端分配合適的通知服務器,。域名是messenger.hotmail.com,,標準服務端口是1863。完成派遣任務后,,切斷TCP連接,。
??? (2)通知服務器NS(Notification Server):客戶端需要一直保持連接的服務器。很多任務要在這個會話內完成,,包括登錄,、改變狀態(tài)、獲取用戶列表,、修改用戶信息,、發(fā)起聊天、接收呼叫,、郵件通知,、退出等。服務端口通常也是1863,,由派遣服務器指定,。
??? (3)接線服務器SB(Switchboard Server):客戶端之間聊天使用的中轉服務器。每開一個聊天窗口,,客戶端和服務器就建立一個TCP會話,。當客戶端之間需要進行文件傳輸或語音聊天時,即發(fā)送系統(tǒng)消息,,建立“點對點”會話通道(可能轉為使用UDP),。服務端口通常也是1863?!包c對點”通信使用的端口由客戶端自動協(xié)商決定,,如文件傳輸通常使用6891端口[2]。
MSN Messenger命令使用純ASCII碼,,對非ASCII碼字符使用URL編碼,。
??? 現(xiàn)在XMPP的軟件主要是各類Jabber IM。實現(xiàn)Jabber賬號與MSN賬號的關聯(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]登錄到服務器jabber.com.cn,并且把賬號[email protected]注冊到jabber MSN網(wǎng)關服務器。
??? 在MSN 賬號[email protected]登錄后,,就可以在Jabber客戶端的好友列表中看到多了一個好友boy88%hotmail.com@ msn.jabber.com.cn,,原[email protected]變成了boy88%hotmail.com(為了不與Jabber賬號中的@混淆,原MSN賬號中的@改為%),,并且在后面加上了jabber服務器的地址,。
??? 下面以Jabber系統(tǒng)與MSN Messenger之間互發(fā)消息的過程說明XMPP網(wǎng)關的工作原理。
3.1 Jabber客戶端向MSN好友發(fā)出一次chat的請求
??? 當Jabber客戶端想和一個MSN的好友聊天時,,首先需要按如下格式發(fā)送請求給Jabber服務端:
???
????
Jabber服務端接收到該請求后,網(wǎng)關按照MSN的通信協(xié)議轉發(fā)該請求給MSN的服務器(NS),。首先發(fā)送命令字“XFR TrID SB”給MSN的服務器(NS),在收到MSN服務器返回的相同命令字的命令: XFR TrID SB 64.4.13.88:1863 CKI1989487642.2070896604后,從中獲取MSN服務器分配給這次Chat的接線服務器(SB)的地址和端口,然后再重新連接到該SB服務器上[3],。
??? 在連接上SB服務器之后,網(wǎng)關將向此SB服務器發(fā)送以下命令:USR 1 [email protected] 989487642.2070896604,,如果所發(fā)送的這個CKI雜列正確,,SB服務器將返回USR 1 OK [email protected] Beauty。以上操作完成之后,,接下來這個用戶要做的就是要把另一個用戶“叫到”此聊天session中,。這可以通過發(fā)送下面的命令完成CAL 2 [email protected],此時服務器將會向此用戶回應一個session號,同時也會將此session號發(fā)送給另一個用戶,。
??? 如果另一個用戶準備好聊天并做出回應,,SB服務器將發(fā)送如下命令: JOI [email protected] Handsome。這條命令表示另一個用戶加入了聊天當中,,通信雙方之間就建立起一個chat通道,相互之間可以互發(fā)消息了,。
3.2 MSN好友向Jabber客戶端發(fā)出一次chat的請求
??? MSN好友[email protected]并不知道[email protected]已經(jīng)注冊到了Jabber的網(wǎng)關服務,仍正常地向[email protected]發(fā)送一次chat的請求,,而MSN服務器(NS)已把MSN格式信息發(fā)送到了Jabber服務端,,此時網(wǎng)關首先接收到該請求(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服務器的地址和端口以及CKI雜列和發(fā)起聊天方的用戶名和昵稱,然后Gateway方連接到該SB服務器上,,并發(fā)送命令“ANS TrID LocalUserHandle AuthResponseInfo SessionID”,。其中,LocalUserHandle為C端用戶,,AuthResponseInfo和SessionID的值均要與收到的RNG命令中的值一致,。如:ANS 1 [email protected] 989495494.750408580 11742066。當接收到SB服務器發(fā)送的命令字為IRO 1 1 1 [email protected] beauty 和ANS 1 OK的命令時,,通信雙方就可以互發(fā)消息了,。
3.3 Jabber客戶端MSN好友互發(fā)消息過程
??? 不管是Jabber客戶端先發(fā)出chat請求還是先接收chat請求,一旦與MSN服務器為該次chat分配的SB服務器之間建立了通信通道,Jabber客戶端和他的MSN好友之間就可以收發(fā)消息了。
??? (1)Jabber客戶端向MSN好友[email protected]發(fā)XML數(shù)據(jù)流信息,,在Jabber客戶端看到的好友賬號是boy88%? [email protected]
?? ???
????
信息被Jabber服務端接后,,網(wǎng)關轉換為MSN的信息格式再發(fā)送到MSN服務端:
??? 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)當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服務端接收到MSN格式的信息后,網(wǎng)關需要把這些信息轉化為Jabber客戶端識別的XML數(shù)據(jù)流,,并且發(fā)送目標[email protected]改為[email protected],,如下:

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

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