本發(fā)明涉及通信技術(shù)領(lǐng)域,特別涉及一種表項(xiàng)下發(fā)的方法及控制器。
背景技術(shù):在通信網(wǎng)絡(luò)中,數(shù)據(jù)包的傳輸是通過(guò)通信節(jié)點(diǎn)完成的。節(jié)點(diǎn)包括路由器和交換機(jī)等設(shè)備,節(jié)點(diǎn)的主要工作是為經(jīng)過(guò)本節(jié)點(diǎn)的每個(gè)數(shù)據(jù)包尋找一條傳輸路徑,并將該數(shù)據(jù)有效地傳送到目的節(jié)點(diǎn)。為了完成這項(xiàng)工作,每個(gè)節(jié)點(diǎn)需要進(jìn)行網(wǎng)絡(luò)拓?fù)涫占?,獲取網(wǎng)絡(luò)中子節(jié)點(diǎn)的信息,并根據(jù)獲取的信息計(jì)算到達(dá)其他目的節(jié)點(diǎn)的單播表項(xiàng)和組播表項(xiàng),表項(xiàng)中包含的信息決定了數(shù)據(jù)包轉(zhuǎn)發(fā)的策略。在SDN(SoftwareDefinedNetwork,軟件定義網(wǎng)絡(luò))解決方案下,底層物理節(jié)點(diǎn)不再自行計(jì)算表項(xiàng),而是將收集到的網(wǎng)絡(luò)拓?fù)湫畔⑸蠄?bào)到集中控制器Controller,Controller根據(jù)全網(wǎng)的網(wǎng)絡(luò)拓?fù)湫畔⒓杏?jì)算每一個(gè)節(jié)點(diǎn)的表項(xiàng),并將表項(xiàng)下發(fā)給相應(yīng)的節(jié)點(diǎn)。在上述SDN解決方案中,當(dāng)網(wǎng)絡(luò)拓?fù)浒l(fā)生變化時(shí),Controller需要為其控制下的每個(gè)節(jié)點(diǎn)重新計(jì)算單播表項(xiàng)和組播表項(xiàng)。例如,網(wǎng)絡(luò)中包括節(jié)點(diǎn)A、節(jié)點(diǎn)B、節(jié)點(diǎn)C和節(jié)點(diǎn)D四個(gè)節(jié)點(diǎn),四個(gè)節(jié)點(diǎn)間的連接關(guān)系為:節(jié)點(diǎn)A連接節(jié)點(diǎn)B、節(jié)點(diǎn)B連接節(jié)點(diǎn)C、節(jié)點(diǎn)C連接節(jié)點(diǎn)D,節(jié)點(diǎn)D連接節(jié)點(diǎn)A。當(dāng)前的數(shù)據(jù)包轉(zhuǎn)發(fā)策略為:由節(jié)點(diǎn)A轉(zhuǎn)發(fā)至節(jié)點(diǎn)B,再由節(jié)點(diǎn)B轉(zhuǎn)發(fā)至節(jié)點(diǎn)C,最后由節(jié)點(diǎn)C轉(zhuǎn)發(fā)至節(jié)點(diǎn)D。當(dāng)節(jié)點(diǎn)C和節(jié)點(diǎn)D之間的傳輸鏈路出現(xiàn)故障時(shí),現(xiàn)有的傳輸鏈路被破壞,網(wǎng)絡(luò)拓?fù)浒l(fā)生變化,節(jié)點(diǎn)A不能將數(shù)據(jù)包通過(guò)原有鏈路傳輸至節(jié)點(diǎn)D,需要通過(guò)其他路徑實(shí)現(xiàn)。此時(shí),Controller根據(jù)最新的網(wǎng)絡(luò)拓?fù)淝闆r計(jì)算網(wǎng)絡(luò)中四個(gè)節(jié)點(diǎn)的新表項(xiàng),指示最新的數(shù)據(jù)包轉(zhuǎn)發(fā)策略為由節(jié)點(diǎn)A轉(zhuǎn)發(fā)至節(jié)點(diǎn)D,并將新表項(xiàng)下發(fā)至相應(yīng)的節(jié)點(diǎn)?,F(xiàn)有技術(shù)中至少存在如下問(wèn)題:在Controller向四個(gè)節(jié)點(diǎn)下發(fā)新的單播表項(xiàng)時(shí),由于Controller和這四個(gè)節(jié)點(diǎn)的鏈路距離不同,加上鏈路通信質(zhì)量等因素的影響,會(huì)導(dǎo)致各個(gè)節(jié)點(diǎn)接收到新的單播表項(xiàng)的時(shí)刻不同。如果節(jié)點(diǎn)B先接收到新單播表項(xiàng)表項(xiàng),節(jié)點(diǎn)B會(huì)根據(jù)新單播表項(xiàng)表項(xiàng)將數(shù)據(jù)發(fā)送給節(jié)點(diǎn)A,而此時(shí)若節(jié)點(diǎn)A未接收到新單播表項(xiàng)表項(xiàng),節(jié)點(diǎn)A仍然會(huì)將接收到的數(shù)據(jù)發(fā)送給節(jié)點(diǎn)B,這樣在節(jié)點(diǎn)A和節(jié)點(diǎn)B之間就形成了環(huán)路。導(dǎo)致數(shù)據(jù)包在不能指定跳數(shù)到達(dá)目標(biāo)節(jié)點(diǎn),當(dāng)跳數(shù)為0時(shí),數(shù)據(jù)包被當(dāng)前節(jié)點(diǎn)丟棄,造成數(shù)據(jù)丟失。
技術(shù)實(shí)現(xiàn)要素:提供一種表項(xiàng)下發(fā)的方法及控制器,能夠解決集中控制下由于網(wǎng)絡(luò)拓?fù)渥兓瘜?dǎo)致節(jié)點(diǎn)間出現(xiàn)環(huán)路的問(wèn)題,提高數(shù)據(jù)傳輸?shù)目煽啃浴5谝环矫?,提供一種表項(xiàng)下發(fā)的方法,包括:當(dāng)網(wǎng)絡(luò)拓?fù)浒l(fā)生變化時(shí),控制器接收所述控制器控制下的至少兩個(gè)節(jié)點(diǎn)上報(bào)的網(wǎng)絡(luò)拓?fù)湫畔ⅲ凰隹刂破鞲鶕?jù)所述網(wǎng)絡(luò)拓?fù)湫畔?,分別以每一個(gè)所述節(jié)點(diǎn)為根節(jié)點(diǎn)計(jì)算轉(zhuǎn)發(fā)表項(xiàng);所述控制器按照所述根節(jié)點(diǎn)的子節(jié)點(diǎn)與所述根節(jié)點(diǎn)的距離由近至遠(yuǎn)的順序,向所述子節(jié)點(diǎn)下發(fā)所述轉(zhuǎn)發(fā)表項(xiàng)。在第一種可能的實(shí)現(xiàn)方式中,所述根據(jù)所述網(wǎng)絡(luò)拓?fù)湫畔ⅲ謩e以每一個(gè)所述節(jié)點(diǎn)為根節(jié)點(diǎn)計(jì)算轉(zhuǎn)發(fā)表項(xiàng)包括:使用反向最短路徑優(yōu)先R-SPF算法分別以每一個(gè)所述節(jié)點(diǎn)為根節(jié)點(diǎn)計(jì)算R-SPF樹(shù),并根據(jù)所述R-SPF樹(shù)獲取除所述根節(jié)點(diǎn)以外的子節(jié)點(diǎn)的轉(zhuǎn)發(fā)表項(xiàng)。結(jié)合第一方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,在 所述按照所述根節(jié)點(diǎn)的子節(jié)點(diǎn)與所述根節(jié)點(diǎn)的距離由近至遠(yuǎn)的順序,向所述子節(jié)點(diǎn)下發(fā)所述轉(zhuǎn)發(fā)表項(xiàng)之前,所述方法還包括:根據(jù)所述R-SPF樹(shù)確定所述子節(jié)點(diǎn)在所述R-SPF樹(shù)中所處的層數(shù);比較所述子節(jié)點(diǎn)所處的層數(shù)的數(shù)值大小,根據(jù)所述子節(jié)點(diǎn)所處的層數(shù)的數(shù)值大小確定所述子節(jié)點(diǎn)與所述根節(jié)點(diǎn)的距離,所述層數(shù)的數(shù)值大小與所述距離成正比。結(jié)合第一方面的第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,所述按照所述子節(jié)點(diǎn)與所述根節(jié)點(diǎn)的距離由近至遠(yuǎn)的順序,向所述子節(jié)點(diǎn)下發(fā)所述轉(zhuǎn)發(fā)表項(xiàng)包括:按照所述子節(jié)點(diǎn)所處的層數(shù)的數(shù)值由小到大的順序,向每一層對(duì)應(yīng)的所述子節(jié)點(diǎn)下發(fā)所述轉(zhuǎn)發(fā)表項(xiàng)。第二方面,提供一種控制器,包括:接收單元,用于當(dāng)網(wǎng)絡(luò)拓?fù)浒l(fā)生變化時(shí),接收所述控制器控制下的至少兩個(gè)節(jié)點(diǎn)上報(bào)的網(wǎng)絡(luò)拓?fù)湫畔?;?jì)算單元,用于根據(jù)所述接收單元接收到的所述網(wǎng)絡(luò)拓?fù)湫畔?,分別以每一個(gè)所述節(jié)點(diǎn)為根節(jié)點(diǎn)計(jì)算轉(zhuǎn)發(fā)表項(xiàng);發(fā)送單元,用于按照所述根節(jié)點(diǎn)的子節(jié)點(diǎn)與所述根節(jié)點(diǎn)的距離由近至遠(yuǎn)的順序,向所述子節(jié)點(diǎn)下發(fā)所述計(jì)算單元計(jì)算出的所述轉(zhuǎn)發(fā)表項(xiàng)。在第一種可能的實(shí)現(xiàn)方式中,所述計(jì)算單元具體用于:使用反向最短路徑優(yōu)先R-SPF算法分別以每一個(gè)所述節(jié)點(diǎn)為根節(jié)點(diǎn)計(jì)算R-SPF樹(shù),并根據(jù)所述R-SPF樹(shù)獲取除所述根節(jié)點(diǎn)以外的子節(jié)點(diǎn)的轉(zhuǎn)發(fā)表項(xiàng)。結(jié)合第二方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,所 述控制器還包括:確定單元,用于根據(jù)所述R-SPF樹(shù)確定所述子節(jié)點(diǎn)在所述R-SPF樹(shù)中所處的層數(shù);比較單元,用于比較所述子節(jié)點(diǎn)所處的層數(shù)的數(shù)值大小,根據(jù)所述子節(jié)點(diǎn)所處的層數(shù)的數(shù)值大小確定所述子節(jié)點(diǎn)與所述根節(jié)點(diǎn)的距離,所述層數(shù)的數(shù)值大小與所述距離成正比。結(jié)合第二方面的第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,所述發(fā)送單元具體用于:按照所述子節(jié)點(diǎn)所處的層數(shù)的數(shù)值由小到大的順序,向每一層對(duì)應(yīng)的所述子節(jié)點(diǎn)下發(fā)所述轉(zhuǎn)發(fā)表項(xiàng)。與現(xiàn)有技術(shù)相比,本發(fā)明實(shí)施例中當(dāng)網(wǎng)絡(luò)拓?fù)浒l(fā)生變化時(shí),接收節(jié)點(diǎn)上報(bào)的網(wǎng)絡(luò)拓?fù)湫畔?;根?jù)所述網(wǎng)絡(luò)拓?fù)湫畔?,分別以每一個(gè)所述節(jié)點(diǎn)為根節(jié)點(diǎn)計(jì)算轉(zhuǎn)發(fā)表項(xiàng);按照所述根節(jié)點(diǎn)的子節(jié)點(diǎn)與所述根節(jié)點(diǎn)的距離由近至遠(yuǎn)的順序,向所述子節(jié)點(diǎn)下發(fā)所述轉(zhuǎn)發(fā)表項(xiàng)。通過(guò)制定向各個(gè)節(jié)點(diǎn)發(fā)送轉(zhuǎn)發(fā)表項(xiàng)的先后順序,優(yōu)先向距離根節(jié)點(diǎn)最近的節(jié)點(diǎn)下發(fā)轉(zhuǎn)發(fā)表項(xiàng),并根據(jù)距離由近至遠(yuǎn)的順序依次向R-SPF樹(shù)中的每一個(gè)節(jié)點(diǎn)下發(fā)轉(zhuǎn)發(fā)表項(xiàng)。從而在網(wǎng)絡(luò)拓?fù)浒l(fā)生變化時(shí),能夠降低節(jié)點(diǎn)間發(fā)送報(bào)文時(shí)出現(xiàn)環(huán)路的可能性,從而減少數(shù)據(jù)在傳輸過(guò)程中不能到達(dá)目標(biāo)節(jié)點(diǎn)而被丟棄的情況出現(xiàn),提高數(shù)據(jù)傳輸?shù)目煽啃院拖到y(tǒng)資源的利用效率。附圖說(shuō)明為了更清楚地說(shuō)明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其它的附圖。圖1為本發(fā)明一實(shí)施例提供的方法流程圖;圖2為本發(fā)明又一實(shí)施例提供的方法流程圖;圖3為本發(fā)明又一實(shí)施例提供的網(wǎng)絡(luò)拓?fù)涫疽鈭D;圖4為本發(fā)明又一實(shí)施例提供的R-SPF樹(shù)意圖;圖5、圖6為本發(fā)明又一實(shí)施例提供的控制器結(jié)構(gòu)示意圖;圖7為本發(fā)明又一實(shí)施例提供的控制器結(jié)構(gòu)示意圖。具體實(shí)施方式下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其它實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。為使本發(fā)明技術(shù)方案的優(yōu)點(diǎn)更加清楚,下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明作詳細(xì)說(shuō)明。本發(fā)明一實(shí)施例提供一種表項(xiàng)下發(fā)的方法,如圖1所示,所述方法包括:101、當(dāng)網(wǎng)絡(luò)拓?fù)浒l(fā)生變化時(shí),控制器Controller接收控制器控制下的至少兩個(gè)節(jié)點(diǎn)上報(bào)的網(wǎng)絡(luò)拓?fù)湫畔ⅰ?02、控制器根據(jù)所述網(wǎng)絡(luò)拓?fù)湫畔?,分別以每一個(gè)所述節(jié)點(diǎn)為根節(jié)點(diǎn)計(jì)算轉(zhuǎn)發(fā)表項(xiàng)。103、控制器按照所述根節(jié)點(diǎn)的子節(jié)點(diǎn)與所述根節(jié)點(diǎn)的距離由近至遠(yuǎn)的順序,向所述子節(jié)點(diǎn)下發(fā)所述轉(zhuǎn)發(fā)表項(xiàng)。其中,所述根據(jù)所述網(wǎng)絡(luò)拓?fù)湫畔?,分別以每一個(gè)所述節(jié)點(diǎn)為根節(jié)點(diǎn)計(jì)算轉(zhuǎn)發(fā)表項(xiàng)包括:使用反向最短路徑優(yōu)先R-SPF算法分別以每一個(gè)所述節(jié)點(diǎn)為根節(jié)點(diǎn)計(jì)算R-SPF樹(shù),并根據(jù)所述R-SPF樹(shù)獲取除所述根節(jié)點(diǎn)以外的子節(jié)點(diǎn)的轉(zhuǎn)發(fā)表 項(xiàng)。進(jìn)一步的,在所述按照所述根節(jié)點(diǎn)的子節(jié)點(diǎn)與所述根節(jié)點(diǎn)的距離由近至遠(yuǎn)的順序,向所述子節(jié)點(diǎn)下發(fā)所述轉(zhuǎn)發(fā)表項(xiàng)之前,所述方法還包括:根據(jù)所述R-SPF樹(shù)確定所述子節(jié)點(diǎn)在所述R-SPF樹(shù)中所處的層數(shù);比較所述子節(jié)點(diǎn)所處的層數(shù)的數(shù)值大小,根據(jù)所述子節(jié)點(diǎn)所處的層數(shù)的數(shù)值大小確定所述子節(jié)點(diǎn)與所述根節(jié)點(diǎn)的距離,所述層數(shù)的數(shù)值大小與所述距離成正比。其中,所述按照所述子節(jié)點(diǎn)與所述根節(jié)點(diǎn)的距離由近至遠(yuǎn)的順序,向所述子節(jié)點(diǎn)下發(fā)所述轉(zhuǎn)發(fā)表項(xiàng)包括:按照所述子節(jié)點(diǎn)所處的層數(shù)的數(shù)值由小到大的順序,向每一層對(duì)應(yīng)的所述子節(jié)點(diǎn)下發(fā)所述轉(zhuǎn)發(fā)表項(xiàng)。與現(xiàn)有技術(shù)相比,本發(fā)明實(shí)施例中當(dāng)網(wǎng)絡(luò)拓?fù)浒l(fā)生變化時(shí),接收節(jié)點(diǎn)上報(bào)的網(wǎng)絡(luò)拓?fù)湫畔?;根?jù)所述網(wǎng)絡(luò)拓?fù)湫畔ⅲ謩e以每一個(gè)所述節(jié)點(diǎn)為根節(jié)點(diǎn)計(jì)算轉(zhuǎn)發(fā)表項(xiàng);按照所述根節(jié)點(diǎn)的子節(jié)點(diǎn)與所述根節(jié)點(diǎn)的距離由近至遠(yuǎn)的順序,向所述子節(jié)點(diǎn)下發(fā)所述轉(zhuǎn)發(fā)表項(xiàng)。通過(guò)制定向各個(gè)節(jié)點(diǎn)發(fā)送轉(zhuǎn)發(fā)表項(xiàng)的先后順序,優(yōu)先向距離根節(jié)點(diǎn)最近的節(jié)點(diǎn)下發(fā)轉(zhuǎn)發(fā)表項(xiàng),并根據(jù)距離由近至遠(yuǎn)的順序依次向R-SPF樹(shù)中的每一個(gè)節(jié)點(diǎn)下發(fā)轉(zhuǎn)發(fā)表項(xiàng)。從而在網(wǎng)絡(luò)拓?fù)浒l(fā)生變化時(shí),能夠降低節(jié)點(diǎn)間發(fā)送報(bào)文時(shí)出現(xiàn)環(huán)路的可能性,從而減少數(shù)據(jù)在傳輸過(guò)程中不能到達(dá)目標(biāo)節(jié)點(diǎn)而被丟棄的情況出現(xiàn),提高數(shù)據(jù)傳輸?shù)目煽啃院拖到y(tǒng)資源的利用效率。本發(fā)明又一實(shí)施例提供一種表項(xiàng)下發(fā)的方法,本實(shí)施例的應(yīng)用場(chǎng)景為SDN(SoftwareDefinedNetwork,軟件定義網(wǎng)絡(luò)),在該場(chǎng)景下,節(jié)點(diǎn)不再運(yùn)行STP(SpanningTreeProtocol,生成樹(shù)協(xié)議)、TRILL(TransparentInterconnection ofLotsofLinks,多鏈路透明互聯(lián))路由和破環(huán)協(xié)議,而是向控制器Controller上報(bào)網(wǎng)絡(luò)拓?fù)湫畔?,由控制器?duì)控制器控制下的所有節(jié)點(diǎn)的進(jìn)行計(jì)算,得到轉(zhuǎn)發(fā)表項(xiàng),并將轉(zhuǎn)發(fā)表項(xiàng)下發(fā)至控制器控制下的各個(gè)節(jié)點(diǎn),如圖2所示,所述方法包括:201、當(dāng)鏈路發(fā)生故障時(shí),控制器接收節(jié)點(diǎn)發(fā)送的網(wǎng)絡(luò)拓?fù)湫畔?。其中,所述?jié)點(diǎn)為底層設(shè)備,可以為路由器或者交換機(jī)。當(dāng)鏈路發(fā)生故障時(shí),會(huì)導(dǎo)致網(wǎng)絡(luò)拓?fù)湫畔l(fā)生變化,節(jié)點(diǎn)感知到網(wǎng)絡(luò)中的拓?fù)渥兓螅@取最新的網(wǎng)絡(luò)拓?fù)湫畔⒉⒆钚碌木W(wǎng)絡(luò)拓?fù)湫畔⑸蠄?bào)給控制器。具體的,以交換機(jī)為例對(duì)網(wǎng)絡(luò)拓?fù)湫畔⒌墨@取進(jìn)行說(shuō)明,例如,交換機(jī)感知到鏈路故障時(shí),運(yùn)行LLDP(LinkLayerDiscoveryProtocol,鏈路層發(fā)現(xiàn)協(xié)議)協(xié)議發(fā)現(xiàn)本地拓?fù)?,其中LLDP協(xié)議是一個(gè)與廠商無(wú)關(guān)的二層協(xié)議,它允許網(wǎng)絡(luò)設(shè)備在本地子網(wǎng)中通告自己的設(shè)備標(biāo)識(shí)和性能;進(jìn)一步的,在交換機(jī)獲取網(wǎng)絡(luò)拓?fù)湫畔⒑?,通過(guò)OpenFlow接口向控制器上報(bào)網(wǎng)絡(luò)拓?fù)湫畔ⅰP枰f(shuō)明的是,本步驟中由于鏈路發(fā)生故障使網(wǎng)絡(luò)拓?fù)湫畔l(fā)生變化,其僅僅是導(dǎo)致網(wǎng)絡(luò)拓?fù)湫畔l(fā)生變化的其中一種情況。例如,當(dāng)鏈路故障恢復(fù)時(shí)也會(huì)導(dǎo)致網(wǎng)絡(luò)拓?fù)湫畔l(fā)生變化。因此,此處不對(duì)導(dǎo)致網(wǎng)絡(luò)拓?fù)湫畔l(fā)生變化的具體因素進(jìn)行限定,本實(shí)施例也同樣適用其他導(dǎo)致網(wǎng)絡(luò)拓?fù)湫畔l(fā)生變化的情況。202、控制器根據(jù)網(wǎng)絡(luò)拓?fù)湫畔?,使用R-SPF(Reverse-ShortestPathFirst,反向最短路徑優(yōu)先)算法分別以各個(gè)節(jié)點(diǎn)為根節(jié)點(diǎn)計(jì)算R-SPF樹(shù)以及轉(zhuǎn)發(fā)表項(xiàng)。其中,R-SPF算法為SPF算法的逆算法,SPF算法計(jì)算的是目標(biāo)路由器(相當(dāng)于根節(jié)點(diǎn))到其他路由器的轉(zhuǎn)發(fā)表項(xiàng),而R-SPF算法計(jì)算的是其他路由器到目標(biāo)路由器的轉(zhuǎn)發(fā)表項(xiàng)。使用R-SPF算法可以只通過(guò)一次計(jì)算就能夠得出所有路由器 到目標(biāo)路由器的轉(zhuǎn)發(fā)表項(xiàng)。例如,有三個(gè)路由器,分別用路由器1、路由器2和路由器3表示,以路由器1為目標(biāo)路由器,如果想獲得路由器2和路由器3到路由器1的轉(zhuǎn)發(fā)表項(xiàng),使用SPF算法需要分別以路由器2和路由器3為根節(jié)點(diǎn)進(jìn)行計(jì)算,需要兩次計(jì)算;而使用R-SPF算法只需以路由器1為根節(jié)點(diǎn)進(jìn)行計(jì)算,只需一次計(jì)算。進(jìn)一步的,得到所有路由器到目標(biāo)路由器的轉(zhuǎn)發(fā)表項(xiàng)后,結(jié)合集中控制,就可以對(duì)轉(zhuǎn)發(fā)表項(xiàng)的下發(fā)順序進(jìn)行優(yōu)化,提高路由器之間轉(zhuǎn)發(fā)報(bào)文的可靠性。為了便于理解R-SPF算法,以路由器為例對(duì)SPF算法進(jìn)行說(shuō)明。例如,運(yùn)行SPF算法的路由器把自己作為根節(jié)點(diǎn),找所有與其直接相連的鄰居節(jié)點(diǎn),放到候選節(jié)點(diǎn)數(shù)據(jù)庫(kù)中,然后取出開(kāi)銷最小的節(jié)點(diǎn)放到最短路徑樹(shù)上,再將整個(gè)最短路徑樹(shù)作為一個(gè)整體,找與其相連的所有鄰居節(jié)點(diǎn),更新候選節(jié)點(diǎn)數(shù)據(jù)庫(kù),再重復(fù)選取開(kāi)銷最小的,直至候選節(jié)點(diǎn)數(shù)據(jù)庫(kù)為空,所有節(jié)點(diǎn)都加到最短路徑樹(shù)上。進(jìn)一步的,引入三元組的概念,<N,D(N),{Adj(N)}>,其中,N表示節(jié)點(diǎn)N,D(N)表示從根節(jié)點(diǎn)S到節(jié)點(diǎn)N的總開(kāi)銷,{Adj(N)表示從根節(jié)點(diǎn)S到節(jié)點(diǎn)N,N的父節(jié)點(diǎn)。其他概念還包括:TENT表示還未放到樹(shù)上的三元組集合、PATH表示已經(jīng)放到樹(shù)上的三元組集合。具體計(jì)算過(guò)程如下:步驟一、把TENT和PATH都初始化為空。其中,Tentlength為[internalmetric=0,externalmetric=0]。把三元組<S,0,empty>放到TENT中,彈出放到PATH中;查找鄰接關(guān)系數(shù)據(jù)庫(kù),將根節(jié)點(diǎn)的所有鄰居的三元組放到TENT中,D(N)為根節(jié)點(diǎn)到節(jié)點(diǎn)N的接口開(kāi)銷值,Adj(N)={S}。步驟二、檢查剛剛放到PATH中的節(jié)點(diǎn)P的LSP(LabelSwitchedPath,標(biāo)簽交換路徑)的0分片。1)如果有P的LSP,并且“InfiniteHippityCost”bit被清除的話,對(duì)P的每個(gè)LSP分片計(jì)算dist(P,N)=D(P)+metric.k(P,N),其中dist(P,N)為從根節(jié)點(diǎn)經(jīng)過(guò)節(jié)點(diǎn)P到節(jié)點(diǎn)N的開(kāi)銷,D(P)為從根節(jié)點(diǎn)到節(jié)點(diǎn)P的開(kāi)銷,這個(gè)值已經(jīng)在前面計(jì)算出來(lái)了,metric.k(P,N)為從節(jié)點(diǎn)P到節(jié)點(diǎn)N的開(kāi)銷,這個(gè)值是從P的LSP中獲得的;2)如果dist(P,N)>MaxPathMetric,則不做修改;3)如果三元組<N,D(N),{Adj(N)}>已經(jīng)在PATH中了,則不做修改;4)如果TENT中有一個(gè)三元組<N,x,{Adj(N)}>,則進(jìn)行進(jìn)一步的判斷:若x=dist(P,N),則將Adj(N)替換成Adj(N,P),若x<dist(P,N),則不做修改,若x>dist(P,N),則將TENT中的<N,x,{Adj(N)}>替換成<N,dist(P,N),{Adj(P)}>;5)如果TENT中沒(méi)有三元組<N,x,{Adj(N)}>,則將三元組<N,dist(P,N),{Adj(P)}>加入到TENT中。步驟三、如果TENT為空,則停止流程;否則在TENT中找x值最小的三元組<P,x,{Adj(P)}>;從TENT中移除三元組<P,tentlength,{Adj(P)}>;將<P,D(P),{Adj(P)}>加入PATH中;如果剛加入PATH中的節(jié)點(diǎn)是終端系統(tǒng)的話則執(zhí)行步驟三,否則執(zhí)行步驟二。重復(fù)上述步驟直至候選節(jié)點(diǎn)數(shù)據(jù)庫(kù)為空,所有節(jié)點(diǎn)都加到最短路徑樹(shù)上。R-SPF算法的具體流程請(qǐng)參照SPF算法的步驟,此處不再進(jìn)行贅述。203、控制器根據(jù)R-SPF樹(shù)確定根節(jié)點(diǎn)和子節(jié)點(diǎn)的距離。其中,所述距離由子節(jié)點(diǎn)在所述R-SPF樹(shù)中的深度確定,即由各個(gè)子節(jié)點(diǎn)在樹(shù)中的層次確定,例如,如圖3所示,網(wǎng)絡(luò)中包括4個(gè)節(jié)點(diǎn),分別表示為節(jié)點(diǎn)A、節(jié)點(diǎn)B、節(jié)點(diǎn)C和節(jié)點(diǎn)D,節(jié)點(diǎn)C和節(jié)點(diǎn)D之間出現(xiàn)了鏈路故障,此時(shí)以D為根節(jié)點(diǎn)計(jì)算R-SPF樹(shù)以及轉(zhuǎn)發(fā)表項(xiàng),計(jì)算后得到的R-SPF樹(shù)如圖4所示,可以清楚的獲知,A位于R-SPF樹(shù)的第一層,B位于R-SPF樹(shù)的第二層,C位于R-SPF樹(shù)的第三層,A、B和C與D的距離遠(yuǎn)近關(guān)系為,A到D的距離<B到D的距離<C到D的距離。204、控制器按照所述根節(jié)點(diǎn)的子節(jié)點(diǎn)與根節(jié)點(diǎn)的距離由近至遠(yuǎn)的順序,向子節(jié)點(diǎn)下發(fā)轉(zhuǎn)發(fā)表項(xiàng)。其中,為了避免下發(fā)轉(zhuǎn)發(fā)表項(xiàng)后,由于各個(gè)子節(jié)點(diǎn)收到轉(zhuǎn)發(fā)表項(xiàng)的時(shí)間順序混亂導(dǎo)致節(jié)點(diǎn)間出現(xiàn)環(huán)路的問(wèn)題,優(yōu)先向距離根節(jié)點(diǎn)D最近的子節(jié)點(diǎn)A下發(fā)轉(zhuǎn)發(fā)表項(xiàng),這樣節(jié)點(diǎn)A接收到該轉(zhuǎn)發(fā)表項(xiàng)后,直接向根節(jié)點(diǎn)D傳輸報(bào)文,同理對(duì)子節(jié)點(diǎn)B和子節(jié)點(diǎn)C也是同樣處理,各個(gè)節(jié)點(diǎn)間不會(huì)出現(xiàn)環(huán)路;如果不按上述順序下發(fā)轉(zhuǎn)發(fā)表項(xiàng),那么可能會(huì)導(dǎo)致環(huán)路,例如,子節(jié)點(diǎn)B先接收到了根節(jié)點(diǎn)D下發(fā)的轉(zhuǎn)發(fā)表項(xiàng),而子節(jié)點(diǎn)A還未收到根節(jié)點(diǎn)D下發(fā)的轉(zhuǎn)發(fā)表項(xiàng),子節(jié)點(diǎn)B會(huì)立即向子節(jié)點(diǎn)A發(fā)送報(bào)文進(jìn)而使該報(bào)文傳輸至根節(jié)點(diǎn)D;而在子節(jié)點(diǎn)C和根節(jié)點(diǎn)D之間的鏈路故障前,子節(jié)點(diǎn)A向根節(jié)點(diǎn)D發(fā)送報(bào)文的方向是通過(guò)子節(jié)點(diǎn)B、子節(jié)點(diǎn)C再到根節(jié)點(diǎn)D,所以此時(shí)子節(jié)點(diǎn)A的報(bào)文傳輸方向?yàn)樽庸?jié)點(diǎn)B,這樣在子節(jié)點(diǎn)A和子節(jié)點(diǎn)B之間就形成了環(huán)路,報(bào)文就會(huì)在子節(jié)點(diǎn)A和子節(jié)點(diǎn)B之間不斷轉(zhuǎn)發(fā),嚴(yán)重浪費(fèi)了系統(tǒng)資源。因此,使用步驟204的轉(zhuǎn)發(fā)表項(xiàng)的下發(fā)順序可以有效的避免環(huán)路的出現(xiàn),提高系統(tǒng)資源的利用效率。需要說(shuō)明的是,當(dāng)鏈路故障恢復(fù)時(shí)或者其他導(dǎo)致網(wǎng)絡(luò)拓?fù)浒l(fā)生變化的情況出現(xiàn)時(shí),步驟201-204的處理方法依然適用,通過(guò)上述步驟能夠避免節(jié)點(diǎn)間環(huán)路的出現(xiàn)。與現(xiàn)有技術(shù)相比,本發(fā)明實(shí)施例中當(dāng)鏈路發(fā)生故障時(shí),控制器接收節(jié)點(diǎn)發(fā)送的網(wǎng)絡(luò)拓?fù)湫畔?;控制器根?jù)網(wǎng)絡(luò)拓?fù)湫畔?,使用R-SPF算法分別以各個(gè)節(jié)點(diǎn)為根節(jié)點(diǎn)計(jì)算R-SPF樹(shù)以及轉(zhuǎn)發(fā)表項(xiàng);控制器根據(jù)R-SPF樹(shù)確定根節(jié)點(diǎn)和子節(jié)點(diǎn)的距離;控制器按照所述根節(jié)點(diǎn)的子節(jié)點(diǎn)與根節(jié)點(diǎn)的距離由近至遠(yuǎn)的順序,向子節(jié)點(diǎn)下發(fā)轉(zhuǎn)發(fā)表項(xiàng)。通過(guò)制定向各個(gè)節(jié)點(diǎn)發(fā)送轉(zhuǎn)發(fā)表項(xiàng)的先后順序,優(yōu)先向距離根節(jié)點(diǎn)最近的節(jié)點(diǎn)下發(fā)轉(zhuǎn)發(fā)表項(xiàng),并根據(jù)距離由近至遠(yuǎn)的順序依次向R-SPF 樹(shù)中的每一個(gè)節(jié)點(diǎn)下發(fā)轉(zhuǎn)發(fā)表項(xiàng)。從而在網(wǎng)絡(luò)拓?fù)浒l(fā)生變化時(shí),能夠降低節(jié)點(diǎn)間發(fā)送報(bào)文時(shí)出現(xiàn)環(huán)路的可能性,從而減少數(shù)據(jù)在傳輸過(guò)程中不能到達(dá)目標(biāo)節(jié)點(diǎn)而被丟棄的情況出現(xiàn),提高數(shù)據(jù)傳輸?shù)目煽啃院拖到y(tǒng)資源的利用效率。本發(fā)明又一實(shí)施例提供一種表項(xiàng)下發(fā)的控制器30,如圖5所示,所述控制器30包括:接收單元31,用于當(dāng)網(wǎng)絡(luò)拓?fù)浒l(fā)生變化時(shí),接收所述控制器30控制下的至少兩個(gè)節(jié)點(diǎn)上報(bào)的網(wǎng)絡(luò)拓?fù)湫畔?;?jì)算單元32,用于根據(jù)所述接收單元31接收到的所述網(wǎng)絡(luò)拓?fù)湫畔?,分別以每一個(gè)所述節(jié)點(diǎn)為根節(jié)點(diǎn)計(jì)算轉(zhuǎn)發(fā)表項(xiàng);發(fā)送單元33,用于按照所述根節(jié)點(diǎn)的子節(jié)點(diǎn)與所述根節(jié)點(diǎn)的距離由近至遠(yuǎn)的順序,向所述子節(jié)點(diǎn)下發(fā)所述計(jì)算單元32計(jì)算出的所述轉(zhuǎn)發(fā)表項(xiàng)。其中,所述計(jì)算單元32具體用于:使用反向最短路徑優(yōu)先R-SPF算法分別以每一個(gè)所述節(jié)點(diǎn)為根節(jié)點(diǎn)計(jì)算R-SPF樹(shù),并根據(jù)所述R-SPF樹(shù)獲取除所述根節(jié)點(diǎn)以外的子節(jié)點(diǎn)的轉(zhuǎn)發(fā)表項(xiàng)。進(jìn)一步的,如圖6所示,所述控制器30還可以包括:確定單元34,用于根據(jù)所述R-SPF樹(shù)確定所述子節(jié)點(diǎn)在所述R-SPF樹(shù)中所處的層數(shù);比較單元35,用于比較所述確定單元34確定的所述子節(jié)點(diǎn)所處的層數(shù)的數(shù)值大小,根據(jù)所述子節(jié)點(diǎn)所處的層數(shù)的數(shù)值大小確定所述子節(jié)點(diǎn)與所述根節(jié)點(diǎn)的距離,所述層數(shù)的數(shù)值大小與所述距離成正比。其中,所述發(fā)送單元33具體用于:按照所述子節(jié)點(diǎn)所處的層數(shù)的數(shù)值由小到大的順序,向每一層對(duì)應(yīng)的所述 子節(jié)點(diǎn)下發(fā)所述轉(zhuǎn)發(fā)表項(xiàng)。與現(xiàn)有技術(shù)相比,本發(fā)明實(shí)施例中當(dāng)網(wǎng)絡(luò)拓?fù)浒l(fā)生變化時(shí),接收節(jié)點(diǎn)上報(bào)的網(wǎng)絡(luò)拓?fù)湫畔?;根?jù)所述網(wǎng)絡(luò)拓?fù)湫畔?,分別以每一個(gè)所述節(jié)點(diǎn)為根節(jié)點(diǎn)計(jì)算轉(zhuǎn)發(fā)表項(xiàng);按照所述根節(jié)點(diǎn)的子節(jié)點(diǎn)與所述根節(jié)點(diǎn)的距離由近至遠(yuǎn)的順序,向所述子節(jié)點(diǎn)下發(fā)所述轉(zhuǎn)發(fā)表項(xiàng)。通過(guò)制定向各個(gè)節(jié)點(diǎn)發(fā)送轉(zhuǎn)發(fā)表項(xiàng)的先后順序,優(yōu)先向距離根節(jié)點(diǎn)最近的節(jié)點(diǎn)下發(fā)轉(zhuǎn)發(fā)表項(xiàng),并根據(jù)距離由近至遠(yuǎn)的順序依次向R-SPF樹(shù)中的每一個(gè)節(jié)點(diǎn)下發(fā)轉(zhuǎn)發(fā)表項(xiàng)。從而在網(wǎng)絡(luò)拓?fù)浒l(fā)生變化時(shí),能夠降低節(jié)點(diǎn)間發(fā)送報(bào)文時(shí)出現(xiàn)環(huán)路的可能性,從而減少數(shù)據(jù)在傳輸過(guò)程中不能到達(dá)目標(biāo)節(jié)點(diǎn)而被丟棄的情況出現(xiàn),提高數(shù)據(jù)傳輸?shù)目煽啃院拖到y(tǒng)資源的利用效率。本發(fā)明又一實(shí)施例提供一種表項(xiàng)下發(fā)的控制器40,如圖7所示,所述控制器40包括:接收器41,用于當(dāng)網(wǎng)絡(luò)拓?fù)浒l(fā)生變化時(shí),接收所述控制器40控制下的至少兩個(gè)節(jié)點(diǎn)上報(bào)的網(wǎng)絡(luò)拓?fù)湫畔ⅲ惶幚砥?2,用于根據(jù)所述接收器41接收到的所述網(wǎng)絡(luò)拓?fù)湫畔ⅲ謩e以每一個(gè)所述節(jié)點(diǎn)為根節(jié)點(diǎn)計(jì)算轉(zhuǎn)發(fā)表項(xiàng);發(fā)送器43,用于按照所述根節(jié)點(diǎn)的子節(jié)點(diǎn)與所述根節(jié)點(diǎn)的距離由近至遠(yuǎn)的順序,向所述子節(jié)點(diǎn)下發(fā)所述處理器42計(jì)算出的所述轉(zhuǎn)發(fā)表項(xiàng)。其中,所述處理器42具體用于:使用反向最短路徑優(yōu)先R-SPF算法分別以每一個(gè)所述節(jié)點(diǎn)為根節(jié)點(diǎn)計(jì)算R-SPF樹(shù),并根據(jù)所述R-SPF樹(shù)獲取除所述根節(jié)點(diǎn)以外的子節(jié)點(diǎn)的轉(zhuǎn)發(fā)表項(xiàng)。進(jìn)一步的,所述處理器42還用于:根據(jù)所述R-SPF樹(shù)確定所述子節(jié)點(diǎn)在所述 R-SPF樹(shù)中所處的層數(shù);比較所述子節(jié)點(diǎn)所處的層數(shù)的數(shù)值大小,根據(jù)所述子節(jié)點(diǎn)所處的層數(shù)的數(shù)值大小確定所述子節(jié)點(diǎn)與所述根節(jié)點(diǎn)的距離,所述層數(shù)的數(shù)值大小與所述距離成正比。其中,所述發(fā)送器43具體用于:按照所述子節(jié)點(diǎn)所處的層數(shù)的數(shù)值由小到大的順序,向每一層對(duì)應(yīng)的所述子節(jié)點(diǎn)下發(fā)所述轉(zhuǎn)發(fā)表項(xiàng)。與現(xiàn)有技術(shù)相比,本發(fā)明實(shí)施例中當(dāng)網(wǎng)絡(luò)拓?fù)浒l(fā)生變化時(shí),接收節(jié)點(diǎn)上報(bào)的網(wǎng)絡(luò)拓?fù)湫畔?;根?jù)所述網(wǎng)絡(luò)拓?fù)湫畔?,分別以每一個(gè)所述節(jié)點(diǎn)為根節(jié)點(diǎn)計(jì)算轉(zhuǎn)發(fā)表項(xiàng);按照所述根節(jié)點(diǎn)的子節(jié)點(diǎn)與所述根節(jié)點(diǎn)的距離由近至遠(yuǎn)的順序,向所述子節(jié)點(diǎn)下發(fā)所述轉(zhuǎn)發(fā)表項(xiàng)。通過(guò)制定向各個(gè)節(jié)點(diǎn)發(fā)送轉(zhuǎn)發(fā)表項(xiàng)的先后順序,優(yōu)先向距離根節(jié)點(diǎn)最近的節(jié)點(diǎn)下發(fā)轉(zhuǎn)發(fā)表項(xiàng),并根據(jù)距離由近至遠(yuǎn)的順序依次向R-SPF樹(shù)中的每一個(gè)節(jié)點(diǎn)下發(fā)轉(zhuǎn)發(fā)表項(xiàng)。從而在網(wǎng)絡(luò)拓?fù)浒l(fā)生變化時(shí),能夠降低節(jié)點(diǎn)間發(fā)送報(bào)文時(shí)出現(xiàn)環(huán)路的可能性,從而減少數(shù)據(jù)在傳輸過(guò)程中不能到達(dá)目標(biāo)節(jié)點(diǎn)而被丟棄的情況出現(xiàn),提高數(shù)據(jù)傳輸?shù)目煽啃?,提高系統(tǒng)資源的利用效率。本發(fā)明實(shí)施例提供的表項(xiàng)下發(fā)的控制器可以實(shí)現(xiàn)上述提供的方法實(shí)施例,具體功能實(shí)現(xiàn)請(qǐng)參見(jiàn)方法實(shí)施例中的說(shuō)明,在此不再贅述。本發(fā)明實(shí)施例提供的表項(xiàng)下發(fā)的方法及控制器可以適用于集中控制下的節(jié)點(diǎn)間的表項(xiàng)下發(fā)流程,但不僅限于此。本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以通過(guò)計(jì)算機(jī)程序來(lái)指令相關(guān)的硬件來(lái)完成,所述的程序可存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),可包括如上述各方法的實(shí)施例的流程。其中,所述的存儲(chǔ)介質(zhì)可為磁碟、光盤、只讀存儲(chǔ)記憶體(Read-OnlyMemory, ROM)或隨機(jī)存儲(chǔ)記憶體(RandomAccessMemory,RAM)等。以上所述,僅為本發(fā)明的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán)利要求的保護(hù)范圍為準(zhǔn)。