本發(fā)明涉及通信技術領域,尤其涉及一種路由器請求消息的發(fā)送方法及裝置。
背景技術:
鄰居發(fā)現(xiàn)協(xié)議是ipv6協(xié)議(internetprotocolversion6,互聯(lián)網(wǎng)協(xié)議版本六)的一個基本的組成部分,它實現(xiàn)了在ipv4中的地址解析協(xié)議(arp)、控制報文協(xié)議(icmp)中的路由器發(fā)現(xiàn)部分、重定向協(xié)議的所有功能,并具有鄰居不可達檢測機制。但是,在鄰居發(fā)現(xiàn)協(xié)議中并沒有針對路由器請求消息的丟包情況提供相應的處理方法,因此在某些網(wǎng)絡應用場景中,協(xié)議存在相應的先天缺陷。比如一個連接在以太網(wǎng)上被橋接的家用網(wǎng)關,當wan(wideareanetwork,廣域網(wǎng))口還沒被激活時,在重發(fā)初始路由器請求消息后,主機就會放棄發(fā)送消息。
根據(jù)鄰居發(fā)現(xiàn)協(xié)議規(guī)定,當一個主機的接口被系統(tǒng)初始化時,為了快速的獲取到路由器通告(routeradvertisement)消息,主機會至多發(fā)送3次路由器請求(routersolicitation)消息,且每次發(fā)送的時間至少相隔4秒。一旦初始的路由器請求消息被全部丟棄,主機就不能進行網(wǎng)絡連接。假設被發(fā)送的相鄰兩個路由器通告消息的時間間隔最大為1800秒,那么如果因為路由器請求消息的丟包原因,導致主機在這30分鐘之內(nèi)都沒有任何網(wǎng)絡鏈接。這種延遲可能在任何場景中都不能被接收。
針對上述路由器請求消息丟包的描述,主機需要持續(xù)重發(fā)路由器請求消息直到主機收到路由器通告消息為止,或者直到主機愿意接受沒有路由器存在為止。但是當網(wǎng)絡中存的主機數(shù)量較大的時候,如果大量主機同時重發(fā)路由器請求消息,也可能會產(chǎn)生大量的網(wǎng)絡流量,從而增量網(wǎng)絡的負載。
技術實現(xiàn)要素:
本發(fā)明實施例提供了一種路由器請求消息的發(fā)送方法及裝置,以解決現(xiàn)有技術中因丟包事件而造成的長時間網(wǎng)絡延遲以及因大量主機重新發(fā)送路由器請求消息而增加的網(wǎng)絡負載。
為了解決上述技術問題,本發(fā)明采用如下技術方案:
依據(jù)本發(fā)明實施例的一個方面提供了一種路由器請求消息的發(fā)送方法,所述發(fā)送方法包括:
向路由器發(fā)送路由器請求消息;
在發(fā)送路由器請求消息后的預設時間值內(nèi),若未收到路由器發(fā)送的路由器通告消息,則重新發(fā)送路由器請求消息,直到主機接收到路由器通告消息;其中,相鄰兩次發(fā)送路由器請求消息后的預設時間值不同。
進一步地,
其中,n表示主機發(fā)送路由器請求消息的次數(shù),第一隨機性因子和第二隨機性因子均為分布在[-a,a]區(qū)間內(nèi)的隨機數(shù),且0<a<1;前一預設時間值為主機相鄰兩次發(fā)送路由器請求消息后的兩個預設時間值中,較早時間發(fā)送路由器請求消息后的預設時間值。
進一步地,當所述預設時間值大于預設的最大重發(fā)時間間隔時,
預設時間值=(1+第三隨機性因子)×預設的最大重發(fā)時間間隔值;
其中,第三隨機性因子為分布在[-a,a]區(qū)間內(nèi)的隨機數(shù)。
進一步地,所述向路由器發(fā)送路由器請求消息的步驟之后,所述發(fā)送方法還包括:
若主機發(fā)送路由器請求消息的次數(shù)等于最大發(fā)送計數(shù)或者主機發(fā)送路由器請求消息的持續(xù)時間等于最大發(fā)送時間時,停止向路由器發(fā)送路由器請求消息。
進一步地,所述向路由器發(fā)送路由器請求消息的步驟之后,所述發(fā)送方法還包括:
接收路由器在預設時間值內(nèi)未接收到主機發(fā)送的路由器請求消息而發(fā)送的丟包告警信息。
進一步地,所述丟包告警信息攜帶在路由器向主機發(fā)送的互聯(lián)網(wǎng)控制信息協(xié)議版本六icmpv6報文中的預留字段中。
依據(jù)本發(fā)明實施例的另一個方面提供了一種路由器請求消息的發(fā)送裝置,所述發(fā)送裝置包括:
發(fā)送模塊,用于向路由器發(fā)送路由器請求消息;
重發(fā)模塊,用于在發(fā)送路由器請求消息后的預設時間值內(nèi),當未收到路由器發(fā)送的路由器通告消息時,重新發(fā)送路由器請求消息,直到主機接收到路由器通告消息;其中,相鄰兩次發(fā)送路由器請求消息后的預設時間值不同。
進一步地,
其中,n表示主機發(fā)送路由器請求消息的次數(shù),第一隨機性因子和第二隨機性因子均為分布在[-a,a]區(qū)間內(nèi)的隨機數(shù),且0<a<1;前一預設時間值為主機相鄰兩次發(fā)送路由器請求消息后的兩個預設時間值中,較早時間發(fā)送路由器請求消息后的預設時間值。
進一步地,當所述預設時間值大于預設的最大重發(fā)時間間隔時,
預設時間值=(1+第三隨機性因子)×預設的最大重發(fā)時間間隔值;
其中,第三隨機性因子為分布在[-a,a]區(qū)間內(nèi)的隨機數(shù)。
進一步地,所述發(fā)送裝置還包括:
停發(fā)消息模塊,用于當主機發(fā)送路由器請求消息的次數(shù)等于最大發(fā)送計數(shù)或者主機發(fā)送路由器請求消息的持續(xù)時間等于最大發(fā)送時間時,停止向路由器發(fā)送路由器請求消息。
進一步地,所述發(fā)送裝置還包括:
接收模塊,用于接收路由器在預設時間值內(nèi)未接收到主機發(fā)送的路由器請求消息而發(fā)送的丟包告警信息。
進一步地,所述丟包告警信息攜帶在路由器向主機發(fā)送的互聯(lián)網(wǎng)控制信息協(xié)議版本六icmpv6報文中的預留字段中。
本發(fā)明的有益效果是:
上述方案,主機可持續(xù)重發(fā)路由器請求消息,直到主機接收到路由器通告消息為止,避免了因發(fā)生丟包事件而造成的長時間網(wǎng)絡延遲,同時控制相鄰兩次路由器請求消息發(fā)送的時間間隔,避免大量主機同時發(fā)送路由器請求消息而增加網(wǎng)絡負載。
附圖說明
圖1表示本發(fā)明第一實施例提供的路由器請求消息的發(fā)送方法;
圖2表示本發(fā)明提供的icmpv6報文的結構示意圖;
圖3表示本發(fā)明提供的icmpv6報文的另一結構示意圖;
圖4表示本發(fā)明第二實施例提供的路由器請求消息的發(fā)送裝置框圖。
具體實施方式
下面將參照附圖更詳細地描述本發(fā)明的示例性實施例。雖然附圖中顯示了本發(fā)明的示例性實施例,然而應當理解,可以以各種形式實現(xiàn)本發(fā)明而不應被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本發(fā)明,并且能夠?qū)⒈景l(fā)明的范圍完整的傳達給本領域的技術人員。
第一實施例
本發(fā)明實施例提供了一種路由器請求消息的發(fā)送方法,如圖1所示,該發(fā)送方法包括:
步驟s101、向路由器發(fā)送路由器請求消息。
其中,這里的所述的“向路由器發(fā)送路由器請求消息”,不僅指主機第一次向路由器發(fā)送路由器請求消息,還包括主機因在發(fā)送路由器請求消息后的一定時間內(nèi)未接收到路由器發(fā)送的路由器通告消息而重新向路由器發(fā)送的路由器請求消息。
步驟s102、在發(fā)送路由器請求消息后的預設時間值內(nèi),若未收到路由器發(fā)送的路由器通告消息,則重新發(fā)送路由器請求消息,直到主機接收到路由器通告消息。
為使主機在發(fā)生丟包事件時,仍舊能夠及時接收到路由器發(fā)送的路由器通告消息,完成網(wǎng)絡連接,減小網(wǎng)絡時延,在本發(fā)明實施例中,規(guī)定主機在發(fā)送路由器請求消息后的一定時間(即預設時間值)內(nèi),若未收到路由器發(fā)送的路由器通告消息,則重新發(fā)送路由器通告消息,直到主機接收到路由通告消息位置。
需要說明的是,對于路由器發(fā)送的路由器通告消息,一種情況是:路由器根據(jù)主機發(fā)送的路由器請求消息作出響應而發(fā)出的路由器通告消息;另一種情況是:路由器周期性地向主機發(fā)送的路由器通告消息,以通告它的存在以及配置的鏈路和網(wǎng)絡參數(shù)。路由器通告消息包含在連接(on-link)確定、地址配置的前綴和跳數(shù)限制值中等。
其中,為了避免網(wǎng)絡中大量主機同時發(fā)送路由器請求消息而產(chǎn)生大量的網(wǎng)絡流量,從而增加網(wǎng)絡負載,本發(fā)明實施例中,控制路由器請求消息發(fā)送的時間間隔,使相鄰兩次發(fā)送路由器請求消息后的預設時間值不同。這樣可降低出現(xiàn)大量主機同時發(fā)送路由器請求消息的概率,減小網(wǎng)絡負載。
進一步地,本發(fā)明實施例中,提供了一種優(yōu)選的計算預設時間值的方法,如下述計算公式所示:
其中,n表示主機發(fā)送路由器請求消息的次數(shù),n取整數(shù)。前一預設時間值為主機相鄰兩次發(fā)送路由器請求消息后的兩個預設時間值中,較早時間發(fā)送路由器請求消息后的預設時間值。第一隨機性因子和第二隨機性因子均為分布在[-a,a]區(qū)間內(nèi)的隨機數(shù),且0<a<1,也就是在每一次計算預設時間值時,第一隨機性因子和第二隨機性因子都是在[-a,a]區(qū)間隨機選擇的數(shù)值,這樣大大降低了發(fā)送路由器請求消息的時間間隔出現(xiàn)相同情況的概率,也大大降低了出現(xiàn)大量主機同時發(fā)送路由器請求消息的概率,從而減小網(wǎng)絡負載。在本發(fā)明實施例中,區(qū)間[-a,a]優(yōu)選為[-1,1]。
進一步地,對于上述預設時間值的計算方法,從計算公式可看出預設時間值隨路由器請求消息發(fā)送次數(shù)的增加而增大,當預設時間值過于大時,會導致主機長時間沒有網(wǎng)絡連接,造成長時間的網(wǎng)絡延遲,嚴重影響用戶的使用體驗,因此,本發(fā)明實施例中,規(guī)定當根據(jù)上述計算公式計算得到的預設時間值大于預設的最大重發(fā)時間間隔時,按照下述計算公式計算預設時間值:
預設時間值=(1+第三隨機性因子)×預設的最大重發(fā)時間間隔值;
其中,第三隨機性因子也為分布在[-a,a]區(qū)間內(nèi)的隨機數(shù)。預設的最大重發(fā)時間間隔值用來規(guī)定預設時間值的取值上限,該最大重發(fā)時間間隔的取值可根據(jù)實際需要設定,本發(fā)明實施例對此不進行限定。
進一步地,為進一步避免大量主機同時發(fā)送路由器請求消息,本發(fā)明實施例中規(guī)定:當主機發(fā)送路由器請求消息的次數(shù)等于最大發(fā)送計數(shù)或者主機發(fā)送路由器請求消息的持續(xù)時間等于最大發(fā)送時間時,停止向路由器發(fā)送路由器請求消息。此時,可認為主機完成一周期的路由器請求消息的發(fā)送,當然在主機沒有接收到路由器通告消息時,主機會繼續(xù)進入下一循環(huán)周期,即主機繼續(xù)向路由器發(fā)送路由器請求消息的發(fā)送,直到接收到路由器通告消息,完成網(wǎng)絡連接。
進一步地,為進一步完善本發(fā)明實施例提供的路由器請求消息的發(fā)送方法,本發(fā)明實施例還增加了對丟包的告警事件。當路由器在一定時間(即預設時間值)內(nèi)未收到主機發(fā)送的路由器請求消息,則向主機發(fā)送丟包告警信息,而當主機接收到路由器發(fā)送的告警信息時,可通告給用戶,使用戶實時的了解自己的鄰居發(fā)現(xiàn)過程中的問題,并及時采用相應的措施進行處理或者規(guī)避相關問題。其中,這里所述的“預設時間值”與主機發(fā)送路由器請求消息后的預設時間值為同一時間,也就是當主機發(fā)送路由器請求消息后的預設時間值內(nèi)未收到路由器通告消息,同時路由器也會在預設時間值內(nèi)因未收到主機發(fā)送的路由器請求消息而向主機發(fā)送丟包告警信息。
其中,在本發(fā)明實施例中,丟包告警信息攜帶在路由器向主機發(fā)送的互聯(lián)網(wǎng)控制信息協(xié)議版本六icmpv6報文中的預留字段中。本發(fā)明實施例借助協(xié)議字段的可擴展性,通過icmpv6報文可實現(xiàn)對丟包事件的實時告警。由于icmpv6報文的報文體是可變的,因此當icmpv6報文的類型和代碼的組合確定后,在icmpv6報文體的最后預留一個字節(jié),用來構造路由器請求消息丟包的預警信息通告信息。
將預留字段的數(shù)據(jù)部分可進行如下定義:
預警字段由預警(alert)標志位和預警類型(alerttype)兩個字段所組成。
當用戶收到異常報告模塊的異常通告信息后,通過解析icmpv6選項字段中所記錄的異常狀態(tài)字段的值,可以動態(tài)的獲取當前路由器請求消息是否存在丟包情況。
為進一步理解本發(fā)明實施例提供的路由器請求消息的發(fā)送方法,下面以一具體實施例加以說明:
主機第一次發(fā)送路由器請求消息給路由器時,主機與路由器之間開始消息交換。當主機成功收到適當?shù)捻憫蚨鄠€響應(來自一個路由器或多個路由器)時,消息交換終結。如果主機在規(guī)定的時間內(nèi)未能收到來自路由器的路由器通告消息,則主機必須重新發(fā)送路由器請求消息。下面對具體實現(xiàn)過程進行描述:
(1)變量定義
為實現(xiàn)該具體實施例提供的方法,系統(tǒng)需要維護下列幾個變量,以此用來控制和描述主機對路由器請求消息的重發(fā)行為:
rtt:重發(fā)超時(retransmissiontimeout),即相鄰兩次路由器請求消息發(fā)送的時間間隔。
rdf:隨機性因子(randomizationfactor),對應上述中的第一隨機性因子、第二隨機性因子以及第三隨機性因子。
irtt:初始重發(fā)時間(initialretransmissiontime),對應上述計算公式中的預設初始重發(fā)時間間隔值,是重發(fā)時間的一個初始化數(shù)值,一般可將其設置為4秒。
mrtt:最大重發(fā)時間(maximumretransmissiontime),對應上述計算公式中的預設的最大重發(fā)時間間隔值,用來規(guī)定rtt的取值上限,一般可將其設置為3600秒。
mrtc:最大重發(fā)計數(shù)(maximumretransmissioncount),對應上述中的最大發(fā)送計數(shù)。
mrtd:最大重發(fā)持續(xù)時間(maximumretransmissionduration),對應上述中的最大發(fā)送時間。
(2)算法實現(xiàn)
隨著每個路由器請求消息的發(fā)送或重新發(fā)送,主機將按照下列規(guī)則計算rtt。如果在消息交換終結前rtt已經(jīng)到期,且主機未收到路由器通告消息,則主機需要重新計算rtt并重發(fā)路由器請求消息。
在此方法中,為了盡量減小大量主機同步發(fā)送路由器請求消息,每個新的rtt計算都包括隨機性因子(rdf),它是一個均勻分布在[-0.1,+0.1]區(qū)間(對應上述的[-a,a]區(qū)間,在該具體實施例中優(yōu)選[-0.1,+0.1])的隨機數(shù)。其中,選擇隨機數(shù)的算法應當根據(jù)每個主機的調(diào)用產(chǎn)生不同隨機數(shù)序列。
其中,第一個路由器請求消息發(fā)送后的rtt基于irtt,即:
rtt=irtt+rdf×irtt;
后續(xù)每個路由器請求消息發(fā)送后的rtt基于前一個rtt(以下稱為rttprev)的值:
rtt=2×rttprev+rdf×rttprev;
其中,上述計算公式中的“2”為一個經(jīng)驗值,當然還可根據(jù)實際需要設定其他數(shù)值。
mrtt用來規(guī)定rtt取值上限(忽略因使用rdf而增加的隨機性),當mrtt=0,rtt的取值沒有上限,當根據(jù)上述兩個rtt的計算公式得到的rtt值大于mrtt時,rtt以下述計算公式得到數(shù)值的為準:
rtt=mrtt+rdf×mrtt;
mrtc用來規(guī)定主機可以發(fā)送路由器請求消息的次數(shù)上限。一旦主機已經(jīng)發(fā)送mrtc次消息,則主機和路由器之間消息交換失敗,主機停止向路由器發(fā)送路由器請求消息。但是,當mrtc取值為0時,路由器請求消息發(fā)送的次數(shù)沒有上限。
mrtd用來規(guī)定主機發(fā)送路由器請求消息的時間長度上限。一旦從主機首次發(fā)送消息開始,經(jīng)過mrtd時間后,則主機和路由器之間消息交換失敗,主機停止向路由器發(fā)送路由器請求消息。但是,當mrtd取值為0時,路由器請求消息發(fā)送的持續(xù)時間沒有上限。
其中,如果mrtc和mrtd的取值均不為0,則只要兩個限制條件中的一個條件滿足時,則主機和路由器之間的消息交換都會失敗。
在此具體實施例中,為使主機能夠持續(xù)重發(fā)路由器請求消息直到主機收到路由器通告消息為止,算法中將設定:mrtc=mrtd=0。
(3)丟包告警
本發(fā)明實施例借助協(xié)議字段的可擴展性,通過icmpv6報文實現(xiàn)對丟包事件的實時告警。
首先介紹一下icmpv6消息格式,如圖2和圖3所示。每一個icmpv6報文在傳送時都是附加在一個ipv6基本報頭和若干(或沒有)ipv6擴展報頭之后。其中,下一個報頭值58表示icmpv6報文。
其中,根據(jù)預警字段的定義,可以按照實際需求對預留字段的長度進行相應調(diào)整,在此為描述方便,假設預警字段占用1個字節(jié),其中預警標志占用3bit,預警類型占用5bit,如圖3所示。
例如,當預警標志位=000時,表示icmpv6消息無預警狀況,則直接處理此報文;當預警標志位=001時,表示此報文存在預警,觸發(fā)預警事件,同時讀取后續(xù)的相應預警類型值,發(fā)出預警報告信息,并通告給用戶。預警類型存放了路由器請求消息丟包的報文預警錯誤類型。如用00000表示路由器請求消息丟包等。
綜上所述,上述方案,主機可持續(xù)重發(fā)路由器請求消息,直到主機接收到路由器通告消息為止,避免了因發(fā)生丟包事件而造成的長時間網(wǎng)絡延遲,同時控制相鄰兩次路由器請求消息發(fā)送的時間間隔,避免大量主機同時發(fā)送路由器請求消息而增加網(wǎng)絡負載。此外,本發(fā)明實施例還利用協(xié)議字段的可擴展性,通過icmpv6的預留字段,對丟包事件進行告警,以使用戶實時的了解自己的鄰居發(fā)現(xiàn)過程中的問題,并及時采用相應的措施進行處理或者規(guī)避相關問題。
第二實施例
本發(fā)明實施例提供了一種路由器請求消息的發(fā)送裝置,如圖4所示,該發(fā)送裝置包括:
發(fā)送模塊401,用于向路由器發(fā)送路由器請求消息。
其中,這里的發(fā)送模塊401向路由器發(fā)送路由器請求消息,不僅指主機第一次向路由器發(fā)送路由器請求消息,還包括主機因在發(fā)送路由器請求消息后的一定時間內(nèi)未接收到路由器發(fā)送的路由器通告消息而重新向路由器發(fā)送的路由器請求消息。
重發(fā)模塊402,用于在發(fā)送路由器請求消息后的預設時間值內(nèi),當未收到路由器根據(jù)路由器請求消息進行響應的路由器通告消息時,重新發(fā)送路由器請求消息,直到主機接收到路由器通告消息;其中,相鄰兩次發(fā)送路由器請求消息后的預設時間值不同。
為使主機在發(fā)生丟包事件時,仍舊能夠及時接收到路由器發(fā)送的路由器通告消息,完成網(wǎng)絡連接,減小網(wǎng)絡時延,在本發(fā)明實施例中,重發(fā)模塊402規(guī)定主機在發(fā)送路由器請求消息后的一定時間(即預設時間值)內(nèi),若未收到路由器發(fā)送的路由器通告消息,則重新發(fā)送路由器通告消息,直到主機接收到路由通告消息位置。
需要說明的是,對于路由器發(fā)送的路由器通告消息,一種情況是:路由器根據(jù)主機發(fā)送的路由器請求消息作出響應而發(fā)出的路由器通告消息;另一種情況是:路由器周期性地向主機發(fā)送的路由器通告消息,以通告它的存在以及配置的鏈路和網(wǎng)絡參數(shù)。路由器通告消息包含在連接(on-link)確定、地址配置的前綴和跳數(shù)限制值中等。
其中,為了避免網(wǎng)絡中大量主機同時發(fā)送路由器請求消息而產(chǎn)生大量的網(wǎng)絡流量,從而增加網(wǎng)絡負載,本發(fā)明實施例中,控制路由器請求消息發(fā)送的時間間隔,使相鄰兩次發(fā)送路由器請求消息后的預設時間值不同。這樣可降低出現(xiàn)大量主機同時發(fā)送路由器請求消息的概率,減小網(wǎng)絡負載。
進一步地,本發(fā)明實施例中,提供了一種優(yōu)選的計算預設時間值的方法,如下述計算公式所示:
其中,n表示主機發(fā)送路由器請求消息的次數(shù),n取整數(shù)。前一預設時間值值為主機相鄰兩次發(fā)送路由器請求消息后的兩個預設時間值中,較早時間發(fā)送路由器請求消息后的預設時間值。第一隨機性因子和第二隨機性因子均為分布在[-a,a]區(qū)間內(nèi)的隨機數(shù),且0<a<1,也就是在每一次計算預設時間值時,第一隨機性因子和第二隨機性因子都是在[-a,a]區(qū)間隨機選擇的數(shù)值,這樣大大降低了發(fā)送路由器請求消息的時間間隔出現(xiàn)相同情況的概率,也大大降低了出現(xiàn)大量主機同時發(fā)送路由器請求消息的概率,從而減小網(wǎng)絡負載。在本發(fā)明實施例中,區(qū)間[-a,a]優(yōu)選為[-1,1]。
進一步地,對于上述預設時間值的計算方法,從計算公式可看出預設時間值隨路由器請求消息發(fā)送次數(shù)的增加而增大,當預設時間值過于大時,會導致主機長時間沒有網(wǎng)絡連接,造成長時間的網(wǎng)絡延遲,嚴重影響用戶的使用體驗,因此,本發(fā)明實施例中,規(guī)定當根據(jù)上述計算公式計算得到的預設時間值大于預設的最大重發(fā)時間間隔時,按照下述計算公式計算預設時間值:
預設時間值=(1+第三隨機性因子)×預設的最大重發(fā)時間間隔值;
其中,第三隨機性因子也為分布在[-a,a]區(qū)間內(nèi)的隨機數(shù)。預設的最大重發(fā)時間間隔值用來規(guī)定預設時間值的取值上限,該最大重發(fā)時間間隔的取值可根據(jù)實際需要設定,本發(fā)明實施例對此不進行限定。
進一步地,該發(fā)送裝置還包括:
停發(fā)消息模塊,用于當主機發(fā)送路由器請求消息的次數(shù)等于最大發(fā)送計數(shù)或者主機發(fā)送路由器請求消息的持續(xù)時間等于最大發(fā)送時間時,停止向路由器發(fā)送路由器請求消息。
為進一步避免大量主機同時發(fā)送路由器請求消息,本發(fā)明實施例中規(guī)定:當主機發(fā)送路由器請求消息的次數(shù)等于最大發(fā)送計數(shù)或者主機發(fā)送路由器請求消息的持續(xù)時間等于最大發(fā)送時間時,停止向路由器發(fā)送路由器請求消息。此時,可認為主機完成一周期的路由器請求消息的發(fā)送,當然在主機沒有接收到路由器通告消息時,主機會繼續(xù)進入下一循環(huán)周期,即主機繼續(xù)向路由器發(fā)送路由器請求消息的發(fā)送,直到接收到路由器通告消息,完成網(wǎng)絡連接。
進一步地,該發(fā)送裝置還包括:
接收模塊,用于接收路由器在預設時間值內(nèi)沒有接收到主機發(fā)送的路由器請求消息而發(fā)送的丟包告警信息。
為進一步完善本發(fā)明實施例提供的路由器請求消息的發(fā)送方法,發(fā)明實施例還增加了對丟包的告警事件。當路由器在一定時間(即預設時間值)內(nèi)未收到主機發(fā)送的路由器請求消息,則向主機發(fā)送丟包告警信息,而當主機接收到路由器發(fā)送的告警信息時,可通告給用戶,使用戶實時的了解自己的鄰居發(fā)現(xiàn)過程中的問題,并及時采用相應的措施進行處理或者規(guī)避相關問題。其中,這里所述的“預設時間值”與主機發(fā)送路由器請求消息后的預設時間值為同一時間,也就是當主機發(fā)送路由器請求消息后的預設時間值內(nèi)未收到路由器通告消息,同時路由器也因在預設時間值內(nèi)未收到主機發(fā)送的路由器請求消息而向主機發(fā)送丟包告警信息。
其中,在本發(fā)明實施例中,丟包告警信息攜帶在路由器向主機發(fā)送的互聯(lián)網(wǎng)控制信息協(xié)議版本六icmpv6報文中的預留字段中。本發(fā)明實施例借助協(xié)議字段的可擴展性,通過icmpv6報文可實現(xiàn)對丟包事件的實時告警。由于icmpv6報文的報文體是可變的,因此當icmpv6報文的類型和代碼的組合確定后,在icmpv6報文體的最后預留一個字節(jié),用來構造路由器請求消息丟包的預警信息通告信息。
將預留字段的數(shù)據(jù)部分可進行如下定義:
預警字段由預警(alert)標志位和預警類型(alerttype)兩個字段所組成。
當用戶收到異常報告模塊的異常通告信息后,通過解析icmpv6選項字段中所記錄的異常狀態(tài)字段的值,可以動態(tài)的獲取當前路由器請求消息是否存在丟包情況。
為進一步理解本發(fā)明實施例提供的路由器請求消息的發(fā)送方法,下面以一具體實施例加以說明:
主機第一次發(fā)送路由器請求消息給路由器,主機與路由器之間開始消息交換。當主機成功收到適當?shù)捻憫蚨鄠€響應(來自一個路由器或多個路由器)時,消息交換終結。如果主機在規(guī)定的時間內(nèi)未能收到來自路由器的路由器通告消息,則主機必須重新發(fā)送路由器請求消息。下面對具體實現(xiàn)過程進行描述:
(1)變量定義
為實現(xiàn)該具體實施例提供的方法,系統(tǒng)需要維護下列幾個變量,以此用來控制和描述主機對路由器請求消息的重發(fā)行為:
rtt:重發(fā)超時(retransmissiontimeout),即相鄰兩次路由器請求消息發(fā)送的時間間隔。
rdf:隨機性因子(randomizationfactor),對應上述中的第一隨機性因子、第二隨機性因子以及第三隨機性因子。
irtt:初始重發(fā)時間(initialretransmissiontime),對應上述計算公式中的預設初始重發(fā)時間間隔值,是重發(fā)時間的一個初始化數(shù)值,一般可將其設置為4秒。
mrtt:最大重發(fā)時間(maximumretransmissiontime),對應上述計算公式中的預設的最大重發(fā)時間間隔值,用來規(guī)定rtt的取值上限,一般可將其設置為3600秒。
mrtc:最大重發(fā)計數(shù)(maximumretransmissioncount),對應上述中的最大發(fā)送計數(shù)。
mrtd:最大重發(fā)持續(xù)時間(maximumretransmissionduration),對應上述中的最大發(fā)送時間。
(2)算法實現(xiàn)
隨著每個路由器請求消息的發(fā)送或重新發(fā)送,主機將按照下列規(guī)則計算rtt。如果在消息交換終結前rtt已經(jīng)到期,且主機未收到路由器通告消息,則主機需要重新計算rtt并重發(fā)路由器請求消息。
在此方法中,為了盡量減小大量主機同步發(fā)送路由器請求消息,每個新的rtt計算都包括隨機性因子(rdf),它是一個均勻分布在[-0.1,+0.1]區(qū)間(對應上述的[-a,a]區(qū)間,在該具體實施例中優(yōu)選[-0.1,+0.1])的隨機數(shù)。其中,選擇隨機數(shù)的算法應當根據(jù)每個主機的調(diào)用產(chǎn)生不同隨機數(shù)序列。
其中,第一個路由器請求消息發(fā)送后的rtt基于irtt,即:
rtt=irtt+rdf×irtt;
后續(xù)每個路由器請求消息發(fā)送后的rtt基于前一個rtt(以下稱為rttprev)的值:
rtt=2×rttprev+rdf×rttprev;
其中,上述計算公式中的“2”為一個經(jīng)驗值,當然還可根據(jù)實際需要設定其他數(shù)值。
mrtt用來規(guī)定rtt取值上限(忽略因使用rdf而增加的隨機性),當mrtt=0,rtt的取值沒有上限,當根據(jù)上述兩個rtt的計算公式得到的rtt值大于mrtt時,rtt以下述計算公式得到數(shù)值的為準:
rtt=mrtt+rdf×mrtt;
mrtc用來規(guī)定主機可以發(fā)送路由器請求消息的次數(shù)上限。一旦主機已經(jīng)發(fā)送mrtc次消息,則主機和路由器之間消息交換失敗,主機停止向路由器發(fā)送路由器請求消息。但是,當mrtc取值為0時,路由器請求消息發(fā)送的次數(shù)沒有上限。
mrtd用來規(guī)定主機發(fā)送路由器請求消息的時間長度上限。一旦從主機首次發(fā)送消息開始,經(jīng)過mrtd時間后,則主機和路由器之間消息交換失敗,主機停止向路由器發(fā)送路由器請求消息。但是,當mrtd取值為0時,路由器請求消息發(fā)送的持續(xù)時間沒有上限。
其中,如果mrtc和mrtd的取值均不為0,則只要兩個限制條件中的一個條件滿足時,則主機和路由器之間的消息交換都會失敗。
在此具體實施例中,為使主機能夠持續(xù)重發(fā)路由器請求消息直到主機收到路由器通告消息為止,算法中將設定:mrtc=mrtd=0。
(3)丟包告警
本發(fā)明實施例借助協(xié)議字段的可擴展性,通過icmpv6報文實現(xiàn)對丟包事件的實時告警。
首先介紹一下icmpv6消息格式,如圖2所示。每一個icmpv6報文在傳送時都是附加在一個ipv6基本報頭和若干(或沒有)ipv6擴展報頭之后。當下一個報頭值58表示icmpv6報文。
其中,根據(jù)預警字段的定義,可以按照實際需求對預留字段的長度進行相應調(diào)整,在此為描述方便,假設預警字段占用1個字節(jié),其中預警標志占用3bit,預警類型占用5bit,如圖3所示。
例如,當預警標志位=000時,表示icmpv6消息無預警狀況,則直接處理此報文;當預警標志位=001時,表示此報文存在預警,觸發(fā)預警事件,同時讀取后續(xù)的相應預警類型值,發(fā)出預警報告信息,并通告給用戶。預警類型存放了路由器請求消息丟包的報文預警錯誤類型。如用00000表示路由器請求消息丟包等。
綜上所述,上述方案,主機通過重發(fā)模塊402可持續(xù)重發(fā)路由器請求消息,直到主機接收到路由器通告消息為止,避免了因發(fā)生丟包事件而造成的長時間網(wǎng)絡延遲,同時控制相鄰兩次路由器請求消息發(fā)送的時間間隔,避免大量主機同時發(fā)送路由器請求消息而增加網(wǎng)絡負載。此外,本發(fā)明實施例還利用協(xié)議字段的可擴展性,通過icmpv6的預留字段,對丟包事件進行告警,以使用戶實時的了解自己的鄰居發(fā)現(xiàn)過程中的問題,并及時采用相應的措施進行處理或者規(guī)避相關問題。
以上所述的是本發(fā)明的優(yōu)選實施方式,應當指出對于本技術領域的普通人員來說,在不脫離本發(fā)明所述的原理前提下還可以作出若干改進和潤飾,這些改進和潤飾也在本發(fā)明的保護范圍內(nèi)。