国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 網(wǎng)絡(luò)通信 > 正文

通用操作系統(tǒng)交換路由器操作系統(tǒng)實(shí)現(xiàn)

2019-11-05 00:40:12
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  引 言
  路由器最重要的工作是根據(jù)ip包頭和路由、過(guò)濾規(guī)則轉(zhuǎn)發(fā)IP包。其他功能還包括路由表的維護(hù)與路由器系統(tǒng)的維護(hù)。實(shí)際上路由器可以看成是一種針對(duì)IP網(wǎng)絡(luò)路由需求而設(shè)計(jì)的專用計(jì)算機(jī)。隨著因特網(wǎng)所承載的業(yè)務(wù)的演進(jìn),因特網(wǎng)對(duì)于路由器性能的要求也日漸提高。在交換式路由器中,包轉(zhuǎn)發(fā)等絕大多數(shù)處理已經(jīng)轉(zhuǎn)移到以端口為中心的硬件中完成,只有路由規(guī)則的生成與維護(hù)、網(wǎng)絡(luò)治理和系統(tǒng)維護(hù)等比較復(fù)雜的工作仍由軟件部分完成。
  
  實(shí)用中路由器所采用的操作系統(tǒng)可分為三大類:(1)以Cisco的IOS為代表的專用操作系統(tǒng),常見于網(wǎng)絡(luò)骨干節(jié)點(diǎn);(2)以VxWorks為代表的嵌入式系統(tǒng),常見于小型辦公/家用接入設(shè)備上;(3)采用通用操作系統(tǒng)的則在骨干節(jié)點(diǎn)和用戶接入設(shè)備上都有這類設(shè)備。例如Juniper的路由產(chǎn)品就采用linux作為操作系統(tǒng)。通用操作系統(tǒng)上的各種路由、網(wǎng)管軟件的開發(fā)已經(jīng)有相當(dāng)長(zhǎng)時(shí)間,其功能、性能、穩(wěn)定性和升級(jí)靈活性都很優(yōu)秀,但這些軟件仍然是針對(duì)傳統(tǒng)路由器體系結(jié)構(gòu)開發(fā)的,無(wú)法直接應(yīng)用于新的路由器體系結(jié)構(gòu)。本文提出在通用操作系統(tǒng)的驅(qū)動(dòng)棧中插入一個(gè)中間層,這樣對(duì)系統(tǒng)內(nèi)核及和運(yùn)行在其上的路由、網(wǎng)管等上層軟件屏蔽了下層硬件的非凡性,從而把上層軟件和高速硬件平臺(tái)結(jié)合起來(lái)。該方案已經(jīng)應(yīng)用于高速邊緣路由器中,并表現(xiàn)出了良好的實(shí)用性和可擴(kuò)展性。
  
  1 交換式路由器與傳統(tǒng)路由器在體系結(jié)構(gòu)上的差別
  路由器工作在網(wǎng)絡(luò)的第三層,其處理工作主要涵蓋七層模型中的下三層,包括:物理接口處理、數(shù)據(jù)鏈路層處理、網(wǎng)絡(luò)層的路由查找、轉(zhuǎn)發(fā)以及隊(duì)列治理等[1]。在傳統(tǒng)的路由器體系結(jié)構(gòu)中,硬件部分只實(shí)現(xiàn)物理層的處理,其余工作需要消耗系統(tǒng)計(jì)算資源完成:包括CPU周期、內(nèi)存容量和總線帶寬等,因此性能也受限于這些資源。而在交換式路由器中,路由處理機(jī)僅處理系統(tǒng)維護(hù)、路由表維護(hù)等少量工作,數(shù)據(jù)流的處理都由相對(duì)獨(dú)立的硬件完成,不再受限于系統(tǒng)計(jì)算資源,因此其性能遠(yuǎn)優(yōu)于傳統(tǒng)路由器[2]。如圖1所示。
  
 

  
 

  傳統(tǒng)路由器和交換式路由器在體系結(jié)構(gòu)方面有明顯的區(qū)別:在傳統(tǒng)路由器中,所有的物理接口直接掛接在總線上,內(nèi)核可以通過(guò)總線直接訪問(wèn)這些接口;而在交換式路由器中,只有控制卡是直接掛接在總線上的,內(nèi)核必須通過(guò)控制卡間接訪問(wèn)各個(gè)接口。這導(dǎo)致操作系統(tǒng)內(nèi)核中代表網(wǎng)絡(luò)接口的驅(qū)動(dòng)對(duì)象的區(qū)別:在傳統(tǒng)路由器中,內(nèi)核存在若干網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)對(duì)象實(shí)例,每個(gè)實(shí)例通過(guò)總線直接維護(hù)一個(gè)端口,為內(nèi)核及其上面的上層軟件提供基本操作支持。而在交換式路由器中,普通的網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)對(duì)象無(wú)法直接維護(hù)端口,也無(wú)法支持系統(tǒng)內(nèi)核和上層軟件操作。因此,交換式路由器體系結(jié)構(gòu)的非凡性使得通用操作系統(tǒng)和上層軟件無(wú)法直接應(yīng)用。針對(duì)這個(gè)問(wèn)題有兩種解決辦法:(1)大量修改內(nèi)核和各種相關(guān)軟件的源代碼以適應(yīng)新的體系結(jié)構(gòu)。這種做法存在開發(fā)工作量大、周期長(zhǎng)、局限性強(qiáng)的缺點(diǎn),喪失了使用通用操作系統(tǒng)的靈活性;(2)在驅(qū)動(dòng)棧中增加一個(gè)中間層,支持普通網(wǎng)絡(luò)驅(qū)動(dòng)對(duì)象所能支持的一切操作,這樣系統(tǒng)內(nèi)核和上層軟件基本上不必修改就可以運(yùn)行在交換式路由器上。這就是本文所提出的中間層方案。這種方案克服了第一種方法的復(fù)雜性,在保持靈活性的基礎(chǔ)上,可以快速地把通用操作系統(tǒng)及上層軟件移植到交換式路由器的硬件平臺(tái)上。
  
  2 中間層設(shè)計(jì)
  中間層功能包括數(shù)據(jù)通信和控制兩個(gè)方面。從數(shù)據(jù)通信方面考慮,每個(gè)端口的功能都等效于傳統(tǒng)路由器中的一個(gè)網(wǎng)絡(luò)接口,所以每個(gè)物理端口在內(nèi)核中都應(yīng)有對(duì)應(yīng)的網(wǎng)絡(luò)驅(qū)動(dòng)實(shí)例。這樣才能支持各種上層軟件運(yùn)行,滿足數(shù)據(jù)通信功能的需要。
  
  從控制功能方面考慮,對(duì)上要把每一種可能的邏輯操作映射成硬件操作;對(duì)下要能夠和多個(gè)設(shè)備通信。上層應(yīng)用包括系統(tǒng)維護(hù)、路由軟件、網(wǎng)管軟件;下層設(shè)備包括處理引擎和端口??刂乒δ艿木唧w實(shí)現(xiàn)和硬件平臺(tái)有關(guān)??紤]到多種應(yīng)用可能同時(shí)操作一個(gè)硬件設(shè)備,一種應(yīng)用也可能同時(shí)操作多個(gè)設(shè)備,在實(shí)現(xiàn)時(shí)必須考慮到對(duì)于多并發(fā)操作的支持。
  
  基于上述考慮,中間層由控制卡驅(qū)動(dòng)模塊和若干網(wǎng)絡(luò)驅(qū)動(dòng)實(shí)例組成。在圖2(a,b)中分別給出了傳統(tǒng)路由器的結(jié)構(gòu)與驅(qū)動(dòng)方式以及本文所提出的中間層所處的位置與驅(qū)動(dòng)方式。
  
 

  控制卡驅(qū)動(dòng)模塊作為中間層的核心,維護(hù)控制卡上所有的端口、內(nèi)存映射、中斷和循環(huán)緩沖隊(duì)列資源。它實(shí)現(xiàn)了數(shù)據(jù)通道和控制通道。對(duì)下直接驅(qū)動(dòng)控制卡、與各個(gè)端口、處理引擎通信;對(duì)上,一方面通過(guò)內(nèi)核調(diào)用陷阱方式提供控制通道接口;另一方面向虛擬網(wǎng)絡(luò)驅(qū)動(dòng)實(shí)例提供數(shù)據(jù)通道接口。虛擬網(wǎng)絡(luò)驅(qū)動(dòng)實(shí)例在操作系統(tǒng)內(nèi)核為各個(gè)物理端口實(shí)現(xiàn)網(wǎng)絡(luò)驅(qū)動(dòng)實(shí)例。它們工作在控制卡驅(qū)動(dòng)模塊的基礎(chǔ)上,并不直接控制硬件,故稱為虛擬網(wǎng)絡(luò)驅(qū)動(dòng)實(shí)例。虛擬網(wǎng)絡(luò)驅(qū)動(dòng)實(shí)例封裝控制卡驅(qū)動(dòng)模塊提供的數(shù)據(jù)傳輸功能,并為內(nèi)核和上層軟件提供與普通網(wǎng)絡(luò)驅(qū)動(dòng)實(shí)例相同的調(diào)用接口。下面分別給出數(shù)據(jù)通道和控制通道的實(shí)現(xiàn)方案。
  
  2.1 數(shù)據(jù)通道的功能與實(shí)現(xiàn)
  
  虛擬網(wǎng)絡(luò)驅(qū)動(dòng)實(shí)例和物理端口是一一對(duì)應(yīng)的。內(nèi)核數(shù)據(jù)收發(fā)的功能包括3個(gè)方面:
  
  (1)發(fā)往某虛擬網(wǎng)絡(luò)驅(qū)動(dòng)實(shí)例的數(shù)據(jù)包應(yīng)該由其對(duì)應(yīng)端口輸出;
  
 ?。?)這個(gè)端口所收到的包也通過(guò)該虛擬網(wǎng)絡(luò)驅(qū)動(dòng)實(shí)例向系統(tǒng)內(nèi)核提交;
  
 ?。?)中間層也可以對(duì)虛擬網(wǎng)絡(luò)驅(qū)動(dòng)實(shí)例進(jìn)行流控操作,以避免因擁塞導(dǎo)致數(shù)據(jù)丟失。
  
  注重到圖2(b)中的交換結(jié)構(gòu)以定長(zhǎng)信元交換數(shù)據(jù),其格式如圖3所示,其中信元頭占4字節(jié),包括處理引擎號(hào)和端口號(hào)域。對(duì)于收/發(fā)信元,處理引擎號(hào)和端口號(hào)分別為該信元的源端口的和目的端口的對(duì)應(yīng)值。
  
  根據(jù)圖2(b)所示的系統(tǒng)結(jié)構(gòu)可知:由處理引擎號(hào)和端口號(hào)可以確定端口的物理位置。控制卡驅(qū)動(dòng)模塊在其內(nèi)部的驅(qū)動(dòng)信息數(shù)組中維護(hù)虛擬網(wǎng)絡(luò)驅(qū)動(dòng)實(shí)例和端口之間的對(duì)應(yīng)關(guān)系。
  
 

  發(fā)送數(shù)據(jù)時(shí),虛擬網(wǎng)絡(luò)驅(qū)動(dòng)實(shí)例從內(nèi)核網(wǎng)絡(luò)部分獲取待發(fā)送的數(shù)據(jù),偕同指向該實(shí)例自己的指針一起提交給控制卡驅(qū)動(dòng)模塊。一方面,控制卡驅(qū)動(dòng)模塊通過(guò)這個(gè)指針可以對(duì)虛擬網(wǎng)絡(luò)驅(qū)動(dòng)實(shí)例進(jìn)行流控設(shè)置;另一方面,控制卡驅(qū)動(dòng)模塊根據(jù)虛擬網(wǎng)絡(luò)驅(qū)動(dòng)實(shí)例指針查驅(qū)動(dòng)信息表得到目標(biāo)端口物理位置信息,包括處理引擎號(hào)和端口號(hào)。端口物理位置信息將被填充到所有用來(lái)承載待發(fā)送數(shù)據(jù)包的信元頭中。控制卡驅(qū)動(dòng)模塊通過(guò)控制卡把信元送到交換結(jié)構(gòu),而交換結(jié)構(gòu)和處理引擎分別根據(jù)處理引擎號(hào)和端口號(hào)將信元轉(zhuǎn)發(fā)到到目標(biāo)端口。最后端口從接收到的信元中恢復(fù)出原始數(shù)據(jù)發(fā)出。
  
  接收數(shù)據(jù)時(shí),端口也會(huì)將數(shù)據(jù)拆分到若干信元中逐級(jí)上傳??紤]到交換結(jié)構(gòu)的循環(huán)優(yōu)先機(jī)制,一個(gè)數(shù)據(jù)包上傳的過(guò)程可能被來(lái)自其他端口的數(shù)據(jù)搶斷。所以控制卡驅(qū)動(dòng)模塊對(duì)于接收到的信元按源端口位置信息(包括處理引擎號(hào)和端口號(hào))保存到不同的緩沖區(qū)中。當(dāng)接收到該數(shù)據(jù)包相關(guān)的全部信元,控制驅(qū)動(dòng)模塊即可重組該數(shù)據(jù),并根據(jù)源端口位置信息查驅(qū)動(dòng)信息表以得到指向該端口對(duì)應(yīng)虛擬網(wǎng)絡(luò)驅(qū)動(dòng)實(shí)例的指針,進(jìn)而激活該虛擬網(wǎng)絡(luò)驅(qū)動(dòng)實(shí)例接收數(shù)據(jù)。虛擬網(wǎng)絡(luò)驅(qū)動(dòng)實(shí)例從控制卡驅(qū)動(dòng)模塊中獲取數(shù)據(jù)后,按照網(wǎng)絡(luò)驅(qū)動(dòng)的常規(guī)方式調(diào)用netif-rx接口向內(nèi)核提交數(shù)據(jù)。數(shù)據(jù)收發(fā)實(shí)現(xiàn)結(jié)構(gòu)如圖4所示。
  
 

  值得注重的是,在交換式路由器中,處理引擎通過(guò)交換結(jié)構(gòu)交換的是IP包;而通用操作系統(tǒng)中網(wǎng)絡(luò)驅(qū)動(dòng)通常處理鏈路層的幀。即控制卡驅(qū)動(dòng)模塊數(shù)據(jù)通道對(duì)上對(duì)下的數(shù)據(jù)格式是不同的。因此,在發(fā)送數(shù)據(jù)時(shí)控制卡驅(qū)動(dòng)模塊需要從得到的鏈路幀中提取IP包再轉(zhuǎn)發(fā)到端口;而接收數(shù)據(jù)時(shí)則對(duì)來(lái)自端口的IP包進(jìn)行鏈路幀封裝再向上提交。以以太網(wǎng)為例,需要恢復(fù)的包括源和目標(biāo)站的物理地址、載荷類型和幀校驗(yàn)[3]。對(duì)于承載IP包的以太幀,顯然其目標(biāo)站物理地址和載荷類型[4]都是已知的。實(shí)現(xiàn)時(shí)采用的操作系統(tǒng)是Linux,通過(guò)在虛擬網(wǎng)絡(luò)驅(qū)動(dòng)源代碼中進(jìn)行設(shè)置可以使內(nèi)核不進(jìn)行幀校驗(yàn)[5]。所以只有源站物理地址未知。假如要求硬件給出真實(shí)的源站物理地址,則增加了硬件的復(fù)雜度;而若在控制卡驅(qū)動(dòng)模塊中偽造源物理地址,則可能導(dǎo)致內(nèi)核的ARP治理混亂。為簡(jiǎn)化硬件設(shè)計(jì),實(shí)現(xiàn)時(shí)采用了在控制卡驅(qū)動(dòng)模塊中偽造源物理地址的辦法,同時(shí)修改虛擬網(wǎng)絡(luò)驅(qū)動(dòng)源代碼,重載幀頭處理函數(shù)[6]。這樣內(nèi)核ARP表就不受偽造地址的影響,其獲取和刷新通過(guò)查詢端口ARP記錄實(shí)現(xiàn)。
  
  2.2 控制通道的功能與實(shí)現(xiàn)
  
  控制功能的通信也是基于信元的,其操作包括維護(hù)治理和表同步兩類。維護(hù)治理主要是進(jìn)行各種查詢,通常通過(guò)若干次雙向通信完成。每次通信有效載荷都只有幾個(gè)字節(jié),由一個(gè)信元即可承載。而表同步則是將上層軟件維護(hù)的表復(fù)制到相關(guān)硬件中,包括ARP表、路由和分類表等。表同步操作涉及大量數(shù)據(jù)傳輸,需要由多個(gè)信元承載??刂乒δ芏际轻槍?duì)設(shè)備進(jìn)行的,所以在控制/反饋信元中也必須包括目標(biāo)設(shè)備的物理位置信息。
  
  在實(shí)際運(yùn)行期間,所有的上層應(yīng)用和設(shè)備之間的控制通信復(fù)用控制通道,其特點(diǎn)為:
  
 ?。?)不同的應(yīng)用可能同時(shí)訪問(wèn)同一設(shè)備;
  
 ?。?)一個(gè)應(yīng)用也可能同時(shí)訪問(wèn)多個(gè)設(shè)備;
  
 ?。?)同一應(yīng)用對(duì)于同一個(gè)設(shè)備的操作一般都是順序的。
  
  為支持這種復(fù)用操作,所有承載控制信息和反饋信息的頭部除包括目標(biāo)硬件的物理位置和操作指令外,還包括命令類型、應(yīng)用類型信息??刂疲答佊眯旁Y(jié)構(gòu)如圖5所示。
  
 

  圖5中:處理引擎號(hào)和端口號(hào),確定設(shè)備的物理位置;收/發(fā)信元分別為該信元的源端口的和目的端口的對(duì)應(yīng)值;命令碼在設(shè)備和應(yīng)用之間定義。每種可能的操作分配一個(gè)代碼;應(yīng)用碼在控制卡驅(qū)動(dòng)模塊和上層應(yīng)用之間預(yù)定義。每種可能的應(yīng)用分配一個(gè)代碼。這些應(yīng)用包含網(wǎng)管、路由維護(hù)、硬件維護(hù)和ARP信息獲取等。
  
  上層應(yīng)用通過(guò)內(nèi)核調(diào)用陷井(IOCTL)發(fā)起控制通道操作,同時(shí)給出目標(biāo)設(shè)備物理位置、命令類型代碼和應(yīng)用類型代碼??刂瓶?qū)動(dòng)模塊把這些信息填充到控制信元中再將其發(fā)往設(shè)備。設(shè)備把這些代碼直接復(fù)制到反饋信元中,再在后面追加上反饋信息。控制卡驅(qū)動(dòng)模塊為每一種應(yīng)用分配一個(gè)循環(huán)緩沖區(qū),把收到的反饋根據(jù)應(yīng)用類型排入相應(yīng)隊(duì)列中。上層應(yīng)用從其所對(duì)應(yīng)的循環(huán)緩沖區(qū)中讀取反饋信元,然后根據(jù)信元中的物理位置信息、命令碼就可以確定該反饋對(duì)應(yīng)的原始命令,從而對(duì)反饋數(shù)據(jù)進(jìn)行適當(dāng)處理。這樣就實(shí)現(xiàn)了各種控制功能對(duì)控制通道的復(fù)用。如圖6所示。
  

  3 結(jié)論
  鑒于傳統(tǒng)路由器體系結(jié)構(gòu)和交換式路由器體系結(jié)構(gòu)的區(qū)別,通用操作系統(tǒng)及在其上開發(fā)的路由軟件無(wú)法直接應(yīng)用于交換式路由器。本文提出的中間層方案可以有效地解決這個(gè)問(wèn)題。該方案全面考慮了數(shù)據(jù)通信和治理維護(hù)方面的需求,為上層提供了與原有模型基本相同的接口,并使得路由軟件在不損失其靈活性和可升級(jí)性的條件下直接應(yīng)用于交換式路由器中。雖然該方案只是在特定的平臺(tái)和特定的操作系統(tǒng)上得到了實(shí)現(xiàn),但是不難看出,這種思路對(duì)操作系統(tǒng)并沒有非凡的依靠性,完全可以移植到其他通用操作系統(tǒng)上。本文提出的方案已經(jīng)在國(guó)家863項(xiàng)目實(shí)用化綜合接入系統(tǒng)的高速邊緣路由器的研制中取得了良好的實(shí)際效果。本文為國(guó)產(chǎn)高性能路由器的軟件開發(fā)提出了一種高效快捷的解決方案,該方案具有良好的應(yīng)用前景。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 山阳县| 抚松县| 万安县| 兴文县| 申扎县| 诏安县| 盐边县| 榆林市| 芜湖县| 广饶县| 龙口市| 兴城市| 突泉县| 类乌齐县| 吉木萨尔县| 应用必备| 惠水县| 改则县| 阿荣旗| 乳源| 上饶县| 论坛| 无锡市| 渭源县| 扎鲁特旗| 新沂市| 临江市| 大城县| 邢台市| 阿鲁科尔沁旗| 隆德县| 拉萨市| 雅安市| 平陆县| 达日县| 沾化县| 永善县| 社会| 石城县| 乃东县| 南川市|