對rdt傳輸協議的形象化理解

2022-03-06 17:57:26 字數 2248 閱讀 9889

1. rdt1.0

這個版本的rdt協議就像傳統的老師給你講課,傳送方只用傳送資料,就像老師滔滔不絕,接收方只用接收資料,就像你在底下努力的往自己的小腦瓜裡塞知識,至於塞不塞的進,有沒有接收到老師的話,老師也不管,他會假設你們都聽進去了,就像rdt1.0假設通道是安全的一樣,具體的原理圖如下

這個版本的rdt在1.0的基礎上加上了位錯誤的檢測和重發機制

位錯誤是由於在傳輸和接收過程二進位制的位被干擾發生翻轉,導致資料錯誤,那麼怎麼檢測這種錯誤呢,這就需要較驗和這種標準,他把傳輸的資料按某種方法進行統計得到乙個 數值,並和資料一起傳送給接收端,接收端接收到資料後進行計算,再與校驗位進行比對,檢查是否發生位翻轉(當然也會有偶然錯誤翻轉而校驗和正確的情況,只是機率較小)

重發機制就是當檢測到檢驗和不匹配,資料損壞時,向傳送端請求重新傳送這個資料段,就像人說錯了話,再說一句去補救一樣

原理圖如下:

這裡引入了ack與nak訊號以及訊號位rcvpkt,來實現重發的判斷:corrupt函式判斷訊號位rcvpkt是否受損,rdt_rcv函式判斷訊號位是否正確

當接收端成功接收到資料,也就是校驗和(訊號位)沒有損壞的前提下,校驗和正確,那麼接收端就向傳送端傳送乙個ack訊號,告訴傳送端:我好了,你繼續,傳送端接收到訊號後,判斷是ack還是nak,如果是ack,那麼傳送端將傳送下乙個資料段,如果是nak,也就是沒接收到,那麼傳送端將重新傳送當前的資料段,直到接收到ack訊號,以此來避免資料缺失

3. rdt 2.1 

不知道這時候你們有沒發現,2.0嚴重依賴於ack和nak的正確性,因為要用這兩個訊號來判斷是否重發,但萬一這兩個資料位也發生翻轉了呢,常在河邊走哪有不濕鞋,那有該怎麼辦,2.1版本應運而生

2.1在2.0的基礎上對所有資料段加上了0或1的編號(這裡的只用兩個編號,是因為當前接收到的分組只用分辨錯誤與正確兩種情況),也就是每個傳送的資料段都有自己的0或1標識,ack和nak訊號也有,以此來解決對ack,nak正確性的依賴

以傳送0號資料段為例(1號資料段同理):

第一步:當傳送端傳送了0號資料段,傳送端等待0號響應訊號,接收端接收到0號資料段,檢驗訊號位正確性和受損與否:

第二步:如果第一步接收端判斷訊號位正確,接收端就會返回傳送端ack0訊號,同時接收端將接收狀態由0轉為1,如果傳輸過程中ack0訊號受損,那麼傳送端接收並判斷後,就會重新傳送0號資料段,但當前接收端處於1號資料段接收狀態,接收到0號包會丟棄這個包,並向傳送端返回ack0訊號,傳送端再接著傳送1號包,這樣就避免了因為訊號受損判斷錯誤,導致資料報重疊。

如果第一步接收端判斷訊號位異常,接收端返回nak0訊號(同時會丟棄這個異常的資料段),同時接收端處於接收0號資料段狀態,傳送端接收到接收端nak0訊號後會重發0號資料段,補齊資料,如果傳輸中nak0訊號受損,那麼傳送端判斷後也會重新傳送當前的0號資料段,原理圖如下

傳送端:

接收端:

打個比喻,傳送端和接收端借助網路這個郵差來收發資訊,但這個郵差是不可靠的,有時候會記錯發沒發過郵件(ack,nak符號受損),導致傳送端錯誤重發,有時候會搞壞信件(校驗位檢測到錯誤),那麼rdt2.1就相當於接收端傳送端給信件編了個0或者1的碼,接收端接收到0號信件後並檢查信件沒有損壞後,就等待1號信件,並托郵差給傳送端說ok,我收到0號郵件了;傳送端在接受到這個訊號後,就接著傳送1號信件,並等待接收端的回信,這是沒有錯誤的完美情況

那現在有兩種錯誤情況:一種是由於郵差傳錯資訊,以0號信件為例,明明接收端接收到0號信件了,他告訴傳送端沒接收到;另外一種就是郵差搞壞了信件

對於第一種錯誤情況,rdt2.1的信件編號解決了這個問題,接收端接收到0號信件,等待1號郵件,但郵差告訴傳送端接收端沒收到,那麼傳送端就會重新傳送0號信件,並等待0號響應,接收端在接收到這個重複的0號信件後,丟掉這個信件,並告訴郵差給傳送端說0號信件我收到了,這樣這個迴圈會一直到郵差正確地傳遞了資訊後,傳送端傳送1號信件結束,解決了錯誤重發導致的資料重複

對於第二種情況,rdt2.1與2.0一樣,都是通過接收端刪除受損包,傳送端重發的機制解決

未完待續。。。

STP協議的形象化理解

stp協議的形象化理解 還是那句話,在學習乙個協議的時候,先搞清楚問題是什麼,也就是說這個協議是為了解決什麼問題滿足什麼需求的,然後試著自己在腦子裡實現它,也就是說如果自己碰到這樣的問題,在沒有任何背景,沒有任何可用的技術時,該如何來解決它。等到自己想到了辦法,再和標準的協議作對比,看看自己的想法缺...

02BLE協議各層的形象化理解

先上框圖 att層 從att開始看,在上篇部落格講的醫院結構裡面有個檢驗室,檢驗室可以得到各項結果,但是它並不知道這些結果代表什麼含義。模擬的在ble 協議棧裡面,att定義了各種屬性 屬性的操作方法,但是這些屬性有什麼作用,能給使用者提供什麼服務,它並不知道。舉例如下 假設有兩個藍芽裝置,乙個是手...

資源管理概念的形象化

收租婆錢姐,她年輕時在回龍觀幾十個小區買了幾百套房,老了靠收租生活。為了管理這些房子,她用了如下幾個概念 小王來租房,它一要看小區 zone 離地鐵近不近,二來要看戶型 unitconfig 少於60平公尺的不考慮。根據這兩個條件,就可以確定若干個單元 unit 作為候選了。小李也來租房,不過他是個...