1 擁塞避免演算法
名稱解釋:
報文段---
tcp一次傳輸所傳送的一定長度的位元組段。
tcp的滑動視窗機制,作為接收方管理傳送方傳送資料量的手段,以防止接收方的接收緩衝區因為滿而溢位。
擁塞視窗(cwnd),
接收端通知視窗(rwnd),
慢啟動閥值(ssthresh),
慢啟動的特徵:1 cwnd被初始化為乙個資料報大小
2 cwnd 指數增長
擁塞避免:1在乙個rtt時間內cwnd只增加乙個mss大小
2 cwnd線性增長
快速重傳:連續收到三個重複的ack就認定資料報丟失,重傳資料報(不管rto)。
擁塞避免演算法是一種處理丟失分組的演算法。
1.1擁塞和丟失的關係
報文段丟失的認定標準就是:tcp傳送超時和連續收到三次重複的ack(jacondson演算法)。
兩個通訊主機之間如果有報文段丟失,就表示二者通訊存在擁塞。
擁塞發生後,要做的就是降低分組進入網路的傳輸速率。而慢啟動演算法正好可以降低傳輸速率.
在長延時的通訊環境中效率很低。根據tcp協議,連線建立後,首先根據慢啟動演算法對流量進行控制。按照慢啟動策略初始傳送視窗大小為1個基本資料報,然後按指數增大接收視窗。這樣,從開始到恢復到最大傳送視窗所需的時間為:慢啟動時間=rtt×1og2(max-win/mss)其中:rtt為往返時延;max-win為tcp最大視窗;mss為每個資料報的長度。按照rtt=0.5s,max-win=64k位元組,mss=512位元組,則侵啟動時間為3.5s。這說明在前3.5s內,tcp傳輸不可能達到峰值傳輸速率。在實際應用中,當傳送視窗大於慢啟動門限視窗後,便進入了擁塞避免過程,在擁塞避免演算法中,視窗的增加速率更加緩慢,不再是慢啟動演算法中的指數增加,而是呈線性增加的。這一方面會引起網路的激烈振盪,另一方面大大降低了網路的利用率。
tahoe演算法是tcp的早期版本。它的核心思想是:讓cwnd以指數增長方式迅速逼進可用通道容量,然後慢慢接近均衡。tahoe包括3個基本的擁塞控制演算法:「慢啟動」、「擁塞避免」和「快速重傳」。
(1)慢啟動:避免了連線建立時突發資料流對網路的衝擊。
初始設定cwnd為1,並按指數型方式增長,直至cwnd超過ssthresh。
當cwnd>=ssthresh時,tahoe進入擁塞避免階段。
(2)擁塞避免:限制傳輸過程中無限制的速率增長,避免由此可能導致的擁塞。
cwnd以線性方式增長。
如果發生超時或者連續收到3個重複ack,tahoe認為發生了擁塞。
對於超時,置ssthresh為當前擁塞視窗的一半,cwnd=1,轉入慢啟動。
如果收到3個連續ack,則tahoe進入快速重傳階段。
(3)快速重傳:根據3個重複的應答報文來判斷丟包,減少了超時重傳的發生,加快了源端對擁塞的響應,使得擁塞能快速消除。立即重傳丟失的分組,同時置ssthresh為當前擁塞視窗的一半,cwnd=1,轉入慢啟動。
jacondson演算法(快速重傳演算法):
tcp傳輸中會統計接收到的重複ack的次數,當次數大於三次時,說明此重複ack中確認序號後的報文段丟失,立即重傳。如圖:
1. 當收到第3個重複的ack包時,ssthreh置為阻塞視窗的一半;
2. 重傳丟失的包後,將擁塞視窗cwnd設定為sshresh+3*smss;
3. 對於每個接收到的重複的ack包,cwnd相應增加smss,擴大擁塞視窗;
4. 如果新的擁塞視窗cwnd值大於接收方待確認資料大小,可以繼續發新包
5. 當收到下乙個ack確認了新資料時,將cwnd大小調整為sshresh,減少視窗;對接收方來說,接收到重發的tcp包後就要發此ack確認當前接收的資料。
(1)與慢啟動不同cwnd不設定為1 而是設定為ssthresh+3
(2)如收到重複的ack(n>3),將cwnd設定為ssthresh+n
(3)如果傳送視窗依然允許傳送資料,則按擁塞避免演算法繼續傳送資料
(3)如收到新的ack 將cwnd縮小為ssthresh。
針對tahoe演算法的不足之處,2023年jacobson在tahoe的基礎上提出了改進演算法reno。改進主要有兩個方面:一是對於收到連續3個重複ack,演算法不經過慢啟動,而直接進入擁塞避免階段;二是增加了快速重傳/快速恢復機制。具體實現過程為:
(1)收到三個重複的ack,進入快速重傳/快速恢復,此時ssthresh設定為當前擁塞視窗的一半。
(2)重傳丟失的資料報,並置cwnd=cwnd+ndup(ndup為收到的重複ack數)。
(3)傳送新的資料報。
(4)當收到非重複的ack時,cwnd=ssthresh。
(5)進入擁塞避免階段。
從上面的過程可以看出,reno在收到3個重複ack後,就轉入快速重傳/快速恢復階段;而遇到超時時,reno和tahoe一樣進入慢啟動階段。
reno目前被廣泛採用,以其演算法的簡單、有效和魯棒性成為tcp源演算法的主流。但是如果在乙個傳送視窗內有多個包丟失時,該演算法不能有效恢復出來,為此提出了一些改進,如newreno、sack等
reno與tahoe相比,增加了快速恢復階段,也就是說,完成快速重傳後,進入了擁塞避免階段而不是慢啟動階段。
tcp ip 學習筆記
最近學習網路程式設計,看了周立發老師的blog 也模仿寫了乙個檔案管理併發伺服器。選擇多程序併發伺服器 技術難點 建立tcp 伺服器 fork 產生新的處理程序 使用getopt 函式使伺服器配置引數化,使用同一的linux風格 設定埠復用,瀏覽檔案系統,思路 1 首先建立乙個被動套接字 設定套接字...
Tcp ip學習筆記
分層 網路協議通常分不同層次進行開發,每一層分別負責不同的通訊功能。乙個協議族,比如t c p i p,是一組不同層次上的多個協議的組合。t c p i p通常被認為是乙個四層協議系統,如圖1 1所示。每一層負責不同的功能 1 鏈路層,有時也稱作資料鏈路層或網路介面層,通常包括作業系統中的裝置驅動程...
TCP IP 學習筆記
參考文件 linux網路程式設計 1 internet 協議 ip 2 傳輸控制協議 tcp 和使用者資料報文協議 udp 3 處於 tcp 和 udp 之上的一組協議專門開發的應用程式。它們包括 telnet,檔案傳送協議 ftp 網域名稱服務 dns 和簡單的郵件傳送程式 smtp 等許多協議。...