無線通信中丟包重傳數(shù)據(jù)通信應(yīng)用里面一項非常重要的功能,是無線通信模塊選型的一項主要參考指標(biāo)。前文詳細(xì)的介紹了什么是網(wǎng)絡(luò)丟包、數(shù)據(jù)丟包是如何檢測及系統(tǒng)層數(shù)據(jù)丟包重傳機(jī)制、數(shù)據(jù)丟包有哪些解決辦法等,本文接著介紹通信協(xié)議中數(shù)據(jù)通信丟包重傳是如何實(shí)現(xiàn)的,具體實(shí)現(xiàn)丟包重傳功能如下:
系統(tǒng)層的重傳,無論是CSMA/CA,還是MAC重傳,還是APS重傳,都是機(jī)械呆板的策略。系統(tǒng)層的重傳機(jī)制,特點(diǎn)就是重傳2~3次,如果重傳失敗就通過“AF Data Confirm”向應(yīng)用層報告發(fā)送失敗。
但是應(yīng)用層是無線傳輸中智能化程度最高的,也是可以進(jìn)行重傳策略設(shè)計的層級。應(yīng)用層應(yīng)該根據(jù)應(yīng)用環(huán)境,消息的重要性設(shè)計丟包重傳的策略。我們以zigbee的應(yīng)用為例,來設(shè)計重傳策略。
通常zigbee設(shè)備出現(xiàn)CSMA/CA失敗,要么是環(huán)境干擾太強(qiáng),要么是同時發(fā)送消息的zigbee設(shè)備數(shù)量太多超過了CSMA/CA的最大窗口。
如果是同時發(fā)送消息的設(shè)備數(shù)量太多,這個時候就要加入“手動避讓”機(jī)制。比如很多節(jié)點(diǎn)同時向協(xié)調(diào)器上傳消息,某個節(jié)點(diǎn)通過“AF Data Confirm”檢測到載波沖突丟包。這時候可以把丟包的消息記下來,然后同樣延時一段隨機(jī)時間,錯開發(fā)送高峰進(jìn)行重傳。當(dāng)然這個隨機(jī)時間范圍就要比MAC層的CSMA/CA的隨機(jī)時間大得多。應(yīng)用層的重傳可以隨機(jī)1~4秒進(jìn)行重傳,以0.1秒為最小單位,如果再次發(fā)生載波沖突可以加倍隨機(jī)時間范圍。特別是zigbee網(wǎng)絡(luò)應(yīng)用中節(jié)點(diǎn)數(shù)量是一個動態(tài)可變的因素,在節(jié)點(diǎn)數(shù)量多的時候可以不用在乎數(shù)據(jù)的實(shí)時性,而是要保證每個節(jié)點(diǎn)的消息都能被收到,而且“設(shè)備越多耗時越多”這個邏輯也是科學(xué)合理的道理。
Zigbee系統(tǒng)提供的沖突檢測機(jī)制,只能檢測沖突,但是無法區(qū)分是傳輸沖突還是惡意的信號干擾。因此有可能會出現(xiàn)應(yīng)用層一直在重傳,“AF Data Confirm”一直在報告載波沖突。這個時候應(yīng)用層就要做“聰明”一點(diǎn),有可能是zigbee設(shè)備遇到了持續(xù)的干擾信號。對于持續(xù)的干擾信號只能通過暴力手段解決,可以通過無線電定位設(shè)備找到干擾源并摧毀它。
系統(tǒng)應(yīng)答丟包,包括MAC-ACK丟包和APS-ACK丟包,可以采用以下策略。ZigBee的系統(tǒng)層具有Mesh路由設(shè)計,數(shù)據(jù)傳輸時會尋找一條最短的路由路徑。在出現(xiàn)MAC-ACK丟包且MAC重傳失敗時,zigbee的路由算法會計算出一條新的路徑。而APS-ACK是最終目標(biāo)丟包,出現(xiàn)這種情況極大可能就是最終目標(biāo)壞掉,或者這個最終目標(biāo)根本就不存在。另外如果最終目標(biāo)不需要進(jìn)過路由,zigbee系統(tǒng)直接發(fā)送MAC幀,也就直接報告MAC-ACK丟包。
出現(xiàn)應(yīng)答丟包且重傳失敗,因?yàn)橄到y(tǒng)層已經(jīng)做了MAC重傳和APS重傳。因此可以不用立即重傳,可以等待一段時間(10秒~1分鐘)再繼續(xù)重傳。如果重傳成功則說明目標(biāo)設(shè)備是好的,只是剛才出了點(diǎn)意外;如果重傳失敗則可以懷疑目標(biāo)設(shè)備出問題了,以后就不要再向出問題的目標(biāo)設(shè)備發(fā)送任何消息。在zigbee網(wǎng)絡(luò)中如果有故障設(shè)備,其它設(shè)備向他發(fā)送消息都會消耗網(wǎng)絡(luò)資源對其進(jìn)行路由尋址,不但會有很長的時延,而且還沒有好的結(jié)果。因此一旦網(wǎng)絡(luò)中有故障設(shè)備,應(yīng)用層就應(yīng)該避免向故障設(shè)備發(fā)送任何消息。
系統(tǒng)層重傳的應(yīng)答機(jī)制僅能表示發(fā)送的消息是否到達(dá)目標(biāo),應(yīng)用層的應(yīng)答除了表示消息到達(dá)目標(biāo)外,還有表示對消息的執(zhí)行結(jié)果的功能。系統(tǒng)層的應(yīng)答的英文叫做“acknowledge”簡寫“ACK”而應(yīng)用層應(yīng)答則叫做“response”簡寫“RSP”。ACK是目標(biāo)設(shè)備收到消息后立即產(chǎn)生的,RSP則是目標(biāo)設(shè)備處理完消息后再回復(fù)的,其等待時間要加上目標(biāo)設(shè)備處理消息的時間,這個時間具有很高的不可預(yù)測性。因此通常在zigbee的控制應(yīng)用中,發(fā)送短發(fā)送消息時只使能MAC-ACK而不使能APS-ACK,然后等待RSP。RSP除了可以用來判斷是否丟包,還可以判斷一下次該發(fā)送什么消息,這樣就可以形成一個閉環(huán)控制系統(tǒng)。
閉環(huán)負(fù)反饋系統(tǒng),RSP應(yīng)答可以作為負(fù)反饋通道
而接收端收到消息后向發(fā)送端發(fā)送RSP應(yīng)答時,為了保證RSP能到達(dá)發(fā)送端,通常反而會開啟APS-ACK。這樣即使RSP應(yīng)答丟包了,傳輸層的重傳機(jī)制也會自動讓RSP應(yīng)答重傳。另外在zigbee 3.0中規(guī)定zigbee設(shè)備可以用自己的任意狀態(tài)值作為心跳包報告給另一個設(shè)備,心跳包什么時候發(fā)出去也是系統(tǒng)層控制不受應(yīng)用層干預(yù),應(yīng)用層也不會去干涉心跳包是否丟包。因此心跳包在傳送的時候通常也使能APS-ACK而不使能RSP。
今天的分享就到這里啦,EBYTE人每一天都致力于更好的助力物聯(lián)化、智能化、自動化的發(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
全國銷售投訴電話:19934352316
地址:四川省成都市高新西區(qū)西區(qū)大道199號B5棟(前臺座機(jī):028-61543675)
?? 成都億佰特電子科技有限公司【版權(quán)所有】 蜀ICP備13019384號-3