|
網絡技術是從1990年代中期發展起來的新技術,它把互聯網上分散的資源融為有機整體,實現資源的全面共享和有機協作,使人們能夠透明地使用資源的整體能力并按需獲取信息。資源包括高性能計算機、存儲資源、數據資源、信息資源、知識資源、專家資源、大型數據庫、網絡、傳感器等。 當前的互聯網只限于信息共享,網絡則被認為是互聯網發展的第三階段。 摘要 會話發起協議(Session Initiation Protocol,SIP)是一種信令協議,它對于通信業有著重要的意義。本文從技術上對SIP進行了一般性的介紹,并說明了SIP如何為通信解決方案提供重要支持。
簡介 我曾經構想過一種軟件,它可以“浮于”應用程序之上,提供輔助作用。這不是一個啞的“幫助”系統,而是一個活動的技術支持代理,可以在Internet上進行討論。那時曾有人告訴我,“現有的工具、庫、協議或帶寬實現不了這樣的要求!”
時代已經不同了!
許多人家中已經擁有基于DSL、光纖和其他技術的寬帶網絡。存在大量高質量的工具和庫,無論是商業的還是開源的。標準驅動應用。現在是時候來實現上述創新思路了。
了解SIP 首先,我將向您介紹SIP,也就是會話發起協議。SIP是一種輕量級的可擴展請求/響應協議,用于在兩個端點之間開始通信會話。這聽起來是不是很熟悉?SIP在概念上源自于HTTP和SMTP,但是它的目的卻不同。可以把SIP消息與CB(民用波段)隱語10-code和Q-signal進行比較。
在這個例子中,真正的消息包含在專用的呼叫協商消息中。
SIP是IETF于1999年提出的,在2002年進行了修訂。RFC 3261對它進行了描述。本文中有關SIP的信息就選自RFC。對SIP存在很多擴展,這些擴展中的很多都能在SIP-related RFCs and drafts清單中找到。
SIP有哪些優點呢?通常情況下,兩個端點使用它來協商一次“呼叫”。這里的協商包括介質(文本、語音等)、傳輸(通常是RTP、Real Time Protocol)和編碼(codec)。一旦協商成功,兩個端點就會使用選中的方法相互交談——這就與SIP無關了。“呼叫”完成之后,SIP用于指示斷開連接。因此,SIP最好用作一種信令機制。SIP及其擴展還提供一些相關功能,比如即時消息傳遞、注冊和到場。
SIP術語中的端點叫做用戶代理。它可以是“軟件電話”、即時消息收發器、IP電話,甚至是手機。服務器用戶代理提供集中式的服務,比如登記員、代理或應用服務器。
聽起來SIP非常簡單,而且它也確實簡單。這種簡單性對于協議的穩定很重要,而且它也沒有降低協議的有用性,所以該協議得到了廣泛的應用。
例如,考慮一下HTTP。協議本身的定義很少。但是使用它的方式多不勝數。SIP也是可以擴展的。存在大量針對SIP的擴展,它們涵蓋了很多應用。現在,我們進一步來考察SIP,并分析它為什么會如此重要。
SIP的重要性 有人說,SIP對于通信,就像HTTP對于Web一樣。
SIP對通信業產生了巨大的影響。從事蜂窩技術的公司已經決定為了未來的應用,對SIP進行標準化。VoIP (Voice over IP)供應商、Internet電話和即時消息傳遞應用程序(例如,Microsoft MSN Messenger)都準備基于SIP進行標準化。
目前已經存在一些信令協議和P2P技術。這就引發了一個問題:SIP相對于這些協議和技術有何優勢?SIP具有以下的明顯優點:
穩定性。該協議已經使用了多年,現在十分穩定。 速度。基于UDP的小型協議效率特別高。 靈活性。這個基于文本的協議十分容易擴展。 安全性。它提供像加密(SSL、S/MIME)和身份驗證這樣的功能。對SIP的擴展還提供其他安全性功能。 標準化。隨著整個通信行業都在向SIP靠攏,SIP已經訊速成為一種標準。其他技術可能具有SIP所沒有的優勢,但是它們沒有得到全球范圍內的采用。 這意味著,如果您想讓您的應用程序與其他工具、設備和服務器進行互操作,SIP是最佳選擇。供應商對互操作性是很關注的,會定期開會對其產品進行測試。這些會議稱為SIPit for SIP Interoperability Tests(以前叫做Bakeoff,是Pillsbury提出更改的)。
剖析SIP呼叫 現在,讓我們更深入地了解這門技術。SIP通常基于UDP進行傳輸,但是SIP工具必須同時支持TCP。一條SIP消息由兩部分組成:
信封(envelope),以頭字段的形式描述一個請求或請求的結果(響應)。 有效負載(payload),即內容(可選),包含有關請求的數據。 信封是文本格式,但是內容可以是文本,也可以是二進制格式。
例如,讓我們具體分析一次典型的SIP呼叫。在這個場景中,用戶A想呼叫用戶B。圖2說明了這次呼叫:
下面對所有的消息進行了解釋:
SIP消息的第一行包含消息的類型和所使用的SIP版本(2.0)。在請求中,這一行還包含一個叫做SIP URI的地址。這代表消息的目的地。 這個例子說明了如何使用請求消息INVITE、ACK和BYE,以及200 OK響應消息。SIP中還存在許多其他消息。下面給出一些請求:
現在給出一些經常使用的響應消息:
消息使用類似的頭字段類型。下面給出其中的一些:
還有一些與消息路由選擇功能相關的頭字段,如:Via、Route和Record-Route。許多頭字段提供像Accept、User-Agent和Supported這樣的功能。其他頭字段則提供像Authorization、Privacy和WWW-Authenticate這樣的安全性功能。還有很多其他的頭字段存在。此外,這些字段中許多都有縮寫語法(比如,From = f,To = t,等等)。
SIP的其他功能 使用SIP及其擴展可以實現很多應用:
VoIP 視頻會議 針對文本和數據的即時消息傳遞,比如MSN Instant Messenger 注冊(我在線!) 到場(我的伙伴在不在?) Click-to-talk(點擊通話,即點擊這里便可與一個技術支持代理交談) 應答機器/互動式語音應答(Interactive Voice Response,IVR)系統(“請輸入您的密碼。請記錄您的姓名。英文請按1,西班牙語請按2…”) 網絡游戲,比如Quake和一些手機游戲(甚至基于語音和IM) 基于手機的應用程序 移動電子商務 基本上,如果是兩個端點之間進行通信,SIP就能完成。 但是,關于活動的Web技術支持代理的想法又如何呢?現在我們能否使用SIP來實現它?我們能否使用Java來實現它?干脆點說,可以。
Java中的SIP 我經常使用SIP。我可以負責任地說,Java為SIP提供了絕佳的支持。Java技術的一個分支把與開發SIP應用程序相關的許多細節抽象出來,這對于SIP開發人員大有幫助。下面這些技術大部分位于JAIN (Java APIs for Integrated Networks)工作組中。
JAIN SIP API (JSR 32) SIP Servlet API (JSR 116) JAIN SIP Lite (JSR 125) SIP API for J2ME (JSR 180) JAIN SIMPLE Presence (JSR 164) JAIN SIMPLE Instant Messaging (JSR 165) 其他相關技術有: JAIN SDP (JSR 141) Java Media Framework for RTP (J2SE可選包,并非JAIN的) 如果您希望開發一個客戶端應用程序,就需要一個客戶端SIP引擎或者“堆棧”。在這里可以找到一個優秀的開源Java SIP堆棧。它還支持SDP。如果不想自己開發SIP電話,您可以使用這個。
結束語 本文簡要介紹了SIP、它的使用場景,以及一些SIP語法。我們還了解了各種與SIP相關的Java技術。盡管本文不夠詳盡,我還是希望它能夠激發您的興趣,并促使您開始使用它。SIP的時代已經到來,現在使用它可以實現很多很酷的想法。 在本系列文章的第2部分中,我將說明如何使用SIP Servlet API編寫一個聊天室應用程序。
【相關文章】
責任編輯: 雪花(TEL:(010)68476636-8008)
網絡的神奇作用吸引著越來越多的用戶加入其中,正因如此,網絡的承受能力也面臨著越來越嚴峻的考驗―從硬件上、軟件上、所用標準上......,各項技術都需要適時應勢,對應發展,這正是網絡迅速走向進步的催化劑。
|