1、前言
在《WiMinet 評說 1.2:多跳無線網絡的現狀》一文中,我們提到:在室外長距離的無線自組織網絡中,由于節(jié)點之間的鏈路損耗較大,其鏈路預算相對不足,其包誤碼率PER會相應升高,也就是丟包概率 p 會比較大;而在一個大規(guī)模網絡中,某些分支節(jié)點的通訊鏈路又會比較深,也就是網絡跳數 n 比較大,在這種情況下其通訊成功率Pn自然也就顯著下降了,人們的切身感受就是這個鏈路不太穩(wěn)定。
此時人們的第一反應自然是上 TCP 算法,在發(fā)送節(jié)點啟用 TCP Client 算法,在接收點啟用 TCP Server 算法,實現端到端的控制,這樣不就可以解決多跳無線通訊網絡的可靠性了么?我們今天就來深入討論一下這個問題。
2、多跳網絡
很顯然在一個真實的無線通訊系統(tǒng)中,每一個節(jié)點都是具備雙向收發(fā)能力的,但是為了更加清晰的描述數據流向,我們將原始數據的發(fā)出者定義為發(fā)射機,將目標數據的接受者定義為接收機;如下圖所示,我們定義左邊紅色的“鐵塔”為發(fā)射機,右邊藍色的“鍋蓋”為接收機。
圖1-發(fā)射機與接收機
在一個較大規(guī)模的無線通訊網絡中,中繼通常有兩種存在形式,一種是獨立的中繼器,通常其硬件配置較高,性能也比較強勁,并安裝有多根天線;另外一種是普通的數據節(jié)點本身承擔數據轉發(fā)的功能,這種節(jié)點成本較低,通常僅僅配置一根天線。無論其硬件配置和工作原理如何,它們都可以承擔數據轉發(fā)的功能,為了更加直觀的描述中繼的工作機制,我們以雙天線的中繼器為例。
圖2-多跳無線中繼
在多數情況下,負責參數通訊的還有外部的用戶系統(tǒng),比如連接數據庫的上位機應用程序和連接現場工業(yè)傳感器的嵌入式設備;通常負責發(fā)起數據請求的是上位機應用程序,二者以RJ45以太網線或者RS232電纜連接。
圖3-上位機應用軟件
負責采集數據并回傳的是嵌入式設備,二者以RS232電纜,TTL電平的串口或者GPIO端口直接相連。
圖4-下位機現場設備
3、業(yè)務流程與運作機制
按照我們之前的約定,我們選定網絡中一個具有6跳的(5個中繼)分支鏈路,在該鏈路上一個標準的通訊業(yè)務流程通常如下:
- 上位機系統(tǒng)發(fā)起數據請求
- 數據請求通過有線電纜傳遞給發(fā)射機
- 發(fā)射機將數據發(fā)送給1號中繼
- 數據依次在中繼1→2→3→4→5之間傳遞,最后到達接收機
- 接收機將數據通過有線電纜傳遞給嵌入式系統(tǒng)
- 嵌入式系統(tǒng)采集數據
注意到,這里僅僅是數據的下行請求過程,在嵌入式系統(tǒng)完成了數據的采集之后,就會將其作為應答回傳給上位機系統(tǒng),其上行通訊流程剛好和下行傳輸完全相反:
- 嵌入式系統(tǒng)送出采集到的數據
- 數據應答通過有線電纜傳送給接收機
- 接收機將數據發(fā)送給5號中繼
- 數據依次在中繼5→4→3→2→1之間傳遞,最后到達發(fā)射機
- 發(fā)射機將數據通過有線電纜傳遞給上位機系統(tǒng)
- 上位機系統(tǒng)完成數據的存儲,計算和顯示
4、UDP多跳傳輸模型
我們都知道,有線通訊由于在封閉的通道中運行,其錯誤率通常在 10-9~10-12,可靠性是非常高的,我們基本不用考慮丟包的問題。這里為了敘述方便,我們將上位機應用程序的功能合并到發(fā)射機中去,將連接工業(yè)傳感器的嵌入式設備的功能合并到接收機中去,這樣簡化之后的模型就是下圖。
圖5-UDP多跳傳輸模型
在該模型中,每一個角色的基本工作原理如下:
- 發(fā)射機:產生數據請求,發(fā)送給中繼1,然后轉入接收狀態(tài),等待來自目標節(jié)點(接收機)的應答數據;如果在指定的時間之內收到了應答數據則代表通訊成功;如果沒有則重新發(fā)送請求并增加計數器;當計數器到達某個限定數值則認定通訊失敗。
- 接收機:平時處于接收等待狀態(tài),一旦從中繼5接收到了來自發(fā)射機的請求數據,則立刻生成應答數據,并交給中繼5。
- 中繼器:按照報文約定的指定的傳輸方向,復制報文并以重新發(fā)送給下一個接收節(jié)點,包括中繼,發(fā)射機和接收機。
上圖是丟包概率 p = 10% 的時候的一種效果模擬圖。這里設定了5次數據重傳,從該圖我們看出來每一次的通訊丟包情況都不同:
- 新數據請求,在發(fā)射機到中繼1的下行鏈路上就丟失了
- 第1次重傳,在中繼2到中繼3的下行鏈路上丟失了
- 第2次重傳,下行鏈路各跳全部成功,接收機正確的收到了數據,并生成了應答,但是應答數據在中繼5→中繼4的上行鏈路上丟失了
- 第3次重傳,在中繼3到中繼4的下行鏈路上丟失了
- 第4次重傳,下行鏈路各跳全部成功,接收機正確的收到了數據,并生成了應答,但是應答數據在中繼2→中繼1的上行鏈路上丟失了
- 第5次重傳,在在中繼5到接收機的下行鏈路上丟失了
- 重傳計數器到達極限,應用程序判定當前鏈路不穩(wěn)定,通訊失敗!
5、總結
當然有的讀者心里會想,這個效果模擬圖太過于極端,上述流程中有好幾次差一點就通訊成功了呢,就差一口氣!如果我們加大嘗試的次數,說不定就成功了呢?
事實上在大多數情況下,加大嘗試次數,通訊成功率的確會有一定的改善,但無法從根本上消除問題。考慮到有線鏈路的和無線多跳的通訊延遲,再疊加上目標設備的數據采集行為,下行或者上行鏈路的傳輸時間可能高達數百毫秒;在真實的環(huán)境中,還要考慮到各種系統(tǒng)延遲和等待操作,比如Windows,Linux等主流桌面操作系統(tǒng)的調度延遲,各級無線節(jié)點的單片機延遲,這個時間往往還需要進一步加大,最終這個總的時間往往高達數秒甚至幾十秒,在一個有幾百個節(jié)點的數據采集系統(tǒng)中,系統(tǒng)整體掃描一遍,耗時將會比較長了。
從上述分析可以看出,端到端的重傳機制在跳數較深的無線自組織網絡中難以保證足夠的可靠性,即便犧牲延時,加大重傳次數,效果也不會有根本性的改善。那么問題來了!我們要怎么做才可以獲得理想的可靠性與實時性呢?敬請關注后續(xù)系列文章的深入解讀。