TCP的可靠傳輸(依賴流量控制、擁塞控制、連續ARQ)


TCP可靠性表現在它向應用層提供的數據是無差錯,有序,無丟失,即遞交的和發送的數據是一樣的。

可靠性依賴於流量控制、擁塞控制、連續ARQ等技術

《TCP/IP詳解》中的“分組”是不是就是報文段的意思?

1,停止等待協議 

ARQ(Automatic Repeat reQuest)自動重傳請求。 

顧名思義,當請求失敗時它會自動重傳,直到請求被正確接收為止。這種機制保證了每個分組都能被正確接收。停止等待協議是一種ARQ協議

停止等待協議的原理

1. 無差錯的情況 
A向B每發送一個分組,都要停止發送,等待B的確認應答;A只有收到了B的確認應答后才能發送下一個分組。

2. 分組丟失和出現差錯的情況 
發送者擁有超時計時器。每發送一個分組便會啟動超時計時器,等待B的應答。若超時仍未收到應答,則A會重發剛才的分組。 
分組出現差錯:若B收到分組,但通過檢查和字段發現分組在運輸途中出現差錯,它會直接丟棄該分組,並且不會有任何其他動作。A超時后便會重新發送該分組,直到B正確接收為止。 
分組丟失:若分組在途中丟失,B並沒有收到分組,因此也不會有任何響應。當A超時后也會重傳分組,直到正確接收該分組的應答為止。 
綜上所述:當分組丟失 或 出現差錯 的情況下,A都會超時重傳分組。

3. 應答丟失 和 應答遲到 的情況 
TCP會給每個字節都打上序號,用於判斷該分組是否已經接收。 
應答丟失:若B正確收到分組,並已經返回應答,但應答在返回途中丟失了。此時A也收不到應答,從而超時重傳。緊接着B又收到了該分組。接收者根據序號來判斷當前收到的分組是否已經接收,若已接收則直接丟棄,並補上一個確認應答。 
應答遲到:若由於網絡擁塞,A遲遲收不到B發送的應答,因此會超時重傳。B收到該分組后,發現已經接收,便丟棄該分組,並向A補上確認應答。A收到應答后便繼續發送下一個分組。但經過了很長時間后,那個失效的應答最終抵達了A,此時A可根據序號判斷該分組已經接收,此時只需簡單丟棄即可。

停止等待協議的注意點

    • 每發送完一個分組,該分組必須被保留,直到收到確認應答為止。

    • 必須給每個分組進行編號。以便按序接收,並判斷該分組是否已被接收。

    • 必須設置超時計時器。每發送一個分組就要啟動計時器,超時就要重發分組。

    • 計時器的超時時間要大於應答的平均返回時間,否則會出現很多不必要的重傳,降低傳輸效率。但超時時間也不能太長。

2,滑動窗口協議(流量控制)

連續ARQ協議 
在ARQ協議發送者每次只能發送一個分組,在應答到來前必須等待。而連續ARQ協議的發送者擁有一個發送窗口,發送者可以在沒有得到應答的情況下連續發送窗口中的分組。這樣降低了等待時間,提高了傳輸效率。

注意:

1)TCP采用大小可變的滑動窗口進行流量控制,窗口大小的單位是字節。一個滑動窗口包含多個分組(報文段)。

2)TCP連接建立時會協商MSS(每一個報文段所能承載的最大數據長度)。

3)通知對方各自的窗口長度win

2.1 窗口

(1)接收端窗口 rwnd     

接收端緩沖區大小。接收端將此窗口值放在 TCP 報文的首部中的窗口字段,傳送給發送端。

(2) 擁塞窗口 cwnd (congestion window)    

受網絡擁塞限制的發送段窗口

(3)發送窗口swnd

 發送窗口的上限值 = Min [rwnd, cwnd]

當 rwnd < cwnd 時,是接收端的接收能力限制發送窗口的最大值。

當 cwnd < rwnd 時,則是網絡的擁塞限制發送窗口的最大值。 

2.2滑動窗口

發送端已發送了 400 字節的數據,但只收到對前 200 字節數據的確認,同時窗口大小不變。還可發送 300 字節。

發送端收到了對方對前 400 字節數據的確認,但對方通知發送端必須把窗口減小到 400 字節。現在發送端最多還可發送 400 字節的數據。

3,擁塞控制

3.1慢開始

1)擁塞窗口cwnd=1 (即一個最大報文段的長度 MSS 的數值)

2)開始指數增長報文段個數,1,2,4,,,

3)當擁塞窗口的報文段個數大於等於 滿開始門限(ssthresh=16)時,即從指數增長變為加法增長。

4)如果遇到網絡擁塞,則又“慢開始”,即開始從cwnd=1開始。

 

3.2 快重傳和快恢復

3.2.1 快重傳
發送端只要一連收到三個重復的 ACK 即可斷定有分組丟失了,就應立即重傳丟失的報文段而不必繼續等待為該報文段設置的重傳計時器的超時.
接收端因為沒有收到某個報文段,隔段時間就會再發送ACK(例如ack=7,表示前6個段收到了,第7個還沒)。三個重復的 ACK,表示比較長時間一直沒收到第7報文段,所以表示網絡擁塞。
2.2.2 快恢復
(1) 當發送端收到連續三個重復的 ACK 時,就重新設置慢開始門限 ssthresh。
(2) 與慢開始不同之處是 swnd 不是設置為 1,而是設置為 ssthresh + 3 * MSS。 
(3) 若收到的重復的 ACK 為 n 個(n > 3),則將 cwnd 設置為 ssthresh + n * MSS。
(4) 若發送窗口值還容許發送報文段,就按擁塞避免算法繼續發送報文段。
(5) 若收到了確認新的報文段的 ACK,就將 swnd 縮小到 ssthresh。
下圖中的快恢復是另一個版本,從擁塞cwnd的一般開始。

 

https://www.cnblogs.com/gaopeng527/p/5255757.html 

https://mp.weixin.qq.com/s/Dr8MZvMuwoR1vTIq5hSX9w


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM