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

2021-08-20 18:28:50 字數 4576 閱讀 7676

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-維基百科 

2、tcp/ip(三) —— 可靠傳輸工作原理

3、tcp可靠傳輸&流量控制&擁塞控制  

4、計算機網路【七】:可靠傳輸的實現 

5、tcp/ip之tcp協議(3):流量控制(滑動視窗協議)

停止等待協議和連續ARQ協議

停止等待協議就是傳送乙個資料報之後,要等待對方的確認之後在傳送第二個資料報 超時重傳機制 傳送端傳送了m1這個資料報之後,啟動乙個定時器,如果在一定的時間內如果a沒有收到b的ack回應,重新傳遞m1這個資料報,a每次傳送乙個資料報都會啟動乙個定時器。如果b收到了m1資料,但是發生m1的資料在傳遞過程...

連續ARQ協議

以下摘自筆者編著的 網路工程師必讀 網路工程基礎 圖書 7.4.6 連續arq 協議 連續重發請求 arq方案是指傳送方可以連續傳送一系列資訊幀,即不用等前一幀被確認便可繼續傳送下一幀,效率大大提高。但在這種重發請求方案中,需要在傳送方設定乙個較大的緩衝儲存空間 稱作重發表 用以存放若干待確認的資訊...

TCP 停等ARQ 連續ARQ

一 停止等待協議 概念 停止等待 就是每傳送完乙個分組就停止傳送,等待對方的確認。在收到確認後再傳送下乙個分組。1 無差錯情 可以看到在a中是正確的傳輸。2 出現差錯 而在b中的時候,因為 m1有錯,所以 b直接丟棄掉了,然後傳送方因為一直沒有接收到確認,所以它等待一定的時間後,它就會認為傳送超時了...