丟包重傳是數(shù)據(jù)通信應(yīng)用里面一項非常重要的功能,特別是在無線通信中是一項決定通信協(xié)議先進程度的指標。今天主要著重介紹如何檢測丟包,之后再介紹重傳機制。
如何檢測丟包?
要想丟包重傳,首先必須得檢測到丟包,沒有丟包就沒有重傳。在無線通信中,對于丟包的檢測通常有兩種方式:載波監(jiān)聽和應(yīng)答機制。
01
載波偵聽
載波偵聽是一種常見的丟包檢測方法,而在載波偵聽基礎(chǔ)之上又發(fā)展出CSMA/CA。CSMA/CA也可以看做一種重傳機制,我們經(jīng)常使用的Wi-Fi和ZigBee就采用了這種機制。通信設(shè)備在發(fā)送消息前,會打開接收并維持一段很短的時間。在這個很短的時間內(nèi),無線單元會檢測同頻段是否有其它的干擾信號,例如ZigBee設(shè)備在做載波偵聽時,既要檢測是否有Wi-Fi、藍牙在發(fā)射信號,又會檢測是否有其它的ZigBee在發(fā)射信號。如果干擾信號來自Wi-Fi或者藍牙,ZigBee設(shè)備會測量它的功率有沒有自己大,功率沒自己大就壓過去,功率比自己大就果斷丟包;而ZigBee設(shè)備在載波偵聽時如果遇到其它的ZigBee設(shè)備,不管對方功率是否比自己大,都會主動丟包,即讓別人先走。
02
應(yīng)答機制
判斷丟包的另一個方法是增加應(yīng)答機制,通常通信協(xié)議都會有OSI七層模型。七層協(xié)議中從鏈路層開始,每一層都可以添加應(yīng)答機制。層級越低越接近硬件,應(yīng)答機制的響應(yīng)就越快。
OSI七層模型
我們還是以ZigBee的應(yīng)答機制為例。ZigBee的OSI模型,具有應(yīng)答機制的目前僅限MAC層(數(shù)據(jù)鏈路層)和APS層(傳輸層)。但是在實際應(yīng)用中,很多時候還會為應(yīng)用層添加應(yīng)答機制。MAC層的應(yīng)答是響應(yīng)最快的,也叫做MAC-ACK,通常都在ZigBee的無線收發(fā)單元中硬件自動產(chǎn)生。接收端設(shè)備收到ZigBee數(shù)據(jù)幀后120微秒以廣播的方式發(fā)出來。同時MAC-ACK也是ZigBee中最短的幀,幀長只有5字節(jié),加上幀前導碼和同步幀累計11字節(jié)。按照ZigBee的250kbps傳輸速率每個字節(jié)需要32微秒,一個MAC-ACK幀的占空時間352微秒。也就意味著發(fā)送端在發(fā)送一個MAC幀后,會在120+352=472微秒后收到該MAC幀對應(yīng)的MAC-ACK。同樣ZigBee的MAC層也規(guī)定發(fā)送端如果在540微秒內(nèi)沒有收到對應(yīng)的MAC-ACK則認為是丟包。
MAC-ACK采用廣播發(fā)送,首先可以減少MAC-ACK幀中表示地址的字段,減少幀長度,讓ACK幀占空時間更短,發(fā)送端可以根據(jù)MAC-ACK幀中的幀序號來判斷是否自己的MAC-ACK;其次MAC-ACK采用廣播的方式,也可以提醒其它的ZigBee設(shè)備自己正在通信,其它的ZigBee設(shè)備如果這個時候也在進行載波偵聽,就能主動避讓正在通信的設(shè)備。在ZigBee的MAC層,載波偵聽和MAC-ACK是雙管齊下,這樣能保證丟包檢測的準確性。另外ZigBee的廣播消息是不會產(chǎn)生MAC-ACK的。
ZigBee參考模型
多元化的丟包檢測機制
ZigBee除了MAC層有應(yīng)答機制,傳輸層和應(yīng)用層也有應(yīng)答機制。ZigBee是一個多跳的Mesh網(wǎng)絡(luò),而MAC層的傳輸只能滿足單跳傳輸,因此ZigBee在傳輸層也做了應(yīng)答,也叫做APS-ACK。ZigBee發(fā)送端把一個消息傳輸給ZigBee接收端,中間會經(jīng)過多個ZigBee路由器節(jié)點的轉(zhuǎn)發(fā)。接收端收到消息后,會通過相同的路由路徑,把APS-ACK發(fā)給發(fā)送端,發(fā)送端收到APS-ACK就認為發(fā)送消息到達了接收端。如果發(fā)送端在6秒(默認值)后沒有收到APS-ACK則會認為數(shù)據(jù)丟包。
ZigBee的系統(tǒng)中通常都只對應(yīng)用層開放接口,在應(yīng)用層開放的接口中最常見的就是一個叫做“AF Data Confirm”的檢測接口,它綜合了MAC層丟包(含MAC-ACK丟包和載波偵聽丟包)、網(wǎng)絡(luò)層丟包及傳輸層丟包等底層丟包信息。ZigBee的頂層應(yīng)用中可以知道當前發(fā)送的消息是否丟包。
應(yīng)用層的應(yīng)答
MAC層和傳輸層的丟包檢測,都屬于系統(tǒng)層的丟包。還有一種丟包就是應(yīng)用層的丟包,比如一個調(diào)光開關(guān)給一個空調(diào)設(shè)備發(fā)了一條“把亮度調(diào)到50%”的指令。這條指令如果不丟包,會有什么結(jié)果?肯定是空調(diào)會去執(zhí)行“把亮度調(diào)到50%”,但是空調(diào)只有溫度沒有亮度,也就是說這條指令發(fā)給了不該發(fā)的目標。這個時候就需要應(yīng)用層的應(yīng)答來解決這個問題。比如空調(diào)收到了“把亮度調(diào)到50%”后,可以向發(fā)送端回復(fù)應(yīng)用層應(yīng)答“看清楚我不是燈泡”。
-
無線
+關(guān)注
關(guān)注
31文章
5537瀏覽量
175456 -
檢測
+關(guān)注
關(guān)注
5文章
4609瀏覽量
92554 -
數(shù)據(jù)通信
+關(guān)注
關(guān)注
2文章
468瀏覽量
34309 -
CSMA
+關(guān)注
關(guān)注
0文章
28瀏覽量
13189
發(fā)布評論請先 登錄
MPLS和SR傳輸技術(shù)的區(qū)別

ADC12D1600和ADC12D1600RF這兩種型號之間有什么區(qū)別?
華納云如何解讀WinMTR的丟包率數(shù)據(jù)?
Linux應(yīng)用層控制外設(shè)的兩種不同的方式

兩種常見的硬件消抖實現(xiàn)方式

評論