TCP連續ARQ協議和滑動窗口協議


TCP協議通過使用連續ARQ協議和滑動窗口協議,來保證數據傳輸的正確性,從而提供可靠的傳輸。


一、ARQ協議


ARQ協議,即自動重傳請求(Automatic Repeat-reQuest),是OSI模型中數據鏈路層和傳輸層的錯誤糾正協議之一。它通過使用確認超時這兩個機制,在不可靠服務的基礎上實現可靠的信息傳輸。如果發送方在發送後一段時間之內沒有收到確認幀,它通常會重新發送。ARQ包括停止等待ARQ協議連續ARQ協議,擁有錯誤檢測(Error Detection)、正面確認(Positive Acknowledgment)、超時重傳(Retransmission after Timeout)和 負面確認及重傳(Negative Acknowledgment and Retransmission)等機制。


(1)停止等待ARQ協議


要想弄明白爲什麼TCP要使用連續ARQ協議,首先需要弄清楚停止等待ARQ協議的原理。


TCP 連接是全雙工的連接,也就是說在通信的時候,雙方既是發送方,也是接收方。下面爲了簡化問題,只考慮一方發送,一方接受的情況。其中,A作爲發送方,B作爲接收方。


1.無差錯情況

A發送分組M1,發送完就暫停發送,等待B的確認。B收到M1就向A發送確認。A在收到了對M1的確認後,就再發送下一個分組M2。依次下去發送剩餘的數據...如下圖所示:

2.出現差錯

如果A發送的過程中出現差錯,B在接收M1時檢測出了差錯,就丟棄M1,其他什麼都不做(也不會通知A收到有差錯的分組)。又或者A傳送的過程中分組丟失了,以上這兩種情況下,B不會發送任何信息。 

既然說它是可靠傳輸協議,那自然有它可靠的方法:如果發生以上的情況,A只要超過了一段時間仍然沒有收到確認,就認爲剛纔發送的分組丟失了,所以它會重傳剛剛的發送過的分組,也就是所謂的超時重傳。 

超時重傳的原理也很簡單:發送方發送完一個分組後,就會設置一個超時計時器,如果超時計時器到期之前沒有收到接收方發來的確認信息,則會重發剛發送過的分組;如果收到確認信息,則撤銷該超時計時器。如下圖所示:


這裏應該注意的是:

①既然發送方發送的分組可能丟失或者有差錯,可能需要重傳,那麼它必須暫時保留已發送的分組副本,只有收到確認後,才清除這個副本。

②分組和確認分組信息都應該有各自的編號,用來標示每一個分組和確認信息。(這樣才知道需要發送哪個分組,收到了哪個分組的確認信息)

③超時計時器設置的時間應該略長於分組傳送往返時間。


3.確認丟失和確認延遲 

沒有正常進行通信,除了發送方出現問題外,接收方同時也可能存在問題。

例如,如果A發送了M1分組,到達B,B發送了M1確認信息,但由於網絡原因,該確認信息丟失。那麼這個時候,A在超時重傳時間內,沒有收到B的確認信息,而且它並不知道是自己的分組有差錯、丟失,還是B發生的確認丟失了。因此,A會在超時重傳過後,重傳M1分組。 

接收方B會採取這兩個行動: 

①B會丟棄M1分組,不向上層交付。(B之前已經收到過M1分組了) 

②向A發送確認(因爲A重發了,肯定重傳時間內沒有收到確認信息)

還有可能是另一種情況,就是B發送了確認,沒有丟失,但是延遲了。也就是說,B發送的確認在A超時計時器過期後纔到達。 這種情況下,A收到確認信息後會丟棄,然後重傳剛纔的分組,B收到後,丟棄重複的分組,並重傳確認信息。



根據上述的確認和重傳機制,我們就可以在不可靠的網絡上實現可靠的傳輸。


4.信道利用率

停止等待ARQ協議的優點是簡答,但也有很嚴重的確定,就是信道利用率太低。如下圖所示:


信道利用率U = TD / (TD + RTT + TA)



(2)連續ARQ協議

由於停止等待ARQ協議信道利用率太低,所以需要使用連續ARQ協議來進行改善。這個協議會連續發送一組數據包,然後再等待這些數據包的ACK。


發送方採用流水線傳輸。流水線傳輸就是發送方可以連續發送多個分組,不必每發完一個分組就停下來等待對方確認。如下圖所示:



連續ARQ協議通常是結合滑動窗口協議來使用的,發送方需要維持一個發送窗口,如下圖所示:

圖(a)是發送方維持的發送窗口,它的意義是:位於發送窗口內的5個分組都可以連續發送出去,而不需要等待對方的確認,這樣就提高了信道利用率。 

連續ARQ協議規定,發送方每收到一個確認,就把發送窗口向前滑動一個分組的位置。例如上面的圖(b),當發送方收到第一個分組的確認,就把發送窗口向前移動一個分組的位置。如果原來已經發送了前5個分組,則現在可以發送窗口內的第6個分組。 

接收方一般都是採用累積確認的方式。也就是說接收方不必對收到的分組逐個發送確認。而是在收到幾個分組後,對按序到達的最後一個分組發送確認。如果收到了這個分組確認信息,則表示到這個分組爲止的所有分組都已經正確接收到了。 

累積確認的優點是容易實現,即使確認丟失也不必重傳。但缺點是,不能正確的向發送方反映出接收方已經正確收到的所以分組的信息。比如發送方發送了前5個分組,而中間的第3個分組丟失了,這時候接收方只能對前2個發出確認。而不知道後面3個分組的下落,因此只能把後面的3個分組都重傳一次,這種機制叫Go-back-N(回退N),表示需要再退回來重傳已發送過的N個分組。


二、滑動窗口協議

滑動窗口協議在在發送方和接收方之間各自維持一個滑動窗口,發送發是發送窗口,接收方是接收窗口,而且這個窗口是隨着時間變化可以向前滑動的。它允許發送方發送多個分組而不需等待確認。TCP的滑動窗口是以字節爲單位的。


如下圖所示,發送窗口中有四個概念::已發送並收到確認的數據(不在發送窗口和發送緩衝區之內)、已發送但未收到確認的數據(位於發送窗口之內)、允許發送但尚未發送的數據(位於發送窗口之內)、發送窗口之外的緩衝區內暫時不允許發送的數據。

接收窗口中也有四個概念:已發送確認並交付主機的數據(不在接收窗口和接收緩衝區之內)、未按序收到的數據(位於接收窗口之內)、允許的數據(位於接收窗口之內)、不允許接收的數據(位於發送窗口之內)。


規則:

(1)凡是已經發送過的數據,在未收到確認之前,都必須暫時保留,以便在超時重傳時使用。

(2)只有當發送方A收到了接收方的確認報文段時,發送方窗口纔可以向前滑動幾個序號。

(3)當發送方A發送的數據經過一段時間沒有收到確認(由超時計時器控制),就要使用回退N步協議,回到最後接收到確認號的地方,重新發送這部分數據。


此外,TCP利用滑動窗口協議來進行流量控制,如下圖所示:



參考資料:

1、ARQ-維基百科 https://zh.wikipedia.org/wiki/ARQ

2、TCP/IP(三) —— 可靠傳輸工作原理 http://pmghong.blog.51cto.com/3221425/1242470

3、TCP可靠傳輸&流量控制&擁塞控制  http://my.oschina.net/manmao/blog/601585

4、計算機網絡【七】:可靠傳輸的實現 http://blog.chinaunix.net/uid-26275986-id-4109679.html

5、TCP/IP之TCP協議(3):流量控制(滑動窗口協議)http://blog.csdn.net/wbw1985/article/details/4879224



發佈了87 篇原創文章 · 獲贊 190 · 訪問量 55萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章