利用NS2軟體模擬各種TCP版本_背景知識篇(一)


封包運作情況


目錄

1.背景知識

2.環境建置

3.結果圖與分析

4.參考文獻




1.背景知識


A.壅塞控制

    一般而言,TCP的壅塞控制機制主要可分為slow-startCongestion avoidanceFast retransmissionFast recovery Timeout retransmission五個階段:

1.  slow-start:也叫做指數增長期,傳送初期或者封包遺失 重傳時整個連線類似於從零開始的狀態,會以指數的方式增長,每收到一個ACK(經過一個RTT)cwnd就提升一倍。

2.  Congestion avoidance:當cwnd超過sstreshTCP就進入壅塞避免期,在此期間每經過一個RTT時間,cwnd的值才會增加一個segment,(一個segment通常指一個MTU大小)以避免cwnd增加太快而導致封包遺失。此時的cwnd以線性的方式增加。

3.  Fast restrasmission:當TCP源端收到到三個相同的ACK副本時,即認為有數據包丟失,則源端重傳丟失的數據包,而不必等待RTO超時。同時將ssthresh設置為當前cwnd值的一半,並且將cwnd減為原先的一半。

4.  Fast recovery:當""數據包離開網路後,才能發送""數據包進入網路,即同一時刻在網路中傳輸的數據包數量是恆定的。如果發送方收到一個重覆的ACK,則認為已經有一個數據包離開了網路,於是將擁塞視窗加1

5.  Timeout retransmission:當RTO計時器時間滿了之後,就會重新傳送新的封包。

B.TCP Tahoe

TCP 早期的版本,Tahoe具備 TCP 基本架構,包括慢啟動、壅塞避免、重傳狀態。TCP Tahoe 這版本中加入了快速重傳(Fast retransmit)的方法。快速重傳機制是依據重複(Duplicate) ACKs 作為重送封包的機制,當收到 3 個重複 ACKs,傳送端會將封包視為遺失,不需 Timeout 就進入重送機制( ssthresh 的值設為 cwnd 1/2,即 cwnd 的值設為 1),表示的確有個節段遺失,而不是因為順序混亂而引發重複 ACKs

C.TCP Reno

Reno(RFC 2581)為目前最普遍的版本,修改 Tahoe 演算法並加入快速恢復(Fast recovery)機制。Reno 以快速恢復取代 Tahoe在重傳遺失封包後就進入慢啟動狀態。在 Reno 版本中快速重傳機制在重傳遺失封包後,將 cwnd 設為偵測到遺失時的 1/2,並當每收到一個重複 ACKs 就繼續送出新的封包來提高頻寬利用率,可以更快達到 threshold 值,已進入壅塞避免階段。快速重傳及快速恢復都是使用計算重複 ACKs 的技巧,以維持節段號碼順序。

D.TCP NewReno

NewReno是修改自RenoTCP版本。這個版本中主要修改了TCP Reno Fast recovery演算法。NewReno在收到partial ACK時並不會立刻結束Fast recovery,相反地,NewReno的傳送端會持續地重送partial ACK之後的封包,直到將所有遺失的封包重送後才會結束Fast-recovery,這使得NewReno 的傳送端在網路有大量封包遺失時不需等待timeout就能更正此錯誤,減少大量封包遺失對傳輸效能所造成的影響。NewReno大約每一個RTT時間可重送一個遺失的封包,在Fast-recovery這個階段,若允許的話,傳送端可以繼續送出新的封包以增加link的使用率。

E.TCPwithSelective cknowledgements(SACK)

雖然NewReno可以解決大量封包遺失的問題,但是NewReno在每個RTT時間只能更正一個封包遺失的錯誤。為了更有效處理大量封包遺失的問題,另一種解決的方法就是讓傳送端知道那些已經被接收端收到,但此方法必須同時修改傳送端與接收端的傳送機制。  SACK [2-3]TCP Reno的另一個衍生版本。在這個版本中,加入了一個SACK選項(option)允許接收端在回傳duplicate ACK時,將已經收到的資料區段 (連續收到的資料範圍) 回傳給傳送端,資料區段與資料區段之間的間隔就是接收端沒有收到的資料。藉由這些資訊,傳送端就知道那些是已經收到的,那些是該重送的,因此SACK的傳送端可以在一個RTT時間之內重送一個以上的封包。

F.TCP Vegas

Brakmo Peterson 提出採用觀察 RTT的變化量來控制 cwnd 的大小,以計算預期的效能比較實際的效能來加以決定是否增加或減少 ssthresh 直,Vegas 修改了 Reno 的技術並重新設計了以下三種方法,如下介紹:修改slow-start (Modified slow-start)希望能更有效率的利用頻寬並且避免 cwnd 值上升太快而引發封包遺失情況。cwnd 值大約經過 2 RTT 時間(Round-Trip Time)後才會增加一倍,而非 Reno,每次的 RTT時間就會使得 cwnd 值改變。

G.TCP版本演進圖



留言

這個網誌中的熱門文章

Raspberry pi 樹莓派系列 :安裝瀏覽器

『如何說出好故事|故事架構介紹|輕鬆做出大師級故事架構』

『目標管理|SMART原則|最有效的目標管理原則』