2014/06/17 Tang
1 引 言
SIP電話是使用會話初始協議(SIP)作為信令協議在IP網絡上實現語音通信的技術。作為下一代網絡中的重要應用,SIP電話體現了呼叫控制和承載分離的特性。在SIP電話中,使用SIP進行呼叫控制,使用實時傳輸協議(RTP) 封裝傳輸語音數據。
SIP信令消息可以使用用戶數據報協議(UDP)或傳輸控制協議(TCP)來傳輸,但是UDP缺乏分組丟失檢測和擁塞控制機制,并不適合SIP消息的可靠傳輸。TCP雖然能保證傳輸可靠性并提供擁塞控制,但其嚴格的按序遞交影響了消息的傳送。而流控制傳輸協議(SCTP)提供的多流、多宿和安全的關聯建立等特性非常適合SIP消息的傳輸。
RTP負責實時傳輸語音數據,通常與UDP結合使用。UDP不提供可靠性保證和擁塞控制機制,容易引起網絡的擁塞。數據報擁塞控制協議(DC—CP)既能保證數據的實時傳輸,又引入了靈活的擁塞控制和可靠的連接建立和拆除管理,這些特性非常適合傳輸RTP數據包。
鑒于SCTP和DCCP的良好特性,本文提出了一種基于SCTP和DCCP的SIP電話設計方案,分析了這種SIP電話的會話流程,最后給出了具體的實現方法。
2 基于TCP和UDP的SIP電話
基于TCP/UDP的SIP電話協議模型如圖1所示。SIP消息使用TCP或UDP來傳輸,RTP語音數據包通過UDP來傳輸。
2.1 SIP運行在TCP/UDP之上
SIP是用于建立、修改和終止多媒體會話的信令協議。SIP消息要求較高的傳輸可靠性和較短的傳送時延。UDP無需建立連接,沒有消息重傳機制,所以使用UDP建立SIP會話的時間短。但是,如果網絡出現擁塞,缺乏擁塞控制的UDP會搶占大量網絡資源,使擁塞更加嚴重,UDP并不能滿足SIP消息的可靠性要求。TCP可以保證SIP消息的傳輸可靠性,但是,一方面TCP連接建立增大了SIP會話建立的時延,另一方面,TCP嚴格按序遞交容易引起隊頭阻塞 ,所以TCP也不適合傳送SIP消息。
2.2 RTP運行在UDP之上
RTP是為了在Internet上實時傳輸多媒體數據而制定的一種傳輸協議。RTP的作用是提供時間信息和實現流同步,并且依靠實時傳輸控制協議(RTCP)為按序傳送的數據包提供可靠的傳送機制、流量控制和擁塞控制。RTP本身不具有傳輸數據的能力,它一般與UDP結合來支持實時傳輸。使用UDP可以保證會話的實時性,但是UDP不提供擁塞控制,一旦發生網絡擁塞,就會影響會話質量,進而影響到網絡的整體性能。
3 SCTP和DCCP適用于SIP電話的特性分析
為了改善SIP電話的性能,我們引人了傳輸層協議SCTP和DCCP,設計了如圖2所示的SIP電話協議模型,使用SCTP來傳輸SIP消息,使用DCCP來傳輸RTP封裝的語音數據。
3.1 SCTP適用于SIP的特性分析
SCTP協議繼承了TCP的流控制和擁塞控制機制,引人了安全的關聯建立、多流和多宿等特性,更適合傳送SIP消息。
(1)“四次握手”的關聯建立
這種關聯建立方式要求服務器驗證客戶端的合法性,只有驗證通過才正式為客戶端分配資源,能夠保護服務器免受DoS攻擊 的威脅。在關聯建立的第三和第四個塊中可以攜帶數據,所以這種關聯建立方式不會顯著增加SIP會話建立時延。
(2)多宿(Multi-homing)和多流(Multi-streaming)
建立關聯的兩個端點可以綁定多個IP地址,通信時選取一對地址作為主路徑,同時使用心跳(heartbeat)機制檢測地址的可達性,如果一個地址變得不可達,就將通信轉移到備用地址上。這種多宿特性提高了SIP消息傳送的可靠性,改善了網絡容錯能力。
多流特性使得流與流之間的數據在傳送時互不影響,避免了TCP中經常出現的隊頭阻塞。當使用SCTP傳送SIP消息的時候,不同SIP事務或者不同會話中的消息可以通過不同的流傳送 ,這樣一個事務或者會話中消息的丟失不會影響別的事務或者會話中消息的遞交。在不同的流中,SCTP還可以使用有序或無序的傳送方式。無序傳送時,到達對端的消息會被立即傳送至應用層,無需考慮傳送順序,這種方式也避免了隊頭阻塞。
(3)消息的分段、捆綁和SACK技術
SCTP提供了路徑MTU發現功能,可以將大于MTU的SIP消息在傳輸層進行分段,也可以將多個小于MTU的SIP消息按塊捆綁在一個報文中進行傳輸,提高了傳輸效率。同時,SCTP沿用了TCP中使用的SACK技術,可以快速檢測到SIP消息的丟失,更快地建立SIP會話。
3.2 DCCP適用于RTP的特性分析
DCCP協議主要是為傳輸流媒體而設計的,它結合了TCP和UDP的優點,適用于那些無需嚴格按序和完全可靠的傳輸,并引人了靈活的擁塞控制機制。
(1)可靠的半連接建立和拆除
DCCP連接由連接屬性不同的兩個獨立半連接 組成,當應用于SIP電話時,可以為RTP數據包的傳送靈活地協商連接參數。
(2)靈活可選的擁塞控制機制
DCCP允許上層應用在兩個半連接中靈活地選
擇擁塞控制機制。DCCP提供兩種擁塞控制機制:
TCP—like擁塞控制和TCP友好的速率控制。
(3)部分校驗和數據的捆綁
部分校驗允許應用來選擇校驗的覆蓋范圍,應用可以接收不會影響語音通信性能的部分損壞的RTP數據包。當擁塞出現時,這種特性可以提高網絡的性能。同時,多個RTCP包可以捆綁成一個復合包在一個DCCP數據報中傳輸。
4 基于SCTP和DCCP的SIP電話協議設計
為了支持SCTP和DCCP協議,需要對SIP和會話描述協議SDP的參數進行擴展。在此基礎上,我們設計了基于SCTP和DCCP的SIP電話的信令流程。
4.1 SIP協議的擴展
SIP的Via頭字段攜帶有傳輸協議標示符,RFC3261定義了值“SCTP”表示使用SCTP傳送SIP消息。下面是使用SCTP的Via頭字段的例子:
Via:SIP/2.0/SCTP lqf.bjtu.edu.cn:5060
4.2 SDP協議的擴展
SDP使用若干文本行來傳輸會話描述信息。若采用DCCP來傳輸RTP包,就需要擴展SDP中的m字段和a字段。
SDP使用媒體行(“m=”)來傳送終端發送媒體信息時使用的媒體類型、傳輸協議、傳輸端口和編碼格式。類似于UDP,為DCCP定義了“DCCP”、“DCCP/RTP/AVP”、“DCCP/RTP/SAVP”、“DCCP/RTP/AVPF”和“DCCP/RTP/SAVPF”等傳輸協議標示符,來表明使用DCCP傳輸R11P特定的應用。如圖3所示,m字段的值表示傳輸的是視頻數據流,端口號是52654,傳輸協議是DCCP/RTP/AVP,并采用RTP凈荷類型值99所對應的編碼格式。
SDP使用“a=”字段表示上層應用所對應的服務碼。擴展“a:dccp-service-code:”屬性來傳送服務碼的值,“a:setup:”屬性來指定哪一端主動發起了DCCP連接,“a=connection:”屬性決定是需要重新建立連接還是使用現有的連接。
4.3 基于SCTP和DCCP的SIP電話的信令流程
基于SCTP和DCCP的SIP電話的信令流程如圖4所示。
(1)注冊過程
SIP終端接入網絡時,發送REGISTER消息將其聯系地址(contact address)和地址記錄(address—of—record)在注冊服務器中注冊,并將綁定關系存儲在位置服務器中。這個上層應用觸發在UAS(用戶代理服務器)和注冊服務器之間建立SCTP關聯(過程A,1,2)。
(2)會話請求
UAC(用戶代理客戶端)向UAS發起會話請求,先將INVITE消息發送到本域的代理服務器1,并在它們之間觸發建立SCTP關聯(過程B,3)。代理服務器1向DNS服務器查詢代理服務器2的IP地址,在代理服務器1和2之間建立SCTP關聯并轉發INVITE消息(過程4,5,C,6)。如果后續消息與前面的消息分屬于不同的事務或者會話,可以使用SCTP的多流機制來傳送。代理服務器2通過位置服務器查詢UAS的地址,并將INVITE消息通過SCTP傳送到UAS(過程7,8,D,9)。
(3)會話響應
UAS振鈴和摘機后,分別按照傳送INVITE的路徑返回180Ringing和2000K,完成會話參數的協商。UAC直接向UAS發送ACK消息(過程10,11,12)。
(4)RTP會話建立
發送ACK消息的同時,UAC與UAS之間建立DCCP連接,而后開始使用DCCP傳送RTP語音數據包,通話開始(過程E,F)。
5 基于SCTP和DCCP的SIP電話的實現
本實現主要包含兩部分,一部分是用戶代理對SCTP和DCCP的支持,另一部分是SIP網絡服務器對SCTP的支持。
5.1 Linux平臺SCTP軟件的選擇
我們選擇了支持SCTP和DCCP的內核linux一2.6.15,并且安裝了SCTP應用開發軟件lksctp以方便地使用SCTP的諸多特性。lksctp運行在內核空間,提供了類套接口AP1支持,從圖5中的架構可以看出,它和TCP/UDP處在同一層次上,所以開發基于SCTP的應用就如同開發基于TCP和UDP的應用一樣。
5.2 SIP用戶代理的修改
我們選擇的用戶代理軟件是kphone,它具有會話發起和即時消息等功能,由用戶接口模塊、SIP功能模塊dissipate、編解碼模塊、RTP/RTCP功能模塊、套接口調用模塊組成,如圖6所示。對用戶代理的修改主要包含3部分:
(1)SIP功能模塊:參照本文第3節對SIP中的Via等頭字段以及SDP的相關字段進行擴展;
(2)用戶接口模塊:為了使用戶可以使用SCTP和DCCP協議,在界面中添加協議選擇選項;
(3)套接口調用模塊:本模塊的修改包含兩部分,一部分是使用SC11P的多流和多宿等相關特性來傳輸SIP消息;另一部分是使用DCCP來傳輸RTP數據包,最主要的應用特性就是可以靈活選擇擁塞控制。
5.3 SIP網絡服務器的修改
我們使用的SIP網絡服務器軟件是partysip,它集成了代理服務器、注冊服務器和重定向服務器等功能,并支持多線程,由主函數和多個監聽線程組成,如表1所示。
當程序啟動的時候,其程序流程如圖7所示,主線程首先讀取配置文件中各插件的配置參數,然后初始化oSIP庫(提供基本的SIP功能函數庫),并啟動表中相關的線程,執行相關的功能,線程之間的通信主要依靠管道和共享內存等機制來完成。最后,用戶終止線程執行,程序結束。
為了使網絡服務器支持SCTP,我們擴展了SIP消息的相關頭字段。同時,由于partysip所有的功能都是以插件的形式存在的,需要在軟件中添加SCTP插件,為tlp和imp線程提供必需的庫函數。主要包含以下幾個部分:插件的啟動和關閉函數:plugin_init,plugin_start,plugin_release;套接口創建和關閉函數:local_ctx_init,local_ctx_free;消息接收和發送函數:cb_rcv_sctp_message,cb_snd_sctp_mes_sage;消息處理函數:sctp—process—message。
5.4 試驗和結果
試驗環境如圖8所示,3臺臺式機作為SIP電話終端,安裝了修改后的SIP用戶代理軟件。2臺自主研發的R2600高性能雙棧路由器作為SIP網絡服務器,安裝了修改后的SIP網絡服務器軟件。為了使用SCTP的多宿特性,在兩個SIP網絡服務器上各多配置了一塊無線網卡,這兩個網絡服務器之間由無線網卡組成的無線鏈路和由有線網卡組成的有線鏈路一起來提供多宿支持。
基于以上的試驗環境,我們對設計進行了測試。兩個用戶代理客戶端分別向用戶代理服務器發起呼叫,這兩個呼叫都會經過兩個網絡服務器,所以只要在兩個網絡服務器之間建立一次SCTP關聯,關聯兩端分別綁定兩個地址,并選取有線鏈路來作為主路徑,將這兩個會話映射到這個關聯的不同的流中。使用NIST工具在網絡服務器1上模擬數據的丟失,從測試結果看,一個流中數據的丟失不會阻塞另一個流中數據的遞交。當人為地將網絡服務器之間的有線鏈路斷開時,通過ethereal工具抓包分析,SIP用戶代理客戶端會使用DCCP的擁塞控制機制來減少數據的發送速率,同時網絡服務器之間的通信也會使用SCTP的多宿機制將通信轉移到無線鏈路上。
以上的試驗只是初步測試了SCTP和DCCP的性能,對其新性能的評測以及和現有技術的比較將會作為我們下一步工作的重點。
6 結束語
本文在分析傳輸協議SCTP和DCCP的特性的基礎上,提出了一種基于SCTP和DCCP的SIP電話傳輸模型,分析了這種SIP電話會話流程,并給出了具體的實現方法。試驗結果顯示,這種SIP電話能夠使用SCTP和DCCP的諸多特性,下一步的主要工作就是對其性能進行測試并與現有的SIP電話進行性能上的比較。目前的SIP電話主要采用TCP和UDP作為傳輸協議,但是SCTP和DCCP的良好特性,使之有逐步取代UDP和TCP的可能,正在成為下一代網絡中的重要協議。
40088 411661033743080@qq.com
中國廣東省深圳市南山區西麗九祥嶺工業區10棟3樓