1. 程式人生 > >RTP、 TCP、 UDP協議簡介

RTP、 TCP、 UDP協議簡介

OSI七層模型 OSI 中的層            功能                                                        TCP/IP協議族  應 用層                 檔案傳輸,電子郵件,檔案服務,虛擬終 端         TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet  表示層                 資料格式化,程式碼轉換,資料加密                                    沒有協議  會話 層                 解除或建立與別的接點的聯絡                                          沒有協議  傳輸層                 提供端對端的介面                                                        TCP,UDP (RTP) 網 絡層                 為資料包選擇路由                                                        IP,ICMP,RIP,OSPF,BGP,IGMP  資料鏈路層           傳輸有地址的幀以及錯誤檢測功能                            SLIP,CSLIP,PPP,ARP,RARP,MTU  物 理層                 以二進位制資料形式在物理媒體上傳輸資料                             ISO2110,IEEE802,IEEE802.2

************************************************************************************************************************************

TCP/IP五層模型的協議

應用層  傳輸層:四層交換機、也有工作在四層的路由器

網路層:路由器、三層交換機

資料鏈路層:網橋(現已很少使用)、乙太網交換機(二層交換機)、網絡卡(其實網絡卡是一半工作在物理層、一半工作在資料鏈路層)

物理層:中繼器、集線器、還有我們通常說的雙絞線也工作在物理層

**************************************************************************************************************************************

一、RTP協議分析

1、  RTP概述

1.1.  RTP是什麼

RTP全名是Real-time Transport Protocol(實時傳輸協議)。它是IETF提出的一個標準,對應的RFC文件為RFC3550(RFC1889為其過期版本)。RFC3550不僅定義了RTP,而且定義了配套的相關協議RTCP(Real-time Transport Control Protocol,即實時傳輸控制協議)。RTP用來為IP網上的語音、影象、傳真等多種需要實時傳輸的多媒體資料提供端到端的實時傳輸服務。RTP為Internet上端到端的實時傳輸提供時間資訊和流同步,但並不保證服務質量,服務質量由RTCP來提供。

1.2.  RTP的應用環境

RTP用於在單播或多播網路中傳送實時資料。它們典型的應用場合有如下幾個。

(1)簡單的多播音訊會議。語音通訊通過一個多播地址和一對埠來實現。一個用於音訊資料(RTP),另一個用於控制包(RTCP)。

(2)音訊和視訊會議。如果在一次會議中同時使用了音訊和視訊會議,這兩種媒體將分別在不同的RTP會話中傳送,每一個會話使用不同的傳輸地址(IP地址+埠)。如果一個使用者同時使用了兩個會話,則每個會話對應的RTCP包都使用規範化名字CNAME(Canonical Name)。與會者可以根據RTCP包中的CNAME來獲取相關聯的音訊和視訊,然後根據RTCP包中的計時資訊(Network time protocol)來實現音訊和視訊的同步。

(3)翻譯器和混合器。翻譯器和混合器都是RTP級的中繼系統。翻譯器用在通過IP多播不能直接到達的使用者區,例如傳送者和接收者之間存在防火牆。當與會者能接收的音訊編碼格式不一樣,比如有一個與會者通過一條低速鏈路接入到高速會議,這時就要使用混合器。在進入音訊資料格式需要變化的網路前,混合器將來自一個源或多個源的音訊包進行重構,並把重構後的多個音訊合併,採用另一種音訊編碼進行編碼後,再轉發這個新的RTP包。從一個混合器出來的所有資料包要用混合器作為它們的同步源(SSRC,見RTP的封裝)來識別,可以通過貢獻源列表(CSRC表,見RTP的封裝)可以確認談話者。

1.3.  流媒體

流媒體是指Internet上使用流式傳輸技術的連續時基媒體。當前在Internet上傳輸音訊和視訊等資訊主要有兩種方式:下載和流式傳輸兩種方式。

下載情況下,使用者需要先下載整個媒體檔案到本地,然後才能播放媒體檔案。在視訊直播等應用場合,由於生成整個媒體檔案要等直播結束,也就是使用者至少要在直播結束後才能看到直播節目,所以用下載方式不能實現直播。

流式傳輸是實現流媒體的關鍵技術。使用流式傳輸可以邊下載邊觀看流媒體節目。由於Internet是基於分組傳輸的,所以接收端收到的資料包往往有延遲和亂序(流式傳輸構建在UDP上)。要實現流式傳輸,就是要從降低延遲和恢復資料包時序入手。在傳送端,為降低延遲,往往對傳輸資料進行預處理(降低質量和高效壓縮)。在接收端為了恢復時序,採用了接收緩衝;而為了實現媒體的流暢播放,則採用了播放緩衝。

使用接收緩衝,可以將接收到的資料包快取起來,然後根據資料包的封裝資訊(如包序號和時戳等),將亂序的包重新排序,最後將重新排序了的資料包放入播放緩衝播放。

為什麼需要播放緩衝呢?容易想到,由於網路不可能很理想,並且對資料包排序需要處理時耗,我們得到排序好的資料包的時間間隔是不等的。如果不用播放緩衝,那麼播放節目會很卡,這叫時延抖動。相反,使用播放緩衝,在開始播放時,花費幾十秒鐘先將播放緩衝填滿(例如PPLIVE),可以有效地消除時延抖動,從而在不太損失實時性的前提下實現流媒體的順暢播放。

到目前為止,Internet 上使用較多的流式視訊格式主要有以下三種:RealNetworks 公司的RealMedia ,Apple 公司的QuickTime 以及Microsoft 公司的Advanced Streaming Format (ASF) 。

上面在談接收緩衝時,說到了流媒體資料包的封裝資訊(包序號和時戳等),這在後面的RTP封裝中會有體現。另外,RealMedia這些流式媒體格式只是編解碼有不同,但對於RTP來說,它們都是待封裝傳輸的流媒體資料而沒有什麼不同。

2、   RTP詳解

2.1.  RTP的協議層次

2.1.1.  傳輸層的子層

RTP(實時傳輸協議),顧名思義它是用來提供實時傳輸的,因而可以看成是傳輸層的一個子層。圖 1給出了流媒體應用中的一個典型的協議體系結構。圖2給出了RTP協議與其他協議之間的關係。

UDP、TCP、RTP三種協議的總結 - super-and-star - super-and-star的部落格

圖1 流媒體體系結構

UDP、TCP、RTP三種協議的總結 - super-and-star - super-and-star的部落格

圖2 RTP協議與其他協議的關係

RTP、TCP、UDP都屬於傳輸層協議; RTP也可以認為是介於應用層與傳輸層之間

從圖中可以看出,RTP被劃分在傳輸層,它建立在UDP上。同UDP協議一樣,為了實現其實時傳輸功能,RTP也有固定的封裝形式。RTP用來為端到端的實時傳輸提供時間資訊和流同步,但並不保證服務質量。服務質量由RTCP來提供。

2.1.2.  應用層的一部分

不少人也把RTP歸為應用層的一部分,這是從應用開發者的角度來說的。作業系統中的TCP/IP等協議棧所提供的是我們最常用的服務,而RTP的實現還是要靠開發者自己。因此從開發的角度來說,RTP的實現和應用層協議的實現沒不同,所以可將RTP看成應用層協議。

RTP實現者在傳送RTP資料時,需先將資料封裝成RTP包,而在接收到RTP資料包,需要將資料從RTP包中提取出來。

2.2.  RTP的封裝

一個協議的封裝是為了滿足協議的功能需求的。從前面提出的功能需求,可以推測出RTP封裝中應該有同步源和時戳等欄位,但更為完整的封裝是什麼樣子呢?請看圖3。

UDP、TCP、RTP三種協議的總結 - super-and-star - super-and-star的部落格

圖 3 RTP的頭部格式

版本號(V):2位元,用來標誌使用的RTP版本。

填充位(P):1位元,如果該位置位,則該RTP包的尾部就包含附加的填充位元組。

擴充套件位(X):1位元,如果該位置位的話,RTP固定頭部後面就跟有一個擴充套件頭部。

CSRC計數器(CC):4位元,含有固定頭部後面跟著的CSRC的數目。

標記位(M):1位元,該位的解釋由配置文件(Profile)來承擔.

載荷型別(PT):7位元,標識了RTP載荷的型別。

序列號(SN):16位元,傳送方在每傳送完一個RTP包後就將該域的值增加1,接收方可以由該域檢測包的丟失及恢復包序列。序列號的初始值是隨機的。

時間戳:32位元,記錄了該包中資料的第一個位元組的取樣時刻。在一次會話開始時,時間戳初始化成一個初始值。即使在沒有訊號傳送時,時間戳的數值也要隨時間而不斷地增加(時間在流逝嘛)。時間戳是去除抖動和實現同步不可缺少的。

同步源識別符號(SSRC):32位元,同步源就是指RTP包流的來源。在同一個RTP會話中不能有兩個相同的SSRC值。該識別符號是隨機選取的 RFC1889推薦了MD5隨機演算法。

貢獻源列表(CSRC List):0~15項,每項32位元,用來標誌對一個RTP混合器產生的新包有貢獻的所有RTP包的源。由混合器將這些有貢獻的SSRC識別符號插入表中。SSRC識別符號都被列出來,以便接收端能正確指出交談雙方的身份。

2.3.  RTCP的封裝

RTP需要RTCP為其服務質量提供保證,因此下面介紹一下RTCP的相關知識。

RTCP的主要功能是:服務質量的監視與反饋、媒體間的同步,以及多播組中成員的標識。在RTP會話期 間,各參與者週期性地傳送RTCP包。RTCP包中含有已傳送的資料包的數量、丟失的資料包的數量等統計資料,因此,各參與者可以利用這些資訊動態地改變傳輸速率,甚至改變有效載荷型別。RTP和RTCP配合使用,它們能以有效的反饋和最小的開銷使傳輸效率最佳化,因而特別適合傳送網上的實時資料。

從圖 1可以看到,RTCP也是用UDP來傳送的,但RTCP封裝的僅僅是一些控制資訊,因而分組很短,所以可以將多個RTCP分組封裝在一個UDP包中。RTCP有如下五種分組

UDP、TCP、RTP三種協議的總結 - super-and-star - super-and-star的部落格

表 1 RTCP的5種分組型別

上述五種分組的封裝大同小異,下面只講述SR型別,而其它型別請參考RFC3550。

傳送端報告分組SR(Sender Report)用來使傳送端以多播方式向所有接收端報告發送情況。SR分組的主要內容有:相應的RTP流的SSRC,RTP流中最新產生的RTP分組的時間戳和NTP,RTP流包含的分組數,RTP流包含的位元組數。SR包的封裝如圖3所示。

UDP、TCP、RTP三種協議的總結 - super-and-star - super-and-star的部落格

圖 3 RTCP頭部的格式

版本(V):同RTP包頭域。

填充(P):同RTP包頭域。

接收報告計數器(RC):5位元,該SR包中的接收報告塊的數目,可以為零。

包型別(PT):8位元,SR包是200。

長度域(Length):16位元,其中存放的是該SR包以32位元為單位的總長度減一。

同步源(SSRC):SR包傳送者的同步源識別符號。與對應RTP包中的SSRC一樣。

NTP Timestamp(Network time protocol)SR包傳送時的絕對時間值。NTP的作用是同步不同的RTP媒體流。

RTP Timestamp:與NTP時間戳對應,與RTP資料包中的RTP時間戳具有相同的單位和隨機初始值。

Sender’s packet count:從開始傳送包到產生這個SR包這段時間裡,傳送者傳送的RTP資料包的總數. SSRC改變時,這個域清零。

Sender`s octet count:從開始傳送包到產生這個SR包這段時間裡,傳送者傳送的淨荷資料的總位元組數(不包括頭部和填充)。傳送者改變其SSRC時,這個域要清零。

同步源n的SSRC識別符號:該報告塊中包含的是從該源接收到的包的統計資訊。

丟失率(Fraction Lost):表明從上一個SR或RR包發出以來從同步源n(SSRC_n)來的RTP資料包的丟失率。

累計的包丟失數目:從開始接收到SSRC_n的包到傳送SR,從SSRC_n傳過來的RTP資料包的丟失總數。

收到的擴充套件最大序列號:從SSRC_n收到的RTP資料包中最大的序列號,

接收抖動(Interarrival jitter):RTP資料包接受時間的統計方差估計

上次SR時間戳(Last SR,LSR):取最近從SSRC_n收到的SR包中的NTP時間戳的中間32位元。如果目前還沒收到SR包,則該域清零。

上次SR以來的延時(Delay since last SR,DLSR):上次從SSRC_n收到SR包到傳送本報告的延時。

2.4.  RTP的會話過程

當應用程式建立一個RTP會話時,應用程式將確定一對目的傳輸地址。目的傳輸地址由一個網路地址和一對埠組成,有兩個埠:一個給RTP包,一個給RTCP包,使得RTP/RTCP資料能夠正確傳送。RTP資料發向偶數的UDP埠,而對應的控制訊號RTCP資料發向相鄰的奇數UDP埠(偶數的UDP埠+1),這樣就構成一個UDP埠對。 RTP的傳送過程如下,接收過程則相反。

1)RTP協議從上層接收流媒體資訊碼流(如H.263),封裝成RTP資料包;RTCP從上層接收控制資訊,封裝成RTCP控制包。

2)RTP將RTP 資料包發往UDP埠對中偶數埠;RTCP將RTCP控制包發往UDP埠對中的接收埠。

二、           TCP協議分析

1、 TCP協議簡介

TCP,全稱Transfer Control Protocol,中文名為傳輸控制協議,它工作在OSI的傳輸層,提供面向連線的可靠傳輸服務。

TCP的工作主要是建立連線,然後從應用層程式中接收資料並進行傳輸。TCP採用虛電路連線方式進行工作,在傳送資料前它需要在傳送方和接收方建立一個連線,資料在傳送出去後,傳送方會等待接收方給出一個確認性的應答,否則傳送方將認為此資料丟失,並重新發送此資料。

2、TCP報頭

TCP報頭總長最小為20個位元組,其報頭結構如下圖(圖1)所示;

  位元0             位元15   位元16             位元31

源埠(16)

目的埠(16)

序列號(32)

確認號(32)

TCP偏移量(4)

保留(6)

標誌(6)

視窗(16)

校驗和(16)

緊急(16)

選項(0或32)

資料(可變)

(圖1 TCP報頭結構)

源埠:指定了傳送端的埠

目的埠:指定了接受端的埠號

序號:指明瞭段在即將傳輸的段序列中的位置

確認號:規定成功收到段的序列號,確認序號包含傳送確認的一端所期望收到的下一個序號

TCP偏移量:指定了段頭的長度。段頭的長度取決與段頭選項欄位中設定的選項

保留:指定了一個保留欄位,以備將來使用

標誌:SYN、ACK、PSH、RST、URG、FIN

      SYN: 表示同步

      ACK: 表示確認

      PSH: 表示儘快的將資料送往接收程序

      RST: 表示復位連線

      URG: 表示緊急指標

      FIN: 表示傳送方完成資料傳送

視窗:指定關於傳送端能傳輸的下一段的大小的指令

校驗和:校驗和包含TCP段頭和資料部分,用來校驗段頭和資料部分的可靠性

緊急:指明段中包含緊急資訊,只有當U R G標誌置1時緊急指標才有效

選項:指定了公認的段大小,時間戳,選項欄位的末端,以及指定了選項欄位的邊界選項

3、TCP工作原理

TCP連線建立:TCP的連線建立過程又稱為TCP三次握手。首先發送方主機向接收方主機發起一個建立連線的同步(SYN)請求;接收方主機在收到這個請求後向送方主機回覆一個同步/確認(SYN/ACK)應答;傳送方主機收到此包後再向接收方主機發送一個確認(ACK),此時TCP連線成功建立;

TCP連線關閉:傳送方主機和目的主機建立TCP連線並完成資料傳輸後,會發送一個將結束標記置1的資料包,以關閉這個TCP連線,並同時釋放該連線佔用的緩衝區空間;    TCP重置:TCP允許在傳輸的過程中突然中斷連線,這稱為TCP重置;

TCP資料排序和確認:TCP是一種可靠傳輸的協議,它在傳輸的過程中使用序列號和確認號來跟蹤資料的接收情況;

TCP重傳:在TCP的傳輸過程中,如果在重傳超時時間內沒有收到接收方主機對某資料包的確認回覆,傳送方主機就認為此資料包丟失,並再次傳送這個資料包給接收方,這稱為TCP重傳;

TCP延遲確認:TCP並不總是在接收到資料後立即對其進行確認,它允許主機在接收資料的同時傳送自己的確認資訊給對方。

TCP資料保護(校驗和):TCP是可靠傳輸的協議,它提供校驗和計算來實現資料在傳輸過程中的完整性。

三、           UDP協議分析

 1、UDP簡介

UDP協議是英文UserDatagramProtocol的縮寫,即使用者資料報協議,主要用來支援那些需要在計算機之間傳輸資料的網路應用。包括網路視訊會議系統在內的眾多的客戶/伺服器模式的網路應用都需要使用UDP協議。UDP協議從問世至今已經被使用了很多年,雖然其最初的光彩已經被一些類似協議所掩蓋,但是即使是在今天,UDP仍然不失為一項非常實用和可行的網路傳輸層協議。      與我們所熟知的TCP(傳輸控制協議)協議一樣,UDP協議直接位於IP(網際協議)協議的頂層。根據OSI(開放系統互連)參考模型,UDP和TCP都屬於傳輸層協議。      UDP協議的主要作用是將網路資料流量壓縮成資料報的形式。一個典型的資料報就是一個二進位制資料的傳輸單位。每一個數據報的前8個位元組用來包含報頭資訊,剩餘位元組則用來包含具體的傳輸資料。 2、UDP協議結構     UDP報頭由4個域組成,其中每個域各佔用2個位元組,具體如下:  源埠號 、目標埠號 、資料報長度 和校驗值 。     UDP協議使用埠號為不同的應用保留其各自的資料傳輸通道。UDP和TCP協議正是採用這一機制實現對同一時刻內多項應用同時傳送和接收資料的支援。資料傳送一方(可以是客戶端或伺服器端)將UDP資料報通過源埠傳送出去,而資料接收一方則通過目標埠接收資料。有的網路應用只能使用預先為其預留或註冊的靜態埠;而另外一些網路應用則可以使用未被註冊的動態埠。因為UDP報頭使用兩個位元組存放埠號,所以埠號的有效範圍是從0到65535。一般來說,大於49151的埠號都代表動態埠。      資料報的長度是指包括報頭和資料部分在內的總的位元組數。因為報頭的長度是固定的,所以該域主要被用來計算可變長度的資料部分(又稱為資料負載)。資料報的最大長度根據操作環境的不同而各異。從理論上說,包含報頭在內的資料報的最大長度為65535位元組。不過,一些實際應用往往會限制資料報的大小,有時會降低到8192位元組。      UDP協議使用報頭中的校驗值來保證資料的安全。校驗值首先在資料傳送方通過特殊的演算法計算得出,在傳遞到接收方之後,還需要再重新計算。如果某個資料報在傳輸過程中被第三方篡改或者由於線路噪音等原因受到損壞,傳送和接收方的校驗計算值將不會相符,由此UDP協議可以檢測是否出錯。這與TCP協議是不同的,後者要求必須具有校驗值。

四、三種協議對比

RTP位於UDP之上,UDP雖然沒有TCP那麼可靠,並且無法保證實時業務的服務質量,需要RTCP實時監控資料傳輸和服務質量,但是,由於UDP的傳輸時延低於TCP,能與視訊和音訊很好匹配。因此,在實際應用中,RTP/RTCP/UDP用於音訊/視訊媒體,而TCP用於資料和控制信令的傳輸。

UDP和TCP協議的主要區別是兩者在如何實現資訊的可靠傳遞方面不同。TCP協議中包含了專門的傳遞保證機制,當資料接收方收到傳送方傳來的資訊時,會自動向傳送方發出確認訊息;傳送方只有在接收到該確認訊息之後才繼續傳送其它資訊,否則將一直等待直到收到確認資訊為止。

所以TCP必UDP多了建立連線的時間。相對UDP而言,TCP具有更高的安全性和可靠性。TCP協議傳輸的大小不限制,一旦連線被建立,雙方可以按照一定的格式傳輸大量的資料,而UDP是一個不可靠的協議,大小有限制,每次不能超過64K。

相對於TCP協議,UDP協議的另外一個不同之處在於如何接收突法性的多個數據報。不同於TCP,UDP並不能確保資料的傳送和接收順序。

三者的效能對比見表1。

表1 三種協議的效能對比

協議名稱

複雜性

連線建

立時間

可靠性

是否確保資料報傳送和接受順序

實時性

適用範圍

是否支援組播

RTP/RTCP

實時音視

頻媒體傳輸

支援

TCP

資料和控制信令傳輸

不支援

UDP

音視訊媒體傳輸

支援