1. 程式人生 > >TCP連續ARQ協議和滑動視窗協議

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

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               


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



           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述