本發(fā)明涉及車(chē)載網(wǎng)絡(luò)領(lǐng)域,更具體地,涉及一種軟件定義車(chē)載網(wǎng)絡(luò)系統(tǒng)。
背景技術(shù):
近年興起的車(chē)載自組織網(wǎng)絡(luò)原是移動(dòng)自組織網(wǎng)絡(luò)的一個(gè)分支,隨著IEEE802.11p、IEEE1609等標(biāo)準(zhǔn)的起草以及逐步確立,車(chē)載自組織網(wǎng)絡(luò)逐漸從移動(dòng)自組織網(wǎng)絡(luò)中獨(dú)立出來(lái)。車(chē)載網(wǎng)絡(luò)通常并不用于互聯(lián)網(wǎng)應(yīng)用,而多是用于傳遞附近的交通路況信息,避免擁堵;或者用于汽車(chē)之間交換信息,避免碰撞,使交通更有效率;或者用于發(fā)送衛(wèi)星定位系統(tǒng)的系統(tǒng)狀態(tài)、差分信息,加速車(chē)載導(dǎo)航系統(tǒng)對(duì)衛(wèi)星導(dǎo)航信號(hào)的捕獲,提高導(dǎo)航精確度。目前的車(chē)載網(wǎng)絡(luò)多使用移動(dòng)自組織網(wǎng)絡(luò)的路由協(xié)議,車(chē)載網(wǎng)的效率不高、可靠性低。
目前常用的移動(dòng)自組織網(wǎng)絡(luò)路由協(xié)議有OLSR(Optimized Link State RoutingProtocol)、DSDV(Destination-Sequenced Distance Vector Routing)、AODV(Ad hocOn-Demand Distance Vector Routing)和DSR(Dynamic Source Routing)。
傳統(tǒng)的移動(dòng)自組織網(wǎng)絡(luò)路由協(xié)議多是基于節(jié)點(diǎn)之間的廣播發(fā)現(xiàn)鄰居、交換鄰接信息、協(xié)商路由結(jié)果。傳統(tǒng)協(xié)議計(jì)算路由結(jié)果的速度慢,計(jì)算得出的路由信息的有效期短,在車(chē)載網(wǎng)上的應(yīng)用效果很差。
維持鏈路狀態(tài)的移動(dòng)自組織網(wǎng)絡(luò)路由協(xié)議如OLSR,節(jié)點(diǎn)是通過(guò)定期廣播Hello包互相發(fā)現(xiàn)的,當(dāng)兩個(gè)已有鏈接節(jié)點(diǎn)因互相遠(yuǎn)離而斷開(kāi)連接后,運(yùn)行OLSR算法的節(jié)點(diǎn)并不能馬上知道鏈接的斷開(kāi),只能通過(guò)一段時(shí)間都沒(méi)有收到另一輛車(chē)的信息來(lái)推斷鏈接斷開(kāi),這種算法對(duì)節(jié)點(diǎn)移動(dòng)速度不高或者是節(jié)點(diǎn)靜止的應(yīng)用,如:手提設(shè)備之間的臨時(shí)網(wǎng)絡(luò)、傳感器網(wǎng)絡(luò)、戰(zhàn)事野外軍營(yíng)之間的通訊等效果較好;但應(yīng)用在節(jié)點(diǎn)動(dòng)態(tài)性高的車(chē)載網(wǎng)絡(luò)上時(shí),即便是在模擬城市路況的密集路段上OLSR的性能也非常不理想,更發(fā)現(xiàn)在模擬高速、鄉(xiāng)郊路況的細(xì)長(zhǎng)道路上,OLSR甚至不能成功傳送任何數(shù)據(jù)包。同樣是通過(guò)維持鏈路狀態(tài)的路由協(xié)議DSDV,采用了Bellman-Ford算法尋路防止出現(xiàn)路由環(huán),還采用了增量更新的方法更新路由信息,提高了尋路效率并減少了網(wǎng)絡(luò)開(kāi)銷(xiāo)。但和OLSR相似,DSDV并不能及時(shí)發(fā)現(xiàn)鏈路狀態(tài)的更新,同樣不適合在動(dòng)態(tài)性高的網(wǎng)絡(luò)(如車(chē)載網(wǎng))使用。
運(yùn)行由需求驅(qū)動(dòng)的、按需尋找路徑的移動(dòng)自組織網(wǎng)絡(luò)路由協(xié)議AODV的節(jié)點(diǎn)則是通過(guò)在有發(fā)送需求時(shí),遞歸地不斷向鄰居廣播RREQ包(問(wèn)路)尋找通往目標(biāo)結(jié)點(diǎn)的通路,到達(dá)一臺(tái)通往目標(biāo)路由的節(jié)點(diǎn)后、或者到達(dá)目標(biāo)節(jié)點(diǎn)后反向發(fā)送RREP包(回復(fù)包)建立鏈路,并更新途中的節(jié)點(diǎn)上的路由表,以實(shí)現(xiàn)路由功能。每當(dāng)鏈路狀態(tài)發(fā)生改變時(shí),運(yùn)行AODV協(xié)議的節(jié)點(diǎn)發(fā)現(xiàn)后,AODV協(xié)議需要重新尋找一條通路。在動(dòng)態(tài)性高的網(wǎng)絡(luò)上,路由表的信息很快就失效,AODV需經(jīng)常重新找路。所以與維持鏈路狀態(tài)的移動(dòng)自組織網(wǎng)絡(luò)路由協(xié)議類(lèi)似,需求驅(qū)動(dòng)的路由協(xié)議AODV也一樣比較適合節(jié)點(diǎn)拓?fù)湎鄬?duì)穩(wěn)定的手持、固定應(yīng)用。而在節(jié)點(diǎn)拓?fù)洳环€(wěn)定的車(chē)載網(wǎng)上,AODV的表現(xiàn)也不理想。
DSR是更加純粹的需求驅(qū)動(dòng)型路由協(xié)議。與AODV不同的是,DSR采用一種名為“源路由”(Source Routing)的路由方式。AODV的路由是存儲(chǔ)在每個(gè)節(jié)點(diǎn)的路由表中的。如果要將信息發(fā)送去某個(gè)地方,每個(gè)節(jié)點(diǎn)只知道通往目標(biāo)的下一跳是哪個(gè)節(jié)點(diǎn),而不知道整條路經(jīng)的節(jié)點(diǎn)。而源路由的消息發(fā)送節(jié)點(diǎn),則知道通往目標(biāo)節(jié)點(diǎn)的鏈路上每一跳的信息。路由存儲(chǔ)在路由緩存(route cache)上,并會(huì)被加在每一個(gè)發(fā)送的數(shù)據(jù)包的包頭上。因此DSR的實(shí)現(xiàn)、發(fā)送開(kāi)銷(xiāo)都更大。
軟件定義網(wǎng)絡(luò)(SDN)在過(guò)去主要是應(yīng)用在有線網(wǎng)絡(luò)上,如谷歌公司在其網(wǎng)絡(luò)上使用的名為B4的軟件定義網(wǎng)絡(luò)提高其網(wǎng)絡(luò)帶寬的利用率,降低成本,在無(wú)線網(wǎng)絡(luò)上的應(yīng)用十分少有,特別是在車(chē)載網(wǎng)絡(luò)上。在2014年發(fā)表的一份探討將SDN應(yīng)用到VANET的論文中,也只是簡(jiǎn)單地把SDN中的Openflow協(xié)議應(yīng)用到車(chē)載網(wǎng)絡(luò)上,并沒(méi)有針對(duì)車(chē)載網(wǎng)絡(luò)的特性有進(jìn)一步的利用。即便如此,應(yīng)用了Openflow的軟件定義車(chē)載網(wǎng)絡(luò)的可靠性也比以上提到的傳統(tǒng)的路由算法(DSDV、AODV、OLSR、GPSR)有明顯提高。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明為解決以上現(xiàn)有技術(shù)的缺陷,提供了一種軟件定義車(chē)載網(wǎng)絡(luò)系統(tǒng),該系統(tǒng)通過(guò)在各個(gè)路段使用二分搜索算法從運(yùn)行在該路段的車(chē)輛中選取轉(zhuǎn)發(fā)車(chē),從而在各個(gè)路段形成一條維持時(shí)間最長(zhǎng)、信號(hào)覆蓋整個(gè)路段的轉(zhuǎn)發(fā)鏈,因此,該系統(tǒng)的數(shù)據(jù)鏈的穩(wěn)定性與現(xiàn)有技術(shù)相比得到了提高。
為實(shí)現(xiàn)以上發(fā)明目的,采用的技術(shù)方案是:
一種軟件定義車(chē)載網(wǎng)絡(luò)系統(tǒng),包括設(shè)置在各個(gè)路段上的用于管轄相應(yīng)路段的控制器,所述各個(gè)控制器之間能夠進(jìn)行通信;所述每個(gè)控制器通過(guò)二分搜索算法從運(yùn)行在其控制路段的車(chē)輛中選取轉(zhuǎn)發(fā)車(chē),以形成一條維持時(shí)間最長(zhǎng)、信號(hào)覆蓋整個(gè)路段的轉(zhuǎn)發(fā)鏈,轉(zhuǎn)發(fā)鏈上的轉(zhuǎn)發(fā)車(chē)接收到數(shù)據(jù)包后,將數(shù)據(jù)包向前轉(zhuǎn)發(fā)。
優(yōu)選地,每個(gè)控制器的控制路段通過(guò)lc_start和lc_end兩個(gè)二維向量表示,lc_start表示控制路段起點(diǎn)處左側(cè)和或右側(cè)上的一點(diǎn),lc_end表示控制路段結(jié)束處與lc_start對(duì)角的一點(diǎn);設(shè)車(chē)輛的通信半徑為signal_range,控制路段的首段和尾段分別設(shè)置有長(zhǎng)度為signal_range一半的保護(hù)區(qū)間;選取轉(zhuǎn)發(fā)車(chē)形成轉(zhuǎn)發(fā)鏈時(shí),首段和尾段的保護(hù)區(qū)間內(nèi)均包含有有轉(zhuǎn)發(fā)車(chē)。
優(yōu)選地,所述二分搜索算法選取轉(zhuǎn)發(fā)車(chē)的具體過(guò)程如下:
(1)初始化上下限
算法的下限為0,表示不能建立任何的鏈接,算法的上限由在首段保護(hù)區(qū)間內(nèi)預(yù)期逗留最久的車(chē)輛在首段保護(hù)區(qū)間的逗留時(shí)間確定;
(2)進(jìn)行二分查找
根據(jù)上下限,計(jì)算中值mid,調(diào)用函數(shù)TestResult(mid)測(cè)試是否能找出在中值要求的時(shí)間內(nèi)都能維持的鏈接,如果能,則更新中值為下限,再次根據(jù)上下限計(jì)算中值;以上過(guò)程循環(huán)計(jì)算,直到上下限均小于預(yù)先設(shè)定的閾值,此時(shí)結(jié)束二分查找;
(3)根據(jù)結(jié)果選擇轉(zhuǎn)發(fā)車(chē)
經(jīng)過(guò)步驟(2)的計(jì)算后,如果下限仍為0,說(shuō)明算法無(wú)法找到任何的鏈接,返回空的轉(zhuǎn)發(fā)鏈;如果下限不為0,則說(shuō)明存在鏈接,調(diào)用函數(shù)TestResult(lowerbound)計(jì)算轉(zhuǎn)發(fā)信息,然后從首保護(hù)區(qū)間中選擇跳數(shù)最少的,預(yù)期逗留在首段保護(hù)區(qū)間內(nèi)最久的車(chē)輛作為首輛轉(zhuǎn)發(fā)車(chē),并根據(jù)其最佳下一跳,遞歸生成轉(zhuǎn)發(fā)鏈,直到下一跳為空。
優(yōu)選地,設(shè)車(chē)i為第i輛選中的轉(zhuǎn)發(fā)車(chē),若車(chē)j滿足以下關(guān)系,則將車(chē)j選為車(chē)i的下一跳:
(1)dj-di<signal_range//當(dāng)前車(chē)i與車(chē)j能通訊;
(2)di+vi*x<road_legth//x秒后車(chē)i仍在當(dāng)前控制路段;
(3)dj+vj*x<road_legth//x秒后車(chē)j仍在當(dāng)前控制路段;
(4)|di+vi*x-dj+vj*x|<signal_range//x秒后車(chē)i與車(chē)j能通訊;
(5)minhopj+1<minhopi//使用車(chē)j作為下一跳點(diǎn)網(wǎng)絡(luò)距離更近;
其中dj、di表示車(chē)i、車(chē)j之間的位置,vi、vj表示車(chē)i、車(chē)j的速度,road_legth表示控制路段的長(zhǎng)度,由lc_start和lc_end的歐幾里得距離表示。
優(yōu)選地,所述數(shù)據(jù)包通過(guò)SCH信道以廣播的形式發(fā)往轉(zhuǎn)發(fā)車(chē),轉(zhuǎn)發(fā)車(chē)接收到數(shù)據(jù)包后進(jìn)行一系列的判斷決定是否要轉(zhuǎn)發(fā)該數(shù)據(jù)包:
(1)該數(shù)據(jù)包是否為廣播包;
(2)該數(shù)據(jù)包是否是從SCH接口上接收到的;
(3)該數(shù)據(jù)包的TTL是否大于0;
(4)該數(shù)據(jù)包的發(fā)送者是否不在不轉(zhuǎn)發(fā)表上;
(5)轉(zhuǎn)發(fā)車(chē)是否仍在控制器的控制路段內(nèi);
僅當(dāng)以上條件為全真時(shí),轉(zhuǎn)發(fā)車(chē)才會(huì)對(duì)數(shù)據(jù)包進(jìn)行轉(zhuǎn)發(fā)。
優(yōu)選地,所述轉(zhuǎn)發(fā)車(chē)在轉(zhuǎn)發(fā)數(shù)據(jù)包前先進(jìn)行以下操作:
(1)減少數(shù)據(jù)包的TTL;
(2)把數(shù)據(jù)包的Source IP修改為自身SCH接口的ip;
當(dāng)TTL>0時(shí),轉(zhuǎn)發(fā)數(shù)據(jù)包。
優(yōu)選地,所述控制器與車(chē)輛之間通過(guò)四種通訊包進(jìn)行通訊:
HelloMessage:車(chē)輛往控制器發(fā)送的數(shù)據(jù)包,包含了車(chē)輛的ip、車(chē)輛的位置、車(chē)輛的速度三項(xiàng)信息;
AckHelloMessage:控制器回復(fù)車(chē)輛HelloMessage的信息,除了包含HelloMessage的所有信息外,還包含該控制器控制路段的lc_start和lc_end信息;
AppointmentMessage:控制器發(fā)送給車(chē)輛的“欽點(diǎn)”信息,指示車(chē)輛在路段中擔(dān)當(dāng)?shù)慕巧恨D(zhuǎn)發(fā)車(chē)或者普通車(chē);
DontForwardMessage:控制器發(fā)給轉(zhuǎn)發(fā)車(chē)的信息,里面包含一張不轉(zhuǎn)發(fā)表,轉(zhuǎn)發(fā)車(chē)將不轉(zhuǎn)發(fā)列在不轉(zhuǎn)發(fā)表上的車(chē)輛發(fā)來(lái)的所有信息。
優(yōu)選地,所述車(chē)輛未進(jìn)入控制路段,或者車(chē)輛離開(kāi)上一個(gè)控制路段后,車(chē)輛將會(huì)周期性發(fā)送HelloMessage,直至收到AckHelloMessage;
控制器收到HelloMessage后,首先根據(jù)HelloMessage中的位置信息判斷發(fā)送HelloMessage的車(chē)輛是否在該控制器的控制路段內(nèi),若否則靜默丟棄,若在則將該車(chē)輛的信息加入其內(nèi)部設(shè)置的車(chē)輛信息表,并將HelloMessage的信息以及控制器控制路段的lc_start和lc_end信息填入AckHelloMessage,發(fā)送給該車(chē)輛;
車(chē)輛收到AckHelloMessage后把當(dāng)中的所有信息保存,然后周期性地將當(dāng)前位置信息與AckHelloMessage中的位置信息進(jìn)行對(duì)比,當(dāng)車(chē)輛當(dāng)前位置與AckHelloMessage中的位置按照車(chē)輛速度、時(shí)間預(yù)測(cè)得出的位置有10%以上的差別時(shí),車(chē)輛重新向發(fā)送控制器HelloMessage,對(duì)控制器中的信息進(jìn)行更新。
優(yōu)選地,設(shè)轉(zhuǎn)發(fā)鏈的維持時(shí)間為x,則x時(shí)間后,通過(guò)二分搜索算法重新選取轉(zhuǎn)發(fā)車(chē)形成新的轉(zhuǎn)發(fā)鏈。
與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是:
本發(fā)明提供的系統(tǒng)通過(guò)在各個(gè)路段使用二分搜索算法從運(yùn)行在該路段的車(chē)輛中選取轉(zhuǎn)發(fā)車(chē),從而在各個(gè)路段形成一條維持時(shí)間最長(zhǎng)、信號(hào)覆蓋整個(gè)路段的轉(zhuǎn)發(fā)鏈,因此,該系統(tǒng)的數(shù)據(jù)鏈的穩(wěn)定性與現(xiàn)有技術(shù)相比得到了提高。
附圖說(shuō)明
圖1為系統(tǒng)的結(jié)構(gòu)示意圖。
具體實(shí)施方式
附圖僅用于示例性說(shuō)明,不能理解為對(duì)本專(zhuān)利的限制;
以下結(jié)合附圖和實(shí)施例對(duì)本發(fā)明做進(jìn)一步的闡述。
實(shí)施例1
如圖1所示,軟件定義車(chē)載網(wǎng)絡(luò)系統(tǒng)包括設(shè)置在各個(gè)路段上的用于管轄相應(yīng)路段的控制器,所述各個(gè)控制器之間能夠進(jìn)行通信;所述每個(gè)控制器通過(guò)二分搜索算法從運(yùn)行在其控制路段的車(chē)輛中選取轉(zhuǎn)發(fā)車(chē),以形成一條維持時(shí)間最長(zhǎng)、信號(hào)覆蓋整個(gè)路段的轉(zhuǎn)發(fā)鏈,轉(zhuǎn)發(fā)鏈上的轉(zhuǎn)發(fā)車(chē)接收到數(shù)據(jù)包后,將數(shù)據(jù)包向前轉(zhuǎn)發(fā)。
在具體的實(shí)施過(guò)程中,每個(gè)控制器的控制路段通過(guò)lc_start和lc_end兩個(gè)二維向量表示,lc_start表示控制路段起點(diǎn)處左側(cè)和或右側(cè)上的一點(diǎn),lc_end表示控制路段結(jié)束處與lc_start對(duì)角的一點(diǎn);設(shè)車(chē)輛的通信半徑為signal_range。由于不同控制路段的車(chē)輛之間也需要通訊,所以在控制路段的首段和尾段分別有通訊半徑(signal_range)一半的保護(hù)區(qū)間。首尾相接的兩條路只要都保證保護(hù)區(qū)間里面有轉(zhuǎn)發(fā)車(chē)則可以保證消息可以從一個(gè)路段傳到另一個(gè)路段,不論兩條路的相接角度如何。保護(hù)區(qū)間的邊界由上述定義的車(chē)輛“距離”確定??刂坡范蝺?nèi)距離lc_start小于0.5*signal_range的區(qū)域?yàn)槭妆Wo(hù)區(qū)間??刂坡范蝺?nèi)距離lc_start大于(road_length–0.5*signal_range)的區(qū)域?yàn)槲脖Wo(hù)區(qū)間。
在具體的實(shí)施過(guò)程中,每個(gè)控制器為它所控制的控制路段維護(hù)一個(gè)車(chē)輛信息表。車(chē)輛信息表保存在控制路段的所有車(chē)輛的信息。當(dāng)控制器收到來(lái)自所在控制路段的車(chē)輛發(fā)來(lái)的Hello包時(shí),會(huì)更新或者插入(如果車(chē)輛不在本控制器的控制路段的車(chē)輛信息表中)車(chē)輛信息。當(dāng)車(chē)輛離開(kāi)控制路段時(shí),車(chē)輛信息將從車(chē)輛信息表中刪除。
信息包括以下幾項(xiàng):
(1)定位信息,包括位置、速度;
(2)保存選路過(guò)程中動(dòng)態(tài)規(guī)劃時(shí)所產(chǎn)生的臨時(shí)變量,包括下一跳ID以及最小跳數(shù);
(3)車(chē)輛的“欽點(diǎn)”結(jié)果,指代這輛車(chē)是否被選擇為轉(zhuǎn)發(fā)車(chē);
(4)不轉(zhuǎn)發(fā)列表,僅當(dāng)車(chē)輛為轉(zhuǎn)發(fā)車(chē)時(shí)有意義,該轉(zhuǎn)發(fā)車(chē)將被要求不轉(zhuǎn)發(fā)在不轉(zhuǎn)發(fā)列表中的車(chē)發(fā)來(lái)的所有數(shù)據(jù)包,用以防止廣播風(fēng)暴。
在具體的實(shí)施過(guò)程中,所述二分搜索算法選取轉(zhuǎn)發(fā)車(chē)的具體過(guò)程如下:
(1)初始化上下限
算法的下限為0,表示不能建立任何的鏈接,算法的上限由在首段保護(hù)區(qū)間內(nèi)預(yù)期逗留最久的車(chē)輛在首段保護(hù)區(qū)間的逗留時(shí)間確定;
(2)進(jìn)行二分查找
根據(jù)上下限,計(jì)算中值mid,調(diào)用函數(shù)TestResult(mid)測(cè)試是否能找出在中值要求的時(shí)間內(nèi)都能維持的鏈接,如果能,則更新中值為下限,再次根據(jù)上下限計(jì)算中值;以上過(guò)程循環(huán)計(jì)算,直到上下限均小于預(yù)先設(shè)定的閾值,此時(shí)結(jié)束二分查找;
(3)根據(jù)結(jié)果選擇轉(zhuǎn)發(fā)車(chē)
經(jīng)過(guò)步驟(2)的計(jì)算后,如果下限仍為0,說(shuō)明算法無(wú)法找到任何的鏈接,返回空的轉(zhuǎn)發(fā)鏈;如果下限不為0,則說(shuō)明存在鏈接,調(diào)用函數(shù)TestResult(lowerbound)計(jì)算轉(zhuǎn)發(fā)信息,然后從首保護(hù)區(qū)間中選擇跳數(shù)最少的,預(yù)期逗留在首段保護(hù)區(qū)間內(nèi)最久的車(chē)輛作為首輛轉(zhuǎn)發(fā)車(chē),并根據(jù)其最佳下一跳,遞歸生成轉(zhuǎn)發(fā)鏈,直到下一跳為空。
其中TestResult(x)函數(shù)返回在當(dāng)前控制路段內(nèi)是否存在一條能維持x時(shí)間以上的轉(zhuǎn)發(fā)鏈。該函數(shù)在運(yùn)行時(shí)會(huì)重置并更新控制器車(chē)輛信息表中各輛車(chē)的下一跳ID(next_id)以及最小跳數(shù)(minhop)。即使用該函既作為判定函數(shù),也作為實(shí)際的尋路方法(method)。TestResult(x)使用動(dòng)態(tài)規(guī)劃計(jì)算車(chē)輛的next_id及minhop,最后根據(jù)首保護(hù)區(qū)間內(nèi)是否有車(chē)的next_id不為空而判斷當(dāng)前控制路段內(nèi)是否存在一條能維持x時(shí)間以上的轉(zhuǎn)發(fā)鏈。
動(dòng)態(tài)規(guī)劃的轉(zhuǎn)移方程如(1)所示,di,dj分別是兩輛車(chē)在控制路段的距離。當(dāng)兩輛車(chē)i,j有關(guān)系CHL(i,j,x)時(shí),車(chē)i的下一跳設(shè)為j,且minhopi=minhopj+1。循環(huán)中,di<di+1。
vi、vj為車(chē)i、車(chē)j在當(dāng)前控制路段的速度,di、dj為車(chē)i、車(chē)j在當(dāng)前控制路段的距離。當(dāng)車(chē)i、車(chē)j與時(shí)間x滿足以下關(guān)系時(shí),我們認(rèn)為車(chē)i和j之間有CHL關(guān)系:
(1)dj-di<signal_range//當(dāng)前車(chē)i與車(chē)j能通訊;
(2)di+vi*x<road_legth//x秒后車(chē)i仍在當(dāng)前控制路段;
(3)dj+vj*x<road_legth//x秒后車(chē)j仍在當(dāng)前控制路段;
(4)|di+vi*x-dj+vj*x|<signal_range//x秒后車(chē)i與車(chē)j能通訊;
(5)minhopj+1<minhopi//使用車(chē)j作為下一跳點(diǎn)網(wǎng)絡(luò)距離更近
在具體的實(shí)施過(guò)程中,所述數(shù)據(jù)包通過(guò)SCH信道以廣播的形式發(fā)往轉(zhuǎn)發(fā)車(chē),轉(zhuǎn)發(fā)車(chē)接收到數(shù)據(jù)包后進(jìn)行一系列的判斷決定是否要轉(zhuǎn)發(fā)該數(shù)據(jù)包:
(1)該數(shù)據(jù)包是否為廣播包;
(2)該數(shù)據(jù)包是否是從SCH接口上接收到的;
(3)該數(shù)據(jù)包的TTL是否大于0;
(4)該數(shù)據(jù)包的發(fā)送者是否不在不轉(zhuǎn)發(fā)表上;
(5)轉(zhuǎn)發(fā)車(chē)是否仍在控制器的控制路段內(nèi);
僅當(dāng)以上條件為全真時(shí),轉(zhuǎn)發(fā)車(chē)才會(huì)對(duì)數(shù)據(jù)包進(jìn)行轉(zhuǎn)發(fā)。
在具體的實(shí)施過(guò)程中,所述轉(zhuǎn)發(fā)車(chē)在轉(zhuǎn)發(fā)數(shù)據(jù)包前先進(jìn)行以下操作:
(1)減少數(shù)據(jù)包的TTL;
(2)把數(shù)據(jù)包的Source IP修改為自身SCH接口的ip;
當(dāng)TTL>0時(shí),轉(zhuǎn)發(fā)數(shù)據(jù)包。
在具體的實(shí)施過(guò)程中,所述控制器與車(chē)輛之間通過(guò)四種通訊包進(jìn)行通訊:
HelloMessage:車(chē)輛往控制器發(fā)送的數(shù)據(jù)包,包含了車(chē)輛的ip、車(chē)輛的位置、車(chē)輛的速度三項(xiàng)信息;
AckHelloMessage:控制器回復(fù)車(chē)輛HelloMessage的信息,除了包含HelloMessage的所有信息外,還包含該控制器控制路段的lc_start和lc_end信息;
AppointmentMessage:控制器發(fā)送給車(chē)輛的“欽點(diǎn)”信息,指示車(chē)輛在路段中擔(dān)當(dāng)?shù)慕巧恨D(zhuǎn)發(fā)車(chē)或者普通車(chē);
DontForwardMessage:控制器發(fā)給轉(zhuǎn)發(fā)車(chē)的信息,里面包含一張不轉(zhuǎn)發(fā)表,轉(zhuǎn)發(fā)車(chē)將不轉(zhuǎn)發(fā)列在不轉(zhuǎn)發(fā)表上的車(chē)輛發(fā)來(lái)的所有信息。
控制器之間的通訊包則為L(zhǎng)C2LC,其中包含一張列表,標(biāo)識(shí)著發(fā)送控制器的控制路段中選出來(lái)的所有轉(zhuǎn)發(fā)車(chē)。
在具體的實(shí)施過(guò)程中,所述車(chē)輛未進(jìn)入控制路段,或者車(chē)輛離開(kāi)上一個(gè)控制路段后,車(chē)輛將會(huì)周期性發(fā)送HelloMessage,直至收到AckHelloMessage;
控制器收到HelloMessage后,首先根據(jù)HelloMessage中的位置信息判斷發(fā)送HelloMessage的車(chē)輛是否在該控制器的控制路段內(nèi),若否則靜默丟棄,若在則將該車(chē)輛的信息加入其內(nèi)部設(shè)置的車(chē)輛信息表,并將HelloMessage的信息以及控制器控制路段的lc_start和lc_end信息填入AckHelloMessage,發(fā)送給該車(chē)輛;
車(chē)輛收到AckHelloMessage后把當(dāng)中的所有信息保存,然后周期性地將當(dāng)前位置信息與AckHelloMessage中的位置信息進(jìn)行對(duì)比,當(dāng)車(chē)輛當(dāng)前位置與AckHelloMessage中的位置按照車(chē)輛速度、時(shí)間預(yù)測(cè)得出的位置有10%以上的差別時(shí),車(chē)輛重新向發(fā)送控制器HelloMessage,對(duì)控制器中的信息進(jìn)行更新。
在具體的實(shí)施過(guò)程中,設(shè)轉(zhuǎn)發(fā)鏈的維持時(shí)間為x,則x時(shí)間后,通過(guò)二分搜索算法重新選取轉(zhuǎn)發(fā)車(chē)形成新的轉(zhuǎn)發(fā)鏈。
顯然,本發(fā)明的上述實(shí)施例僅僅是為清楚地說(shuō)明本發(fā)明所作的舉例,而并非是對(duì)本發(fā)明的實(shí)施方式的限定。對(duì)于所屬領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在上述說(shuō)明的基礎(chǔ)上還可以做出其它不同形式的變化或變動(dòng)。這里無(wú)需也無(wú)法對(duì)所有的實(shí)施方式予以窮舉。凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明權(quán)利要求的保護(hù)范圍之內(nèi)。