丟包重傳是數(shù)據(jù)通信應(yīng)用里面一項(xiàng)非常重要的功能,特別是在無(wú)線通信中是一項(xiàng)決定通信協(xié)議先進(jìn)程度的指標(biāo)。前文小編介紹了什么是無(wú)線通信網(wǎng)絡(luò)丟包及網(wǎng)絡(luò)丟包的解決辦法,本文接著詳細(xì)的講解數(shù)據(jù)通信中是如何檢測(cè)丟包的。
要想丟包重傳,首先必須得檢測(cè)到丟包,沒(méi)有丟包就沒(méi)有重傳。在無(wú)線通信中,對(duì)于丟包的檢測(cè)通常有載波偵聽(tīng)和應(yīng)答機(jī)制兩種方式。
載波偵聽(tīng)是一種常見(jiàn)的丟包檢測(cè)方法,而在載波偵聽(tīng)基礎(chǔ)之上又發(fā)展出CSMA/CA。CSMA/CA也可以看做一種重傳機(jī)制,我們經(jīng)常使用的WIFI模塊和zigbee模塊就采用了這種機(jī)制。通信設(shè)備在發(fā)送消息前,會(huì)打開(kāi)接收并維持一段很短的時(shí)間。在這個(gè)很短的時(shí)間內(nèi),無(wú)線單元會(huì)檢測(cè)同頻段是否有其它的干擾信號(hào),例如zigbee設(shè)備在做載波偵聽(tīng)時(shí),既要檢測(cè)是否有WIFI,藍(lán)牙模塊在發(fā)射信號(hào),又會(huì)檢測(cè)是否有其它的zigbee在發(fā)射信號(hào)。如果干擾信號(hào)來(lái)自WIFI或者藍(lán)牙,zigbee設(shè)備會(huì)測(cè)量它的功率有沒(méi)有自己大,功率沒(méi)自己大就壓過(guò)去,功率比自己大就果斷丟包;而zigbee設(shè)備在載波偵聽(tīng)時(shí)遇到其它的zigbee設(shè)備,不管對(duì)方功率是否比自己大,都會(huì)主動(dòng)丟包,讓別人先走。
判斷丟包的另一個(gè)方法是增加應(yīng)答機(jī)制,通常通信協(xié)議都會(huì)有OSI七層模型。七層協(xié)議中從鏈路層開(kāi)始,每一層都可以添加應(yīng)答機(jī)制。層級(jí)越低越接近硬件,應(yīng)答機(jī)制的響應(yīng)就越快。
OSI七層模型
我們還是以ZigBee的應(yīng)答機(jī)制為例。Zigbee協(xié)議的OSI模型,具有應(yīng)答機(jī)制的目前僅限MAC層(數(shù)據(jù)鏈路層)和APS層(傳輸層)。但是在實(shí)際應(yīng)用中,很多時(shí)候還會(huì)為應(yīng)用層添加應(yīng)答機(jī)制。MAC層的應(yīng)答是響應(yīng)最快的,也叫做MAC-ACK,通常都在zigbee的無(wú)線收發(fā)單元中硬件自動(dòng)產(chǎn)生。接收端設(shè)備收到zigbee數(shù)據(jù)幀后120微秒以廣播的方式發(fā)出來(lái)。同時(shí)MAC-ACK也是zigbee中最短的幀,幀長(zhǎng)只有5字節(jié),加上幀前導(dǎo)碼和同步幀累計(jì)11字節(jié)。按照zigbee的250kbps傳輸速率每個(gè)字節(jié)需要32微秒,一個(gè)MAC-ACK幀的占空時(shí)間352微秒。也就意味著發(fā)送端在發(fā)送一個(gè)MAC幀后,會(huì)在120+352=472微秒后收到該MAC幀對(duì)應(yīng)的MAC-ACK。同樣zigbee的MAC層也規(guī)定了,發(fā)送端如果在540微秒內(nèi)沒(méi)有收到對(duì)應(yīng)的MAC-ACK則認(rèn)為是丟包了。
MAC-ACK采用廣播發(fā)送,首先可以減少MAC-ACK幀中表示地址的字段,減少幀長(zhǎng)度,讓ACK幀占空時(shí)間更短,發(fā)送端可以根據(jù)MAC-ACK幀中的幀序號(hào)來(lái)判斷是否自己的MAC-ACK;其次MAC-ACK采用廣播的方式,也可以提醒其它的zigbee設(shè)備自己正在通信,其它的zigbee設(shè)備如果這個(gè)時(shí)候也在進(jìn)行載波偵聽(tīng),就能主動(dòng)避讓正在通信的設(shè)備。在zigbee的MAC層,載波偵聽(tīng)和MAC-ACK是雙管齊下,這樣能保證丟包檢測(cè)的準(zhǔn)確性。另外zigbee的廣播消息是不會(huì)產(chǎn)生MAC-ACK的。
zigbee協(xié)議除了MAC層有應(yīng)答機(jī)制,傳輸層和應(yīng)用層也有應(yīng)答機(jī)制。Zigbee模塊是一個(gè)多跳的Mesh網(wǎng)絡(luò),而MAC層的傳輸只能滿足單跳傳輸,因此zigbee在傳輸層也做了應(yīng)答,也叫做APS-ACK。Zigbee發(fā)送端把一個(gè)消息傳輸給zigbee接收端,中間會(huì)經(jīng)過(guò)多個(gè)zigbee路由器節(jié)點(diǎn)的轉(zhuǎn)發(fā)。接收端收到消息后,會(huì)通過(guò)相同的路由路徑,把APS-ACK發(fā)給發(fā)送端,發(fā)送端收到APS-ACK就認(rèn)為發(fā)送消息到達(dá)了接收端。如果發(fā)送端在6秒(默認(rèn)值)后沒(méi)有收到APS-ACK則會(huì)認(rèn)為數(shù)據(jù)丟包。
ZigBee的系統(tǒng)中通常都只對(duì)應(yīng)用層開(kāi)放接口,在應(yīng)用層開(kāi)放的接口中最常見(jiàn)的就是一個(gè)叫做“AF Data Confirm”的檢測(cè)接口,它綜合了MAC層丟包(含MAC-ACK丟包和載波偵聽(tīng)丟包),網(wǎng)絡(luò)層丟包,傳輸層丟包等底層丟包信息。Zigbee的頂層應(yīng)用中可以知道當(dāng)前發(fā)送的消息是否丟包。
MAC層和傳輸層的丟包檢測(cè),都屬于系統(tǒng)層的丟包。還有一種丟包就是應(yīng)用層的丟包,比如一個(gè)調(diào)光開(kāi)關(guān)給一個(gè)空調(diào)設(shè)備發(fā)了一條“把亮度調(diào)到50%”的指令。這條指令如果不丟包,會(huì)有什么結(jié)果?肯定是空調(diào)會(huì)去執(zhí)行“把亮度調(diào)到50%”,但是空調(diào)只有溫度沒(méi)有亮度,也就是說(shuō)這條指令發(fā)給了不該發(fā)的目標(biāo)。這個(gè)時(shí)候就需要應(yīng)用層的應(yīng)答來(lái)解決這個(gè)問(wèn)題。比如空調(diào)收到了“把亮度調(diào)到50%”后,可以向發(fā)送端回復(fù)應(yīng)用層應(yīng)答“看清楚老子不是燈泡”。
今天的分享就到這里啦,EBYTE人每一天都致力于更好的助力物聯(lián)化、智能化、自動(dòng)化的發(fā)展,提升資源利用率,更多產(chǎn)品更多資料,感興趣的小伙伴可以登錄我們的億佰特官網(wǎng)進(jìn)行了解,還有客服小姐姐在線答疑哦!
7 X 24 銷售服務(wù)熱線
4000-330-990深圳辦事處柯經(jīng)理:18218726658 杭州辦事處戴經(jīng)理:17512568697
常州辦事處崔經(jīng)理:15906110783 南京辦事處葛經(jīng)理:17626012283
業(yè)務(wù)郵箱:support@cdebyte.com
全國(guó)銷售投訴電話:19934352316
地址:四川省成都市高新西區(qū)西區(qū)大道199號(hào)B5棟(前臺(tái)座機(jī):028-61543675)
?? 成都億佰特電子科技有限公司【版權(quán)所有】 蜀ICP備13019384號(hào)-3