本文重點介紹了差錯控制以及自動重發檢錯arq。
差錯控制時鏈路層乙個非常重要的功能,鏈路層需要在不太可靠的物理層來盡量實現可靠的鏈路層傳輸,靠的就是差錯控制。所謂差錯控制,就是對傳輸的資料資訊進行錯誤檢測,並加以恰當的處理。這其中就包含了多個方面,比如說正確接收資料,檢錯能力和糾錯能力等等。檢錯能力是指接收方通過各種方法能發現資料中的錯誤並且通知傳送方進行重傳該資訊,糾錯是指當發現錯誤地時候直接能夠改正,而不是通過反饋給傳送方進行重發。
傳輸出錯分下面幾種情況:資料丟失,資料出錯,以及確認的丟失和損壞等等,如下圖所示:
那麼和上面錯誤對應的就是差錯控制的功能:1.肯定確認,這個是最基本的情況,只要接收端認為自己收到資料是對的,就傳送乙個ack告知傳送方。2.超時重發 這個對應的是傳送資料和確認丟失的情況。3.否定確認 這個用於資料錯誤之後的重發 通過以上情況考慮,設計出來的協議就是差錯控制的基本方法,也就是大名鼎鼎的arq(自動重發檢測)。
那麼arq的原理是:傳送方根據被傳送的資料資訊,按一定規律加入一些校驗碼位,使資料資訊和校驗碼有某種相關性,然後一起傳送到接收方。接收方根據資料資訊與校驗碼之間的相關規律進行檢驗,從而確定接收的資訊是否出錯,並通過反饋資訊把檢測結果反饋給傳送方。接收方正是通過加入的校驗碼來發現是不是有錯誤,從而具備檢錯能力。
校驗碼有很多種,比如說漢明校驗碼,以及crc迴圈校驗碼,網上這類的資料很多,所以在這裡就不再贅述了。校驗碼是檢測出幀有沒有錯誤,而整個arq不僅包含了檢錯,還有錯誤處理等一些列過程,這個不能混淆了。
arq一共分成三種,停等式arq,回退n-arq以及選擇重傳arq。
1.停等式arq:傳送方僅僅收到當前幀的肯定確認之後才能傳送下一幀。在正常情況下,停等式arq只需要給幀編號為0和1即可,接收方接收到f0之後,如果無誤則傳送ack 1表示準備好接收f1了,如果接收到f1且校驗無誤則傳送ack0表示準備好接收f0了。這是無錯的情況,有錯誤地情況如下:
①資料幀丟失:資料幀丟失,那麼傳送方傳送之後接受方收不到資料,自然也不會有回應。傳送方傳送之後就啟動計時器,當計時器超時,那麼它就要重發。所以對於停等式協議,他一定要有快取區存放自己傳送的訊息。
②資料幀錯誤:假設f0錯了,那麼接受方通過crc校驗發現資料幀有誤,那麼就丟棄該幀。傳送方超時之後,就重新傳送這一幀。
③確認幀丟失/損壞:傳送方如果沒有收到確認幀,超時之後同樣再次傳送剛才傳送的幀,因為他會認為自己的幀丟失了。損壞的處理方式相同,因為傳送方不知道接收方是不是正確接收了,所以仍然重發。如下圖:
停等式arq,就像我之前文章分析的停等式流量控制,優點是操作簡單,但是存在的問題是效率低。因為任何時候都只能有乙個幀再通道傳送,所以通道存在大量空閒,在當前網路情況下,效率那麼低下是不可以忍受的,所以同樣也借用了滑動窗,也就是回退narq和選擇重傳arq。
既然一次只傳送乙個,那麼不用序號行不行?答案是不行。我們可以考慮這樣一種情況,0幀成功傳送,成功接收,傳送方傳送了ack1.但是這個肯定確認ack1卻丟失了,傳送方超時再次傳送了0幀,但是接收方因為沒有序號,只能認為這個是下乙個幀,即幀1,因為他不知道自己確認幀丟了導致傳送方重發,所以就造成錯誤了。
2.回退narq
傳送方連續發出n個幀,接收方以流水線方式按照序號順序接收各個幀,並進行差錯檢測。一旦某個幀有錯,則丟棄該幀和它之後所收到的所有幀。這裡要注意的是,接收方只能按照序號順序接收幀,這與之後的選擇重傳arq不太一樣,選擇重傳arq的性質就決定了自己一定有能力接收亂序的幀,這個一會再說。回退narq的原理圖如下所示:
他對於不同情況的處理如下:
①對於正確的資料幀,假設前i-1幀都對了,接收方傳送rri表示前i-1幀都對了,準備接收第i幀和之後的幀。
②資料幀損壞:接收方發回reji,表示第i幀損壞,要求重傳i幀以及之後的幀。傳送方收到reji,回退到第i幀,重新傳送這一幀和之後的幀。
③資料幀丟失:(1)只有i幀丟失,i+1之後都沒丟:那麼接受方發現順序錯誤了(回退narq只能按順序接收),那麼返回reji,要求重傳第i幀。
(2)i幀是最後的幀:那麼接受方首先超時,發回乙個rr幀,要求重發第i幀。
④肯定確認幀丟失/損壞:假設i-1幀收到之後,收方傳送rri要求發第i幀,結果這個rri丟失或者損壞了,那麼發方會超時,發方會向收方傳送乙個rr表示詢問,確認是不是已經收到了。如果接收方接到rr那麼就會重發rri。但是如果發方的rr也丟失了或者損壞,收方收不到,那麼發方超時,傳送方再次傳送rr,迴圈到一定次數,就重啟整個傳送過程。
⑤rej否定確認損壞:和④相同,把rri換成reji就可以了。
回退n協議特點是:接收方只存放一幀大小的緩衝區(可以理解為接收窗的視窗大小為1;並且傳送方必須有能存放著n個幀大小的快取,以便重發。它的優點是消除了停等協議arq的等待應答時間,效率變高。但是它的缺點非常明顯:即使只有某一幀出錯,但是這一幀和之後的幀全都需要重發,尤其是假設第一幀出錯了,後面n-1幀全部「連坐」。這也會造成低效率與通道浪費,所以解決辦法就是選擇重傳arq.
3. 選擇重傳arq:一次連續傳送n個幀,當接收方發現其中有錯幀時就給傳送方反饋要求重發幀的序號,其餘(n-1)個正確幀被接收方儲存起來。它要求接收方必須有能力快取n個幀,並且它可以接收亂序的幀。它的優點就是不需要重傳其他的幀,通道利用率高,但是缺點就是實現複雜,要求接收方有足夠的空間。我們看這張圖:
傳送方按照順序傳送幀序列,對於沒有錯的幀,接收端反饋acki。那麼對於有錯誤的幀,假設第j幀出錯,那麼收端反饋nakj表示第j幀出錯,那麼發端就只是重發第j幀。收方於是也照常接收其他幀,當收到其他幀之後可能又收到第j幀,這時他意識到這時重傳的,所以他就接收了這個幀,並且按照正確的順序排好了。
從上面三種arq的原理可以知道,越精確,越複雜。想設計出乙個協議,需要全方面考慮到各種可能出現的情況,確保萬無一失才行啊。
資料鏈路層協議ARQ
osi rm體系結構中,流量控制和差錯控制是在資料鏈路層實現的。在資訊傳輸過程中,由於種種原因,可能發生 1 變為 0 或 0 變為 1 的情況,這就是出了差錯。差錯控制可以通過引入奇偶校驗碼 漢明碼 迴圈冗餘校驗碼等方法實現。在下面的流量控制中,實際上也包含了差錯控制功能。流量控制是協調鏈路兩端傳...
資料鏈路層和運輸層的流量控制及差錯控制
這兩天在複習 計算機網路 的期末考試,想明白了幾個問題,做下筆記。1 停止等待 後退n幀和滑動視窗 這三種協議是做什麼的?流量控制 接收方控制傳送方,傳送方的速率不要太快,讓接收方來得及接收。差錯控制 幀錯誤 幀丟失 幀重複。無圖無真相 2 資料鏈路層的差錯控制和運輸層的可靠傳輸有什麼區別?從 幹什...
資料鏈路層(2) 差錯控制之碼距 檢錯與糾錯
一 什麼是碼距 碼距就是兩個碼字c1與c2之間不同的位元數。如 1100與1010的碼距為2,1111與0000的碼距為4。乙個編碼系統的碼距就是整個編碼系統中任意 所有 兩個碼字的最小距離。若乙個編碼系統有四種編碼分別為 0000,0011,1100,1111,此編碼系統中0000與1111的碼距...