網路技術

TCP Friendly Rate Control (TFRC) Protocol Specification

摘要
TFRC 是一個網路擁塞控制機制,它和很公平的和TCP競爭帶寬在和並且在吞吐量上比TCP更加平穩。 所以TFRC更適合一些需要平穩帶寬的應用如:網路電話、流媒體。
 
介紹
TFRC是一個網路擁塞控制機制而不是一個完整的協議,它可以用在應用層中使用或者在終端擁塞管理系統裡面使用。這個文檔不討論報文的格式和可靠性,並且實現相關的問題只會進行簡短的討論。TFRC 在和TCP競爭帶寬的時候被設計出表現非常公平,這裡的相當公平是指它的發送速率是在同情況下 TCP 發送速率因素兩個中的一個。但是隨著時間變化 TFRC 比起TCP能在吞吐上表現更加平穩,所以它更加適和對平穩帶寬要求非常高的互聯網產品,比如說:網路電話、流媒體。
由於 TFRC 比TCP有更加平穩的帶寬,造成了它比 TCP 在網路帶寬環境變化時相應慢。因此TFRC應該用到哪些需要平穩吞吐的應用程序中,特別是為了避免TCP因為一個丟包就造成了發送速率直接減半的情況。對於哪些只是需要在短時間簡單的發送更多數據的程序,我們推薦使用TCP。 或則使用被TCP使用的加法遞增(Additive-Increase)和倍數遞減(Multiplicative-Decrease)擁塞控制方法在對安全性要求不高的程序中。
TFRC是一個固定包大小和在擁塞控制中使用變化每分鐘包發送速率的機制。有一些音頻的程序需要固定的包發送間隔和變化的包大小來應對網路擁塞變化。這篇文章描述的擁塞控制機制不能用於這類的應用程序中。 TFRC-PS(for TFRC-PacketSize)是TFRC的一個變體,它使用的是固定包發送速率和變化包大小的策略來應對網路擁塞變化。
TFRC是一個基於包接受者機制(receiver-base mechanism),接受者計算擁塞控制相關的信息(例如:丟包事件率)。這個非常適合那些操作著成千上萬的伺服器,因為包接受者有更多的內存和CPU計算周期。另外接受者機制更加適合構建多播擁塞控制。
協議機制
對於擁塞協議機制, TFRC直接使用吞吐方程來表徵發送速率, 其中發送速率與事件丟失率(loss event rate)和一個數據包的來回時間(round-trip time)相關。為了完全的和TCP競爭, TFRC使用了TCP的一個由3個參數描述的方程(事件丟失率、來回時間、包大小)。這裡定義時間丟失率為: 一個或多個包的丟失,或擁塞通知指令標記的包。
通常TFRC擁塞控制機制分為這幾步:
  • 接收者計算事件丟失率,然後反饋這些信息到發送者
  • 發送者用這個丟失率來計算來回時間(round-trip time)
  • TFRC使用丟失率和來回時間計算傳輸率
  • 發送者調整傳輸率為當前計算的值

TFRC 會因這幾個因子的計算方法和實現而變化。 我們這裡推薦幾個具體的計算方法和實現,當然其他的計算方法也可以,但是要記住他們會實時的影響 TFRC。

1.TCP吞吐方程
任何一個TCP吞吐方程使用的事件丟失率和RTT都能夠用在TFRC上。但是我們必須注意TCP的吞吐方程必須反映出TCP的超時重傳行為,因為超時重傳決定了TCP的吞吐。我們同樣要注意一個隱藏在吞吐方程中的假設:方程中的事件丟失率參數必須逼近實際的丟失率(loss rate)或者事件丟失率(loss event rate)。然而下面的吞吐方程和丟失率計算的逼近方法不太完美,但是實際中這個假設證明是非常的接近真實的情況。
我們推薦一個從Reno TCP簡化的吞吐方程。理想情況下我們的吞吐方程應該基於SACK TCP,但是沒有一個人的實驗和模擬願意這樣做。因為這兩個方程之間的區別非常小。
簡化的吞吐方程如下:
參數的含義如下:
  • X為傳輸率(bytes/second)
  • S為以位元組為單位的包大小
  • R為以秒為但單位的時間
  • p為事件丟失率,其區間為[0, 1.0], 丟失包個數佔總傳輸包的比例
  • t_RTO為以秒為單位超時重傳的時間值
  • b每個ACK包確認數據包的個數

我們將更加的簡化這個方程 t_RTO = 4 * R。 一個更加精確的計算t_RTO是可能的,但是實驗證明這種簡化和TCP對比起來是可以接受的。另一個可行的計算方式為:t_RTO = max(4R, one second),這種方式盡量的逼近1秒。

許多當前的TCP鏈接使用延時確認(delayed acknowledgements),每兩個包發送一個 ACK,因此吞吐方程中的b = 2。然而 TCP 也可以每一個數據包發送一次 ACK,這樣的話吞吐方程中的b = 1。因為許多 TCP 的實現不適用延時確認的方式,所以我們推薦b = 1。
以後可以是使用各種的 TCP 方程來替換這個方程,唯一的要求就是吞吐方程必須很好的逼近TCP的發送率,這樣才能和 TCP 的擁塞控制協議保持一致。 參數s(包大小)、p(丟失率)、R(RTT)的計算方法需要被TFRC實現,關於他們的實現我們將在下面的文章中一一道來。在本文章的後面部分的所以數據傳輸率都是位元組/秒(bytes/second)。
2.包內容
在定義發送者和接受的功能之前,我們描述發送者的數據包內容和接受者反饋包的內容。因為TFRC要依賴於傳輸層協議,所以我們這裡不定義包的格式,這裡依賴於傳輸層協議的具體細節。
2.1 數據包
發送者發送的每個數據包都包含了一下的信息:
  • 序列號. 每發送一個數據包,序列號加1,這個域必須足夠的大以至於不會造成兩個數據包同事擁有相同的序列號。
  • 時間戳. 表示每個包發送的時間,我們用ts_i表示其中i還表示這個包的序列號。時間戳的精度通常是毫秒級別的。 時間戳被接受者用來確定丟包是屬於哪個丟包事件,接受者將會回顯時間戳給發送者使發送者能夠知道RTT,但是對於發送者而言他們他們不會保存時間戳。

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0

You may also like

Leave a reply

您的郵箱地址不會被公開。 必填項已用 * 標註

此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據