一種報文轉(zhuǎn)發(fā)方法和裝置制造方法
【專利摘要】本發(fā)明提供了一種報文轉(zhuǎn)發(fā)方法和裝置,以解決報文轉(zhuǎn)發(fā)過程中出現(xiàn)的廣播環(huán)路、廣播風(fēng)暴的問題。其中一種報文轉(zhuǎn)發(fā)方法包括:接收上一節(jié)點發(fā)送的報文;辨別報文的報文類型;當(dāng)辨別出報文為廣播報文時,判斷報文是否已經(jīng)轉(zhuǎn)發(fā)或者達(dá)到最大轉(zhuǎn)發(fā)跳數(shù),若報文已經(jīng)轉(zhuǎn)發(fā)或者達(dá)到最大轉(zhuǎn)發(fā)跳數(shù),則丟棄報文;若報文未轉(zhuǎn)發(fā)且未達(dá)到最大轉(zhuǎn)發(fā)跳數(shù),則更新報文,將更新后的報文轉(zhuǎn)發(fā)給其他節(jié)點;當(dāng)辨別出報文為單播報文時,判斷報文的可選節(jié)點地址是否為當(dāng)前節(jié)點的地址或者報文已經(jīng)回復(fù);若報文的可選節(jié)點地址不是當(dāng)前節(jié)點的地址或者報文已經(jīng)回復(fù),則丟棄報文;若可選節(jié)點地址是當(dāng)前節(jié)點的地址且報文未回復(fù),則回復(fù)報文。本發(fā)明避免了廣播環(huán)路和廣播風(fēng)暴的發(fā)生。
【專利說明】一種報文轉(zhuǎn)發(fā)方法和裝置
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及測試【技術(shù)領(lǐng)域】,特別是涉及一種報文轉(zhuǎn)發(fā)方法和裝置。
【背景技術(shù)】
[0002] 廣播環(huán)路是指報文在網(wǎng)絡(luò)節(jié)點之間不斷傳輸卻始終無法到達(dá)目的節(jié)點的一種現(xiàn) 象。網(wǎng)絡(luò)拓?fù)浒l(fā)生變化時,若網(wǎng)絡(luò)收斂緩慢產(chǎn)生不協(xié)調(diào)或矛盾的路徑選擇,節(jié)點對無法到達(dá) 目的節(jié)點的路由不予理踩,就會導(dǎo)致用戶的報文不停地循環(huán)發(fā)送,占用大量網(wǎng)絡(luò)帶寬。
[0003] 下面結(jié)合圖1對廣播風(fēng)暴進(jìn)行說明,如圖1所示節(jié)點S要發(fā)報文到節(jié)點F,中間 ABCDE節(jié)點會將同一個報文轉(zhuǎn)發(fā)多次,甚至S和F節(jié)點接收到多個同樣的報文并再次轉(zhuǎn)發(fā), 整個網(wǎng)絡(luò)節(jié)點都在不斷轉(zhuǎn)發(fā)重復(fù)的報文,導(dǎo)致整個網(wǎng)絡(luò)帶寬被大量占用,資源被嚴(yán)重浪費。 目前的報文轉(zhuǎn)發(fā)方法會讓中間ABCDE節(jié)點各轉(zhuǎn)發(fā)同一個報文多次,容易導(dǎo)致廣播環(huán)路和廣 播風(fēng)暴,占用大量網(wǎng)絡(luò)帶寬,并且報文轉(zhuǎn)發(fā)的效率低。
【發(fā)明內(nèi)容】
[0004] 本發(fā)明提供了一種報文轉(zhuǎn)發(fā)方法和裝置,以解決報文轉(zhuǎn)發(fā)過程中出現(xiàn)的廣播環(huán) 路、廣播風(fēng)暴的問題。
[0005] 為了解決上述問題,本發(fā)明公開了一種報文轉(zhuǎn)發(fā)方法,包括:
[0006] 接收上一節(jié)點發(fā)送的報文,所述報文包括:轉(zhuǎn)發(fā)跳數(shù)和/或可選節(jié)點地址;
[0007] 辨別所述報文的報文類型,所述報文類型包括:廣播報文和單播報文;
[0008] 當(dāng)辨別出所述報文為廣播報文時,判斷所述報文是否已經(jīng)轉(zhuǎn)發(fā)或者達(dá)到最大轉(zhuǎn)發(fā) 跳數(shù),若所述報文已經(jīng)轉(zhuǎn)發(fā)或者達(dá)到最大轉(zhuǎn)發(fā)跳數(shù),則丟棄所述報文;若所述報文未轉(zhuǎn)發(fā)且 未達(dá)到最大轉(zhuǎn)發(fā)跳數(shù),則更新所述報文,將更新后的報文轉(zhuǎn)發(fā)給其他節(jié)點;
[0009] 當(dāng)辨別出所述報文為單播報文時,判斷所述報文的可選節(jié)點地址是否為當(dāng)前節(jié)點 的地址或者所述報文已經(jīng)回復(fù);若所述報文的可選節(jié)點地址不是所述當(dāng)前節(jié)點的地址或者 所述報文已經(jīng)回復(fù),則丟棄所述報文;若所述報文的可選節(jié)點地址是所述當(dāng)前節(jié)點的地址 且所述報文未回復(fù),則回復(fù)所述報文。
[0010] 可選地,所述報文還包括:可選長度;所述辨別所述報文的報文類型,包括:
[0011] 查詢所述報文的可選長度;
[0012] 當(dāng)所述報文的可選長度可選長度為0時,辨別出所述報文為廣播報文;
[0013] 當(dāng)所述報文的可選長度可選長度為不為0時,辨別出所述報文為單播報文。
[0014] 可選地,所述判斷所述報文是否已經(jīng)達(dá)到最大轉(zhuǎn)發(fā)跳數(shù),包括:
[0015] 判斷所述報文的轉(zhuǎn)發(fā)跳數(shù)是否達(dá)到預(yù)設(shè)的轉(zhuǎn)發(fā)閾值;
[0016] 當(dāng)所述轉(zhuǎn)發(fā)跳數(shù)達(dá)到預(yù)設(shè)的轉(zhuǎn)發(fā)閾值時,判斷所述報文達(dá)到最大轉(zhuǎn)發(fā)跳數(shù);
[0017] 當(dāng)所述轉(zhuǎn)發(fā)跳數(shù)未達(dá)到預(yù)設(shè)的轉(zhuǎn)發(fā)閾值時,判斷所述報文未達(dá)到最大轉(zhuǎn)發(fā)跳數(shù)。
[0018] 可選地,所述報文還包括:報文序列號;所述判斷所述報文是否已經(jīng)轉(zhuǎn)發(fā),包括:
[0019] 查詢所述當(dāng)前節(jié)點的已發(fā)送列表,所述已發(fā)送列表由當(dāng)前節(jié)點在每次轉(zhuǎn)發(fā)后記錄 所轉(zhuǎn)發(fā)的報文的報文序列號;
[0020] 判斷所述報文的報文序列號是否在所述當(dāng)前節(jié)點的已發(fā)送列表中;
[0021] 當(dāng)所述報文的報文序列號在所述當(dāng)前節(jié)點的已發(fā)送列表中時,判斷所述報文已經(jīng) 轉(zhuǎn)發(fā);
[0022] 當(dāng)所述報文的報文序列號不在所述當(dāng)前節(jié)點的已發(fā)送列表中時,判斷所述報文未 轉(zhuǎn)發(fā)。
[0023] 可選地,所述報文還包括:直接節(jié)點個數(shù)、直接節(jié)點地址和/或轉(zhuǎn)發(fā)節(jié)點地址;所 述更新所述報文包括:
[0024] 判斷所述報文的直接節(jié)點個數(shù)是否為0 ;
[0025] 當(dāng)所述報文的直接節(jié)點個數(shù)為0時,將所述報文的轉(zhuǎn)發(fā)節(jié)點地址更新為當(dāng)前節(jié)點 的地址,將所述報文的轉(zhuǎn)發(fā)跳數(shù)加一,將所述報文的直接節(jié)點個數(shù)更新為1,將所述報文的 直接節(jié)點地址更新為所述上一節(jié)點的地址;
[0026] 當(dāng)所述報文的直接節(jié)點個數(shù)不為0時,則判斷當(dāng)前節(jié)點的直接節(jié)點地址是否包含 在所述報文的直接節(jié)點地址中;當(dāng)所述當(dāng)前節(jié)點的直接節(jié)點地址包含在所述報文的直接節(jié) 點地址中時,丟棄所述報文;當(dāng)所述當(dāng)前節(jié)點的直接節(jié)點地址未包含在所述報文的直接節(jié) 點地址中時,將所述報文的轉(zhuǎn)發(fā)節(jié)點地址更新為所述當(dāng)前節(jié)點的地址,將所述報文的轉(zhuǎn)發(fā) 跳數(shù)加一,將所述報文的直接節(jié)點個數(shù)更新為所述當(dāng)前節(jié)點的直接節(jié)點個數(shù),并將所述報 文的直接節(jié)點地址更新為所述當(dāng)前節(jié)點的直接節(jié)點的地址。
[0027] 可選地,所述報文還包括:直接節(jié)點地址;所述將更新后的報文轉(zhuǎn)發(fā)給其他節(jié)點 包括:
[0028] 按照更新后的報文的直接節(jié)點地址將所述更新后的報文轉(zhuǎn)發(fā)給更新后的報文的 直接節(jié)點。
[0029] 可選地,所述報文還包括:報文序列號;所述判斷所述報文是否已經(jīng)回復(fù),包括:
[0030] 查詢所述當(dāng)前節(jié)點的已發(fā)送列表,所述已發(fā)送列表由當(dāng)前節(jié)點在每次轉(zhuǎn)發(fā)后記錄 所轉(zhuǎn)發(fā)的報文的報文序列號;
[0031] 判斷所述報文的報文序列號是否在所述當(dāng)前節(jié)點的已發(fā)送列表中;
[0032] 當(dāng)所述報文的報文序列號在所述當(dāng)前節(jié)點的已發(fā)送列表中時,判斷所述報文已經(jīng) 回復(fù);
[0033] 當(dāng)所述報文的報文序列號不在所述當(dāng)前節(jié)點的已發(fā)送列表中時,判斷所述報文未 回復(fù)。
[0034] 可選地,所述報文還包括:可選長度、直接節(jié)點個數(shù)、直接節(jié)點地址和/或轉(zhuǎn)發(fā)節(jié) 點地址;所述回復(fù)所述報文包括:
[0035] 判斷所述當(dāng)前節(jié)點的直接節(jié)點地址是否包含在所述報文的直接節(jié)點地址中;
[0036] 當(dāng)所述當(dāng)前節(jié)點的直接節(jié)點地址包含在所述報文的直接節(jié)點地址中時,丟棄所述 報文;
[0037] 當(dāng)所述當(dāng)前節(jié)點的直接節(jié)點地址未包含在所述報文的直接節(jié)點地址中時,將所述 報文的轉(zhuǎn)發(fā)節(jié)點地址更新為所述當(dāng)前節(jié)點的地址,將所述報文的可選長度更新為所述當(dāng)前 節(jié)點除所述上一節(jié)點外的直接節(jié)點個數(shù),將所述報文的可選節(jié)點地址更新為所述當(dāng)前節(jié)點 除所述上一節(jié)點外的直接節(jié)點地址,將所述報文的直接節(jié)點個數(shù)更新為所述當(dāng)前節(jié)點的直 接節(jié)點個數(shù),并將所述報文的直接節(jié)點地址更新為所述當(dāng)前節(jié)點的直接節(jié)點的地址;按照 更新后的報文的直接節(jié)點地址進(jìn)行回復(fù)。
[0038] 本發(fā)明還公開了一種報文轉(zhuǎn)發(fā)裝置,包括:
[0039] 接收模塊,用于接收上一節(jié)點發(fā)送的報文,所述報文包括:轉(zhuǎn)發(fā)跳數(shù)和/或可選節(jié) 點地址;
[0040] 辨別模塊,與所述接收模塊相連,用于辨別所述報文的報文類型,所述報文類型包 括:廣播報文和單播報文;
[0041] 廣播報文處理模塊,與所述辨別模塊相連,用于當(dāng)所述辨別模塊辨別出所述報文 為廣播報文時,判斷所述報文是否已經(jīng)轉(zhuǎn)發(fā)或者達(dá)到最大轉(zhuǎn)發(fā)跳數(shù),若所述報文已經(jīng)轉(zhuǎn)發(fā) 或者達(dá)到最大轉(zhuǎn)發(fā)跳數(shù),則丟棄所述報文;若所述報文未轉(zhuǎn)發(fā)且未達(dá)到最大轉(zhuǎn)發(fā)跳數(shù),則更 新所述報文,將更新后的報文轉(zhuǎn)發(fā)給其他節(jié)點;
[0042] 單播報文處理模塊,與所述辨別模塊相連,用于當(dāng)所述辨別模塊辨別出所述報文 為單播報文時,判斷所述報文的可選節(jié)點地址是否為當(dāng)前節(jié)點的地址或者所述報文已經(jīng)回 復(fù);若所述報文的可選節(jié)點地址不是所述當(dāng)前節(jié)點的地址或者所述報文已經(jīng)回復(fù),則丟棄 所述報文;若所述報文的可選節(jié)點地址是所述當(dāng)前節(jié)點的地址且所述報文未回復(fù),則回復(fù) 所述報文。
[0043] 可選地,所述報文還包括:可選長度;所述辨別模塊包括:
[0044] 查詢子模塊,用于查詢所述報文的可選長度;
[0045] 廣播辨別子模塊,與所述查詢子模塊相連,用于當(dāng)所述查詢子模塊查詢到所述報 文的可選長度為〇時,辨別出所述報文為廣播報文;
[0046] 單播辨別子模塊,與所述查詢子模塊相連,用于當(dāng)所述查詢子模塊查詢到所述報 文的可選長度為不為〇時,辨別出所述報文為單播報文。
[0047] 與現(xiàn)有技術(shù)相比,本發(fā)明包括以下優(yōu)點:
[0048] 首先,本發(fā)明提供的報文轉(zhuǎn)發(fā)方法,在當(dāng)前節(jié)點已經(jīng)轉(zhuǎn)發(fā)過所述報文時,丟棄所述 報文,可以保證同一個報文最多只被一個節(jié)點轉(zhuǎn)發(fā)一次,避免了廣播風(fēng)暴的發(fā)生。具體可以 通過報文中的報文序列號來實現(xiàn),當(dāng)所述報文的報文序列號在所述當(dāng)前節(jié)點的已發(fā)送列表 中時,判斷所述報文已經(jīng)轉(zhuǎn)發(fā),從而丟棄所述報文,這樣同一個報文就不會被一個節(jié)點轉(zhuǎn)發(fā) 一次以上了,進(jìn)一步避免了廣播風(fēng)暴的發(fā)生。
[0049] 其次,本發(fā)明提供的報文轉(zhuǎn)發(fā)方法,在所述報文已經(jīng)達(dá)到最大轉(zhuǎn)發(fā)跳數(shù)時,丟棄所 述報文,即對報文的最多轉(zhuǎn)發(fā)次數(shù)進(jìn)行了限制,可以避免出現(xiàn)廣播環(huán)路。具體可以通過報文 中的轉(zhuǎn)發(fā)跳數(shù)來實現(xiàn),當(dāng)所述報文的轉(zhuǎn)發(fā)跳數(shù)達(dá)到預(yù)設(shè)的閾值時,判斷所述報文已經(jīng)達(dá)到 最大轉(zhuǎn)發(fā)跳數(shù),從而丟棄所述報文,這樣同一個報文就不會被無限次轉(zhuǎn)發(fā),從而避免了廣播 環(huán)路的出現(xiàn),減少了在報文轉(zhuǎn)發(fā)時對網(wǎng)絡(luò)帶寬的占用,提高了報文轉(zhuǎn)發(fā)的效率。
【專利附圖】
【附圖說明】
[0050] 圖1是現(xiàn)有技術(shù)中的節(jié)點示意圖;
[0051] 圖2是本發(fā)明實施例一種報文轉(zhuǎn)發(fā)方法的流程圖;
[0052] 圖3是本發(fā)明實施例廣播報文處理過程的流程圖;
[0053] 圖4是本發(fā)明實施例單播報文處理過程的流程圖;
[0054] 圖5是本發(fā)明實施例一種報文轉(zhuǎn)發(fā)方法的總體流程圖;
[0055] 圖6是本發(fā)明實施例一種報文轉(zhuǎn)發(fā)裝置的結(jié)構(gòu)框圖。
【具體實施方式】
[0056] 為使本發(fā)明的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面結(jié)合附圖和具體實 施方式對本發(fā)明作進(jìn)一步詳細(xì)的說明。
[0057] 參照圖2,示出了本發(fā)明實施例一種報文轉(zhuǎn)發(fā)方法的流程圖,本實施例具體可以包 括以下步驟:
[0058] 步驟101,接收上一節(jié)點發(fā)送的報文,所述報文包括:轉(zhuǎn)發(fā)跳數(shù)和/或可選節(jié)點地 址。需要說明的是,和/或包括以下三種情況:(1)報文包括轉(zhuǎn)發(fā)跳數(shù)和可選節(jié)點地址;(2) 報文包括轉(zhuǎn)發(fā)跳數(shù);(3)報文包括可選節(jié)點地址。
[0059] 所述報文的轉(zhuǎn)發(fā)跳數(shù)用于表示報文被轉(zhuǎn)發(fā)的次數(shù),轉(zhuǎn)發(fā)跳數(shù)的初始值為0,報文每 被轉(zhuǎn)發(fā)一次,所述轉(zhuǎn)發(fā)跳數(shù)加一。所述報文的可選節(jié)點地址用于表示該報文的目標(biāo)地址,主 要針對單播報文,在單播報文中,可選節(jié)點地址為目標(biāo)節(jié)點的地址,廣播報文的可選節(jié)點地 址為0。
[0060] 步驟102,辨別所述報文的報文類型,所述報文類型包括:廣播報文和單播報文。
[0061] 接收到的報文可以是廣播報文,也可以是單播報文,對于廣播報文和單播報文,本 實施例的處理方式不同,因此需要先辨別所述報文是廣播報文還是單播報文,以便進(jìn)一步 處理。
[0062] 步驟103,當(dāng)辨別出所述報文為廣播報文時,判斷所述報文是否已經(jīng)轉(zhuǎn)發(fā)或者達(dá)到 最大轉(zhuǎn)發(fā)跳數(shù),若所述報文已經(jīng)轉(zhuǎn)發(fā)或者達(dá)到最大轉(zhuǎn)發(fā)跳數(shù),則丟棄所述報文;若所述報文 未轉(zhuǎn)發(fā)且未達(dá)到最大轉(zhuǎn)發(fā)跳數(shù),則更新所述報文,將更新后的報文轉(zhuǎn)發(fā)給其他節(jié)點。
[0063] 如果當(dāng)前節(jié)點已經(jīng)轉(zhuǎn)發(fā)過該報文,再次轉(zhuǎn)發(fā)的話會導(dǎo)致廣播風(fēng)暴;如果該報文已 經(jīng)被轉(zhuǎn)發(fā)了多次,再次轉(zhuǎn)發(fā)則會導(dǎo)致廣播環(huán)路。為了避免上述廣播風(fēng)暴和廣播環(huán)路的發(fā)生, 本實施例在處理廣播報文時,首先判斷所述報文是否已經(jīng)轉(zhuǎn)發(fā)或者達(dá)到最大轉(zhuǎn)發(fā)跳數(shù)。如 果當(dāng)前節(jié)點已經(jīng)轉(zhuǎn)發(fā)過該報文,則將該報文丟棄;如果該報文已經(jīng)達(dá)到最大轉(zhuǎn)發(fā)跳數(shù),同樣 將該報文丟棄,其中最大轉(zhuǎn)發(fā)跳數(shù)可以預(yù)設(shè)一個轉(zhuǎn)發(fā)閾值,比如設(shè)置為9,這樣如果該報文 的轉(zhuǎn)發(fā)次數(shù)為9則丟棄該報文。因此只有在所述報文未轉(zhuǎn)發(fā)且未達(dá)到最大轉(zhuǎn)發(fā)跳數(shù)時,更 新所述報文,將更新后的報文轉(zhuǎn)發(fā)給其他節(jié)點。上述更新所述報文,主要指更新報文的轉(zhuǎn) 發(fā)跳數(shù),因為轉(zhuǎn)發(fā)跳數(shù)代表了該報文的轉(zhuǎn)發(fā)次數(shù)。
[0064] 步驟104,當(dāng)辨別出所述報文為單播報文時,判斷所述報文的可選節(jié)點地址是否為 當(dāng)前節(jié)點的地址或者所述報文已經(jīng)回復(fù);若所述報文的可選節(jié)點地址不是所述當(dāng)前節(jié)點的 地址或者所述報文已經(jīng)回復(fù),則丟棄所述報文;若所述報文的可選節(jié)點地址是所述當(dāng)前節(jié) 點的地址且所述報文未回復(fù),則回復(fù)所述報文。
[0065] 如果當(dāng)前節(jié)點已經(jīng)回復(fù)過該報文,再次回復(fù)的話會導(dǎo)致廣播風(fēng)暴,因此將該報文 丟棄;如果所述報文的可選節(jié)點地址不是所述當(dāng)前節(jié)點的地址,說明該單播報文并不是發(fā) 送給當(dāng)前節(jié)點的,因此無需回復(fù),直接丟棄該報文即可。所以本實施例在處理單播報文時, 首先判斷當(dāng)前節(jié)點是否已經(jīng)回復(fù)過該報文,如果當(dāng)前節(jié)點回復(fù)過該報文,則將該報文丟棄; 其次判斷該單播報文是不是發(fā)給當(dāng)前節(jié)點的,即判斷所述報文的可選地址是否為當(dāng)前節(jié)點 的地址,如果所述報文的當(dāng)前節(jié)點地址不是當(dāng)前節(jié)點的地址,則將該報文丟棄;只有當(dāng)所述 報文的可選地址是所述當(dāng)前節(jié)點的地址,并且當(dāng)前節(jié)點未回復(fù)該報文時,當(dāng)前節(jié)點回復(fù)該 報文。
[0066] 本實施例提供的報文轉(zhuǎn)發(fā)方法,若所述報文已經(jīng)轉(zhuǎn)發(fā)或者達(dá)到最大轉(zhuǎn)發(fā)跳數(shù),則 丟棄所述報文,避免了報文轉(zhuǎn)發(fā)過程中廣播風(fēng)暴和廣播環(huán)路的發(fā)生,提高了報文轉(zhuǎn)發(fā)的效 率。具體地,若當(dāng)前節(jié)點已經(jīng)轉(zhuǎn)發(fā)過所述報文,則將所述報文丟棄,可以保證同一個報文只 被一個節(jié)點轉(zhuǎn)發(fā)一次,避免了廣播風(fēng)暴的發(fā)生。若所述報文已經(jīng)達(dá)到最大轉(zhuǎn)發(fā)跳數(shù),即轉(zhuǎn)發(fā) 跳數(shù)達(dá)到預(yù)設(shè)的閾值,將所述報文丟棄,可以避免形成廣播環(huán)路。
[0067] 需要說明的是,在本發(fā)明的一種優(yōu)選實施例中,所述報文還包括:可選長度;所述 可選長度用于表示可選節(jié)點地址的個數(shù),廣播報文的可選長度為〇 ;單播報文的可選長度 為單播報文的可選節(jié)點地址的個數(shù),單播報文的可選長度不為0。
[0068] 所述步驟102辨別所述報文的報文類型,具體可以通過以下方式實現(xiàn):查詢所述 報文的可選長度;當(dāng)所述報文的可選長度可選長度為〇時,辨別出所述報文為廣播報文; 當(dāng)所述報文的可選長度可選長度為不為0時,辨別出所述報文為單播報文。
[0069] 需要說明的是,在本發(fā)明的一種優(yōu)選實施例中,所述判斷所述報文是否已經(jīng)達(dá)到 最大轉(zhuǎn)發(fā)跳數(shù),具體可以通過以下方式實現(xiàn):判斷所述報文的轉(zhuǎn)發(fā)跳數(shù)是否達(dá)到預(yù)設(shè)的轉(zhuǎn) 發(fā)閾值;當(dāng)所述轉(zhuǎn)發(fā)跳數(shù)達(dá)到預(yù)設(shè)的轉(zhuǎn)發(fā)閾值時,判斷所述報文達(dá)到最大轉(zhuǎn)發(fā)跳數(shù);當(dāng)所 述轉(zhuǎn)發(fā)跳數(shù)未達(dá)到預(yù)設(shè)的轉(zhuǎn)發(fā)閾值時,判斷所述報文未達(dá)到最大轉(zhuǎn)發(fā)跳數(shù)。
[0070] 需要說明的是,當(dāng)前節(jié)點每次轉(zhuǎn)發(fā)報文時,都會記錄轉(zhuǎn)發(fā)的報文的報文序列號,形 成已發(fā)送列表。在本發(fā)明的一種優(yōu)選實施例中,所述報文還包括:報文序列號,所述報文序 列號用于區(qū)分不同的報文;所述判斷所述報文是否已經(jīng)轉(zhuǎn)發(fā),具體包括以下子步驟:
[0071] 子步驟一,查詢所述當(dāng)前節(jié)點的已發(fā)送列表,所述已發(fā)送列表由當(dāng)前節(jié)點在每次 轉(zhuǎn)發(fā)后記錄所轉(zhuǎn)發(fā)的報文的報文序列號。
[0072] 子步驟二,判斷所述報文的報文序列號是否在所述當(dāng)前節(jié)點的已發(fā)送列表中。
[0073] 子步驟三,當(dāng)所述報文的報文序列號在所述當(dāng)前節(jié)點的已發(fā)送列表中時,判斷所 述報文已經(jīng)轉(zhuǎn)發(fā)。
[0074] 子步驟四,當(dāng)所述報文的報文序列號不在所述當(dāng)前節(jié)點的已發(fā)送列表中時,判斷 所述報文未轉(zhuǎn)發(fā)。
[0075] 需要說明的是,在本發(fā)明的一種優(yōu)選實施例中,所述報文還包括:直接節(jié)點個數(shù)、 直接節(jié)點地址和/或轉(zhuǎn)發(fā)節(jié)點地址。和/或包括以下幾種情況:(1)所述報文包括:直接 節(jié)點個數(shù)、直接節(jié)點地址和轉(zhuǎn)發(fā)節(jié)點地址;(2)所述報文包括:直接節(jié)點個數(shù)和直接節(jié)點地 址;(3)所述報文包括:轉(zhuǎn)發(fā)節(jié)點地址。所述更新所述報文可以通過以下方式實現(xiàn):
[0076] 第一,判斷所述報文的直接節(jié)點個數(shù)是否為0 ;
[0077] 第二,當(dāng)所述報文的直接節(jié)點個數(shù)為0時,將所述報文的轉(zhuǎn)發(fā)節(jié)點地址更新為當(dāng) 前節(jié)點的地址,將所述報文的轉(zhuǎn)發(fā)跳數(shù)加一,將所述報文的直接節(jié)點個數(shù)更新為1,將所述 報文的直接節(jié)點地址更新為所述上一節(jié)點的地址;
[0078] 第三,當(dāng)所述報文的直接節(jié)點個數(shù)不為0時,則判斷當(dāng)前節(jié)點的直接節(jié)點地址是 否包含在所述報文的直接節(jié)點地址中;當(dāng)所述當(dāng)前節(jié)點的直接節(jié)點地址包含在所述報文的 直接節(jié)點地址中時,丟棄所述報文;當(dāng)所述當(dāng)前節(jié)點的直接節(jié)點地址未包含在所述報文的 直接節(jié)點地址中時,將所述報文的轉(zhuǎn)發(fā)節(jié)點地址更新為所述當(dāng)前節(jié)點的地址,將所述報文 的轉(zhuǎn)發(fā)跳數(shù)加一,將所述報文的直接節(jié)點個數(shù)更新為所述當(dāng)前節(jié)點的直接節(jié)點個數(shù),并將 所述報文的直接節(jié)點地址更新為所述當(dāng)前節(jié)點的直接節(jié)點的地址。
[0079] 需要說明的是,在本發(fā)明的另一種優(yōu)選實施例中,所述報文還包括:直接節(jié)點地 址;所述將更新后的報文轉(zhuǎn)發(fā)給其他節(jié)點,具體可以包括:按照更新后的報文的直接節(jié)點 地址將所述更新后的報文轉(zhuǎn)發(fā)給更新后的報文的直接節(jié)點。
[0080] 在本發(fā)明的一種優(yōu)選實施例中,所述報文還包括:報文序列號;所述判斷所述報 文是否已經(jīng)回復(fù),具體包括以下子步驟:
[0081] 子步驟一,查詢所述當(dāng)前節(jié)點的已發(fā)送列表,所述已發(fā)送列表由當(dāng)前節(jié)點在每次 轉(zhuǎn)發(fā)后記錄所轉(zhuǎn)發(fā)的報文的報文序列號。
[0082] 子步驟二,判斷所述報文的報文序列號是否在所述當(dāng)前節(jié)點的已發(fā)送列表中。
[0083] 子步驟三,當(dāng)所述報文的報文序列號在所述當(dāng)前節(jié)點的已發(fā)送列表中時,判斷所 述報文已經(jīng)回復(fù)。
[0084] 子步驟四,當(dāng)所述報文的報文序列號不在所述當(dāng)前節(jié)點的已發(fā)送列表中時,判斷 所述報文未回復(fù)。
[0085] 在本發(fā)明的一種優(yōu)選實施例中,所述報文還包括:可選長度、直接節(jié)點個數(shù)、直接 節(jié)點地址和/或轉(zhuǎn)發(fā)節(jié)點地址;所述回復(fù)所述報文具體可以包括:
[0086] 1)判斷所述當(dāng)前節(jié)點的直接節(jié)點地址是否包含在所述報文的直接節(jié)點地址中;
[0087] 2)當(dāng)所述當(dāng)前節(jié)點的直接節(jié)點地址包含在所述報文的直接節(jié)點地址中時,丟棄 所述報文;
[0088] 3)當(dāng)所述當(dāng)前節(jié)點的直接節(jié)點地址未包含在所述報文的直接節(jié)點地址中時,將所 述報文的轉(zhuǎn)發(fā)節(jié)點地址更新為所述當(dāng)前節(jié)點的地址,將所述報文的可選長度更新為所述當(dāng) 前節(jié)點除所述上一節(jié)點外的直接節(jié)點個數(shù),將所述報文的可選節(jié)點地址更新為所述當(dāng)前節(jié) 點除所述上一節(jié)點外的直接節(jié)點地址,將所述報文的直接節(jié)點個數(shù)更新為所述當(dāng)前節(jié)點的 直接節(jié)點個數(shù),并將所述報文的直接節(jié)點地址更新為所述當(dāng)前節(jié)點的直接節(jié)點的地址;按 照更新后的報文的直接節(jié)點地址進(jìn)行回復(fù)。
[0089] 本實施例結(jié)合表1所示的完整報文格式,對上述優(yōu)選實施例進(jìn)行說明,在本實施 例中,完整報文格式如表1所示,完整報文格式包括:發(fā)送節(jié)點地址、報文序列號、轉(zhuǎn)發(fā)跳 數(shù)、可選長度、可選節(jié)點地址、直接節(jié)點個數(shù)、直接節(jié)點地址和轉(zhuǎn)發(fā)節(jié)點地址。含義如下:
[0090] Node_Info:可以擴(kuò)展,比如Node的標(biāo)識(網(wǎng)關(guān)、上報點等)等其他節(jié)點信息; Payload :可選節(jié)點地址;Payload_Len:可選長度,即可選節(jié)點地址的個數(shù),Payload_Len =0表示廣播報文,即廣播報文的可選長度為0 ;Payload_Len尹0表示單播報文;Dnode_ Count:發(fā)送節(jié)點(轉(zhuǎn)發(fā)節(jié)點)的直接節(jié)點個數(shù);NIDI:發(fā)送節(jié)點(轉(zhuǎn)發(fā)節(jié)點)地址; NID2-NIDn :直接節(jié)點地址。需要說明的是,MESSAGE_HEADER表示報文的協(xié)議頭,MESSAGE_ HEADER的格式如表2所示,含義如下:Proto_magic:標(biāo)示協(xié)議報文;Versoin :協(xié)議版本; Nid :發(fā)送節(jié)點地址;Seq :報文序列號;HTL :轉(zhuǎn)發(fā)跳數(shù);Type :協(xié)議類型,默認(rèn)為1。
【權(quán)利要求】
1. 一種報文轉(zhuǎn)發(fā)方法,其特征在于,包括: 接收上一節(jié)點發(fā)送的報文,所述報文包括:轉(zhuǎn)發(fā)跳數(shù)和/或可選節(jié)點地址; 辨別所述報文的報文類型,所述報文類型包括:廣播報文和單播報文; 當(dāng)辨別出所述報文為廣播報文時,判斷所述報文是否已經(jīng)轉(zhuǎn)發(fā)或者達(dá)到最大轉(zhuǎn)發(fā)跳 數(shù),若所述報文已經(jīng)轉(zhuǎn)發(fā)或者達(dá)到最大轉(zhuǎn)發(fā)跳數(shù),則丟棄所述報文;若所述報文未轉(zhuǎn)發(fā)且未 達(dá)到最大轉(zhuǎn)發(fā)跳數(shù),則更新所述報文,將更新后的報文轉(zhuǎn)發(fā)給其他節(jié)點; 當(dāng)辨別出所述報文為單播報文時,判斷所述報文的可選節(jié)點地址是否為當(dāng)前節(jié)點的地 址或者所述報文已經(jīng)回復(fù);若所述報文的可選節(jié)點地址不是所述當(dāng)前節(jié)點的地址或者所述 報文已經(jīng)回復(fù),則丟棄所述報文;若所述報文的可選節(jié)點地址是所述當(dāng)前節(jié)點的地址且所 述報文未回復(fù),則回復(fù)所述報文。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述報文還包括:可選長度;所述辨別所 述報文的報文類型,包括: 查詢所述報文的可選長度; 當(dāng)所述報文的可選長度可選長度為〇時,辨別出所述報文為廣播報文; 當(dāng)所述報文的可選長度可選長度為不為〇時,辨別出所述報文為單播報文。
3. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述判斷所述報文是否已經(jīng)達(dá)到最大轉(zhuǎn) 發(fā)跳數(shù),包括: 判斷所述報文的轉(zhuǎn)發(fā)跳數(shù)是否達(dá)到預(yù)設(shè)的轉(zhuǎn)發(fā)閾值; 當(dāng)所述轉(zhuǎn)發(fā)跳數(shù)達(dá)到預(yù)設(shè)的轉(zhuǎn)發(fā)閾值時,判斷所述報文達(dá)到最大轉(zhuǎn)發(fā)跳數(shù); 當(dāng)所述轉(zhuǎn)發(fā)跳數(shù)未達(dá)到預(yù)設(shè)的轉(zhuǎn)發(fā)閾值時,判斷所述報文未達(dá)到最大轉(zhuǎn)發(fā)跳數(shù)。
4. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述報文還包括:報文序列號;所述判斷 所述報文是否已經(jīng)轉(zhuǎn)發(fā),包括: 查詢所述當(dāng)前節(jié)點的已發(fā)送列表,所述已發(fā)送列表由當(dāng)前節(jié)點在每次轉(zhuǎn)發(fā)后記錄所轉(zhuǎn) 發(fā)的報文的報文序列號; 判斷所述報文的報文序列號是否在所述當(dāng)前節(jié)點的已發(fā)送列表中; 當(dāng)所述報文的報文序列號在所述當(dāng)前節(jié)點的已發(fā)送列表中時,判斷所述報文已經(jīng)轉(zhuǎn) 發(fā); 當(dāng)所述報文的報文序列號不在所述當(dāng)前節(jié)點的已發(fā)送列表中時,判斷所述報文未轉(zhuǎn) 發(fā)。
5. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述報文還包括:直接節(jié)點個數(shù)、直接節(jié) 點地址和/或轉(zhuǎn)發(fā)節(jié)點地址;所述更新所述報文包括: 判斷所述報文的直接節(jié)點個數(shù)是否為〇 ; 當(dāng)所述報文的直接節(jié)點個數(shù)為〇時,將所述報文的轉(zhuǎn)發(fā)節(jié)點地址更新為當(dāng)前節(jié)點的地 址,將所述報文的轉(zhuǎn)發(fā)跳數(shù)加一,將所述報文的直接節(jié)點個數(shù)更新為1,將所述報文的直接 節(jié)點地址更新為所述上一節(jié)點的地址; 當(dāng)所述報文的直接節(jié)點個數(shù)不為〇時,則判斷當(dāng)前節(jié)點的直接節(jié)點地址是否包含在所 述報文的直接節(jié)點地址中;當(dāng)所述當(dāng)前節(jié)點的直接節(jié)點地址包含在所述報文的直接節(jié)點地 址中時,丟棄所述報文;當(dāng)所述當(dāng)前節(jié)點的直接節(jié)點地址未包含在所述報文的直接節(jié)點地 址中時,將所述報文的轉(zhuǎn)發(fā)節(jié)點地址更新為所述當(dāng)前節(jié)點的地址,將所述報文的轉(zhuǎn)發(fā)跳數(shù) 加一,將所述報文的直接節(jié)點個數(shù)更新為所述當(dāng)前節(jié)點的直接節(jié)點個數(shù),并將所述報文的 直接節(jié)點地址更新為所述當(dāng)前節(jié)點的直接節(jié)點的地址。
6. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述報文還包括:直接節(jié)點地址;所述將 更新后的報文轉(zhuǎn)發(fā)給其他節(jié)點包括: 按照更新后的報文的直接節(jié)點地址將所述更新后的報文轉(zhuǎn)發(fā)給更新后的報文的直接 節(jié)點。
7. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述報文還包括:報文序列號;所述判斷 所述報文是否已經(jīng)回復(fù),包括: 查詢所述當(dāng)前節(jié)點的已發(fā)送列表,所述已發(fā)送列表由當(dāng)前節(jié)點在每次轉(zhuǎn)發(fā)后記錄所轉(zhuǎn) 發(fā)的報文的報文序列號; 判斷所述報文的報文序列號是否在所述當(dāng)前節(jié)點的已發(fā)送列表中; 當(dāng)所述報文的報文序列號在所述當(dāng)前節(jié)點的已發(fā)送列表中時,判斷所述報文已經(jīng)回 復(fù); 當(dāng)所述報文的報文序列號不在所述當(dāng)前節(jié)點的已發(fā)送列表中時,判斷所述報文未回 復(fù)。
8. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述報文還包括:可選長度、直接節(jié)點個 數(shù)、直接節(jié)點地址和/或轉(zhuǎn)發(fā)節(jié)點地址;所述回復(fù)所述報文包括: 判斷所述當(dāng)前節(jié)點的直接節(jié)點地址是否包含在所述報文的直接節(jié)點地址中; 當(dāng)所述當(dāng)前節(jié)點的直接節(jié)點地址包含在所述報文的直接節(jié)點地址中時,丟棄所述報 文; 當(dāng)所述當(dāng)前節(jié)點的直接節(jié)點地址未包含在所述報文的直接節(jié)點地址中時,將所述報文 的轉(zhuǎn)發(fā)節(jié)點地址更新為所述當(dāng)前節(jié)點的地址,將所述報文的可選長度更新為所述當(dāng)前節(jié)點 除所述上一節(jié)點外的直接節(jié)點個數(shù),將所述報文的可選節(jié)點地址更新為所述當(dāng)前節(jié)點除所 述上一節(jié)點外的直接節(jié)點地址,將所述報文的直接節(jié)點個數(shù)更新為所述當(dāng)前節(jié)點的直接節(jié) 點個數(shù),并將所述報文的直接節(jié)點地址更新為所述當(dāng)前節(jié)點的直接節(jié)點的地址;按照更新 后的報文的直接節(jié)點地址進(jìn)行回復(fù)。
9. 一種報文轉(zhuǎn)發(fā)裝置,其特征在于,包括: 接收模塊,用于接收上一節(jié)點發(fā)送的報文,所述報文包括:轉(zhuǎn)發(fā)跳數(shù)和/或可選節(jié)點地 址; 辨別模塊,與所述接收模塊相連,用于辨別所述報文的報文類型,所述報文類型包括: 廣播報文和單播報文; 廣播報文處理模塊,與所述辨別模塊相連,用于當(dāng)所述辨別模塊辨別出所述報文為廣 播報文時,判斷所述報文是否已經(jīng)轉(zhuǎn)發(fā)或者達(dá)到最大轉(zhuǎn)發(fā)跳數(shù),若所述報文已經(jīng)轉(zhuǎn)發(fā)或者 達(dá)到最大轉(zhuǎn)發(fā)跳數(shù),則丟棄所述報文;若所述報文未轉(zhuǎn)發(fā)且未達(dá)到最大轉(zhuǎn)發(fā)跳數(shù),則更新所 述報文,將更新后的報文轉(zhuǎn)發(fā)給其他節(jié)點; 單播報文處理模塊,與所述辨別模塊相連,用于當(dāng)所述辨別模塊辨別出所述報文為單 播報文時,判斷所述報文的可選節(jié)點地址是否為當(dāng)前節(jié)點的地址或者所述報文已經(jīng)回復(fù); 若所述報文的可選節(jié)點地址不是所述當(dāng)前節(jié)點的地址或者所述報文已經(jīng)回復(fù),則丟棄所述 報文;若所述報文的可選節(jié)點地址是所述當(dāng)前節(jié)點的地址且所述報文未回復(fù),則回復(fù)所述 報文。
10.根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述報文還包括:可選長度;所述辨別模 塊包括: 查詢子模塊,用于查詢所述報文的可選長度; 廣播辨別子模塊,與所述查詢子模塊相連,用于當(dāng)所述查詢子模塊查詢到所述報文的 可選長度為〇時,辨別出所述報文為廣播報文; 單播辨別子模塊,與所述查詢子模塊相連,用于當(dāng)所述查詢子模塊查詢到所述報文的 可選長度為不為〇時,辨別出所述報文為單播報文。
【文檔編號】H04L12/705GK104378290SQ201410602687
【公開日】2015年2月25日 申請日期:2014年10月31日 優(yōu)先權(quán)日:2014年10月31日
【發(fā)明者】李騰飛 申請人:北京盈進(jìn)科技有限公司