本申請涉及通訊技術(shù)領(lǐng)域,尤其涉及一種用于FC網(wǎng)絡(luò)的交換機(jī)和無損切換方法。
背景技術(shù):FSPF(FabricShortestPathFirst)協(xié)議是FCfabric所使用標(biāo)準(zhǔn)的動態(tài)路由發(fā)現(xiàn)協(xié)議,該協(xié)議將FCfabric中的所有交換機(jī)連接起來,通過同步LSDB計(jì)算出fabric中一臺交換機(jī)到其他所有交換機(jī)的最短的無環(huán)路路由。FSPF協(xié)議的鄰居發(fā)現(xiàn)和LSDB同步由三種報(bào)文實(shí)現(xiàn):HLOSW_ILS(TheHLOSW_ILSSwitchFabricInternalLinkService),用于發(fā)現(xiàn)和維護(hù)鄰居;LSUSW_ILS(TheLinkStateUpdateSwitchFabricInternalLinkService),用于從一個交換機(jī)向另外一個交換機(jī)發(fā)送本交換機(jī)的鏈路狀態(tài)信息;LSASW_ILS(TheLinkStateAcknowledgementSwitchFabricInternalLinkService),用于對接收到的鏈路狀態(tài)信息(LSR,linkStatesRecord)做應(yīng)答,而不是對LSUSW_ILS報(bào)文的應(yīng)答。LSR,F(xiàn)SPF協(xié)議通過它描述交換機(jī)的鏈接狀態(tài)。所有交換機(jī)產(chǎn)生的LSR構(gòu)成LSDB(Link-StateDataBase)。兩個鄰居LSR的交互通過LSU(LinkStateUpdate)和LSA(LinkStateAcknowledgement)報(bào)文來完成。當(dāng)建立鄰居或者LSR變更時,LSR通過LSU的封裝,發(fā)送給鄰居,鄰居通過LSA報(bào)文做應(yīng)答。從而同步fabric網(wǎng)絡(luò)中所有交換機(jī)的LSDB。
技術(shù)實(shí)現(xiàn)要素:有鑒于此,本申請?zhí)峁┮环N交換機(jī),用于FC網(wǎng)絡(luò),所述交換機(jī)包括標(biāo)記模塊、路由模塊和處理模塊;所述標(biāo)記模塊用于在啟動無損切換時,啟動定時器,對發(fā)生改變的設(shè)備接口置切換標(biāo)記;所述路由模塊用于在執(zhí)行無損切換時,并抑制路由計(jì)算,待所述定時器超時時,開啟路由計(jì)算功能,并觸發(fā)其重新執(zhí)行路由計(jì)算;所述處理模塊用于在執(zhí)行無損切換時向置切換標(biāo)記的接口所連接的鄰居發(fā)送FSPF協(xié)議報(bào)文通知所述鄰居該路徑不可達(dá)。所述標(biāo)記模塊針對發(fā)生改變的設(shè)備接口設(shè)置切換標(biāo)記具體包括:如果是接口級的無損切換,將對應(yīng)的接口設(shè)置切換標(biāo)記,如果是系統(tǒng)級的無損切換,則將全部接口設(shè)置切換標(biāo)記;所述處理模塊向鄰居發(fā)送FSPF協(xié)議報(bào)文通知所述鄰居該路徑不可達(dá)具體包括:I處理模塊向相關(guān)鄰居發(fā)送1wayhello報(bào)文,其中,如果是接口級切換,僅向與置切換標(biāo)記的接口相連的鄰居發(fā)送,如果是系統(tǒng)級則向所有鄰居發(fā)送;II處理模塊更新LSR,將置有無損切換標(biāo)記的接口不加入到LSR中,通過LSU報(bào)文同步給所有鄰居設(shè)備,使得收到該LSR鄰居設(shè)備計(jì)算并切換路由。所述處理模塊進(jìn)一步用于在更新LSR,將置有無損切換標(biāo)記的接口不加入到LSR中,通過LSU報(bào)文同步給所有鄰居設(shè)備后,觸發(fā)鄰居狀態(tài)機(jī)向無損切換狀態(tài)遷移。所述處理模塊進(jìn)一步用于在所述定時器超時后,刪除置有無損切換標(biāo)記接口的鄰居?;谕瑯拥乃枷?,本申請還提供一種無損切換方法,用于FC網(wǎng)絡(luò),所述方法包括:啟動無損切換時,啟動定時器,對發(fā)生改變的設(shè)備接口置切換標(biāo)記;抑制路由計(jì)算,向置切換標(biāo)記的接口所連接的鄰居發(fā)送FSPF協(xié)議報(bào)文通知所述鄰居該路徑不可達(dá);所述定時器超時時,開啟路由計(jì)算功能,并觸發(fā)其重新執(zhí)行路由計(jì)算。所述方法進(jìn)一步包括:所述針對發(fā)生改變的設(shè)備接口設(shè)置切換標(biāo)記具體包括:如果是接口級的無損切換,將對應(yīng)的接口設(shè)置切換標(biāo)記,如果是系統(tǒng)級的無損切換,則將全部接口設(shè)置切換標(biāo)記;所述向鄰居發(fā)送FSPF協(xié)議報(bào)文通知所述鄰居該路徑不可達(dá)具體包括:I向相關(guān)鄰居發(fā)送1wayhello報(bào)文,其中,如果是接口級切換,僅向與置切換標(biāo)記的接口相連的鄰居發(fā)送,如果是系統(tǒng)級則向所有鄰居發(fā)送;II更新LSR,將置有無損切換標(biāo)記的接口不加入到LSR中,通過LSU報(bào)文同步給所有鄰居設(shè)備,使得收到該LSR鄰居設(shè)備計(jì)算并切換路由。所述方法在更新LSR,將置有無損切換標(biāo)記的接口不加入到LSR中,通過LSU報(bào)文同步給所有鄰居設(shè)備后進(jìn)一步包括:觸發(fā)鄰居狀態(tài)機(jī)向無損切換狀態(tài)遷移。所述方法在所述定時器超時后進(jìn)一步包括,刪除置有無損切換標(biāo)記接口的鄰居。本申請通過上述技術(shù)方案,使得在網(wǎng)絡(luò)發(fā)生變化時,交換機(jī)設(shè)備保留一段時間(無損切換間隔)轉(zhuǎn)發(fā)表,先通知鄰居設(shè)備先切換轉(zhuǎn)發(fā)路徑,無損切換間隔后(即定時器超時)本設(shè)備才根據(jù)路由計(jì)算更新路由表并重新下發(fā)新的轉(zhuǎn)發(fā)表,從而實(shí)現(xiàn)了網(wǎng)絡(luò)規(guī)劃變動時不丟包,用戶流量不中斷,提升了用戶的使用體驗(yàn)。附圖說明圖1是本申請?zhí)峁┑囊环N交換機(jī)示意圖。圖2是本申請?zhí)峁┑囊环N實(shí)施場景示意圖。圖3是本申請?zhí)峁┑挠忠环N實(shí)施場景示意圖。圖4是本申請?zhí)峁┑姆椒▽?shí)施例的流程圖。圖5是本申請?zhí)峁┑泥従訝顟B(tài)機(jī)遷移圖。具體實(shí)施方式在FC網(wǎng)絡(luò)規(guī)劃變動執(zhí)行過程中,對接口以及設(shè)備的操作可能導(dǎo)致丟包。對于改變物理連接的情況,即更改接口組網(wǎng)(例如接口連接到其他設(shè)備上)或者設(shè)備的組網(wǎng)(例如將其從Fabric網(wǎng)絡(luò)中移出),相鄰設(shè)備的FSPF協(xié)議在感知到對端接口down時會觸發(fā)路由計(jì)算,并切換轉(zhuǎn)發(fā)路徑。但從相鄰設(shè)備感知到鄰居down,直至計(jì)算路由并下發(fā)芯片切換后的路由,在這段時間內(nèi)仍然使用老轉(zhuǎn)發(fā)路徑的包將丟失。對于不改變網(wǎng)絡(luò)物理連接的情況,相鄰設(shè)備的FSPF協(xié)議將在死亡周期超時(一般80秒)后才能感知鄰居down,這將導(dǎo)致更長時間的丟包。本申請的一個實(shí)施例提供一種交換機(jī),所述交換機(jī)應(yīng)用FC網(wǎng)絡(luò)中,用于在組網(wǎng)環(huán)境發(fā)生改變需進(jìn)行鏈路切換時,不做down處理,設(shè)備上的轉(zhuǎn)發(fā)表項(xiàng)也不立即做刪除,而是啟動定時器,保留一段無損切換時間,發(fā)送LSR通知鄰居設(shè)備該路徑不可達(dá),從而實(shí)現(xiàn)了在轉(zhuǎn)發(fā)表尚未刪除前完成流量切換。所述交換機(jī)包括標(biāo)記模塊、處理模塊、路由模塊和FSPF協(xié)議處理模塊,如圖1所示,所述標(biāo)記模塊用于在執(zhí)行無損切換時,啟動定時器,對相關(guān)的接口置標(biāo)記;所述路由模塊用于抑制路由計(jì)算功能,待無損切換時間所述定時器超時時,開啟路由計(jì)算功能,并觸發(fā)重新執(zhí)行路由計(jì)算;所述處理模塊用于在路由計(jì)算功能被抑制時,發(fā)送FSPF協(xié)議報(bào)文通知所述鄰居該路徑不可達(dá),以觸發(fā)該鄰居快速地重新計(jì)算路由?;谕瑯拥乃枷?,本申請?zhí)岢隽艘环N無損切換的方法,所述方法應(yīng)用于包含上述交換機(jī)的FC網(wǎng)絡(luò)中,在組網(wǎng)環(huán)境發(fā)生變化需要進(jìn)行鏈路切換時,在發(fā)生改變的交換機(jī)并不立即做down的處理,并且設(shè)備上的轉(zhuǎn)發(fā)表也不立即做刪除,而是啟動一個定時器,保留一段無損切換時間,發(fā)生改變的交換機(jī)立即發(fā)送LSR以通知鄰居該路徑不可達(dá),觸發(fā)鄰居設(shè)備快速的重新計(jì)算路由,并在定時器超時時,重新進(jìn)行路由計(jì)算,這樣在轉(zhuǎn)發(fā)表尚未刪除前即可完成流量切換,從而滿足流量不中斷的目的。其中,這里的所說的組網(wǎng)環(huán)境發(fā)生變化需要進(jìn)行鏈路切換可能是由于設(shè)備的接口故障或者是整個設(shè)備的故障,所以,這里的切換也分為接口級和系統(tǒng)級兩個層次:在因接口故障進(jìn)行組網(wǎng)切換時可以通過接口級的切換避免流量的中斷;在整臺設(shè)備故障而遷移出組網(wǎng)時,可以使用系統(tǒng)級的切換來保證流量的不中斷。另外,這里所說的發(fā)生改變的交換機(jī)設(shè)備是指因鏈路切換導(dǎo)致物理連接發(fā)生改變的設(shè)備。本申請的一個應(yīng)用場景如圖2所示,SwitchA到D存在ABD和ACD兩條可達(dá)路徑,在switchA到B的接口down時,此時的切換屬于接口級切換,switchA的相關(guān)接口并不立即做down的處理,并且switchA的轉(zhuǎn)發(fā)表也不立即刪除,而是保留一段無損切換時間(例如10秒),取而代之的是處理模塊立即發(fā)送LSR以通知鄰居該路徑不可達(dá),從而觸發(fā)鄰居設(shè)備快速的重新計(jì)算路由,這樣鄰居設(shè)備就不會有下一跳為置有切換標(biāo)記的接口的路由了,因此,鄰居設(shè)備的所有報(bào)文轉(zhuǎn)發(fā)不會在經(jīng)過該發(fā)生變化的路徑,本機(jī)在無損切換時間到達(dá)后,也重新啟動路由計(jì)算。這樣就使得流量切換先于刪除轉(zhuǎn)發(fā)表,從而以達(dá)到流量不中斷的目的。本申請的又一應(yīng)用場景如圖3所示,SwitchA到D存在ABD和ACD兩條可達(dá)路徑,在switchB設(shè)備down時,此時的切換屬于系統(tǒng)級切換,switchA的所有接口并不立即做down的處理,并且switchA的轉(zhuǎn)發(fā)表也不立即刪除,而是保留一段無損切換時間(例如10秒),從而觸發(fā)鄰居設(shè)備快速的重新計(jì)算路由,這樣鄰居設(shè)備就不會有下一跳為置有切換標(biāo)記的接口的路由了,因此,鄰居設(shè)備的所有報(bào)文轉(zhuǎn)發(fā)不會在經(jīng)過該發(fā)生變化的路徑,本機(jī)在無損切換時間到達(dá)后,也重新啟動路由計(jì)算。這樣就使得流量切換先于刪除轉(zhuǎn)發(fā)表,從而以達(dá)到流量不中斷的目的。本申請的又一實(shí)施例如圖4的流程圖所示,該無損切換方法包括:步驟11在發(fā)生組網(wǎng)切換時,發(fā)生改變的設(shè)備啟動無損切換,所述標(biāo)記模塊啟動定時器,針對發(fā)生改變的設(shè)備接口設(shè)置切換標(biāo)記:如果是接口級的無損切換,將涉及的接口設(shè)置切換標(biāo)記,如果是系統(tǒng)級的無損切換,則將全部接口設(shè)置切換標(biāo)記;如圖2和圖3所示的場景中,switchA為發(fā)生變化的設(shè)備,在圖2的場景下,switchA做接口級無損切換,將與switchB相連的接口置上無損切換標(biāo)記,在圖3所示的場景下,switchA做系統(tǒng)級無損切換,對所有的接口置無損切換標(biāo)記,即對與switchB和C相連的接口做無損切換標(biāo)記。步驟12發(fā)生改變的設(shè)備的路由模塊抑制路由計(jì)算,在路由計(jì)算功能沒有被開啟前,不觸發(fā)路由計(jì)算。在switchA設(shè)備上暫時關(guān)閉路由計(jì)算功能,即使收到了鄰居switchC和B發(fā)送的LSR也不觸發(fā)路由計(jì)算,所述轉(zhuǎn)發(fā)表項(xiàng)也不會做更改或刪除。步驟13發(fā)生改變的設(shè)備的處理模塊向相關(guān)鄰居發(fā)送1wayhello報(bào)文。如果是接口級切換,僅向與置標(biāo)記的接口相連的鄰居發(fā)送;如果是系統(tǒng)級則向所有鄰居發(fā)送。SwitchA向鄰居發(fā)送1wayhello報(bào)文,在圖2所示場景下,向switchB發(fā)送1wayhello報(bào)文,在圖3所示的場景下,向switchB和C都發(fā)送1wayhello報(bào)文。步驟14發(fā)生改變的設(shè)備的處理模塊更新LSR,將置有無損切換標(biāo)記的接口不加入到LSR中,通過LSU報(bào)文同步給所有設(shè)備,使得收到該LSR鄰居設(shè)備計(jì)算并切換路由,此時觸發(fā)鄰居狀態(tài)機(jī)向無損切換狀態(tài)遷移。在圖2和圖3所示的場景下,switchB和switchC作為相關(guān)的鄰居設(shè)備收到了更新后的LSR后,根據(jù)所述LSR中的相關(guān)信息,刪除鄰居,觸發(fā)路由計(jì)算,并下發(fā)新的路由。SwitchA在無損切換時間沒有到達(dá)前,從置有無損切換的接口收到鄰居的報(bào)文(如HLO等),則丟棄該報(bào)文,對于LSU報(bào)文可以不做處理直接回應(yīng)LSAck,以避免其重傳。與此同時,switchA更新LSR并向鄰居發(fā)送后,觸發(fā)鄰居狀態(tài)機(jī)狀態(tài)遷移,鄰居狀態(tài)機(jī)的遷移過程具體如圖5所示,正常情況下,鄰居狀態(tài)機(jī)的初始狀態(tài)為Down狀態(tài),在該狀態(tài)下收到E_Port狀態(tài)通知后,鄰居狀態(tài)變遷為Init狀態(tài)。達(dá)到Init狀態(tài)后,在收到對端發(fā)送的HLOSW_ILSExchange時,如果其中的RecipientDomain_ID字段就是自己的Domain_ID,那么2way關(guān)系建立起來,并開始交互LSDB,此時鄰居狀態(tài)變遷為Exchange狀態(tài)。在DatabaseExchange狀態(tài),兩個鄰居交互他們?nèi)康腖SDB。從該鄰居狀態(tài)可以變遷兩種不同狀態(tài),如果此時收到鄰居的數(shù)據(jù)庫發(fā)送結(jié)束的HLOSW_ILS報(bào)文,那么鄰居狀態(tài)變遷為DatabaseAckWait狀態(tài);如果此時收到的是鄰居的數(shù)據(jù)庫發(fā)送結(jié)束的應(yīng)答報(bào)文,那么鄰居狀態(tài)變遷為DatabaseWait狀態(tài)。處于DatabaseAckWait狀態(tài)時,當(dāng)接收到鄰居對數(shù)據(jù)庫報(bào)文結(jié)束的應(yīng)答報(bào)文時,鄰居狀態(tài)將變遷為Full狀態(tài)。處于DatabaseWait狀態(tài)時,當(dāng)接收到鄰居的數(shù)據(jù)庫結(jié)束報(bào)文那么鄰居狀態(tài)變遷為Full狀態(tài)。鄰居關(guān)系一旦成為Full狀態(tài),那么鄰居將變成鄰接關(guān)系(Adjacency),此時連接兩個鄰接交換機(jī)的ISL將可以用于轉(zhuǎn)發(fā)用戶數(shù)據(jù)。并且兩端設(shè)備重新生成LSR以告知周邊設(shè)備其達(dá)到鄰接關(guān)系。本申請?jiān)谏鲜龅腇ULL狀態(tài)和down狀態(tài)之間添加了一個新的狀態(tài):LosslessDown,當(dāng)switchA做無損切換時,向鄰居SwitchB和C發(fā)送了更新后的LSR,觸發(fā)鄰居狀態(tài)機(jī)由FULL狀態(tài)切換到LosslessDown狀態(tài),在無損切換時間超時后,變遷到down狀態(tài)。步驟15當(dāng)所述定時器超時后,發(fā)生改變的設(shè)備的路由模塊開啟路由計(jì)算功能,并觸發(fā)其重新執(zhí)行路由計(jì)算;所述處理模塊刪除置有無損切換標(biāo)記接口的鄰居以及所述切換標(biāo)記。無損切換間隔時間可以通過管理員調(diào)整,其可以控制抑制本端抑制路由計(jì)算的時間,但不應(yīng)過小,以免鄰居設(shè)備還沒有完成計(jì)算并下發(fā)新路由的處理。以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明保護(hù)的范圍之內(nèi)。