停止等待協議

數據鏈路層協議

停止等待協議(stop-and-wait)是最簡單但也是最基礎的數據鏈路層協議。很多有關協議的基本概念都可以從這個協議中學習到。“停止等待”就是每發送完一個分組就停止發送,等待對方的確認。在收到確認后再發送下一個分組。

要點


只有收到序號正確的確認幀 ACKn 后,才更新發送狀態變數 V(S)一次,併發送新的數據幀。
接收端接收到數據幀時,就要將發送序號 N(S) 與本地的接收狀態變數 V(R) 相比較。
若二者相等就表明是新的數據幀,就收下,併發送確認。
否則為重複幀,就必須丟棄。但這時仍須向發送端發送確認幀 ACKn,而接收狀態變數 V(R) 和確認序號 n 都不變。
連續出現相同發送序號的數據幀,表明發送端進行了超時重傳。連續出現相同序號的確認幀,表明接收端收到了重複幀。
發送端在發送完數據幀時,必須在其發送緩存中暫時保留這個數據幀的副本。這樣才能在出差錯時進行重傳。只有確認對方已經收到這個數據幀時,才可以清除這個副本。
實用的 CRC 檢驗器都是用硬體完成的。
CRC 檢驗器能夠自動丟棄檢測到的出錯幀。因此所謂的“丟棄出錯幀”,對上層軟體或用戶來說都是感覺不到的。
發送端對出錯的數據幀進行重傳是自動進行的,因而這種差錯控制體制常簡稱為ARQ (Automatic Repeat reQuest),直譯是自動重傳請求,但意思是自動請求重傳。

演演算法


這裡不使用否認幀(實用的數據鏈路層協議大都是這樣的),而且確認幀帶有序號 n。
按照習慣的表示法,ACKn 表示“第 n – 1 號幀已經收到,現在期望接收第 n 號幀”。
ACK1 表示“0 號幀已收到,現在期望接收的下一幀是 1 號幀”;
ACK0 表示“1 號幀已收到,現在期望接收的下一幀是 0 號幀”。

ARQ的優缺點


優點:比較簡單。
缺點:通信通道的利用率不高,也就是說,通道還遠遠沒有被數據比特填滿。
為了克服這一缺點,就產生了另外兩種協議,即連續 ARQ 和選擇重傳 ARQ。

具有最簡單流量控制的數據鏈路層協議


假定 1:鏈路是理想的傳輸通道,所傳送的任何數據既不會出差錯也不會丟失。
假定 2:不管發方以多快的速率發送數據,收方總是來得及收下,並及時上交主機。
這個假定就相當於認為:接收端向主機交付數據的速率永遠不會低於發送端發送數據的速率。
現在去掉上述的第二個假定。但是,仍然保留第一個假定,即主機A 向主機 B傳輸數據的通道仍然是無差錯的理想通道。然而現在不能保證接收端向主機交付數據的速率永遠不低於發送端發送數據的速率。