賀翔,張問謙
(廣州海格通信集團股份有限公司,廣州 510663)
衛星通信鏈路由于其傳輸距離遠、頻譜資源珍貴等特點,在網絡中往往作為跨區域主干鏈路傳輸高價值數據[1]。VoIP話音作為一種關鍵業務通常被同時多路使用。
VoIP話音業務一般采用RTP協議承載話音數據,其包頭字段之間存在很大的冗余度,傳輸開銷較大,多路業務并發時效率極其低下。壓縮后傳輸能夠顯著地節約系統帶寬,提高業務并發數量,但RTP協議流媒體的識別有一定難度。業內常用的識別算法通常基于RTP協議的多種特征,根據上下文進行會話匹配,但存在一定的漏報率和誤報率[2],而誤報會造成數據損壞,產生較為惡劣的影響。
經分析,VoIP話音在會話建立和維持方面,通常采用H.323或SIP協議。由于H.323協議標準復雜而嚴格,衛星通信網絡中多采用靈活易擴展的SIP協議。
本文闡述了當前識別RTP流存在的困難,并分析RTP協議和傳輸具有的特征,在這個基礎上針對SIP會話場景,設計出一種快速RTP識別方法,并在保證穩健性的前提下,采用ROHC包頭壓縮技術壓縮傳輸,極大地提高了衛星信道資源利用率。
RTP協議作為應用層協議,其傳輸層可用TCP或UDP協議。在衛星網絡應用實際情況中,由于UDP協議簡單,無需握手確認等特點,RTP協議通常采用UDP協議作為傳輸層協議,即采用IP/UDP/RTP分組。
RTP報文用于傳輸多媒體數據,由RTP報頭和數據兩部分組成,對RTP的識別主要是對RTP首部的識別。RTP首部及數據格式定義如下:

圖1 RTP協議格式定義
在RTP首部中,前12字節是固定的,而且是必須的。下面主要介紹前12字節的含義。
1.V:指示RTP協議的版本號,2bit,目前為0b10;
2.P:填充標志,指示報文尾部是否填充額外信息;
3.X:擴展標記,指示是否有RTP頭擴展;
4.CC:CSRC計數器;指示 CSRC的個數(0-15);
5.M:與載荷有關的標記信息;
6.PT:載荷類型;
7.Sequence number:RTP報文序列號,每次加1;
8.timestamp:時間戳,用于同步控制;
9.SSRC:同步信源標示符,用于標識同步信源(一次會話一個值);
10.CSRC:特約信源標識符,標識了包含在該RTP報文的所有特約信源;
11.內容:這里存放載荷數據。
識別RTP協議的過程即是根據RTP協議的特點把RTP數據識別出來,上述可見,RTP協議包可以總結為一下特征:
1.總長度不少于12字節;
2.首字節最高兩個比特為0b10;
3.CC字段為0-15,且CC*4+12應大于總長度;
4.Sequence number每次加1
5.timestamp為遞增關系;
6.SSRC每次會話中不變。
業內常用的識別算法通常基于上述信息指定,其中Sequence number、timestamp和SSRC的判定需要結合上下文考慮,檢測會消耗較多資源,且仍存在漏報或誤報的可能[3]。本方法不采用這三個特征,在沿用前3個特征的基礎上,增加IP地址和UDP端口號作為精確的識別特征,以此可以進行精確判斷。由于RTP采用的UDP端口號是動態的,故增加SIP會話識別的方法進行確定。
SIP協議是一種在IP網絡中建立、修改和終止多媒體會話的應用層協議,一般采用5060號端口,識別后可用于判斷一個VoIP會話的開始和結束,從而用來得到一次會話的相關信息,如源/目的IP地址及端口號等[4]。
SIP 請求消息分為:INVITE、ACK、OPTIONS、BYE、CANCEL、REGISTER和INFO等;SIP響應消息使用響應狀態碼標識。下面描述下識別會話相關的消息:
1.INVITE:用于邀請對方加入會話,標識著一個會話的開始;
2.BYE:釋放呼叫,標識著一個會話的結束;
3.CANCEL:取消一個進行中的請求,通常標識著呼叫的取消;
4.SIP/2.0 200 OK:標識著一個請求消息已經被正確的理解和執行,在后續協議串中會包含執行的內容,如標識INVITE或BYE的成功執行。
值得注意的是:在INVITE及其應答消息中,具備本次通話約定的相關描述。例如RTP采用的音頻傳輸端口號描述為:
m=audio 10010 RTP/AVP 111 110 0 8 101
表示音頻傳輸采用10010端口。
需要收集的信息包括RTP端口號、源IP地址、目的IP地址。
該方法利用上述信息建立和釋放RTP會話,該方法可以取得很高的識別精度。
一個典型的VoIP話音數據包采用IP/UDP/RTP分組結構,報頭的總開銷包括:IP(20字節)+UDP(8字節)+RTP頭(12字節)=40字節,而有效負載通常只有幾十字節。為避免帶寬浪費,需要對報頭進行壓縮。
ROHC是IETF專門針對無線鏈路的特點而提出的穩健報頭壓縮技術,可通過選擇profile的形式針對IP、UDP、RTP進行壓縮。其功能實體分為兩個部分:壓縮端和解壓縮端[5]。當壓縮端收到一個IP分組時,首先進入初始化狀態,采集報頭信息存入上下文中,同時將該信息傳送給解壓端,解壓縮端接收到后,解壓縮出報頭信息并存入上下文[6-7]。雙方建立好上下文后開始進行壓縮傳輸。
ROHC協議在協議棧中的位置處于鏈路層和IP層之間,對每個分組流都分配一個唯一的上下文標識(CID)用于唯一識別,去掉了冗長的IP報頭和UDP報頭,換成了簡短的多的ROHC壓縮報頭。
ROHC可工作在無反饋信道(U模式)、弱反饋信道(O模式)、強反饋信道(R模式)三種模式,基于衛星無線鏈路反饋時間長、信道資源緊張的特點,適合采用U模式。壓縮方采用樂觀逼近和周期性則進行狀態轉移。該模式下的狀態轉移圖如下:

圖2 U模式狀態轉移圖
U模式下初始進入IR(初始化)狀態,在發送N包后自動切換為FO(復位有序)狀態,進而在發送一段N包后,切換到SO(完全有序)狀態,在用戶定時周期到后切換回IR狀態。在U模式下不采用反饋信道,包只沿著一個方向傳輸,即從壓縮端到解壓縮端,雖然壓縮率相對O模式和R模式較低,但應用在不可靠的衛星無線鏈路環境下,可有效避免可能的反復確認,鑒于話音通信的特點,在合理調整回退周期時間后,基本不影響話音通信質量。
使用上述方案合理配合以形成完整的RTP話音識別、壓縮、傳輸流程。具體流程如下:
1.接收到UDP包;
2.判斷是否是SIP端口(5060)發來消息,若不是進入第9步;
3.判斷是否是INVITE消息或其應答,若不是進入第6步;
4.判斷會話記錄總條數是否滿,若滿則替代最舊那條記錄,否則增加一條會話記錄;
5.傳送該包,流程結束;
6.若SIP端口接收到的是CANCEL、BYE消息或其應答,解析得到會話數據;
7.在會話列表中刪除該條記錄;
8.跳轉到第5步;
9.接收到非SIP端口UDP數據,判斷是否符合上述RTP特征,若不符合跳轉到第5步;
10.檢查會話列表中是否有符合的會話,若未找到,跳轉到第5步;
11.送IP包給ROHC壓縮器進行壓縮;
12.跳轉到第5步。
在接收方,接收到正常IP數據包不做處理,直接轉發;接收到ROHC數據包后,進行解壓縮處理,然后轉發。如出現無線鏈路不可靠造成的上下文丟失,則該包丟棄,直到下一個周期來到,重建上下文。

圖3 RTP識別、壓縮、傳輸流程
基于SIP會話的RTP話音識別及壓縮方法在寬帶衛星通信網絡中得到了很好的應用,有效解決了空中傳輸VoIP話音資源占用過多問題,顯著提高了有限帶寬條件下話音接入數量。隨著我國海洋運輸、海域管理的蓬勃發展,衛星VoIP會話業務需求不斷增長,衛星終端的成本逐漸降低,該方式應用將會越來越廣泛。同時也可以推廣到其他類型無線網絡中使用。