|
|
電信博物館 > 計算機網絡 > 計算機網絡體系結構的五臟六腑
> 川流不息的數據通道
三種聯絡暗號
為了深入理解數據鏈路層的協議,我們先從一種假想的、完全理想化的數據傳輸過程開始討論。
如果鏈路是理想的傳輸信道,所傳送的任何數據既不會出差錯也不會丟失,那么數據鏈路層協議是根本不需要的。但是,這可能嗎?不可能。所以我們需要數據鏈路層協議。
如果不管發送方以多快的速率發送數據,接收方總是來得及收下,并及時上交主機,那么數據鏈路層協議也是不需要的。但是,這可能嗎?不可能。所以我們還是需要數據鏈路層協議。
這就是說,傳輸數據的信道是不可靠的(即不能保證所傳的數據不產生差錯),并且還需要對數據的發送端進行流量控制。
看看最簡單的停止等待協議。
收方在收到一個正確的數據幀后,向發方發送一個確認幀ACK(表示“我收到啦”)。當發方收到確認幀后才能發送一個新的數據幀。這樣就實現了收方對發方的流量控制。假如數據幀在傳輸過程中出現了差錯。由于通常都在數據幀中加上了循環冗余校驗CRC,所以收方很容易校驗出收到的數據幀是否有差錯。當發現差錯時,收方就向發方發送一個否認幀NAK(表示“嘿,哥們兒,你搞錯了”),以表示發方應當重發出錯的那個數據幀。
有時,鏈路上的干擾很嚴重,或由于其他一些原因,收方收不到發方發來的數據幀。這種情況稱為幀丟失。發生幀丟失時,收方當然不會向發方發送任何應答幀。如果發方要等收到收方的應答信息后再發送下一個數據幀,那么就將永遠等下去。要解決這個問題,可在收方發送完一個數據幀時,就啟動一個超時定時器。若到了超時定時器所設置的重發時間仍收不到收方的任何應答幀,則發方就重傳前面所發送的這一數據幀。
然而現在問題并沒有完全解決。當出現數據幀丟失時,超時重發的確是一個好辦法。但是若丟失的是應答幀,則超時重發將使收方收到兩個同樣的數據幀。由于收方現在無法識別重復的數據幀,因而在收方收到的數據中出現了另一種差錯,稱為重復幀。要解決這個問題,必須使每一個數據幀帶上不同的發送序號。若收方收到序號相同的數據幀,就表明出現了重復幀。這時應當丟棄這重復幀。但應注意,此時收方還必須向發方發送一個確認幀,因為收方已經知道發方還沒有收到上一次發過去的確認幀。
我們知道,任何一個編號系統的序號所占用的比特數一定是有限的。因此,經過一段時間,發送序號就會重復。序號占用的比特數越少,數據傳輸的額外開銷就越少。對于停等協議,由于每發送一個數據幀就停止等待,因此用一個比特來編號就夠了。就是說序號輪流使用0和1。
由于發方對出錯的數據幀進行重復是自動進行的,所以這種差錯控制體制常簡稱為ARQ(Automatic Repeat reQuest),直譯是自動重復請求,意思是自動請求重發。
停止等待協議ARQ比較簡單,但信道利用率不高。為了克服這一缺點,就產生了另外兩種協議,即連續ARQ和選擇重傳ARQ。
連續ARQ的要點就是在發送完一個數據幀后,不是停下來等待應答幀,而是可以連續再發送若干個數據幀。如果這時收到了收方發來的確認幀,那么還可以接著發送數據幀。由于減少了等待時間,整個通信的吞吐量就提高了。但是,收方只按序接收數據幀,如果收到有差錯的某幀之后接著又收到了正確的幾個數據幀,都必須將它們全部丟棄;而發方在重傳時,又必須把原來已正確傳送過的數據幀進行重傳(僅因為這些數據幀之前有一個數據幀出了錯)。這種做法又使傳送效率降低。由此可見,若傳輸信道的傳輸質量很差因而誤碼率較大時,連續ARQ不一定優于停止等待協議。
為了進一步提高信道的利用率,可設法只重傳出現差錯的數據幀或者是定時器超時的數據幀。但這時必須加大收方的緩沖區,以便先收下發送序號不連續但仍處在緩沖區中的那些數據幀。等到所缺序號的數據幀收到后再一并送交主機。這就是選擇重傳ARQ協議。使用選擇重傳ARQ協議可以避免重復傳送那些本來已經正確到達收方的數據幀。但我們付出的代價是在接收端要設置具有相當容量的緩沖空間,這在許多情況下是不夠經濟的。正因為如此,選擇重傳ARQ協議在目前就遠沒有連續ARQ協議使用得那么廣泛。
[上一頁] [下一頁]
|
|
|