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 快重傳和快恢復
https://www.cnblogs.com/gaopeng527/p/5255757.html
https://mp.weixin.qq.com/s/Dr8MZvMuwoR1vTIq5hSX9w