1.一種軟件定義車載網(wǎng)絡(luò)系統(tǒng),其特征在于:包括設(shè)置在各個(gè)路段上的用于管轄相應(yīng)路段的控制器,所述各個(gè)控制器之間能夠進(jìn)行通信;所述每個(gè)控制器通過二分搜索算法從運(yùn)行在其控制路段的車輛中選取轉(zhuǎn)發(fā)車,以形成一條維持時(shí)間最長、信號(hào)覆蓋整個(gè)路段的轉(zhuǎn)發(fā)鏈,轉(zhuǎn)發(fā)鏈上的轉(zhuǎn)發(fā)車接收到數(shù)據(jù)包后,將數(shù)據(jù)包向前轉(zhuǎn)發(fā)。
2.根據(jù)權(quán)利要求1所述的軟件定義車載網(wǎng)絡(luò)系統(tǒng),其特征在于:每個(gè)控制器的控制路段通過lc_start和lc_end兩個(gè)二維向量表示,lc_start表示控制路段起點(diǎn)處左側(cè)和或右側(cè)上的一點(diǎn),lc_end表示控制路段結(jié)束處與lc_start對(duì)角的一點(diǎn);設(shè)車輛的通信半徑為signal_range,控制路段的首段和尾段分別設(shè)置有長度為signal_range一半的保護(hù)區(qū)間;選取轉(zhuǎn)發(fā)車形成轉(zhuǎn)發(fā)鏈時(shí),首段和尾段的保護(hù)區(qū)間內(nèi)均包含有有轉(zhuǎn)發(fā)車。
3.根據(jù)權(quán)利要求2所述的軟件定義車載網(wǎng)絡(luò)系統(tǒng),其特征在于:所述二分搜索算法選取轉(zhuǎn)發(fā)車的具體過程如下:
(1)初始化上下限
算法的下限為0,表示不能建立任何的鏈接,算法的上限由在首段保護(hù)區(qū)間內(nèi)預(yù)期逗留最久的車輛在首段保護(hù)區(qū)間的逗留時(shí)間確定;
(2)進(jìn)行二分查找
根據(jù)上下限,計(jì)算中值mid,調(diào)用函數(shù)TestResult(mid)測(cè)試是否能找出在中值要求的時(shí)間內(nèi)都能維持的鏈接,如果能,則更新中值為下限,再次根據(jù)上下限計(jì)算中值;以上過程循環(huán)計(jì)算,直到上下限均小于預(yù)先設(shè)定的閾值,此時(shí)結(jié)束二分查找;
(3)根據(jù)結(jié)果選擇轉(zhuǎn)發(fā)車
經(jīng)過步驟(2)的計(jì)算后,如果下限仍為0,說明算法無法找到任何的鏈接,返回空的轉(zhuǎn)發(fā)鏈;如果下限不為0,則說明存在鏈接,調(diào)用函數(shù)TestResult(lowerbound)計(jì)算轉(zhuǎn)發(fā)信息,然后從首保護(hù)區(qū)間中選擇跳數(shù)最少的,預(yù)期逗留在首段保護(hù)區(qū)間內(nèi)最久的車輛作為首輛轉(zhuǎn)發(fā)車,并根據(jù)其最佳下一跳,遞歸生成轉(zhuǎn)發(fā)鏈,直到下一跳為空。
4.根據(jù)權(quán)利要求3所述的軟件定義車載網(wǎng)絡(luò)系統(tǒng),其特征在于:設(shè)車i為第i輛選中的轉(zhuǎn)發(fā)車,若車j滿足以下關(guān)系,則將車j選為車i的下一跳:
(1)dj-di<signal_range//當(dāng)前車i與車j能通訊;
(2)di+vi*x<road_legth//x秒后車i仍在當(dāng)前控制路段;
(3)dj+vj*x<road_legth//x秒后車j仍在當(dāng)前控制路段;
(4)|di+vi*x-dj+vj*x|<signal_range//x秒后車i與車j能通訊;
(5)minhopj+1<minhopi//使用車j作為下一跳點(diǎn)網(wǎng)絡(luò)距離更近;
其中dj、di表示車i、車j之間的位置,vi、vj表示車i、車j的速度,road_legth表示控制路段的長度,由lc_start和lc_end的歐幾里得距離表示。
5.根據(jù)權(quán)利要求1所述的軟件定義車載網(wǎng)絡(luò)系統(tǒng),其特征在于:所述數(shù)據(jù)包通過SCH信道以廣播的形式發(fā)往轉(zhuǎn)發(fā)車,轉(zhuǎn)發(fā)車接收到數(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ā)車是否仍在控制器的控制路段內(nèi);
僅當(dāng)以上條件為全真時(shí),轉(zhuǎn)發(fā)車才會(huì)對(duì)數(shù)據(jù)包進(jìn)行轉(zhuǎn)發(fā)。
6.根據(jù)權(quán)利要求5所述的軟件定義車載網(wǎng)絡(luò)系統(tǒng),其特征在于:所述轉(zhuǎn)發(fā)車在轉(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ù)包。
7.根據(jù)權(quán)利要求5所述的軟件定義車載網(wǎng)絡(luò)系統(tǒng),其特征在于:所述控制器與車輛之間通過四種通訊包進(jìn)行通訊:
HelloMessage:車輛往控制器發(fā)送的數(shù)據(jù)包,包含了車輛的ip、車輛的位置、車輛的速度三項(xiàng)信息;
AckHelloMessage:控制器回復(fù)車輛HelloMessage的信息,除了包含HelloMessage的所有信息外,還包含該控制器控制路段的lc_start和lc_end信息;
AppointmentMessage:控制器發(fā)送給車輛的“欽點(diǎn)”信息,指示車輛在路段中擔(dān)當(dāng)?shù)慕巧恨D(zhuǎn)發(fā)車或者普通車;
DontForwardMessage:控制器發(fā)給轉(zhuǎn)發(fā)車的信息,里面包含一張不轉(zhuǎn)發(fā)表,轉(zhuǎn)發(fā)車將不轉(zhuǎn)發(fā)列在不轉(zhuǎn)發(fā)表上的車輛發(fā)來的所有信息。
8.根據(jù)權(quán)利要求6所述的軟件定義車載網(wǎng)絡(luò)系統(tǒng),其特征在于:所述車輛未進(jìn)入控制路段,或者車輛離開上一個(gè)控制路段后,車輛將會(huì)周期性發(fā)送HelloMessage,直至收到AckHelloMessage;
控制器收到HelloMessage后,首先根據(jù)HelloMessage中的位置信息判斷發(fā)送HelloMessage的車輛是否在該控制器的控制路段內(nèi),若否則靜默丟棄,若在則將該車輛的信息加入其內(nèi)部設(shè)置的車輛信息表,并將HelloMessage的信息以及控制器控制路段的lc_start和lc_end信息填入AckHelloMessage,發(fā)送給該車輛;
車輛收到AckHelloMessage后把當(dāng)中的所有信息保存,然后周期性地將當(dāng)前位置信息與AckHelloMessage中的位置信息進(jìn)行對(duì)比,當(dāng)車輛當(dāng)前位置與AckHelloMessage中的位置按照車輛速度、時(shí)間預(yù)測(cè)得出的位置有10%以上的差別時(shí),車輛重新向發(fā)送控制器HelloMessage,對(duì)控制器中的信息進(jìn)行更新。
9.根據(jù)權(quán)利要求1~8任一項(xiàng)所述的軟件定義車載網(wǎng)絡(luò)系統(tǒng),其特征在于:設(shè)轉(zhuǎn)發(fā)鏈的維持時(shí)間為x,則x時(shí)間后,通過二分搜索算法重新選取轉(zhuǎn)發(fā)車形成新的轉(zhuǎn)發(fā)鏈。