前言:我們這裡學習的傳輸機制,收發雙方經過網際網路進行通訊,而不是侷限於點對點的資料鏈路。
傳送方給接收方傳送資料分組,傳送方進行檢測,如果沒有誤碼就接受該分組,並給傳送方傳送確認分組,簡稱為ACK,傳送方收到接收方對該資料分組的確認分組後,才能傳送下一個資料分組。
如果這個分組在傳輸過程中產生了誤碼,接收方對這個分組進行檢測,檢測到了誤碼,就丟棄這個分組,並給傳送方傳送否認分組,簡稱NAK。傳送方收到接收方對該資料分組的否認分組後,就知道自己發的這個資料分組出現了問題,立刻重傳資料分組。
實際情況往往比上面描述的複雜,例如,資料分組在傳輸過程中丟失了,這種情況在資料鏈路層點對點傳輸不太容易出現,但是多個網路多個路由器的複雜網際網路中,很容易出現該情況,這樣接收方收不到分組,也就不會回覆確認分組或者否認分組。如果不採取措施,接收方就一直等待回覆,接收方一直等待接收,工作就推進不下去。
為解決這個問題,可以在傳送方傳送一個數據分組後,啟用超時倒計時,若超過一定時間,傳送方還沒收到接收方的確認分組ACK或者否認分組NAK,則重傳原來的資料分組,這叫做超時重傳。一般可將重傳時間設定為略大於“從傳送方到接收方的平均往返時間”。
那麼上面幾個手段,就已經足夠實現可靠傳輸了嗎?是否還會有其他情況?
既然傳送方傳送的資料分組可能丟失,那麼接收方傳送的確認或者否認分組也有可能丟失。例如,傳送方傳送資料分組,接收方正常接收後,返回一個確認分組ACK,確認分組在傳送過程中丟失了,傳送方在超時時間內,沒收到確認分組,那麼就會發起對之前資料分組的超時重傳,假設這個重傳的資料分組也正常到達了接收方,接收方如何判斷這個分組是個重複的分組?
為了避免分組重複這種傳輸錯誤,必須給每個分組帶上序號。對於停止-等待協議,由於每傳送一個數據分組就停止等待,只要保證每傳送一個新的資料分組,其發送序號與上一次傳送的序號不同就好了,因此資料分組用一個位元來編號。
這樣,接收方上一次回覆的確認分組如果丟失了,導致傳送方重傳了一樣的分組,接收方根據序號判斷為重複分組,直接丟棄該分組,並再次回覆確認分組,以免傳送方再次超時重傳。
那麼,再思考一下,既然資料分組,需要編號,那確認分組ACK或者否認分組NAK是否需要編號呢?
下面這種情況,傳送方傳送分組0,接受方接收後,給傳送方傳送確認分組ACK,由於某些原因,這個確認分組延遲了,導致傳送方對分組0重傳,在重傳傳輸過程中,傳送方收到了延遲到達的確認分組,於是傳送資料分組1,接收方收到重複分組0後,直接丟棄,併發送該分組0的確認分組,這一次分組是對分組0的確認分組,但是傳送方收到後,怎麼知道是分組0的確認分組呢?如果不採取其他措施,傳送方誤認為這是對分組1的確認。
如果對確認分組也進行編號,就可以使傳送方避免這種誤判。
【注意事項】
接收端檢測到資料分組有誤碼時,將其丟棄並等待發送方的超時重傳。但對於誤位元速率較高的點對點鏈路,為了使傳送方儘早重傳,也可給傳送方傳送否認分組NAK。
為了讓接收方能夠判斷所接到的資料分組是否重複,需要給資料分組編號。由於停止-等待協議的停止等待特性,只需要一個位元編號就夠了,即編號0和1.
為了讓傳送方能夠判斷所接收到的確認分組ACK是否是重複的,需要給確認分組ACK編號,所用位元數也是一個,資料鏈路層一般不會出現ACK遲到情況,因此在資料鏈路層使用停止等待協議,可以不給ACK編號。
超時計時器的時間應該謹慎選擇,一般可將重傳時間選擇略大於“從傳送方到接收方的平均往返時間”,在資料鏈路層點對點傳輸往返時間比較確定,重傳時間比較好設定,然而在運輸層,由於端到端往返時間不確定,設定合適的超時時間並不容易,我們在後續關於TCP的學習內容裡進行詳細學習。
接下來,瞭解一下停止-等待協議的通道利用率。為了方便理解假設收發雙方之間是一條直通的通道,傳送方傳送完一個數據分組後就停止傳送,並等待確認分組,再進行下個分組。傳送資料的時間為T1(傳送),收發雙方之間往返時間T2(返回),接收方傳送確認耗費時間為T3(確認傳送),忽略對分組的處理時延。因此一個數據傳送到下一次傳送之間的總時間為:T=T1(資料分組傳送時間)+T2(資料往返時間)+T3(確認分組傳送時間),咱們這個總時間內,實際傳輸的有效資料只有資料分組,資料分組花費的實際為T1(資料分組傳送時間),那麼通道利用率的計算公式為U= T1(資料分組傳送時間) / T1(資料分組傳送時間)+T2(資料往返時間)+T3(確認分組傳送時間), T3(確認分組傳送時間)的時間很小,往往可以忽略,當T2(資料往返時間)過大,遠大於T1(資料分組傳送時間),例如使用衛星鏈路,通道,通道利用率極低。
如果發生重傳,通道利用率進一步降低,為了客戶停止等待協議的缺點,就產生了另外兩種協議,後退N幀協議GBN和選擇重傳協議SR。
停止-等待協議SW這種透過確認,超時重傳實現的可靠傳輸協議,在其他地方還會稱為自動請求重傳協議ARQ,意思是重傳的協議是自動進行的。不需要接收方顯式地請求傳送方傳輸某個出錯的分組。
下一篇:計算機網路三種可靠傳輸的實現機制之二-後退N幀協議GBN