一種快速自愈的變電站環(huán)網(wǎng)協(xié)議算法和實(shí)現(xiàn)方法
【專利摘要】一種快速自愈的變電站環(huán)網(wǎng)協(xié)議算法和實(shí)現(xiàn)方法,它涉及網(wǎng)絡(luò)協(xié)議算法領(lǐng)域,它包含F(xiàn)RPS環(huán)、環(huán)端口、控制VLAN、業(yè)務(wù)VLAN、主節(jié)點(diǎn)、傳輸節(jié)點(diǎn)、控制幀。FRPS的實(shí)現(xiàn)是基于和內(nèi)核空間進(jìn)行通信來(lái)實(shí)現(xiàn)的。在內(nèi)核空間,系統(tǒng)能夠?qū)Φ讓拥亩丝谶M(jìn)行監(jiān)控和設(shè)置,同時(shí)內(nèi)核空間還能夠?qū)Φ讓咏邮盏臄?shù)據(jù)包進(jìn)行處理,篩選出FRPS協(xié)議的控制幀,并通知用戶空間的處理程序來(lái)處理。在用戶空間,F(xiàn)RPS協(xié)議的控制幀的發(fā)送需要先交給內(nèi)核空間,再由內(nèi)核空間來(lái)驅(qū)動(dòng)底層硬件發(fā)送,并且FRPS協(xié)議在實(shí)現(xiàn)過(guò)程中也需要對(duì)端口進(jìn)行直接的操作,如阻塞,打開阻塞,刷新MAC地址表和發(fā)送控制幀。它通過(guò)環(huán)網(wǎng)控制協(xié)議將物理的環(huán)變?yōu)檫壿嫷逆?,從而避免了在環(huán)網(wǎng)上形成廣播風(fēng)暴。
【專利說(shuō)明】
一種快速自愈的變電站環(huán)網(wǎng)協(xié)議算法和實(shí)現(xiàn)方法
技術(shù)領(lǐng)域
:
[0001]本發(fā)明涉及網(wǎng)絡(luò)協(xié)議算法領(lǐng)域,具體涉及一種智能變電站內(nèi)網(wǎng)絡(luò)快速自愈算法及其實(shí)現(xiàn)方法。
【背景技術(shù)】
:
[0002]在由各種設(shè)備連接形成的網(wǎng)絡(luò)中,經(jīng)常會(huì)因?yàn)槟硞€(gè)節(jié)點(diǎn)或設(shè)備出現(xiàn)故障而導(dǎo)致整個(gè)網(wǎng)絡(luò)癱瘓。通常將這個(gè)現(xiàn)象稱為“單點(diǎn)故障”。網(wǎng)絡(luò)可靠性是網(wǎng)絡(luò)性能的重要指標(biāo)。為了保證網(wǎng)絡(luò)的正常的運(yùn)行,在網(wǎng)絡(luò)的組建中就需要通過(guò)一些方法來(lái)避免單點(diǎn)故障。當(dāng)網(wǎng)絡(luò)發(fā)生故障,要以極快的方式恢復(fù)通訊,保障網(wǎng)絡(luò)正常運(yùn)行。而構(gòu)建冗余網(wǎng)絡(luò)是避免單點(diǎn)故障的重要措施。
[0003]冗余設(shè)計(jì)是網(wǎng)絡(luò)設(shè)計(jì)的重要部分,是保證網(wǎng)絡(luò)整體可靠性能的重要手段。而冗余拓?fù)渚湍芙鉀Q網(wǎng)絡(luò)中的單點(diǎn)故障。當(dāng)網(wǎng)絡(luò)出現(xiàn)故障時(shí),可以切換到冗余的拓?fù)渖希瑥亩謴?fù)網(wǎng)絡(luò)的功能。
[0004]在骨干網(wǎng)絡(luò)設(shè)備連接中,單一鏈路的鏈接很容易,但一個(gè)簡(jiǎn)單的故障就會(huì)造成網(wǎng)絡(luò)的中斷。因此在實(shí)際網(wǎng)絡(luò)組建的過(guò)程中,為了保持網(wǎng)絡(luò)的穩(wěn)定性,再多臺(tái)交換機(jī)組成的網(wǎng)絡(luò)環(huán)境中,通常都使用一些備份連接,以提高網(wǎng)絡(luò)的健全性和穩(wěn)定性。這里的備份連接也叫備份鏈路,或者冗余鏈路。備份鏈路之間的交換機(jī)直接經(jīng)?;ハ噙B接,形成一個(gè)還路,通過(guò)環(huán)路可以在一定程度上實(shí)現(xiàn)冗余。鏈路的冗余備份能為網(wǎng)絡(luò)帶來(lái)健全性、穩(wěn)定性和可靠性的好處,但是備份鏈路會(huì)使網(wǎng)絡(luò)存在環(huán)路,環(huán)路問(wèn)題的備份鏈路所面臨的最為嚴(yán)重的問(wèn)題,交換機(jī)直接的環(huán)路將導(dǎo)致網(wǎng)絡(luò)新問(wèn)題,即冗余拓?fù)浣Y(jié)構(gòu)會(huì)引起廣播風(fēng)暴,多幀復(fù)制,MAC地址表錯(cuò)誤的問(wèn)題。
[0005]如果網(wǎng)絡(luò)中存在環(huán)路,目的主機(jī)可能會(huì)從不同端口,收到某個(gè)數(shù)據(jù)幀的多個(gè)副本,此時(shí)會(huì)導(dǎo)致交換機(jī)在處理這些數(shù)據(jù)幀時(shí)無(wú)從選擇,可能造成無(wú)法確定該處理哪個(gè)幀,嚴(yán)重時(shí)會(huì)導(dǎo)致網(wǎng)絡(luò)連接的中斷。參看說(shuō)明書附圖1,當(dāng)計(jì)算機(jī)A向路由器發(fā)送數(shù)據(jù)包,當(dāng)如果交換機(jī)A和交換機(jī)B都是剛剛啟動(dòng),此時(shí)他們的MAC表里沒有路由器的MAC地址。交換機(jī)A收到這個(gè)數(shù)據(jù)包后,就會(huì)廣播這個(gè)數(shù)據(jù)包。交換機(jī)B就會(huì)在Segment2上收到交換機(jī)A的廣播包,交換機(jī)B也發(fā)現(xiàn)自己沒有路由器的MAC地址,交換機(jī)B也會(huì)把這個(gè)廣播包廣播道Segmentl上。這樣路由器就會(huì)收到多個(gè)同樣的數(shù)據(jù)包。
[0006]另外當(dāng)交換機(jī)連接不同網(wǎng)段時(shí),會(huì)將出現(xiàn)通過(guò)不同端口收到來(lái)自同一個(gè)廣播幀的多個(gè)副本的情況。這個(gè)過(guò)程也會(huì)同時(shí)導(dǎo)致MAC地址表的多次刷新。這種持續(xù)的更新、刷新過(guò)程會(huì)嚴(yán)重消耗內(nèi)存資源,影響交換機(jī)的交換能力,同時(shí)降低整個(gè)網(wǎng)絡(luò)的運(yùn)行效率。嚴(yán)重時(shí)將耗盡整個(gè)網(wǎng)絡(luò)的資源,最終造成網(wǎng)絡(luò)的癱瘓。
[0007]綜上所述,冗余在避免單點(diǎn)故障的時(shí)候,卻又會(huì)引起廣播風(fēng)暴等問(wèn)題,那么要避免冗余拓?fù)湟鸬钠渌麊?wèn)題,就需要采用一些控制協(xié)議來(lái)進(jìn)行冗余管理。
【發(fā)明內(nèi)容】
:
[0008]本發(fā)明的目的是提供一種快速自愈的變電站環(huán)網(wǎng)協(xié)議算法和實(shí)現(xiàn)方法,它結(jié)合了標(biāo)準(zhǔn)MAC交換,故障告警,故障處理和環(huán)網(wǎng)控制協(xié)議,通過(guò)環(huán)網(wǎng)控制協(xié)議將物理的環(huán)變?yōu)檫壿嫷逆湥瑥亩苊饬嗽诃h(huán)網(wǎng)上形成廣播風(fēng)暴。
[0009]為了解決【背景技術(shù)】所存在的問(wèn)題,本發(fā)明是采用以下技術(shù)方案:一、環(huán)網(wǎng)算法即FRPS (Fast Ring Protect1n Switch)算法:它包含F(xiàn)RPS環(huán)、環(huán)端口、控制 VLAN、業(yè)務(wù)VLAN、主節(jié)點(diǎn)、傳輸節(jié)點(diǎn)、控制幀。
[0010]所述的FRPS環(huán):FRPS算法是針環(huán)網(wǎng)方式組網(wǎng)的以太網(wǎng),F(xiàn)RPS算法必須運(yùn)行在環(huán)網(wǎng)上,所以將FRPS環(huán)定義為運(yùn)行了 FRPS算法的以太環(huán)網(wǎng)。
[0011]所述的環(huán)端口:在以太環(huán)網(wǎng)上,每個(gè)節(jié)點(diǎn)都有2個(gè)端口連接在環(huán)上。這兩個(gè)端口就稱為環(huán)端口。
[0012]所述的控制VLAN:在FRPS算法中,應(yīng)用了 VLAN技術(shù)。環(huán)上所有環(huán)端口都會(huì)加入控制VLAN??刂芕LAN上傳輸?shù)氖菫榱司S護(hù)FRPS算法而生成的各種控制幀,但不傳輸其他以太網(wǎng)幀。
[0013]所述的業(yè)務(wù)VLAN:在FRPS環(huán)上,除了控制VLAN,還設(shè)置了業(yè)務(wù)VLAN。環(huán)網(wǎng)上的所有端口都加入業(yè)務(wù)VLAN。業(yè)務(wù)VLAN上傳輸?shù)氖歉鞣N數(shù)據(jù)報(bào)文和普通以太網(wǎng)幀。在正常工作狀態(tài)下環(huán)上會(huì)有一個(gè)端口在業(yè)務(wù)VLAN上保持阻塞,這樣就能避免環(huán)網(wǎng)上產(chǎn)生廣播風(fēng)暴。
[0014]所述的主節(jié)點(diǎn):在FRPS環(huán)上的特殊節(jié)點(diǎn)。在正常工作狀態(tài)下,這個(gè)節(jié)點(diǎn)負(fù)責(zé)阻塞環(huán)路,避免廣播風(fēng)暴的形成。在環(huán)網(wǎng)上出現(xiàn)故障時(shí),主節(jié)點(diǎn)就將打開備份鏈路,實(shí)現(xiàn)保護(hù)切的功能。主節(jié)點(diǎn)的兩個(gè)環(huán)端口分別稱為主端口和從端口。正常狀態(tài)下,從端口對(duì)業(yè)務(wù)VLAN保持阻塞;故障狀態(tài)下,從端口解除對(duì)業(yè)務(wù)VLAN的阻塞。主端口在兩種狀態(tài)下都保持轉(zhuǎn)發(fā)狀態(tài)。
[0015]所述的傳輸節(jié)點(diǎn):在FRPS環(huán)上除了主節(jié)點(diǎn)以外的其他節(jié)點(diǎn)都稱為傳輸節(jié)點(diǎn)。在正常狀態(tài)下,這傳輸節(jié)點(diǎn)的兩個(gè)端口都不阻塞,而是保持在轉(zhuǎn)發(fā)狀態(tài)。當(dāng)節(jié)點(diǎn)的端口出現(xiàn)故障,就會(huì)將故障端口阻塞。
[0016]所述的控制幀:在控制VLAN上傳輸?shù)挠糜贔RPS算法的報(bào)文??刂茙习?dāng)前節(jié)點(diǎn)的狀態(tài)以及兩個(gè)環(huán)端口的狀態(tài)。每個(gè)節(jié)點(diǎn)都會(huì)定時(shí)發(fā)送控制幀到環(huán)上,控制幀在環(huán)上傳輸后,可使環(huán)上其他節(jié)點(diǎn)都得到發(fā)送節(jié)點(diǎn)的信息。這樣的方式可以使每個(gè)節(jié)點(diǎn)都得到環(huán)上所有節(jié)點(diǎn)的信息。
[0017]FRPS算法的工作原理:在FRPS環(huán)上有一個(gè)主節(jié)點(diǎn),這個(gè)主節(jié)點(diǎn)在初始時(shí)將從端口對(duì)業(yè)務(wù)VLAN設(shè)為阻塞,主端口在業(yè)務(wù)VLAN上設(shè)為轉(zhuǎn)發(fā)狀態(tài)。在控制VLAN上,所有端口都不阻塞都可以進(jìn)行轉(zhuǎn)發(fā)可能工作幀。其他傳輸節(jié)點(diǎn)在初始化時(shí)將兩個(gè)環(huán)端口都設(shè)為轉(zhuǎn)發(fā)狀態(tài)。初始化后,節(jié)點(diǎn)都會(huì)生成控制幀,將自身的信息填入控制幀,包括端口狀態(tài)信息,節(jié)點(diǎn)狀態(tài)和節(jié)點(diǎn)角色??刂茙诃h(huán)網(wǎng)上傳輸,最終所有節(jié)點(diǎn)都獲得了環(huán)上主節(jié)點(diǎn)和傳輸節(jié)點(diǎn)的信息,并保存起來(lái)。為了防止控制巾貞的丟失,控制巾貞會(huì)定時(shí)發(fā)送。控制巾貞的定時(shí)發(fā)送可以使環(huán)上的節(jié)點(diǎn)獲得發(fā)送節(jié)點(diǎn)的狀態(tài),如果發(fā)送節(jié)點(diǎn)出現(xiàn)故障,如斷電,那么環(huán)上的節(jié)點(diǎn)就無(wú)法再收到這個(gè)節(jié)點(diǎn)的狀態(tài),經(jīng)過(guò)一定時(shí)間后就會(huì)將這個(gè)節(jié)點(diǎn)的狀態(tài)刪除,也就是認(rèn)為這個(gè)節(jié)點(diǎn)已經(jīng)與FRPS環(huán)失去了聯(lián)系。
[0018]在正常情況下,整個(gè)FRPS環(huán)上就只有一個(gè)環(huán)端口處于阻塞狀態(tài),這個(gè)就是主節(jié)點(diǎn)的端口處于阻塞狀態(tài)。正是由于這個(gè)端口阻塞了業(yè)務(wù)VLAN,所以在業(yè)務(wù)VLAN上沒有環(huán)路形成。
[0019]如果有節(jié)點(diǎn)存在端口處于阻塞狀態(tài),并且環(huán)上不存在故障端口同時(shí)又發(fā)現(xiàn)主節(jié)點(diǎn)的從端口處于阻塞狀態(tài),就會(huì)立即將阻塞端口打開。由于每個(gè)節(jié)點(diǎn)都能獲得環(huán)上所有節(jié)點(diǎn)的狀態(tài),每個(gè)節(jié)點(diǎn)就可以根據(jù)獲得的這些所有節(jié)點(diǎn)信息進(jìn)行判斷,并決定是否要需要采取動(dòng)作。
[0020]當(dāng)鏈路發(fā)生故障時(shí),與故障相鄰的節(jié)點(diǎn)會(huì)立即檢測(cè)到故障,并將連接故障的端口設(shè)為阻塞狀態(tài)。檢測(cè)到端口故障的節(jié)點(diǎn),稱為故障節(jié)點(diǎn)。故障節(jié)點(diǎn)會(huì)立即將當(dāng)前端口的狀態(tài)通過(guò)控制幀發(fā)送出去,通知環(huán)上的傳輸節(jié)點(diǎn)和主節(jié)點(diǎn)。
[0021]環(huán)上的節(jié)點(diǎn)收到故障節(jié)點(diǎn)發(fā)出控制幀后,就會(huì)發(fā)現(xiàn)環(huán)上出現(xiàn)了故障端口,傳輸節(jié)點(diǎn)將節(jié)點(diǎn)狀態(tài)從正常狀態(tài)變?yōu)楣收蠣顟B(tài),并會(huì)立即刷新MAC地址表,并將這個(gè)控制幀發(fā)送出去。其他傳輸節(jié)點(diǎn)收到這個(gè)控制幀也進(jìn)行相同的操作。
[0022]這個(gè)控制幀通過(guò)各個(gè)節(jié)點(diǎn)依次轉(zhuǎn)發(fā),最終傳輸?shù)街鞴?jié)點(diǎn)。當(dāng)主節(jié)點(diǎn)收到這個(gè)控制幀后,就會(huì)發(fā)現(xiàn)環(huán)上出現(xiàn)故障端口,原來(lái)的傳輸路徑出現(xiàn)了故障,此時(shí)主節(jié)點(diǎn)就會(huì)立即打開從端口,使其進(jìn)入轉(zhuǎn)發(fā)狀態(tài),同時(shí)也刷新MAC地址表,將節(jié)點(diǎn)狀態(tài)狀態(tài)變?yōu)楣收蠣顟B(tài)。這樣主節(jié)點(diǎn)就啟動(dòng)了備份鏈路。同時(shí)環(huán)上的節(jié)點(diǎn)也因受到故障節(jié)點(diǎn)發(fā)送的控制幀,得知環(huán)上有故障端口,刷新了 MAC地址表。經(jīng)過(guò)主節(jié)點(diǎn)的這個(gè)操作就使原來(lái)的故障拓?fù)淝袚Q到新的拓?fù)渖?,?shí)現(xiàn)了保護(hù)切換功能,此時(shí)新的拓?fù)渚托纬闪恕?br>[0023]為了防止故障節(jié)點(diǎn)發(fā)送的控制幀因故丟失,節(jié)點(diǎn)會(huì)定期發(fā)送攜帶端口狀態(tài)和節(jié)點(diǎn)狀態(tài)的控制幀。當(dāng)收到同一個(gè)節(jié)點(diǎn)發(fā)送的相同的控制幀,節(jié)點(diǎn)只需轉(zhuǎn)發(fā),而不做任何處理。如果節(jié)點(diǎn)第一次收到某個(gè)節(jié)點(diǎn)控制幀,就會(huì)將其保存起來(lái)。如果節(jié)點(diǎn)收到某個(gè)節(jié)點(diǎn)發(fā)送的不同于之前的控制幀,則表明該節(jié)點(diǎn)的狀態(tài)發(fā)生改變,此時(shí),接收節(jié)點(diǎn)就會(huì)更新本地保存的發(fā)送節(jié)點(diǎn)的信息,并根據(jù)節(jié)點(diǎn)的具體改變,采取相應(yīng)的操作。
[0024]當(dāng)連接故障恢復(fù)時(shí),端口就會(huì)立即檢測(cè)到并通知節(jié)點(diǎn)。節(jié)點(diǎn)發(fā)現(xiàn)故障恢復(fù)后,仍保持恢復(fù)端口為阻塞狀態(tài),把端口狀態(tài)值設(shè)為相應(yīng)的值,并發(fā)送控制幀通知主節(jié)點(diǎn)。之所以把恢復(fù)端口仍設(shè)為阻塞狀態(tài)而沒有變?yōu)檗D(zhuǎn)發(fā)狀態(tài),是因?yàn)槿绻麑⒒謴?fù)端口立即置為轉(zhuǎn)發(fā)狀態(tài),那么會(huì)在環(huán)網(wǎng)形成回路,造成廣播風(fēng)暴。在傳輸節(jié)點(diǎn)的端口恢復(fù)時(shí),主節(jié)點(diǎn)還沒有得到端口恢復(fù)的消息,所以主節(jié)點(diǎn)的從端口還處于轉(zhuǎn)發(fā)狀態(tài),如果立即將故障端口直接設(shè)為轉(zhuǎn)發(fā)狀態(tài),那么FRPS環(huán)上的所有端口都將處于轉(zhuǎn)發(fā)狀態(tài),這樣就會(huì)形成回路,那么就會(huì)產(chǎn)生廣播風(fēng)暴。所以為了避免回路的形成,節(jié)點(diǎn)需要保持恢復(fù)端口為阻塞狀態(tài)。
[0025]環(huán)上的其他傳輸節(jié)點(diǎn)收到故障恢復(fù)節(jié)點(diǎn)發(fā)送的控制幀時(shí),更新本地保存的節(jié)點(diǎn)信息,由于發(fā)送節(jié)點(diǎn)的故障端口保持在阻塞狀態(tài),環(huán)上的傳輸拓?fù)溥€沒有發(fā)送變化,接收節(jié)點(diǎn)不會(huì)進(jìn)行其他設(shè)置,僅僅是將控制幀轉(zhuǎn)發(fā)。
[0026]故障恢復(fù)節(jié)點(diǎn)發(fā)送的控制幀經(jīng)過(guò)環(huán)上節(jié)點(diǎn)的逐個(gè)轉(zhuǎn)發(fā),最后到達(dá)主節(jié)點(diǎn)。當(dāng)主節(jié)點(diǎn)收到這個(gè)控制巾貞時(shí),立即更新本地保存的節(jié)點(diǎn)信息。同時(shí)主節(jié)點(diǎn)會(huì)檢查本地保存的環(huán)節(jié)點(diǎn)信息,檢查后發(fā)現(xiàn)環(huán)上節(jié)點(diǎn)不再有故障端口,就會(huì)立即將從端口設(shè)為阻塞狀態(tài),刷新地址表,將節(jié)點(diǎn)狀態(tài)變正常狀態(tài)。同時(shí)將主節(jié)點(diǎn)最新的端口狀態(tài)通過(guò)控制發(fā)送出去。但是,如果當(dāng)檢查保存的所有節(jié)點(diǎn)信息后發(fā)現(xiàn),環(huán)上還有節(jié)點(diǎn)的端口處于故障狀態(tài),那么主節(jié)點(diǎn)就必須保持從端口為轉(zhuǎn)發(fā)狀態(tài),而不會(huì)對(duì)業(yè)務(wù)VLAN阻塞,因?yàn)榇藭r(shí)環(huán)上還有故障端口,主節(jié)點(diǎn)的從端口必須為轉(zhuǎn)發(fā)狀態(tài),不能回到正常狀態(tài)。最后主節(jié)點(diǎn)將接收的控制幀繼續(xù)轉(zhuǎn)發(fā),使環(huán)上的其他節(jié)點(diǎn)獲得故障恢復(fù)節(jié)點(diǎn)的最新狀態(tài)。
[0027]如果環(huán)上沒有故障端口了,那么主節(jié)點(diǎn)就會(huì)在阻塞從端口后,在控制幀空將從端口狀態(tài)設(shè)為對(duì)應(yīng)的值,并發(fā)送出去。傳輸節(jié)點(diǎn)收到這個(gè)控制幀,立即更新本地保存的主節(jié)點(diǎn)的信息,可以發(fā)現(xiàn)環(huán)上的節(jié)點(diǎn)沒有故障端口,并且主節(jié)點(diǎn)已經(jīng)恢復(fù)到正常狀態(tài),那么傳輸節(jié)點(diǎn)也可以恢復(fù)到正常狀態(tài)。此時(shí)傳輸節(jié)點(diǎn)就會(huì)刷新MAC地址表,重新學(xué)習(xí)新的拓?fù)?,將?jié)點(diǎn)狀態(tài)設(shè)為正常狀態(tài),將兩個(gè)環(huán)端口都設(shè)為轉(zhuǎn)發(fā)狀態(tài)。同時(shí)將端口的狀態(tài)通過(guò)控制幀發(fā)送出去。當(dāng)主節(jié)點(diǎn)這個(gè)報(bào)文傳輸?shù)江h(huán)上每個(gè)傳輸節(jié)點(diǎn)后,那么整個(gè)環(huán)路就又恢復(fù)到正常狀態(tài)。對(duì)于故障恢復(fù)節(jié)點(diǎn),在收到這個(gè)控制幀時(shí),就會(huì)將解除恢復(fù)端口的阻塞,使兩個(gè)端口都變?yōu)檗D(zhuǎn)發(fā)狀態(tài)并刷新MAC地址表,學(xué)習(xí)網(wǎng)絡(luò)拓?fù)?。通過(guò)這個(gè)方式使得恢復(fù)的網(wǎng)絡(luò)又能回到正常的狀態(tài)。
[0028]二、本發(fā)明的實(shí)現(xiàn)方案如下:FRPS的實(shí)現(xiàn)是基于和內(nèi)核空間進(jìn)行通信來(lái)實(shí)現(xiàn)的。在內(nèi)核空間,系統(tǒng)能夠?qū)Φ讓拥亩丝谶M(jìn)行監(jiān)控和設(shè)置,同時(shí)內(nèi)核空間還能夠?qū)Φ讓咏邮盏臄?shù)據(jù)包進(jìn)行處理,篩選出FRPS協(xié)議的控制幀,并通知用戶空間的處理程序來(lái)處理。在用戶空間,F(xiàn)RPS協(xié)議的控制幀的發(fā)送需要先交給內(nèi)核空間,再由內(nèi)核空間來(lái)驅(qū)動(dòng)底層硬件發(fā)送,并且FRPS協(xié)議在實(shí)現(xiàn)過(guò)程中也需要對(duì)端口進(jìn)行直接的操作,如阻塞,打開阻塞,刷新MAC地址表和發(fā)送控制幀。
[0029]所以為了用戶空間和內(nèi)核空間的通信,采用了幾種方式來(lái)達(dá)到FRPS協(xié)議所需的通信。第一利用netlink的方式來(lái)完成用戶空間的kernel和FRPS協(xié)議的通信,實(shí)現(xiàn)控制幀由內(nèi)核空間到達(dá)用戶空間的傳遞。第二,將內(nèi)核空間的一些端口設(shè)置函數(shù)進(jìn)行封裝,使得用戶空間可以直接調(diào)用這些函數(shù),實(shí)現(xiàn)對(duì)端口的直接控制,并且可以直接利用這些函數(shù)將控制報(bào)文發(fā)送到FRPS環(huán)上。在用戶空間為了實(shí)現(xiàn)FRPS算法,采用了多進(jìn)程處理的方式,為了滿足進(jìn)程間的通信使用了 socket方式。
[0030]在用戶空間為了實(shí)現(xiàn)FRPS算法,編寫了 3個(gè)程序,分別為FRPSenable程序,F(xiàn)RPSdisable程序和FRPSdaemon程序。FRPSenable程序完成了算法的主要功能,包括??節(jié)點(diǎn)的初始化,控制幀的生成和發(fā)送,控制幀的接收和對(duì)端口的控制。FRPSdisable程序用于終止FRPS算法的運(yùn)行。FRPSdaemon程序?qū)崿F(xiàn)了內(nèi)核空間的直接通信,同時(shí)也實(shí)現(xiàn)了和FRPSenable程序的通信,可以說(shuō)是FRPSenable和內(nèi)核空間的溝通橋梁。。
[0031]FRPSenable程序完成了 FRPS協(xié)議主要功能,從協(xié)議程序運(yùn)行開始,首先判斷節(jié)點(diǎn)是否為主節(jié)點(diǎn),如果是主節(jié)點(diǎn),進(jìn)行變量初始化,就將其從端口對(duì)業(yè)務(wù)VLAN阻塞,主端口進(jìn)入轉(zhuǎn)發(fā)狀態(tài)。如果節(jié)點(diǎn)為傳輸節(jié)點(diǎn),也要先進(jìn)行變量初始化,就將兩個(gè)環(huán)斷口都設(shè)為轉(zhuǎn)發(fā)狀態(tài)。在設(shè)置好端口狀態(tài)后,就會(huì)立即發(fā)送一個(gè)控制幀,這個(gè)控制幀中包含著兩個(gè)環(huán)端口的狀態(tài)。在發(fā)送了控制幀后,就會(huì)運(yùn)行控制幀發(fā)送線程和接受線程,直到結(jié)束為止。這個(gè)初始化的過(guò)程不僅包括各種變量的初始化也包括建立各個(gè)進(jìn)程間的通信通道。
[0032]發(fā)送幀過(guò)程的作用是定時(shí)地將含有端口狀態(tài)情況的控制幀發(fā)送出去。這個(gè)發(fā)送間隔定為5秒。這個(gè)時(shí)間間隔可以人為設(shè)定。利用這種定時(shí)發(fā)送控制幀的方式,可以避免控制幀丟失而無(wú)法再環(huán)上傳播,而且利用這種定時(shí)控制幀可以使得環(huán)上的節(jié)點(diǎn)了解到環(huán)上存在的節(jié)點(diǎn)情況。
[0033]而接收幀過(guò)程的作用是接收從FRPSdaemon程序通過(guò)Socket方式發(fā)送給FRPSenable的控制幀。FRPSenable程序中的接收控制幀線程會(huì)根據(jù)接收的控制幀的類型進(jìn)行相應(yīng)的操作。
[0034]當(dāng)節(jié)點(diǎn)收到的控制幀是其他節(jié)點(diǎn)發(fā)送的控制幀時(shí),由于主節(jié)點(diǎn)和傳輸節(jié)點(diǎn)的區(qū)別,所以兩者對(duì)控制幀的處理也存在著差別。
[0035]FRPSenable進(jìn)程中完成了主節(jié)點(diǎn)和傳輸節(jié)點(diǎn)對(duì)控制幀的接收和處理過(guò)程。同時(shí)這個(gè)過(guò)程也是FRPS算法的功能的具體實(shí)現(xiàn)。
[0036]FRPSdaemon程序也采用了兩個(gè)線程,分別為端口狀態(tài)檢測(cè)線程和接收從內(nèi)核空間收到的控制幀線程。這個(gè)端口狀態(tài)的變化監(jiān)控,是利用硬件掃描的方式監(jiān)控端口的狀態(tài),當(dāng)端口的狀態(tài)發(fā)生變化就會(huì)通知內(nèi)核空間,當(dāng)內(nèi)核空間得到這個(gè)通知后就會(huì)立即利用netlink的方式通知到用戶空間的FRPSdaemon程序。當(dāng)FRPSdaemon程序得到這個(gè)消息后,就會(huì)將這個(gè)消息轉(zhuǎn)化為控制幀的格式并發(fā)送給FRPSenable程序來(lái)進(jìn)行處理。FRPSdaemon程序收到內(nèi)核空從底層硬件接收到的控制幀并將這個(gè)控制幀中有用的信息剝離出來(lái)并轉(zhuǎn)發(fā)給FRPSenable程序,讓協(xié)議程序來(lái)處理。FRPSdaemon程序可以認(rèn)為FRPSenable程序和內(nèi)核空間的通信橋梁。
[0037]本發(fā)明具有以下有益效果:FRPS算法在環(huán)網(wǎng)上通過(guò)設(shè)置主節(jié)點(diǎn),傳輸節(jié)點(diǎn)能夠快速的確定備份端口和鏈路,不必通過(guò)漫長(zhǎng)的選舉過(guò)程,并略過(guò)監(jiān)聽狀態(tài),學(xué)習(xí)狀態(tài),直接進(jìn)入轉(zhuǎn)發(fā)狀態(tài),減少了故障時(shí)間。當(dāng)環(huán)上出現(xiàn)故障時(shí),傳輸節(jié)點(diǎn)可以從另外一個(gè)端口發(fā)送控制幀,通知環(huán)上的所有節(jié)點(diǎn)。在生成樹算法中必須在根端口向跟網(wǎng)橋發(fā)送TCN報(bào)文。在RSTP中,僅當(dāng)非邊緣端口轉(zhuǎn)為轉(zhuǎn)發(fā)狀態(tài)時(shí),拓?fù)浣Y(jié)構(gòu)才會(huì)發(fā)生改變,而當(dāng)節(jié)點(diǎn)出現(xiàn)斷開時(shí)時(shí),并不認(rèn)為是拓?fù)浒l(fā)生改變,而在FRPS算法中,對(duì)環(huán)而言,如果出現(xiàn)鏈路斷開,拓?fù)鋵?duì)于環(huán)上節(jié)點(diǎn)而言,是發(fā)生變化的,需要進(jìn)行拓?fù)涞那袚Q和重新學(xué)習(xí)。
【附圖說(shuō)明】
:
[0038]圖1是本發(fā)明中【背景技術(shù)】結(jié)構(gòu)示意圖。
[0039]圖2是本發(fā)明中端口狀態(tài)機(jī)示意圖。
[0040]圖3是本發(fā)明的程序框架圖。
[0041]圖4是本發(fā)明中FRPSenable程序的流程圖。
[0042]圖5是本發(fā)明中控制幀發(fā)送程序流程圖。
[0043]圖6是本發(fā)明中接收幀程序流程圖。
[0044]圖7是本發(fā)明中主節(jié)點(diǎn)的控制幀的處理流程圖。
[0045]圖8是本發(fā)明中傳輸節(jié)點(diǎn)的控制幀的處理流程圖。
【具體實(shí)施方式】
:
[0046]參看圖2,本【具體實(shí)施方式】是采用以下技術(shù)方案:一、環(huán)網(wǎng)協(xié)議算法即FRPS (FastRing Protect1n Switch)算法:它包含F(xiàn)RPS環(huán)、環(huán)端口、控制VLAN、業(yè)務(wù)VLAN、主節(jié)點(diǎn)、傳輸節(jié)點(diǎn)、控制幀。
[0047]所述的FRPS環(huán):FRPS算法是針環(huán)網(wǎng)方式組網(wǎng)的以太網(wǎng),F(xiàn)RPS算法必須運(yùn)行在環(huán)網(wǎng)上,所以將FRPS環(huán)定義為運(yùn)行了 FRPS算法的以太環(huán)網(wǎng)。
[0048]所述的環(huán)端口:在以太環(huán)網(wǎng)上,每個(gè)節(jié)點(diǎn)都有2個(gè)端口連接在環(huán)上。這兩個(gè)端口就稱為環(huán)端口。
[0049]所述的控制VLAN:在FRPS算法中,應(yīng)用了 VLAN技術(shù)。環(huán)上所有環(huán)端口都會(huì)加入控制VLAN??刂芕LAN上傳輸?shù)氖菫榱司S護(hù)FRPS算法而生成的各種控制幀,但不傳輸其他以太網(wǎng)幀。
[0050]所述的業(yè)務(wù)VLAN:在FRPS環(huán)上,除了控制VLAN,還設(shè)置了業(yè)務(wù)VLAN。環(huán)網(wǎng)上的所有端口都加入業(yè)務(wù)VLAN。業(yè)務(wù)VLAN上傳輸?shù)氖歉鞣N數(shù)據(jù)報(bào)文和普通以太網(wǎng)幀。在正常工作狀態(tài)下環(huán)上會(huì)有一個(gè)端口在業(yè)務(wù)VLAN上保持阻塞,這樣就能避免環(huán)網(wǎng)上產(chǎn)生廣播風(fēng)暴。
[0051]所述的主節(jié)點(diǎn):在FRPS環(huán)上的特殊節(jié)點(diǎn)。在正常工作狀態(tài)下,這個(gè)節(jié)點(diǎn)負(fù)責(zé)阻塞環(huán)路,避免廣播風(fēng)暴的形成。在環(huán)網(wǎng)上出現(xiàn)故障時(shí),主節(jié)點(diǎn)就將打開備份鏈路,實(shí)現(xiàn)保護(hù)切的功能。主節(jié)點(diǎn)的兩個(gè)環(huán)端口分別稱為主端口和從端口。正常狀態(tài)下,從端口對(duì)業(yè)務(wù)VLAN保持阻塞;故障狀態(tài)下,從端口解除對(duì)業(yè)務(wù)VLAN的阻塞。主端口在兩種狀態(tài)下都保持轉(zhuǎn)發(fā)狀態(tài)。
[0052]所述的傳輸節(jié)點(diǎn):在FRPS環(huán)上除了主節(jié)點(diǎn)以外的其他節(jié)點(diǎn)都稱為傳輸節(jié)點(diǎn)。在正常狀態(tài)下,這傳輸節(jié)點(diǎn)的兩個(gè)端口都不阻塞,而是保持在轉(zhuǎn)發(fā)狀態(tài)。當(dāng)節(jié)點(diǎn)的端口出現(xiàn)故障,就會(huì)將故障端口阻塞。
[0053]所述的控制幀:在控制VLAN上傳輸?shù)挠糜贔RPS算法的報(bào)文??刂茙习?dāng)前節(jié)點(diǎn)的狀態(tài)以及兩個(gè)環(huán)端口的狀態(tài)。每個(gè)節(jié)點(diǎn)都會(huì)定時(shí)發(fā)送控制幀到環(huán)上,控制幀在環(huán)上傳輸后,可使環(huán)上其他節(jié)點(diǎn)都得到發(fā)送節(jié)點(diǎn)的信息。這樣的方式可以使每個(gè)節(jié)點(diǎn)都得到環(huán)上所有節(jié)點(diǎn)的信息。
[0054]FRPS算法的工作原理:在FRPS環(huán)上有一個(gè)主節(jié)點(diǎn),這個(gè)主節(jié)點(diǎn)在初始時(shí)將從端口對(duì)業(yè)務(wù)VLAN設(shè)為阻塞,主端口在業(yè)務(wù)VLAN上設(shè)為轉(zhuǎn)發(fā)狀態(tài)。在控制VLAN上,所有端口都不阻塞都可以進(jìn)行轉(zhuǎn)發(fā)可能工作幀。其他傳輸節(jié)點(diǎn)在初始化時(shí)將兩個(gè)環(huán)端口都設(shè)為轉(zhuǎn)發(fā)狀態(tài)。初始化后,節(jié)點(diǎn)都會(huì)生成控制幀,將自身的信息填入控制幀,包括端口狀態(tài)信息,節(jié)點(diǎn)狀態(tài)和節(jié)點(diǎn)角色。控制幀在環(huán)網(wǎng)上傳輸,最終所有節(jié)點(diǎn)都獲得了環(huán)上主節(jié)點(diǎn)和傳輸節(jié)點(diǎn)的信息,并保存起來(lái)。為了防止控制巾貞的丟失,控制巾貞會(huì)定時(shí)發(fā)送??刂平碡懙亩〞r(shí)發(fā)送可以使環(huán)上的節(jié)點(diǎn)獲得發(fā)送節(jié)點(diǎn)的狀態(tài),如果發(fā)送節(jié)點(diǎn)出現(xiàn)故障,如斷電,那么環(huán)上的節(jié)點(diǎn)就無(wú)法再收到這個(gè)節(jié)點(diǎn)的狀態(tài),經(jīng)過(guò)一定時(shí)間后就會(huì)將這個(gè)節(jié)點(diǎn)的狀態(tài)刪除,也就是認(rèn)為這個(gè)節(jié)點(diǎn)已經(jīng)與FRPS環(huán)失去了聯(lián)系。
[0055]在正常情況下,整個(gè)FRPS環(huán)上就只有一個(gè)環(huán)端口處于阻塞狀態(tài),這個(gè)就是主節(jié)點(diǎn)的端口處于阻塞狀態(tài)。正是由于這個(gè)端口阻塞了業(yè)務(wù)VLAN,所以在業(yè)務(wù)VLAN上沒有環(huán)路形成。
[0056]如果有節(jié)點(diǎn)存在端口處于阻塞狀態(tài),并且環(huán)上不存在故障端口同時(shí)又發(fā)現(xiàn)主節(jié)點(diǎn)的從端口處于阻塞狀態(tài),就會(huì)立即將阻塞端口打開。由于每個(gè)節(jié)點(diǎn)都能獲得環(huán)上所有節(jié)點(diǎn)的狀態(tài),每個(gè)節(jié)點(diǎn)就可以根據(jù)獲得的這些所有節(jié)點(diǎn)信息進(jìn)行判斷,并決定是否要需要采取動(dòng)作。
[0057]當(dāng)鏈路發(fā)生故障時(shí),與故障相鄰的節(jié)點(diǎn)會(huì)立即檢測(cè)到故障,并將連接故障的端口設(shè)為阻塞狀態(tài)。檢測(cè)到端口故障的節(jié)點(diǎn),稱為故障節(jié)點(diǎn)。故障節(jié)點(diǎn)會(huì)立即將當(dāng)前端口的狀態(tài)通過(guò)控制幀發(fā)送出去,通知環(huán)上的傳輸節(jié)點(diǎn)和主節(jié)點(diǎn)。
[0058]環(huán)上的節(jié)點(diǎn)收到故障節(jié)點(diǎn)發(fā)出控制幀后,就會(huì)發(fā)現(xiàn)環(huán)上出現(xiàn)了故障端口,傳輸節(jié)點(diǎn)將節(jié)點(diǎn)狀態(tài)從正常狀態(tài)變?yōu)楣收蠣顟B(tài),并會(huì)立即刷新MAC地址表,并將這個(gè)控制幀發(fā)送出去。其他傳輸節(jié)點(diǎn)收到這個(gè)控制幀也進(jìn)行相同的操作。
[0059]這個(gè)控制幀通過(guò)各個(gè)節(jié)點(diǎn)依次轉(zhuǎn)發(fā),最終傳輸?shù)街鞴?jié)點(diǎn)。當(dāng)主節(jié)點(diǎn)收到這個(gè)控制幀后,就會(huì)發(fā)現(xiàn)環(huán)上出現(xiàn)故障端口,原來(lái)的傳輸路徑出現(xiàn)了故障,此時(shí)主節(jié)點(diǎn)就會(huì)立即打開從端口,使其進(jìn)入轉(zhuǎn)發(fā)狀態(tài),同時(shí)也刷新MAC地址表,將節(jié)點(diǎn)狀態(tài)狀態(tài)變?yōu)楣收蠣顟B(tài)。這樣主節(jié)點(diǎn)就啟動(dòng)了備份鏈路。同時(shí)環(huán)上的節(jié)點(diǎn)也因受到故障節(jié)點(diǎn)發(fā)送的控制幀,得知環(huán)上有故障端口,刷新了 MAC地址表。經(jīng)過(guò)主節(jié)點(diǎn)的這個(gè)操作就使原來(lái)的故障拓?fù)淝袚Q到新的拓?fù)渖?,?shí)現(xiàn)了保護(hù)切換功能,此時(shí)新的拓?fù)渚托纬闪恕?br>[0060]為了防止故障節(jié)點(diǎn)發(fā)送的控制幀因故丟失,節(jié)點(diǎn)會(huì)定期發(fā)送攜帶端口狀態(tài)和節(jié)點(diǎn)狀態(tài)的控制幀。當(dāng)收到同一個(gè)節(jié)點(diǎn)發(fā)送的相同的控制幀,節(jié)點(diǎn)只需轉(zhuǎn)發(fā),而不做任何處理。如果節(jié)點(diǎn)第一次收到某個(gè)節(jié)點(diǎn)控制幀,就會(huì)將其保存起來(lái)。如果節(jié)點(diǎn)收到某個(gè)節(jié)點(diǎn)發(fā)送的不同于之前的控制幀,則表明該節(jié)點(diǎn)的狀態(tài)發(fā)生改變,此時(shí),接收節(jié)點(diǎn)就會(huì)更新本地保存的發(fā)送節(jié)點(diǎn)的信息,并根據(jù)節(jié)點(diǎn)的具體改變,采取相應(yīng)的操作。
[0061]當(dāng)連接故障恢復(fù)時(shí),端口就會(huì)立即檢測(cè)到并通知節(jié)點(diǎn)。節(jié)點(diǎn)發(fā)現(xiàn)故障恢復(fù)后,仍保持恢復(fù)端口為阻塞狀態(tài),把端口狀態(tài)值設(shè)為相應(yīng)的值,并發(fā)送控制幀通知主節(jié)點(diǎn)。之所以把恢復(fù)端口仍設(shè)為阻塞狀態(tài)而沒有變?yōu)檗D(zhuǎn)發(fā)狀態(tài),是因?yàn)槿绻麑⒒謴?fù)端口立即置為轉(zhuǎn)發(fā)狀態(tài),那么會(huì)在環(huán)網(wǎng)形成回路,造成廣播風(fēng)暴。在傳輸節(jié)點(diǎn)的端口恢復(fù)時(shí),主節(jié)點(diǎn)還沒有得到端口恢復(fù)的消息,所以主節(jié)點(diǎn)的從端口還處于轉(zhuǎn)發(fā)狀態(tài),如果立即將故障端口直接設(shè)為轉(zhuǎn)發(fā)狀態(tài),那么FRPS環(huán)上的所有端口都將處于轉(zhuǎn)發(fā)狀態(tài),這樣就會(huì)形成回路,那么就會(huì)產(chǎn)生廣播風(fēng)暴。所以為了避免回路的形成,節(jié)點(diǎn)需要保持恢復(fù)端口為阻塞狀態(tài)。
[0062]環(huán)上的其他傳輸節(jié)點(diǎn)收到故障恢復(fù)節(jié)點(diǎn)發(fā)送的控制幀時(shí),更新本地保存的節(jié)點(diǎn)信息,由于發(fā)送節(jié)點(diǎn)的故障端口保持在阻塞狀態(tài),環(huán)上的傳輸拓?fù)溥€沒有發(fā)送變化,接收節(jié)點(diǎn)不會(huì)進(jìn)行其他設(shè)置,僅僅是將控制幀轉(zhuǎn)發(fā)。
[0063]故障恢復(fù)節(jié)點(diǎn)發(fā)送的控制幀經(jīng)過(guò)環(huán)上節(jié)點(diǎn)的逐個(gè)轉(zhuǎn)發(fā),最后到達(dá)主節(jié)點(diǎn)。當(dāng)主節(jié)點(diǎn)收到這個(gè)控制巾貞時(shí),立即更新本地保存的節(jié)點(diǎn)信息。同時(shí)主節(jié)點(diǎn)會(huì)檢查本地保存的環(huán)節(jié)點(diǎn)信息,檢查后發(fā)現(xiàn)環(huán)上節(jié)點(diǎn)不再有故障端口,就會(huì)立即將從端口設(shè)為阻塞狀態(tài),刷新地址表,將節(jié)點(diǎn)狀態(tài)變正常狀態(tài)。同時(shí)將主節(jié)點(diǎn)最新的端口狀態(tài)通過(guò)控制發(fā)送出去。但是,如果當(dāng)檢查保存的所有節(jié)點(diǎn)信息后發(fā)現(xiàn),環(huán)上還有節(jié)點(diǎn)的端口處于故障狀態(tài),那么主節(jié)點(diǎn)就必須保持從端口為轉(zhuǎn)發(fā)狀態(tài),而不會(huì)對(duì)業(yè)務(wù)VLAN阻塞,因?yàn)榇藭r(shí)環(huán)上還有故障端口,主節(jié)點(diǎn)的從端口必須為轉(zhuǎn)發(fā)狀態(tài),不能回到正常狀態(tài)。最后主節(jié)點(diǎn)將接收的控制幀繼續(xù)轉(zhuǎn)發(fā),使環(huán)上的其他節(jié)點(diǎn)獲得故障恢復(fù)節(jié)點(diǎn)的最新狀態(tài)。
[0064]如果環(huán)上沒有故障端口了,那么主節(jié)點(diǎn)就會(huì)在阻塞從端口后,在控制幀空將從端口狀態(tài)設(shè)為對(duì)應(yīng)的值,并發(fā)送出去。傳輸節(jié)點(diǎn)收到這個(gè)控制幀,立即更新本地保存的主節(jié)點(diǎn)的信息,可以發(fā)現(xiàn)環(huán)上的節(jié)點(diǎn)沒有故障端口,并且主節(jié)點(diǎn)已經(jīng)恢復(fù)到正常狀態(tài),那么傳輸節(jié)點(diǎn)也可以恢復(fù)到正常狀態(tài)。此時(shí)傳輸節(jié)點(diǎn)就會(huì)刷新MAC地址表,重新學(xué)習(xí)新的拓?fù)?,將?jié)點(diǎn)狀態(tài)設(shè)為正常狀態(tài),將兩個(gè)環(huán)端口都設(shè)為轉(zhuǎn)發(fā)狀態(tài)。同時(shí)將端口的狀態(tài)通過(guò)控制幀發(fā)送出去。當(dāng)主節(jié)點(diǎn)這個(gè)報(bào)文傳輸?shù)江h(huán)上每個(gè)傳輸節(jié)點(diǎn)后,那么整個(gè)環(huán)路就又恢復(fù)到正常狀態(tài)。對(duì)于故障恢復(fù)節(jié)點(diǎn),在收到這個(gè)控制幀時(shí),就會(huì)將解除恢復(fù)端口的阻塞,使兩個(gè)端口都變?yōu)檗D(zhuǎn)發(fā)狀態(tài)并刷新MAC地址表,學(xué)習(xí)網(wǎng)絡(luò)拓?fù)?。通過(guò)這個(gè)方式使得恢復(fù)的網(wǎng)絡(luò)又能回到正常的狀態(tài)。
[0065]在FRPS環(huán)上為了保證環(huán)網(wǎng)上不形成回路,需要對(duì)端口進(jìn)行阻塞操作,在故障出現(xiàn)時(shí)又需要將原來(lái)阻塞的端口變?yōu)檗D(zhuǎn)發(fā)狀態(tài),如果按照生產(chǎn)樹協(xié)議算法,端口由監(jiān)聽狀態(tài)到學(xué)習(xí)狀態(tài)在到轉(zhuǎn)發(fā)狀態(tài),這個(gè)時(shí)間非常長(zhǎng),所以需要能夠使端口在需要的時(shí)候立即進(jìn)入轉(zhuǎn)發(fā)狀態(tài),而略過(guò)這些中間狀態(tài),同時(shí)還能避免廣播風(fēng)暴的產(chǎn)生。
[0066]在運(yùn)行了 FRPS算法的節(jié)點(diǎn)上,對(duì)端口的狀態(tài)控制是根據(jù)端口現(xiàn)有狀態(tài)和當(dāng)前發(fā)生的事情來(lái)決定的,所以對(duì)端口的管理可以根據(jù)端口狀態(tài)機(jī)來(lái)進(jìn)行。在FRPS算法中,端口狀態(tài)機(jī)如說(shuō)明書附圖2所示,狀態(tài)轉(zhuǎn)換條件如下:
[0067]A、斷開狀態(tài)到阻塞狀態(tài)。端口使能,與其他端口連接;主節(jié)點(diǎn)上電從端口使能。
[0068]B、阻塞狀態(tài)到到斷開狀態(tài)。端口斷開,鏈路發(fā)生故障。
[0069]C、阻塞狀態(tài)到轉(zhuǎn)發(fā)狀態(tài)。主節(jié)點(diǎn)認(rèn)為環(huán)網(wǎng)發(fā)送故障;節(jié)點(diǎn)的端口恢復(fù)鏈接,主節(jié)點(diǎn)阻塞從端口后,節(jié)點(diǎn)恢復(fù)端口恢復(fù)轉(zhuǎn)發(fā)狀態(tài)。
[0070]D、轉(zhuǎn)發(fā)狀態(tài)到阻塞狀態(tài)。主節(jié)點(diǎn)認(rèn)為環(huán)上的故障恢復(fù)時(shí)從端口的動(dòng)作。
[0071]E、轉(zhuǎn)發(fā)狀態(tài)到斷開狀態(tài)。端口端口,斷電或鏈路故障。
[0072]F、斷開狀態(tài)到轉(zhuǎn)發(fā)狀態(tài)。端口使能,傳輸節(jié)點(diǎn)上電。
[0073]結(jié)合端口狀態(tài)機(jī),F(xiàn)RPS算法在運(yùn)行時(shí)就可以進(jìn)行相應(yīng)的端口管理操作。當(dāng)交換芯片運(yùn)行FRPS算法時(shí),主節(jié)點(diǎn)的的從端口進(jìn)入阻塞狀態(tài),而主端口進(jìn)入轉(zhuǎn)發(fā)狀態(tài);傳輸節(jié)點(diǎn)的兩個(gè)環(huán)端口都進(jìn)入轉(zhuǎn)發(fā)狀態(tài)。通過(guò)這個(gè)操作,這個(gè)FRPS環(huán)上有一個(gè)端口處于阻塞狀態(tài),這個(gè)環(huán)上就不會(huì)發(fā)送廣播風(fēng)暴,同時(shí)主節(jié)點(diǎn)的從端口阻塞的鏈路作為冗余鏈路起到備份作用。當(dāng)環(huán)網(wǎng)故障時(shí),當(dāng)某條鏈路因發(fā)送意外而斷線,主節(jié)點(diǎn)發(fā)現(xiàn)后迅速將主節(jié)點(diǎn)從端口從斷開狀態(tài)進(jìn)入轉(zhuǎn)發(fā)狀態(tài),同時(shí)環(huán)上節(jié)點(diǎn)發(fā)現(xiàn)這個(gè)故障后都會(huì)立即刷新MAC地址表,從而形成新的鏈路,而與故障相連得端口因鏈路斷開而進(jìn)入端口狀態(tài)。當(dāng)故障修復(fù)后,與原故障鏈路相連的端口從斷開狀態(tài)進(jìn)入阻塞狀態(tài),在主節(jié)點(diǎn)發(fā)現(xiàn)環(huán)網(wǎng)修復(fù)后將從端口從轉(zhuǎn)發(fā)狀態(tài)置為阻塞狀態(tài),并將通知節(jié)點(diǎn)將恢復(fù)的阻塞端口進(jìn)入轉(zhuǎn)發(fā)狀態(tài)。
[0074]參看圖3,本【具體實(shí)施方式】的實(shí)現(xiàn)方案如下:FRPS的實(shí)現(xiàn)是基于和內(nèi)核空間進(jìn)行通信來(lái)實(shí)現(xiàn)的。在內(nèi)核空間,系統(tǒng)能夠?qū)Φ讓拥亩丝谶M(jìn)行監(jiān)控和設(shè)置,同時(shí)內(nèi)核空間還能夠?qū)Φ讓咏邮盏臄?shù)據(jù)包進(jìn)行處理,篩選出FRPS協(xié)議的控制幀,并通知用戶空間的處理程序來(lái)處理。在用戶空間,F(xiàn)RPS協(xié)議的控制幀的發(fā)送需要先交給內(nèi)核空間,再由內(nèi)核空間來(lái)驅(qū)動(dòng)底層硬件發(fā)送,并且FRPS協(xié)議在實(shí)現(xiàn)過(guò)程中也需要對(duì)端口進(jìn)行直接的操作,如阻塞,打開阻塞,刷新MAC地址表和發(fā)送控制幀。
[0075]所以為了用戶空間和內(nèi)核空間的通信,采用了幾種方式來(lái)達(dá)到FRPS協(xié)議所需的通信。第一利用netlink的方式來(lái)完成用戶空間的kernel和FRPS協(xié)議的通信,實(shí)現(xiàn)控制幀由內(nèi)核空間到達(dá)用戶空間的傳遞。第二,將內(nèi)核空間的一些端口設(shè)置函數(shù)進(jìn)行封裝,使得用戶空間可以直接調(diào)用這些函數(shù),實(shí)現(xiàn)對(duì)端口的直接控制,并且可以直接利用這些函數(shù)將控制報(bào)文發(fā)送到FRPS環(huán)上。在用戶空間為了實(shí)現(xiàn)FRPS算法,采用了多進(jìn)程處理的方式,為了滿足進(jìn)程間的通信使用了 socket方式。
[0076]在用戶空間為了實(shí)現(xiàn)FRPS算法,編寫了 3個(gè)程序,分別為FRPSenable程序,F(xiàn)RPSdisable程序和FRPSdaemon程序。FRPSenable程序完成了算法的主要功能,包括??節(jié)點(diǎn)的初始化,控制幀的生成和發(fā)送,控制幀的接收和對(duì)端口的控制。FRPSdisable程序用于終止FRPS算法的運(yùn)行。FRPSdaemon程序?qū)崿F(xiàn)了內(nèi)核空間的直接通信,同時(shí)也實(shí)現(xiàn)了和FRPSenable程序的通信,可以說(shuō)是FRPSenable和內(nèi)核空間的溝通橋梁。。
[0077]參看圖4,F(xiàn)RPSenable程序完成了 FRPS協(xié)議主要功能,從協(xié)議程序運(yùn)行開始,首先判斷節(jié)點(diǎn)是否為主節(jié)點(diǎn),如果是主節(jié)點(diǎn),進(jìn)行變量初始化,就將其從端口對(duì)業(yè)務(wù)VLAN阻塞,主端口進(jìn)入轉(zhuǎn)發(fā)狀態(tài)。如果節(jié)點(diǎn)為傳輸節(jié)點(diǎn),也要先進(jìn)行變量初始化,就將兩個(gè)環(huán)斷口都設(shè)為轉(zhuǎn)發(fā)狀態(tài)。在設(shè)置好端口狀態(tài)后,就會(huì)立即發(fā)送一個(gè)控制幀,這個(gè)控制幀中包含著兩個(gè)環(huán)端口的狀態(tài)。在發(fā)送了控制幀后,就會(huì)運(yùn)行控制幀發(fā)送線程和接受線程,直到結(jié)束為止。這個(gè)初始化的過(guò)程不僅包括各種變量的初始化也包括建立各個(gè)進(jìn)程間的通信通道。
[0078]參看圖5,發(fā)送幀過(guò)程的作用是定時(shí)地將含有端口狀態(tài)情況的控制幀發(fā)送出去。這個(gè)發(fā)送間隔定為5秒。這個(gè)時(shí)間間隔可以人為設(shè)定。利用這種定時(shí)發(fā)送控制幀的方式,可以避免控制幀丟失而無(wú)法再環(huán)上傳播,而且利用這種定時(shí)控制幀可以使得環(huán)上的節(jié)點(diǎn)了解到環(huán)上存在的節(jié)點(diǎn)情況。
[0079]參看圖6,接收巾貞過(guò)程的作用是接收從FRPSdaemon程序通過(guò)Socket方式發(fā)送給FRPSenable的控制幀。FRPSenable程序中的接收控制幀線程會(huì)根據(jù)接收的控制幀的類型進(jìn)行相應(yīng)的操作。
[0080]如果收到的控制幀為端口狀態(tài)變化的控制幀,先判斷端口狀態(tài)的具體變化。當(dāng)端口從Up變?yōu)镈own,說(shuō)明端口連接的鏈路出現(xiàn)故障了,此時(shí)節(jié)點(diǎn)就會(huì)將該端口設(shè)為阻塞狀態(tài),將其他非故障的環(huán)端口設(shè)為轉(zhuǎn)發(fā)狀態(tài),同時(shí)更新節(jié)點(diǎn)的端口狀態(tài),刷新MAC地址表,并立即發(fā)送控制幀同時(shí)環(huán)上的其他節(jié)點(diǎn);當(dāng)端口由Down變成UP,則表明端口連接的鏈路重新恢復(fù)了連接,此時(shí)如果將端口直接變?yōu)檗D(zhuǎn)發(fā)狀態(tài)就會(huì)造成回路,所以為了避免環(huán)路,就繼續(xù)保持恢復(fù)連接的端口的阻塞狀態(tài),并更新節(jié)點(diǎn)的端口狀態(tài)信息,立即發(fā)送控制幀通知環(huán)上的主節(jié)點(diǎn),報(bào)告故障恢復(fù)。
[0081]當(dāng)節(jié)點(diǎn)收到的控制幀是其他節(jié)點(diǎn)發(fā)送的控制幀時(shí),由于主節(jié)點(diǎn)和傳輸節(jié)點(diǎn)的區(qū)別,所以兩者對(duì)控制幀的處理也存在著差別。
[0082]參看圖7,主節(jié)點(diǎn)收到這個(gè)控制后,先判斷是否是主節(jié)點(diǎn)發(fā)送出去的,如果是,則將這個(gè)控制丟棄,不進(jìn)行處理。如果收到的是其他節(jié)點(diǎn)發(fā)送的控制幀,那么就堅(jiān)持這個(gè)節(jié)點(diǎn)的控制是否接收過(guò),如果沒有,那么就是第一次接受到這個(gè)節(jié)點(diǎn)的控制幀,此時(shí)就需要將這個(gè)節(jié)點(diǎn)的信息保存下來(lái),包括節(jié)點(diǎn)的MAC地址,端口的狀態(tài)。如果主節(jié)點(diǎn)接收過(guò)這個(gè)節(jié)點(diǎn)的控制幀,那么就會(huì)檢查控制幀中的端口狀態(tài)是否和主節(jié)點(diǎn)保存的該節(jié)點(diǎn)的端口狀態(tài)一致,如果一致,就僅僅是轉(zhuǎn)發(fā)該幀,不做其他處理。如果收到的控制幀中的信息和主節(jié)點(diǎn)保存的信息不一致,那么就需要進(jìn)行下一步判斷。
[0083]如果節(jié)點(diǎn)的端口狀態(tài)中有某個(gè)端口的狀態(tài)變?yōu)?,就表示這個(gè)節(jié)點(diǎn)的端口 Down了,此時(shí)主節(jié)點(diǎn)就需要將原來(lái)阻塞的從端口打開然后,更新主節(jié)點(diǎn)狀態(tài),更新保存的節(jié)點(diǎn)信息,然后轉(zhuǎn)發(fā)該幀。
[0084]如果節(jié)點(diǎn)的端口狀態(tài)中有某個(gè)端口的狀態(tài)為I,就表示這個(gè)端口被阻塞了,并且這個(gè)端口的連接的鏈路是正常的。此時(shí)主節(jié)點(diǎn)就會(huì)堅(jiān)持在主節(jié)點(diǎn)保存的環(huán)上節(jié)點(diǎn)的端口狀態(tài),如果還有節(jié)點(diǎn)的端口處于故障狀態(tài),即狀態(tài)為0,那么主節(jié)點(diǎn)就會(huì)保持從端口子在轉(zhuǎn)發(fā)狀態(tài),并將該控制幀轉(zhuǎn)發(fā)出去。當(dāng)主節(jié)點(diǎn)發(fā)現(xiàn)環(huán)上節(jié)點(diǎn)都沒有故障端口時(shí),就會(huì)將從端口阻塞,并更新主節(jié)點(diǎn)的狀態(tài),刷新MAC地址表,發(fā)送控制幀通知環(huán)上其他節(jié)點(diǎn)。
[0085]參看圖8,當(dāng)傳輸接收到自己發(fā)送的控制幀時(shí),就會(huì)將該幀丟棄,不做處理。當(dāng)傳輸節(jié)點(diǎn)收到其他節(jié)點(diǎn)控制幀時(shí)會(huì)先轉(zhuǎn)發(fā),然后進(jìn)行處理。當(dāng)傳輸節(jié)點(diǎn)第一次收到其他節(jié)點(diǎn)發(fā)送的控制幀時(shí),就會(huì)將這個(gè)節(jié)點(diǎn)的MAC地址,端口狀態(tài)保存起來(lái)。如果不是第一次接收,那么就會(huì)比較接收的控制幀中的信息和保存的信息是否一致。如果一致表明發(fā)送節(jié)點(diǎn)的狀態(tài)未發(fā)生變化,只需更新節(jié)點(diǎn)信息,不必做其他處理。當(dāng)接收的節(jié)點(diǎn)狀態(tài)和傳輸節(jié)點(diǎn)保存的狀態(tài)不一樣,此時(shí)節(jié)點(diǎn)就需要根據(jù)控制幀的信息進(jìn)行對(duì)應(yīng)處理。
[0086]如果發(fā)送節(jié)點(diǎn)端口由正常的狀態(tài)變?yōu)楣收蠣顟B(tài),則傳輸節(jié)點(diǎn)會(huì)刷新MAC地址表,發(fā)送控制幀,將此時(shí)節(jié)點(diǎn)的狀態(tài)發(fā)送出去,通知環(huán)上的節(jié)點(diǎn)。
[0087]如果發(fā)送節(jié)點(diǎn)的端口的狀態(tài)為I,就判斷發(fā)送節(jié)點(diǎn)是否為主節(jié)點(diǎn)。如果是主節(jié)點(diǎn)發(fā)送的,其從端口助于阻塞狀態(tài),主節(jié)點(diǎn)處于轉(zhuǎn)發(fā)狀態(tài),則說(shuō)明主節(jié)點(diǎn)已經(jīng)確認(rèn)環(huán)上沒有故障節(jié)點(diǎn),此時(shí)傳輸節(jié)點(diǎn)就會(huì)將兩個(gè)端口都置于轉(zhuǎn)發(fā)狀態(tài),并將節(jié)點(diǎn)的當(dāng)前狀態(tài)通過(guò)控制幀發(fā)送出去。如果控制幀是由傳輸節(jié)點(diǎn)發(fā)送的,那么傳輸節(jié)點(diǎn)只需保持原來(lái)的狀態(tài)就可以,更新保持的節(jié)點(diǎn)信息就可以了。
[0088]FRPSenable進(jìn)程中完成了主節(jié)點(diǎn)和傳輸節(jié)點(diǎn)對(duì)控制幀的接收和處理過(guò)程。同時(shí)這個(gè)過(guò)程也是FRPS算法的功能的具體實(shí)現(xiàn)
[0089]FRPSdaemon程序也采用了兩個(gè)線程,分別為端口狀態(tài)檢測(cè)線程和接收從內(nèi)核空間收到的控制幀線程。這個(gè)端口狀態(tài)的變化監(jiān)控,是利用硬件掃描的方式監(jiān)控端口的狀態(tài),當(dāng)端口的狀態(tài)發(fā)生變化就會(huì)通知內(nèi)核空間,當(dāng)內(nèi)核空間得到這個(gè)通知后就會(huì)立即利用netlink的方式通知到用戶空間的FRPSdaemon程序。當(dāng)FRPSdaemon程序得到這個(gè)消息后,就會(huì)將這個(gè)消息轉(zhuǎn)化為控制幀的格式并發(fā)送給FRPSenable程序來(lái)進(jìn)行處理。FRPSdaemon程序收到內(nèi)核空從底層硬件接收到的控制幀并將這個(gè)控制幀中有用的信息剝離出來(lái)并轉(zhuǎn)發(fā)給FRPSenable程序,讓協(xié)議程序來(lái)處理。FRPSdaemon程序可以認(rèn)為FRPSenable程序和內(nèi)核空間的通信橋梁。
[0090]本【具體實(shí)施方式】具有以下有益效果:它結(jié)合了標(biāo)準(zhǔn)MAC交換,故障告警,故障處理和環(huán)網(wǎng)控制協(xié)議,通過(guò)環(huán)網(wǎng)控制協(xié)議將物理的環(huán)變?yōu)檫壿嫷逆?,從而避免了在環(huán)網(wǎng)上形成廣播風(fēng)暴。
【主權(quán)項(xiàng)】
1.一種快速自愈的變電站環(huán)網(wǎng)協(xié)議算法,其特征在于它包含F(xiàn)RPS環(huán)、環(huán)端口、控制VLAN、業(yè)務(wù)VLAN、主節(jié)點(diǎn)、傳輸節(jié)點(diǎn)、控制幀; 所述的FRPS環(huán):FRPS算法是針環(huán)網(wǎng)方式組網(wǎng)的以太網(wǎng),F(xiàn)RPS算法必須運(yùn)行在環(huán)網(wǎng)上,所以將FRPS環(huán)定義為運(yùn)行了 FRPS算法的以太環(huán)網(wǎng); 所述的環(huán)端口:在以太環(huán)網(wǎng)上,每個(gè)節(jié)點(diǎn)都有2個(gè)端口連接在環(huán)上,這兩個(gè)端口就稱為環(huán)端口 ; 所述的控制VLAN:在FRPS算法中,應(yīng)用了 VLAN技術(shù),環(huán)上所有環(huán)端口都會(huì)加入控制VLAN,控制VLAN上傳輸?shù)氖菫榱司S護(hù)FRPS算法而生成的各種控制幀,但不傳輸其他以太網(wǎng)幀; 所述的業(yè)務(wù)VLAN:在FRPS環(huán)上,除了控制VLAN,還設(shè)置了業(yè)務(wù)VLAN,環(huán)網(wǎng)上的所有端口都加入業(yè)務(wù)VLAN,業(yè)務(wù)VLAN上傳輸?shù)氖歉鞣N數(shù)據(jù)報(bào)文和普通以太網(wǎng)幀,在正常工作狀態(tài)下環(huán)上會(huì)有一個(gè)端口在業(yè)務(wù)VLAN上保持阻塞,這樣就能避免環(huán)網(wǎng)上產(chǎn)生廣播風(fēng)暴; 所述的主節(jié)點(diǎn):在FRPS環(huán)上的特殊節(jié)點(diǎn),在正常工作狀態(tài)下,這個(gè)節(jié)點(diǎn)負(fù)責(zé)阻塞環(huán)路,避免廣播風(fēng)暴的形成,在環(huán)網(wǎng)上出現(xiàn)故障時(shí),主節(jié)點(diǎn)就將打開備份鏈路,實(shí)現(xiàn)保護(hù)切的功能,主節(jié)點(diǎn)的兩個(gè)環(huán)端口分別稱為主端口和從端口,正常狀態(tài)下,從端口對(duì)業(yè)務(wù)VLAN保持阻塞;故障狀態(tài)下,從端口解除對(duì)業(yè)務(wù)VLAN的阻塞,主端口在兩種狀態(tài)下都保持轉(zhuǎn)發(fā)狀態(tài); 所述的傳輸節(jié)點(diǎn):在FRPS環(huán)上除了主節(jié)點(diǎn)以外的其他節(jié)點(diǎn)都稱為傳輸節(jié)點(diǎn),在正常狀態(tài)下,這傳輸節(jié)點(diǎn)的兩個(gè)端口都不阻塞,而是保持在轉(zhuǎn)發(fā)狀態(tài),當(dāng)節(jié)點(diǎn)的端口出現(xiàn)故障,就會(huì)將故障端口阻塞; 所述的控制幀:在控制VLAN上傳輸?shù)挠糜贔RPS算法的報(bào)文,控制幀上包含當(dāng)前節(jié)點(diǎn)的狀態(tài)以及兩個(gè)環(huán)端口的狀態(tài),每個(gè)節(jié)點(diǎn)都會(huì)定時(shí)發(fā)送控制幀到環(huán)上,控制幀在環(huán)上傳輸后,可使環(huán)上其他節(jié)點(diǎn)都得到發(fā)送節(jié)點(diǎn)的信息,這樣的方式可以使每個(gè)節(jié)點(diǎn)都得到環(huán)上所有節(jié)點(diǎn)的信息。2.一種快速自愈的變電站環(huán)網(wǎng)協(xié)議算法的實(shí)現(xiàn)方法,其特征在于FRPS的實(shí)現(xiàn)是基于和內(nèi)核空間進(jìn)行通信來(lái)實(shí)現(xiàn)的,在內(nèi)核空間,系統(tǒng)能夠?qū)Φ讓拥亩丝谶M(jìn)行監(jiān)控和設(shè)置,同時(shí)內(nèi)核空間還能夠?qū)Φ讓咏邮盏臄?shù)據(jù)包進(jìn)行處理,篩選出FRPS協(xié)議的控制幀,并通知用戶空間的處理程序來(lái)處理,在用戶空間,F(xiàn)RPS協(xié)議的控制幀的發(fā)送需要先交給內(nèi)核空間,再由內(nèi)核空間來(lái)驅(qū)動(dòng)底層硬件發(fā)送,并且FRPS協(xié)議在實(shí)現(xiàn)過(guò)程中也需要對(duì)端口進(jìn)行直接的操作,如阻塞,打開阻塞,刷新MAC地址表和發(fā)送控制幀; 所以為了用戶空間和內(nèi)核空間的通信,采用了幾種方式來(lái)達(dá)到FRPS協(xié)議所需的通信,第一利用netlink的方式來(lái)完成用戶空間的kernel和FRPS協(xié)議的通信,實(shí)現(xiàn)控制幀由內(nèi)核空間到達(dá)用戶空間的傳遞,第二,將內(nèi)核空間的一些端口設(shè)置函數(shù)進(jìn)行封裝,使得用戶空間可以直接調(diào)用這些函數(shù),實(shí)現(xiàn)對(duì)端口的直接控制,并且可以直接利用這些函數(shù)將控制報(bào)文發(fā)送到FRPS環(huán)上,在用戶空間為了實(shí)現(xiàn)FRPS算法,采用了多進(jìn)程處理的方式,為了滿足進(jìn)程間的通信使用了 socket方式; 在用戶空間為了實(shí)現(xiàn)FRPS算法,編寫了 3個(gè)程序,分別為FRPSenable程序,F(xiàn)RPSdisable程序和FRPSdaemon程序,F(xiàn)RPSenable程序完成了算法的主要功能,包括??節(jié)點(diǎn)的初始化,控制幀的生成和發(fā)送,控制幀的接收和對(duì)端口的控制,F(xiàn)RPSdisable程序用于終止FRPS算法的運(yùn)行,F(xiàn)RPSdaemon程序?qū)崿F(xiàn)了內(nèi)核空間的直接通信,同時(shí)也實(shí)現(xiàn)了和FRPSenable程序的通信,可以說(shuō)是FRPSenable和內(nèi)核空間的溝通橋梁; FRPSenable程序完成了 FRPS協(xié)議主要功能,從協(xié)議程序運(yùn)行開始,首先判斷節(jié)點(diǎn)是否為主節(jié)點(diǎn),如果是主節(jié)點(diǎn),進(jìn)行變量初始化,就將其從端口對(duì)業(yè)務(wù)VLAN阻塞,主端口進(jìn)入轉(zhuǎn)發(fā)狀態(tài),如果節(jié)點(diǎn)為傳輸節(jié)點(diǎn),也要先進(jìn)行變量初始化,就將兩個(gè)環(huán)斷口都設(shè)為轉(zhuǎn)發(fā)狀態(tài),在設(shè)置好端口狀態(tài)后,就會(huì)立即發(fā)送一個(gè)控制幀,這個(gè)控制幀中包含著兩個(gè)環(huán)端口的狀態(tài),在發(fā)送了控制幀后,就會(huì)運(yùn)行控制幀發(fā)送線程和接受線程,直到結(jié)束為止,這個(gè)初始化的過(guò)程不僅包括各種變量的初始化也包括建立各個(gè)進(jìn)程間的通信通道; 發(fā)送幀過(guò)程的作用是定時(shí)地將含有端口狀態(tài)情況的控制幀發(fā)送出去,這個(gè)發(fā)送間隔定為5秒,這個(gè)時(shí)間間隔可以人為設(shè)定,利用這種定時(shí)發(fā)送控制幀的方式,可以避免控制幀丟失而無(wú)法再環(huán)上傳播,而且利用這種定時(shí)控制幀可以使得環(huán)上的節(jié)點(diǎn)了解到環(huán)上存在的節(jié)點(diǎn)情況; 而接收巾貞過(guò)程的作用是接收從FRPSdaemon程序通過(guò)Socket方式發(fā)送給FRPSenable的控制幀,F(xiàn)RPSenable程序中的接收控制幀線程會(huì)根據(jù)接收的控制幀的類型進(jìn)行相應(yīng)的操作; 當(dāng)節(jié)點(diǎn)收到的控制幀是其他節(jié)點(diǎn)發(fā)送的控制幀時(shí),由于主節(jié)點(diǎn)和傳輸節(jié)點(diǎn)的區(qū)別,所以兩者對(duì)控制幀的處理也存在著差別; FRPSenable進(jìn)程中完成了主節(jié)點(diǎn)和傳輸節(jié)點(diǎn)對(duì)控制幀的接收和處理過(guò)程,同時(shí)這個(gè)過(guò)程也是FRPS算法的功能的具體實(shí)現(xiàn); FRPSdaemon程序也采用了兩個(gè)線程,分別為端口狀態(tài)檢測(cè)線程和接收從內(nèi)核空間收到的控制幀線程,這個(gè)端口狀態(tài)的變化監(jiān)控,是利用硬件掃描的方式監(jiān)控端口的狀態(tài),當(dāng)端口的狀態(tài)發(fā)生變化就會(huì)通知內(nèi)核空間,當(dāng)內(nèi)核空間得到這個(gè)通知后就會(huì)立即利用netlink的方式通知到用戶空間的FRPSdaemon程序,當(dāng)FRPSdaemon程序得到這個(gè)消息后,就會(huì)將這個(gè)消息轉(zhuǎn)化為控制巾貞的格式并發(fā)送給FRPSenable程序來(lái)進(jìn)行處理,F(xiàn)RPSdaemon程序收到內(nèi)核空從底層硬件接收到的控制幀并將這個(gè)控制幀中有用的信息剝離出來(lái)并轉(zhuǎn)發(fā)給FRPSenable程序,讓協(xié)議程序來(lái)處理,FRPSdaemon程序可以認(rèn)為FRPSenable程序和內(nèi)核空間的通信橋梁。
【文檔編號(hào)】H04L29/06GK105897578SQ201410458238
【公開日】2016年8月24日
【申請(qǐng)日】2014年9月11日
【發(fā)明人】姬磊
【申請(qǐng)人】姬磊