TCP IP 學習筆記

2021-06-08 08:49:19 字數 2904 閱讀 8031

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 等許多協議。...