嵌入式多節點(diǎn)的無(wú)線(xiàn)批量程序更新系統設計(二)
3.2 可靠數據分發(fā)協(xié)議的設計
本文引用地址:http://dyxdggzs.com/article/201808/388162.htm在闡述具體的設計思路之前,先提出以下應用場(chǎng)景的假設。
假設一:網(wǎng)絡(luò )節點(diǎn)不支持高級的操作系統??梢岳斫鉃楸仨毧紤]節點(diǎn)處理和通信能力有限,而且通信協(xié)議要從底層(如MAC層)實(shí)現。
假設二:大部分待燒錄節點(diǎn)分布在數據基站的通訊范圍之內??梢岳斫鉃橥ㄐ艆f(xié)議不需要實(shí)現復雜的多跳通信和流水線(xiàn),可以充分利用數據基站第一次數據廣播,這一點(diǎn)下文會(huì )詳細闡述。
基于以上兩點(diǎn)假設,可靠性數據分發(fā)協(xié)議的具體設計如下。
考慮到不同平臺的無(wú)線(xiàn)收發(fā)模塊提供的服務(wù)接口和通信質(zhì)量的差異以及程序更新對網(wǎng)絡(luò )可靠性的要求,通信協(xié)議選擇在網(wǎng)絡(luò )層實(shí)現可靠數據分發(fā)的機制,協(xié)議只需要硬件平臺在MAC層提供收發(fā)數據幀的應用接口即可。協(xié)議中,數據分發(fā)分為兩個(gè)階段:第一輪發(fā)送階段和節點(diǎn)間交流階段。圖4.2為兩個(gè)階段通信方式示意圖。
(實(shí)線(xiàn)代表發(fā)送完整數據文件,虛線(xiàn)表示發(fā)送數據頁(yè))
1、第一輪發(fā)送階段。
數據基站(如PC)在接收節點(diǎn)準備好后不間斷廣播數據幀,直至數據發(fā)送結束;接收節點(diǎn)盡力接收數據,并記錄自己已有數據幀的id信息,期間不向源節點(diǎn)發(fā)送反饋信息。
在原始的Deluge協(xié)議中沒(méi)有這一階段,因為Deluge協(xié)議中可能無(wú)線(xiàn)傳感器網(wǎng)絡(luò )龐大,分布范圍也較廣,所以數據分發(fā)一旦啟動(dòng),所有接收到數據的節點(diǎn)都參與到數據發(fā)送中來(lái);而本設計中,網(wǎng)絡(luò )充分利用了假設二中的節點(diǎn)分布條件,通常情況下,在第一輪發(fā)送結束后,相當大比例的節點(diǎn)就已經(jīng)接收到了大部分的數據,而這個(gè)過(guò)程中因為只有數據基站在發(fā)送廣播,網(wǎng)絡(luò )中數據傳輸的效率是最高的。當然,這種節點(diǎn)分布條件不滿(mǎn)足的情況也不會(huì )明顯降低數據分發(fā)效率。
節點(diǎn)間交流階段。
交流階段參考了trickle算法的“polite gossip”策略,所有節點(diǎn)(包括數據基站)都參與到交流中去。每個(gè)節點(diǎn)的交流的目的都是相同的,即將自己擁有的數據包發(fā)送給需要的節點(diǎn)和請求并接收自己需要的數據包。
第2階段是保證可靠性的關(guān)鍵,協(xié)議中讓源節點(diǎn)也參與到交流中來(lái),這是為了防止網(wǎng)絡(luò )狀況極差以至在第一輪發(fā)送結束之后所有節點(diǎn)接收數據的總和都不構成完整數據文件的極端情況。這一步中,節點(diǎn)長(cháng)時(shí)間處于“維護”狀態(tài)標志數據分發(fā)結束。
節點(diǎn)首先廣播廣告,每一個(gè)廣告包含一個(gè)摘要(φ),摘要(φ)由兩部分組成:(1)本節點(diǎn)的IP標識v。(2)本節點(diǎn)的最大可用頁(yè)號p,即φ(v,p)??捎庙?yè)號p的定義:頁(yè)p所包含的包被節點(diǎn)全部接收,稱(chēng)頁(yè)p完成。頁(yè)p被完成并且它之前的所有的頁(yè)(0,p)也被節點(diǎn)全部接收,稱(chēng)頁(yè)p可用。節點(diǎn)通過(guò)廣告來(lái)了解對方擁有的數據信息,繼而向比自己數據更完備的節點(diǎn)發(fā)送數據頁(yè)請求。協(xié)議中將時(shí)間分成時(shí)間片(round),在每一個(gè)時(shí)間片中,節點(diǎn)來(lái)決定是否廣播一個(gè)廣告。假設時(shí)間片的長(cháng)度由Tm,i來(lái)表示,它的上下界由Tl和Th來(lái)表示,則有取Tl
交流階段中,節點(diǎn)擁有“維護”、“請求”和“發(fā)送”中的人一個(gè)狀態(tài)。節點(diǎn)在“維護”狀態(tài)廣播廣告并聽(tīng)取其他節點(diǎn)的廣播;在請求階段向其他節點(diǎn)發(fā)送數據頁(yè)請求,并接收對方發(fā)來(lái)的數據;在發(fā)送狀態(tài)廣播被請求的數據頁(yè)。圖4.3為狀態(tài)轉換示意圖。主要的交流規則如下。
(1)“維護”狀態(tài)規則
M1: 假設時(shí)間片i的開(kāi)始時(shí)間為ti,節點(diǎn)在ti+ri的時(shí)間段內,若接收不到廣告φ'=φ,則廣播廣告φ;若收到與φ不一致的廣告(包括φ'=φ、廣告幀和數據幀等),則調整時(shí)間片為T(mén)l,并立即重新開(kāi)始時(shí)間片;若接收到廣告φ'=φ,則調整時(shí)間片為min(2*Tm,i ,Th )。
M2: 節點(diǎn)在收到廣告φ'(v',p')中p'大于自身的最大可用頁(yè)p時(shí),轉向“請求”狀態(tài),向節點(diǎn)v'發(fā)送數據頁(yè)請求;節點(diǎn)收到請求幀,則轉向“發(fā)送”狀態(tài),廣播被請求數據頁(yè)。
規則1能控制冗余廣告的發(fā)送,節約網(wǎng)絡(luò )資源,并且根據網(wǎng)絡(luò )狀況動(dòng)態(tài)調整時(shí)間片長(cháng)度,從而是網(wǎng)絡(luò )資源得到有效的利用。
規則2實(shí)現從“維護”狀態(tài)到“請求”和“發(fā)送”狀態(tài)的轉換。
(2)“請求”狀態(tài)規則:
M3:若節點(diǎn)在向源節點(diǎn)發(fā)出數據頁(yè)請求后節點(diǎn)在時(shí)間t(t為自定義時(shí)間長(cháng)度,是經(jīng)驗值,根據網(wǎng)絡(luò )狀況而定)內沒(méi)有收到數據,則再次發(fā)送請求,若累計請求次數大于k(k為自定義次數),則認為請求失敗,返回“維護”狀態(tài);若節點(diǎn)接收到數據頁(yè),則在接收結束后返回“維護”狀態(tài)。
規則3中考慮到網(wǎng)絡(luò )的質(zhì)量因素,定義了等待時(shí)間t和最大請求次數k。
(3)“發(fā)送”狀態(tài)規則:
M4:節點(diǎn)進(jìn)入“發(fā)送”狀態(tài)立即廣播被請求的數據頁(yè),廣播結束后返回“維護”狀態(tài)。
規則4中要注意的是,節點(diǎn)以廣播的方式發(fā)送數據,這意味著(zhù)處于“請求”狀態(tài)的節點(diǎn)可以接收任何節點(diǎn)(不一定是它請求的指定節點(diǎn))發(fā)送的符合其需要的數據包,這也是協(xié)議中避免網(wǎng)絡(luò )冗余的一個(gè)體現。
以上是本設計中可靠數據分發(fā)協(xié)議的全部?jì)热?,本文在下一節中將詳細論述協(xié)議的軟件設計實(shí)現。
3.3 可靠數據分發(fā)協(xié)議的軟件設計實(shí)現
協(xié)議的軟件設計在網(wǎng)絡(luò )層實(shí)現,涉及到MAC層接口的調用。本節先簡(jiǎn)單介紹本設計實(shí)驗平臺上網(wǎng)絡(luò )模塊提供的MAC層應用接口,然后詳細論述軟件的設計和實(shí)現。
3.3.1 MAC層接口簡(jiǎn)介
首先做兩點(diǎn)說(shuō)明。
第一,設計中使用的MAC層接口不提供絕對可靠的網(wǎng)絡(luò )通信。一方面是因為設計使用實(shí)驗室自制的硬件平臺主要用于做群體實(shí)驗,而群體實(shí)驗不需要可靠的網(wǎng)絡(luò )通信,所以平臺的通信模塊也沒(méi)有能實(shí)現可靠通信的機制;另一方面要求MAC層提供可靠通信也不是必要的。
第二,網(wǎng)絡(luò )層只使用了MAC層提供的數據幀發(fā)送和數據幀接收兩個(gè)接口,網(wǎng)絡(luò )層的幀結構包含在MAC數據幀的數據域中。
從第一點(diǎn)可以看到,協(xié)議在網(wǎng)絡(luò )層實(shí)現可靠數據傳輸的機制,降低了對MAC層通信質(zhì)量的要求,而第二點(diǎn)說(shuō)明協(xié)議僅僅需要MAC層提供兩個(gè)最基本的應用接口。本設計中的可靠數據分發(fā)協(xié)議對底層通信的要求很低,具有較好的魯棒性和可移植性。
本設計實(shí)驗平臺上提供的MAC層數據幀發(fā)送命令結構如圖4.4所示,其中區域3為數據域,包含網(wǎng)絡(luò )層的幀結構,另外節點(diǎn)在MAC層以廣播的方式通信,所以命令中不包含源節點(diǎn)和目的節點(diǎn)的地址信息。MAC層接收到數據幀后,將數據域分離出來(lái)存儲到接收緩存區;發(fā)送數據時(shí),將發(fā)送緩存區中的數據加上MAC層數據幀的頭部和尾部并發(fā)送出去,網(wǎng)絡(luò )層只關(guān)心發(fā)送和接收緩沖區中的數據。這里規定以下章節中提到的各種幀結構均指網(wǎng)絡(luò )層幀結構。
3.3.2 可靠數據分發(fā)協(xié)議的數據結構設計
網(wǎng)絡(luò )層數據要經(jīng)過(guò)緩存,解析再到存儲或者執行三步操作,并且不同種類(lèi)的幀要區別處理,因此一個(gè)好的數據結構設計方案對簡(jiǎn)化數據處理操作和提高數據處理效率是非常有必要的。圖4.5為網(wǎng)絡(luò )層數據流圖,數據幀的流向為:
從MAC層讀入后放入原始數據緩沖區;
經(jīng)解析后得到幀結構;
將幀結構作相關(guān)處理后僅提取頁(yè)號(p)、幀號(id)和數據(data)放到寫(xiě)flash緩沖區;
寫(xiě)flash。
注意以上是數據幀的流向,除數據幀以外的其他類(lèi)型幀(如請求幀,結束幀等)只執行第(1)、(2)步操作。下面著(zhù)重論述圖中每個(gè)階段涉及到的數據結構。
評論