一種VoIP中基于TCP傳輸語音的方法及系統的制作方法
【技術領域】
[0001]本發明涉及通信技術領域,尤其涉及一種VoIP中基于TCP傳輸語音的方法及系統。
【背景技術】
[0002]網絡地址轉換/ 防火墻穿越(NAT/FT ,Network Address Trans I at i on/Fir ewal ITraversal),是一種保證位于NAT設備后的主機與外部的主機之間能夠正常通信的技術。
[0003]由于IPv4地址緊缺及網絡安全問題,多數企業用戶在網絡出口處設置了NAT/NAPT設備建立一個私有IP地址、私有端口與公網IP、公網端口之間的綁定,為內網主機分配公網地址和端口與外部主機進行通信。會話發起協議(SIP,Sess1n Initiat1n Protocol)是一個基于文本的應用層協議,會話建立的有關IP地址信息在數據包中傳輸,但是NAT是對TCP/IP以下協議層進行處理,無法解析應用層的SIP數據包,無法完成正常的SIP會話建立過程。從安全方面考慮,多數企業在網絡出口處設置了防火墻,對通過設置的防火墻的IP數據包按照相關策略進行過濾。防火墻在訪問列表配置時,除打開網內業務需要的知名端口夕卜(如http的80端口),其它端口一般都配置為拒絕。對于基于SIP的多媒體通信應用而言,需要在控制信令中動態地協商媒體流端口,并維護多個UDP流實現媒體流的發送和接收。動態分配的端口為在防火墻上配置固定的包過濾策略帶來了困難,對于不支持SIP應用網關(SIP ALG)的防火墻,無法獲取動態端口信息,導致媒體報文不能通過。
[0004]隨著VoIP(Voice over Internet Protocol,網絡電話)和軟交換技術的成熟和廣泛應用,越來越多的企業和個人采用了VoIP和軟交換技術進行企業內部數據網絡和語音網絡的整合。但是,出于安全的考慮,在企業內部網絡中存在大量的防火墻;同時,為了節省IPv4的地址,目前很多企業采用NAT(Network Address Translat1n,網絡地址轉換)技術,也就是私網,使內網中大量的主機通過少數幾個IP訪問Internet。這些技術在早期的Internet網絡中起到了很大的作用,能夠用來阻擋來自企業外部網絡攻擊、節省IP地址、保護企業內部的數據安全。然而在VoIP的應用中,各種各樣的業務要求和底層協議的特點,使得企業遺留的防火墻和NAT嚴重阻礙了VoIP的應用,使得語音數據無法有效的傳輸。于是,如何使VoIP穿越企業遺留的防火墻就成了一個亟待解決的問題。
[0005]目前在語音通訊領域,主要采用TCP作為語音傳輸的協議,利用TCP實現防火墻/私網穿越的目的。傳統的TCP協議在發送數據時,需要嚴格保證數據的有序,協議棧中有兩個緩存隊列:順序隊列和亂序隊列。當TCP傳輸數據的時候,如果當前到達的數據是有序的,則數據進入到有序隊列中;如果是亂序的,則數據會緩存到亂序隊列中,等待之前的數據到來之后,再一起把連續的數據拷貝到順序隊列中。當應用層調用readO讀取數據的時候,如果順序隊列中有數據,則把順序隊列中的數據返回給應用層;如果順序隊列中沒有數據而亂序隊中有數據,則需要等待之前空缺的數據到達之后,把亂序數據中的數據拷貝到順序隊列中,再返回給應用層。這個傳輸特性,在使用TCP傳輸語音的時候,就會增加語音數據端到端的時延,造成語音的延遲、抖動和停頓,無法達到令人滿意的通話效果。
[0006]而且,TCP傳輸過程中是面相字節流的,不保留任何數據的邊界信息,一旦發生了丟包,除非等待數據重傳成功,否則應用層將無法識別出數據的邊界,會導致應用層無法解析出語音數據包,導致整個通話都將無法聽到有效的聲音。
[0007]為了解決TCP傳輸語音過程中,其重傳機制和擁塞控制機制導致的高延遲問題,目前主要有以下解決方案:
[0008]I,代理思路
[0009]代理使終端到終端的呼叫看起來像兩個分離的呼叫:一個是從私有網上的終端到代理,另一個是從代理到公眾網上的終端,代理通過對這個呼叫進行中轉解決了 NAT問題。
[0010]但是,該方法的缺點是:這種解決方案典型應用是在防火墻后放一個代理,代理需要被分配公有IP地址。防火墻被配置允許代理和外部進行多媒體通訊。有時候沿著網絡路徑在許多位置都應用了 NAT設備,這時就需要在每一個使用NAT的地方放置代理。
[0011]2,隧道穿越方案
[0012]一般企業網都不想升級或者改動他們的防火墻和NAT設備的配置,也不想讓內外的交互通訊繞過這些設備,采用允許IP語音穿越防火墻和NAT的隧道穿透方案也許是最合適的,隧道穿透解決方案由兩個組件構成,Server軟件和Client軟件。Client放在防火墻內的私有網,它同時具有網守功能和代理功能,私有網內的終端注冊到Client上,它和防火墻外的Server創建一個信令和控制通道,可以把所有的注冊和呼叫控制信令轉發到Server,也把語音數據轉發到Server,在轉發時它把內部終端發送的和外部發往終端的數據包的地址和端口號替換為自己的。Server放在防火墻外的公眾空間內。
[0013]這個方法最大的缺點是所有經過防火墻的通訊都必須經由Server來進行中轉,這會引起潛在的瓶頸,這個經由Client和Server的過程會增加少于5ms的延遲。但是這又是必須的,因為Server是防火墻唯一信任的設備。
[0014]在一般包含有NAT實際網絡場景中,防火墻總是伴隨出現,在該情況下,前述的技術都無法在兼顧效率的同時有效對NAT和防火墻兩者同時進行穿越,在考慮穿越效率的前提下,各現有技術針對的網絡環境都比較單一,不能解決VoIP中最常見網絡環境中NAT與防火墻穿越問題。
【發明內容】
[0015]本發明的特征和優點在下文的描述中部分地陳述,或者可從該描述顯而易見,或者可通過實踐本發明而學習。
[0016]為克服現有技術的問題,本發明提供一種VoIP中基于TCP傳輸語音的方法及系統,在通信過程中,SIP軟終端通過采用中間件單元完成數據的發送和接收,同時該中間件單元通過對數據的編碼,實現亂序數據報發送的功能,從而保證通話的質量,共同完成SIP軟終端會話的交互過程。
[0017]本發明解決上述技術問題所采用的技術方案如下:
[0018]根據本發明的一個方面,提供一種VoIP中基于TCP傳輸語音的方法,其特征在于,SIP終端使用中間件單元進行數據的發送和接收,其中:
[0019]在進行該數據的發送時包括步驟:該中間件單元對該數據進行自識別邊界的編碼,并將編碼后的該數據通過TCP傳輸到對端SIP終端;
[0020]在進行該數據的接收時包括步驟:該中間件單元對從該TCP接收到的數據進行自識別邊界的解碼,把解碼后的數據傳遞給該SIP終端。
[0021 ]根據本發明的一個實施例,該中間件單元對該數據進行自識別邊界的編碼時,包括步驟:
[0022]Al、查詢該數據中0x00字節出現的位置,以字節0x00為標識,把該數據分為若干個以0x00結尾的數據塊,然后分別把每個該數據塊作為一個輸入數據;如果該數據中沒有0x00字節,則把整個該數據作為一個輸入數據;
[0023]A2、使用一致開銷字節填充算法,對該輸入數據進行編碼,把所有該輸入數據的編碼的結果進行拼接,獲取最終的編碼數據;
[0024]A3、在該編碼數據的首尾分別加上0x00字節,作為數據邊