本發(fā)明屬于無線通信技術領域,特別涉及一種實現(xiàn)自組網擁塞控制的方法,可用于Ad Hoc網絡。
背景技術:
Ad Hoc網絡是一種由若干無線數據傳輸設備臨時組成的、不需要固定通信設施支持的無中心網絡。網絡節(jié)點既是通信終端,又可以作為路由器為其他節(jié)點轉發(fā)數據。
近年來,各國學者圍繞Ad Hoc網絡中的擁塞控制開展了積極的研究,提出了若干種方法。最常見的方法是TCP協(xié)議中的擁塞控制方法,它的擁塞控制主要依賴于擁塞窗口cwd,窗口值的大小代表能夠一次性發(fā)送出去的字節(jié)數,顯然窗口越大,數據發(fā)送的速度也就越快,但是也有可能使得網絡出現(xiàn)擁塞,所以TCP中采用了慢啟動、擁塞避免、加速遞減和快速重傳等技術來動態(tài)調整擁塞窗口的大小。然而TCP協(xié)議在Ad Hoc網絡中的性能遠不如它在傳統(tǒng)的有線網絡中的性能,這主要是由于Ad Hoc網絡和有線網絡的特性差異。例如,在Ad Hoc網絡中,傳輸媒介是局部共享的。另外,TCP協(xié)議判斷網絡擁塞的依據是報文丟失,而在Ad Hoc網絡中報文的丟失原因不僅僅是網絡擁塞,還有鏈路中斷、路由頻繁變化等原因。主動隊列管理AQM也是一種常見的擁塞控制方法,它是一種預見式的隊列管理方法,該方法對網絡的狀態(tài)進行評價,從而預測是否將要出現(xiàn)擁塞的狀況。當預測到路由器將要發(fā)生擁塞時,在路由器的隊列還沒有充滿時就按照一定的規(guī)則丟棄數據包并向發(fā)送端通告擁塞情況,以降低發(fā)送端的傳輸速率。但是,在目前的AQM機制中為了簡化設計通常忽略了系統(tǒng)中的延遲環(huán)節(jié),在延遲比較小的情況下,忽略延遲對系統(tǒng)性能的影響較小;然而在延遲比較大的情況下,忽略延遲往往會導致系統(tǒng)不穩(wěn)定。經過大量仿真實驗結果表明,幾種典型的AQM算法在延遲較大的情況下存在以下缺點,首先是隊列大幅震蕩,增加了端到端的延時抖動,其次是鏈路利用率低,網絡吞吐量大幅降低,最后是隊列長度不能收斂,節(jié)點出現(xiàn)大量丟包的情況。
技術實現(xiàn)要素:
本發(fā)明的目的在于針對上述現(xiàn)有技術的不足,提出了一種基于多路徑路由協(xié)議實現(xiàn)自組網擁塞控制的方法,以提高網絡吞吐量,降低節(jié)點丟包率。
實現(xiàn)本發(fā)明目的的技術方案是:通過對節(jié)點擁塞情況的檢測,根據不同的擁塞原因采取不同的緩解手段,其具體步驟包括如下:
(1)網絡中的每個節(jié)點將它的鄰居節(jié)點記為ni,i=1,2,3,.....K,其中K表示鄰居節(jié)點的個數,并等待一個擁塞周期T,統(tǒng)計該周期內本節(jié)點發(fā)送給每個鄰居節(jié)點ni的數據分組數和本節(jié)點從每個鄰居節(jié)點ni接收的數據分組數
(2)網絡中的每個節(jié)點根據本節(jié)點緩存隊列的長度,判斷是否擁塞,若是,將本節(jié)點記為“擁塞節(jié)點”,執(zhí)行步驟(4),否則,將本節(jié)點記為“非擁塞節(jié)點”,執(zhí)行步驟(3);
(3)非擁塞節(jié)點關閉緩存隊列隨機丟包機制,返回步驟(1);
(4)擁塞節(jié)點判斷是否已經開啟了緩存隊列隨機丟包機制,若是,則返回步驟(1),否則,執(zhí)行步驟(5);
(5)分析擁塞節(jié)點的擁塞原因:
(5a)令初始參數i=1;
(5b)判斷擁塞節(jié)點到它的鄰居節(jié)點ni的鏈路是否是一條低速鏈路,若是,則執(zhí)行步驟(5c),否則,執(zhí)行步驟(5f);
(5c)假設網絡中的數據分組大小為D比特,且每個分組大小一致,計算擁塞節(jié)點到鄰居節(jié)點ni的平均傳輸時延和擁塞節(jié)點到它的其它鄰居節(jié)點nj的平均傳輸時延
其中為擁塞節(jié)點到它的鄰居節(jié)點ni這條鏈路的傳輸速率,j不等于i,為擁塞節(jié)點到它的鄰居節(jié)點nj這條鏈路的傳輸速率,為擁塞節(jié)點發(fā)送給它的鄰居節(jié)點nj的數據分組數;
(5d)計算擁塞節(jié)點的假設隊列長度qa:
qa=q-EN
其中q為擁塞節(jié)點當前緩存隊列的實際長度,EN為在該周期內擁塞節(jié)點額外多傳輸的數據分組數,為擁塞節(jié)點發(fā)送給它的鄰居節(jié)點ni的數據分組數,N為和這兩個平均傳輸時延的比值,
(5e)假設擁塞節(jié)點緩存隊列長度為qa,判斷擁塞節(jié)點是否不再擁塞,若是,則擁塞的原因是使用了擁塞節(jié)點到鄰居節(jié)點ni這條低速鏈路所致,執(zhí)行步驟(6),否則,執(zhí)行步驟(5f);
(5f)判斷初始參數i是否大于鄰居節(jié)點的個數K,若是,則擁塞的原因是由于擁塞節(jié)點的總流量過大所致,執(zhí)行步驟(7),否則,令i=i+1,返回步驟(5b);
(6)擁塞節(jié)點將步驟(5e)中的鄰居節(jié)點ni記為低速節(jié)點,通過抑制低速鏈路的手段緩解由擁塞節(jié)點到低速節(jié)點這條鏈路引起的擁塞,返回步驟(1);
(7)擁塞節(jié)點通過流量調度或隨機丟包的手段緩解由擁塞節(jié)點總流量過大引起的擁塞。
本發(fā)明與現(xiàn)有技術相比較具有如下優(yōu)點:
1.相較于基于路由器支持的主動隊列管理AQM,本發(fā)明通過分析擁塞發(fā)生的原因,采用了抑制低速鏈路的手段緩解由擁塞節(jié)點到低速節(jié)點這條鏈路引起的擁塞,避免了傳統(tǒng)路由協(xié)議的盲目性,提高了自組網路由協(xié)議的效率。
2.本發(fā)明通過分析擁塞發(fā)生的原因,采用了流量調度或隨機丟包的手段緩解由擁塞節(jié)點總流量過大引起的擁塞,避免了AQM方法的單純丟包和在系統(tǒng)時延較大情況下的弊端,使擁塞的緩解更具針對性和高效性。
附圖說明
圖1是本發(fā)明的實現(xiàn)總流程圖;
圖2是本發(fā)明中擁塞節(jié)點通過抑制低速鏈路緩解鏈路引起的擁塞的子流程圖;
圖3是本發(fā)明中擁塞節(jié)點通過流量調度或隨機丟包緩解流量過大引起的擁塞的子流程圖;
圖4是本發(fā)明中分流節(jié)點尋找有效替換路由的子流程圖;
圖5是本發(fā)明的使用場景示意圖;
具體實施方式
下面結合附圖和實施例對本發(fā)明內容做詳細敘述,本實施例以本發(fā)明技術方案為前提下進行實施,給出了詳細實施方式和操作過程,但本發(fā)明的保護范圍不限于下面的實施例。
參照圖5,本發(fā)明使用的網絡場景為Ad Hoc自組織網絡。節(jié)點的網絡層采用多路徑表驅動協(xié)議,MAC層采用TDMA協(xié)議,擁塞節(jié)點是根據本節(jié)點緩存隊列長度判斷為擁塞狀態(tài)的節(jié)點,分流節(jié)點是擁塞節(jié)點選出來進行流量調度的節(jié)點,接入節(jié)點是分流節(jié)點主路由上的第三跳節(jié)點,分流族節(jié)點是主路由經過分流節(jié)點到擁塞節(jié)點這條鏈路的節(jié)點。
參照附圖1,本發(fā)明的實現(xiàn)步驟如下:
步驟1、網絡中每個節(jié)點周期性的統(tǒng)計數據。
網絡中的每個節(jié)點將它的鄰居節(jié)點記為ni,i=1,2,3,.....K,其中K表示鄰居節(jié)點的個數,并等待一個擁塞周期T,統(tǒng)計該周期內本節(jié)點發(fā)送給每個鄰居節(jié)點ni的數據分組數和本節(jié)點從每個鄰居節(jié)點ni接收的數據分組數。
步驟2、網絡中的每個節(jié)點根據本節(jié)點緩存隊列的長度,判斷是否擁塞。
(2a)計算緩存隊列中緩存的數據包數q和緩存大小Q的比值:再根據r值大小,分為以下三種情況判斷:
當r≤η1時,本節(jié)點正常,判定為非擁塞狀態(tài),執(zhí)行步驟3;
當η1<r≤η2時,本節(jié)點可能會發(fā)生擁塞,需要進一步判斷,執(zhí)行步驟(2b);
當η2<r時,本節(jié)點緩存的分組已經過多,判定為擁塞狀態(tài),執(zhí)行步驟4;
(2b)節(jié)點計算分組的輸入速率λ和分組的輸出速率μ:
其中為本節(jié)點從每個鄰居節(jié)點ni接收的數據分組數,K為本節(jié)點鄰居節(jié)點個數,T為擁塞周期,Ts為分組的平均服務時間,分組的服務時間指從分組處于緩存隊列頭部開始到分組被發(fā)送為止的時間;
(2c)計算分組的輸入速率λ與分組的輸出速率μ之比:再根據ρ值大小,分為以下兩種情況判斷:
當ρ≤1時,本節(jié)點正常,判定為非擁塞狀態(tài),執(zhí)行步驟3;
當ρ>1時,本節(jié)點的分組會進一步增多,判定為擁塞狀態(tài),執(zhí)行步驟4。
步驟3、非擁塞節(jié)點關閉緩存隊列隨機丟包機制。
緩存隊列隨機丟包機制開啟后,就以某概率P隨機丟棄要輸入緩存隊列的數據分組,通過丟棄數據分組來向發(fā)送端發(fā)出擁塞通告,收到擁塞通告的發(fā)送端降低數據分組傳輸速率,避免隊列滿載溢出,對擁塞狀態(tài)進行緩解,再返回步驟1。
步驟4、擁塞節(jié)點判斷是否已經開啟了緩存隊列隨機丟包機制,若是,則返回步驟1,否則,執(zhí)行步驟5;
步驟5、分析擁塞節(jié)點的擁塞原因。
(5a)令初始參數i=1;
(5b)判斷擁塞節(jié)點到它的鄰居節(jié)點ni的鏈路是否是一條低速鏈路,若是,則執(zhí)行步驟(5c),否則,執(zhí)行步驟(5f);
(5c)假設網絡中的數據分組大小為D比特,且每個分組大小一致,計算擁塞節(jié)點到鄰居節(jié)點ni的平均傳輸時延和擁塞節(jié)點到它的其它鄰居節(jié)點nj的平均傳輸時延
其中為擁塞節(jié)點到它的鄰居節(jié)點ni這條鏈路的傳輸速率,j不等于i,為擁塞節(jié)點到它的鄰居節(jié)點nj這條鏈路的傳輸速率,為擁塞節(jié)點發(fā)送給它的鄰居節(jié)點nj的數據分組數;
(5d)計算擁塞節(jié)點的假設隊列長度qa:
qa=q-EN
其中q為擁塞節(jié)點當前緩存隊列的實際長度,EN為在該周期內擁塞節(jié)點額外多傳輸的數據分組數,為擁塞節(jié)點發(fā)送給它的鄰居節(jié)點ni的數據分組數,N為和這兩個平均傳輸時延的比值,
(5e)假設擁塞節(jié)點緩存隊列長度為qa,判斷擁塞節(jié)點是否不再擁塞,若是,則擁塞的原因是使用了擁塞節(jié)點到鄰居節(jié)點ni這條低速鏈路所致,執(zhí)行步驟6,否則,執(zhí)行步驟(5f);
(5f)判斷初始參數i是否大于鄰居節(jié)點的個數K,若是,則擁塞的原因是由于擁塞節(jié)點的總流量過大所致,執(zhí)行步驟7,否則,令i=i+1,返回步驟(5b);
步驟6、擁塞節(jié)點將步驟(5e)中的鄰居節(jié)點ni記為低速節(jié)點,通過抑制低速鏈路的手段緩解由擁塞節(jié)點到低速節(jié)點這條鏈路引起的擁塞。
參照圖2,本步驟的具體實現(xiàn)如下:
(6a)令初始參數i=1,M等于擁塞節(jié)點路由表中路由項目條數;
(6b)檢查擁塞節(jié)點的第i條路由項目的主路由,判斷該主路由的下一跳節(jié)點是否為低速節(jié)點,若是,則執(zhí)行步驟(6c),否則,執(zhí)行步驟(6i);
(6c)在第i條路由項目上,記錄該低速節(jié)點;
(6d)判斷第i條路由項目的次路由是否存在,若是,則執(zhí)行步驟(6e),否則,執(zhí)行步驟(6h);
(6e)判斷上述次路由中,擁塞節(jié)點到下一跳節(jié)點的鏈路是否是一條低速鏈路,若是,則執(zhí)行步驟(6f),否則,執(zhí)行步驟(6g);
(6f)將步驟(6e)中的下一跳節(jié)點也記為低速節(jié)點,記錄在第i條路由項目上,執(zhí)行步驟(6h);
(6g)用第i條路由項目的次路由覆蓋主路由,執(zhí)行步驟(6i);
(6h)清空第i條路由項目,待下次有數據分組查看該路由項時,直接丟棄數據分組,執(zhí)行步驟(6i);
(6i)判斷初始參數i是否大于等于擁塞節(jié)點路由表中路由項目條數M,若是,則執(zhí)行步驟(6j),否則,令i=i+1,返回步驟(6b);
(6j)擁塞節(jié)點再等待下一個擁塞周期T,并統(tǒng)計本節(jié)點發(fā)送給每個鄰居節(jié)點ni的數據分組數和本節(jié)點從每個鄰居節(jié)點ni接收的數據分組數且在該擁塞周期T內,不使用低速節(jié)點發(fā)送的路由消息更新本節(jié)點路由表中記錄了低速節(jié)點的路由項目;
(6k)根據擁塞節(jié)點緩存隊列的長度,判斷是否擁塞,若是,則執(zhí)行步驟(6l),否則,執(zhí)行步驟(6m);
(6l)擁塞節(jié)點開啟隊列隨機丟包機制,執(zhí)行步驟(6n);
(6m)判斷擁塞節(jié)點到低速節(jié)點的鏈路是否仍是一條低速鏈路,若是,則返回步驟(6j),否則,執(zhí)行步驟(6n);
(6n)擁塞節(jié)點刪除記錄的低速節(jié)點,且在下一個擁塞周期T內使用低速節(jié)點發(fā)送的路由信息正常更新本節(jié)點的路由表,返回步驟1。
步驟7、擁塞節(jié)點通過流量調度或隨機丟包的手段緩解由擁塞節(jié)點總流量過大引起的擁塞。
參照圖3,本步驟采用但不限于用流量調度手段對由擁塞節(jié)點總流量過大引起的擁塞,具體實現(xiàn)如下:
(7a)擁塞節(jié)點計算應卸載的輸入速率:f=λ-μ,其中λ為分組輸入速率,μ為分組輸出速率,再根據f值的大小,分以下兩種情況進行處理:
當f≤0時,擁塞節(jié)點的擁塞情況會好轉,返回步驟1;
當f>0時,擁塞節(jié)點應該卸載一部分流量,執(zhí)行步驟(7b);
(7b)擁塞節(jié)點計算它的每個鄰居節(jié)點ni的分組輸入速率:i=1,2,3,.....K,K為鄰居節(jié)點的個數,為本節(jié)點從每個鄰居節(jié)點ni接收的數據分組數,T為擁塞周期;
(7c)擁塞節(jié)點判斷是否存在一個鄰居節(jié)點的分組輸入速率λi大于等于應卸載的輸入速率f,若是,則執(zhí)行步驟(7e),否則,執(zhí)行步驟(7d);
(7d)擁塞節(jié)點開啟隊列隨機丟包機制,返回步驟1;
(7e)擁塞節(jié)點將所有鄰居節(jié)點按分組輸入速率λi從小到大排列,依次檢查所有鄰居節(jié)點,直到找到一個鄰居節(jié)點的分組輸入速率λi大于等于應卸載的輸入速率f,并將該鄰居節(jié)點記為分流節(jié)點;
(7f)擁塞節(jié)點記錄分流節(jié)點,并給分流節(jié)點發(fā)送擁塞信息,分流節(jié)點收到擁塞信息后,查找一些繞過擁塞節(jié)點的可用路由替換原來經過擁塞節(jié)點的路由;
參照圖4,查找一些繞過擁塞節(jié)點的可用路由替換原來經過擁塞節(jié)點的路由,其具體實現(xiàn)如下:
(7f1)令初始參數i=1,M等于分流節(jié)點路由表中路由項目條數;
(7f2)分流節(jié)點檢查第i條路由項目的主路由,判斷該路由的下一跳節(jié)點是否為擁塞節(jié)點,并判斷目的節(jié)點是否不是該擁塞節(jié)點,若兩者都滿足,則執(zhí)行步驟(7f3),否則,執(zhí)行步驟(7f11);
(7f3)分流節(jié)點在第i條路由項目上記錄擁塞節(jié)點,該路由項目不再使用含有擁塞節(jié)點的路由進行更新;
(7f4)判斷第i條路由項目的次路由是否存在,若是,則執(zhí)行步驟(7f5),否則,執(zhí)行步驟(7f6);
(7f5)分流節(jié)點用第i條路由項目的次路由覆蓋主路由,執(zhí)行步驟(7f11);
(7f6)分流節(jié)點將主路由上的第三跳節(jié)點記為接入節(jié)點;
(7f7)分流節(jié)點判斷是否存在到接入節(jié)點的有效路由,即不經過擁塞節(jié)點的路由,若是,則執(zhí)行步驟(7f8),否則,執(zhí)行步驟(7f9);
(7f8)分流節(jié)點把主路由和步驟(7f8)或步驟(7f9)中的有效路由拼接成新的主路由,并覆蓋第i條路由項目的主路由,執(zhí)行步驟(7f11);
(7f9)分流節(jié)點判斷是否能通過按需式路由查找方法找到一條到接入節(jié)點的有效路由,若是,則執(zhí)行步驟(7f8),否則,執(zhí)行步驟(7f10);
所述按需式路由查找方法,其實現(xiàn)步驟如下:
§1.源節(jié)點廣播一個路由請求分組RREQ,內容包括目的節(jié)點、源節(jié)點、中間節(jié)點列表和路由請求分組ID號,并初始化一個路由查找定時器RT,執(zhí)行步驟§2;
§2.源節(jié)點判斷是否收到路由應答分組RREP,若是,則查找到了一條有效路由,即中間節(jié)點列表,否則,執(zhí)行步驟§3;
§3.源節(jié)點等待一秒后,將路由查找定時器RT數值減一,并判斷路由查找定時器RT是否小于零,若是,則無法找到一條有效路由,否則,返回步驟§2;
§4.中間節(jié)點收到路由請求分組RREQ,根據路由請求分組ID號判斷本節(jié)點是否收到過路由請求分組RREQ,若是,則直接丟棄分組,否則,執(zhí)行步驟§5;
§5.中間節(jié)點判斷路由請求分組RREQ中的中間節(jié)點表是否包含本節(jié)點,若是,則直接丟棄分組,否則,執(zhí)行步驟§6;
§6.中間節(jié)點判斷路由請求分組RREQ的目的節(jié)點是否為本節(jié)點或本節(jié)點是否有到目的節(jié)點的路由,若是,則執(zhí)行步驟§8,否則,執(zhí)行步驟§7;
§7.中間節(jié)點把本節(jié)點填入路由請求分組RREQ的中間節(jié)點列表,并轉發(fā)該路由請求分組RREQ;
§8.中間節(jié)點構造路由應答分組RREP,并反轉路由請求分組RREQ中的中間節(jié)點列表作為路由應答分組RREP返回源節(jié)點的路徑;
(7f10)分流節(jié)點清空第i條路由項目,待下次有數據分組查看該路由項時,直接丟棄數據分組;
(7f11)判斷初始參數i是否大于等于分流節(jié)點路由表中路由項目條數M,若是,則執(zhí)行步驟(7f12),否則,令i=i+1,并執(zhí)行步驟(7f2);
(7f12)分流節(jié)點向鄰居節(jié)點發(fā)送步驟(7f8)中的路由項目;
(7g)擁塞節(jié)點等待下一個擁塞周期T,并統(tǒng)計該周期內本節(jié)點發(fā)送給每個鄰居節(jié)點ni的數據分組數和本節(jié)點從每個鄰居節(jié)點ni接收的數據分組數
(7h)根據擁塞節(jié)點緩存隊列的長度,判斷是否擁塞,若是,則執(zhí)行步驟(7i),否則,執(zhí)行步驟(7j);
(7i)擁塞節(jié)點開啟隊列隨機丟包機制,執(zhí)行步驟(7k);
(7j)判斷擁塞節(jié)點的分組輸入速率λ與分流節(jié)點的輸入速率λi之和是否小于等于擁塞節(jié)點的輸出速率μ,若是,則執(zhí)行步驟(7k),否則,返回步驟(7g);
(7k)擁塞節(jié)點刪除記錄的分流節(jié)點,并給它發(fā)送撤銷擁塞信息,返回步驟1。
本發(fā)明通過的上述步驟,對于目的節(jié)點G,分流節(jié)點D和分流族節(jié)點E的數據分組不再經過擁塞節(jié)點A,而是經過一條按需式路由查找方法發(fā)現(xiàn)的新路由,該新路由依次為分流節(jié)點D到節(jié)點J到節(jié)點K到節(jié)點L到接入節(jié)點I到目的節(jié)點G,即D-J-K-L-I-G,從而到達了分流的效果。