沈晶聶,葉 猛
(1.光纖通信技術和網絡國家重點實驗室,湖北 武漢 430074;2.武漢郵電科學研究院,湖北 武漢 430074;3.武漢虹旭信息技術有限責任公司安全產品部,湖北 武漢 430074)
如今上網是非常普遍的事情,在網絡上可以隨意發布信息,但是有些信息不能隨意發布到互聯網上,比如色情信息、暴力信息、反動信息和病毒等,這些信息將會影響網絡安全、毒害青少年和影響社會和諧,所以需要一些技術手段來控制這些信息的隨意傳播,各大網站和監管單位可以使用網絡控制器來達到這個目的。
當今網絡的發展非常迅速,高清電視、大量的下載致使網絡流量日益增大,使用傳統普通的處理器和軟件已經不能很好地勝任處理這些數據包的任務,此時網絡處理器應運而生。網絡處理器是專門設計用來處理網絡上的數據包的,它無論在靈活性還是性能方面都要優于以前的硬件和純軟件方式。網絡處理器的出現為網絡系統構建了一個硬件平臺,能夠通過軟件的升級以適合不斷增長的功能需求,為網絡技術的發展提供了開放的舞臺,因而具有十分重要的意義。將網絡處理器和網絡控制結合起來將使得網絡監控更加方便,網絡處理器的強大功能使得監控更加全面[1]。
用戶管控系統對用戶來說是透明的,用戶在正常使用網絡的時候是感覺不到它的存在的,只有當用戶發布或者下載了非法信息的時候,網絡控制器才會出現干擾用戶的使用,使得用戶的不正當行為不能實施。圖1給出了網絡控制器以及其輔助設備在網絡體系中的結構拓撲圖。
用戶管控系統的功能[2]介紹如下。
用戶管理和服務功能:對用戶的信息、用戶的業務情況等進行管理,并且為用戶的上網提供支持,保障用戶上網環境的安全。
上網控制功能:主要是對用戶的信息進行認證,外聯非法網站的檢測,病毒檢測,以及對用戶上網行為的審計。

圖1 用戶管控系統拓撲圖
端點防護功能:該功能為用戶提供了端點系統安全防護的機制和手段,它按照安全服務的安全策略來具體實施端點系統的安全防護。
接入管理功能:用來對接入網絡的用戶實施管理和檢查。
用戶管控系統是工作在網絡層、傳輸層以及應用層的安全審計系統,通過用戶事先內置的基本網絡協議、數據庫應用協議等分析模塊,記錄網絡事件,將進出網絡的通信數據進行實時和完整的還原,能夠重現用戶訪問的網絡資源,然后進行分析,再根據事先監管單位在管理界面上設置的規則來進行數據過濾,并將過濾出來的有用數據保存在數據庫中供監控單位查詢[3-5]。用戶管控系統最終目的是保證用戶使用網絡的安全性和網絡環境的良好。
CN56xx是Cavium Networks面向智能網絡、數據控制、存儲以及無線應用的高性能網絡處理器方案。CN56xx具有多達12個MIPS64的處理器核,具有強大的數據處理能力,其片內集成了多種硬件加密、壓縮引擎以及包處理加速引擎,并提供了硬件的隊列管理、調度、保序以及同步模塊,此外,CN56xx具有強大的接口擴展能力:4路SGMII或者2路XAUI接口、USB2.0PHY、2路8通道PCIe 1.1接口。
網絡控制器整個硬件平臺除了CN56xx網絡處理器這個核心部件以外,使用的平臺還包括有主控處理器MPC8247,其中包括 SDRAM256M,Flash64M,該處理器主要用來運行系統的管理平臺,對整個系統進行管理,控制面接口支持10/100 Mbit/s自適應以太網。整個平臺還包括雙通道4 Gbyte內存,其規格是DDR2 SDRAM,主頻800 MHz。板載10GE/GE交換芯片提供4×10GE+24×1GE的數據面交換能力,可靈活控制數據流向。在I/O方面提供16路千兆以太網接口,4路GE接口。控制面和數據面都提供相應的高速鏈路進行連接,以達到靈活控制數據的目的[6]。
網絡控制系統包括接入模塊、過濾模塊、轉發模塊、管理系統、規則庫5個部分。
整個系統的處理流程是:接入模塊將數據接入到系統后進行初步處理,將數據進行重組還原,過濾模塊根據用戶下的不同規則來過濾數據包,然后通過轉發模塊來轉發這些數據到不同的指定地方,規則庫用來存放用戶指定的過濾和轉發規則的,管理系統對整個系統進行管理,包括配置、性能、安全、用戶、故障5大方面的管理。
CN56xx主要由數據處理模塊(PKI)包括數據驗證模塊(PIP)和緩沖區申請模塊(IPD)、空閑緩沖池(FPA)、同步模塊(SSO)、核心(Core)、內存(L2/DRAM)、數據輸出處理單元(PKO)等幾個核心部件來完成數據包的處理,其硬件結構如圖2所示。

圖2 CN56xx網絡處理器硬件結構圖
多核處理器在默認情況下12個核心是使用的傳統流水線方式來進行數據處理,簡單的傳統流水線就是每個核只進行數據包處理的一部分,數據包傳給下1個核直到處理完成。在該多核處理器上,通過讓每個核只接收1個組的任務來實現。在每個核完成它那部分的處理之后,它會改變數據包的任務組,把包傳給下1個核。但是這種傳統流水線在多數時候很多核是空閑的,因為它在等待其他的核完成相應步驟的處理,這樣就浪費了許多資源,所以該技術對流水線架構進行了優化,即優化流水線[7-9]。
在優化流水線中,每個核可以執行所有數據包處理階段。這很容易通過修改組掩碼來實現[10-11]。在這個模型中,每個核可以運行相同的程序。在獲取任務操作返回包所在緩沖區指針之后,核心根據數據包的組編號來執行適當的功能。
每個核心都可以完成所有特定任務的工作而不是只能完成其中一項工作,這樣就不用等待其他的核心完成相應步驟才能執行下一步,減少了核心空閑的時間,提高了利用率,這就是優化流水線的優點所在。對此筆者做了實驗,實驗環境是在5 Gbit/s的數據流量的情況下,分別對普通處理器和網絡處理器進行不同的數據包處理方式,在這種情況下,網絡處理器在使用優化流水線處理數據包的時候優勢明顯,雖然會多花一點開銷,但是現在看來是值得的。具體數據見表1。

表1 不同情況下吞吐量實驗表
過濾模塊在進行包過濾時,如果對每個輸入包都進行一次5元組過濾和協議特征字過濾,那么過濾模塊會帶來很大的系統開銷。
基于流的過濾并不是一類新的過濾規則,而是將輸入數據根據IP 5元組抽象成不同的數據流,系統維護當前所有輸入流上下文信息,這些信息包括流對應的過濾規則ID、狀態、存在時間等。通過對流進行過濾,可以減少對規則表的盲訪問,因而能快速定位出當前流命中的規則,減小了過濾模塊的開銷。
在流上下文建立之初,此時輸入的數據包不能直接關聯到過濾規則,所以在處理最初的幾個數據包時,需要對規則表進行必要的盲訪問。一旦確定了與當前流匹配的過濾規則,就可以創建流的上下文。對于隨后到達的流中的所有數據包,根據這個上下文確定過濾規則。
3.1.1 流上下文的組織
接入系統通過IP 5元組來識別不同的輸入數據流,為了加快對流上下文的訪問,所有的流上下文通過5元組Hash表組織。
為了便于插入和刪除,Hash表中所有流上下文節點FCN通過雙向鏈表連接,同時Hash表頭中包含相應的散列表頭節點。Hash運算采用Linux內核中標準Jhash算法。
流上下文Hash表的組織結構如圖3所示。
3.1.2 流上下文的維護
1)流上下文的訪問
由于CN56xx的每個CPU核都可以讀寫流上下文,所以對Hash表的訪問是一個典型的競爭問題。為了提高讀操作的并發度,可以在每個Hash表頭元素中增加一個讀寫鎖,這樣使得相對頻繁的讀操作能并發執行,每個CPU核在訪問Hash鏈之前須獲取表頭中的讀寫鎖。

圖3 流的上下文HASH表組織結構圖
2)流上下文節點的添加和刪除
基本的數據流分為兩種:TCP流和UDP流。TCP流具有流結束標記,而UDP流沒有。對于TCP流上下文的刪除可以通過判斷流結束標識進行,而對UDP流結束標識只能通過超時機制實現。但在CN56xx環境中,并不存在Linux中的定時器軟中斷機制,為了能夠回收超時的流上下文節點,在創建節點時就應該采取應對措施。
在每次創建流節點時,首先應在相應的Hash鏈中查找超時節點。如果存在超時節點,則直接使用該節點;否則,從節點池中申請。這種分配策略存在某種極端的情況:某個活躍的Hash鏈中總是找不到超時節點,而其他不活躍鏈中卻存在大量超時節點,這便造成系統資源的大量損耗。此外,Hash鏈中大量的超時節點也會降低系統性能。為了及時釋放Hash表中的超時節點,系統還是要對Hash表進行定時清理,可以在管理處理器上運行一個清理任務,該任務在系統資源緊張時或者在間隔較長時間之后,從較長的Hash鏈中回收節點。
3)減少Hash沖突
在7 Gbit/s的最大設計輸入流量下,實時的流節點最多可能達到300萬~400萬個,如果使用1個64 kbyte長度的Hash表,那么Hash鏈的平均長度在45~60之間。為了降低Hash沖突次數,加快Hash鏈的訪問,可以使用多張Hash表來減少Hash鏈的平均長度。
先將5元組進行1次運算,該運算不同于前面提到的Jhash運算,所以其運算結果與5元組的Hash值并不相同,通過該運算結果的最后若干位確定當前5元組的目的Hash表。隨后,再進行相應的Hash運算。由于相同Hash值的5元組被分散到多張Hash表中,那么Hash鏈的平均長度會成倍減少。此外,由于每個5元組與Hash表和Hash鏈一一對應,多張Hash表不會帶來額外的訪問開銷,只是在Hash查找前需要先確定目標表,而這個運算的開銷與成倍的鏈表查找相比不值一提。
3.1.3 性能評估
Hash查找本來就是一種快速查找算法,查找效率很高,但維護開銷較大。此外Hash表為多核共享,需支持多核并發讀寫,鎖的使用會降低查找速度。在多Hash表的模式下,具有相同Hash值的Hash鏈由多個讀寫鎖保護,因而能夠提高Hash沖突時的并發訪問度。同時,應當看到,多Hash表的使用會降低Cache的命中率,頻繁的Cache刷新勢必會降低系統性能。采用Hash查找的流過濾算法,存儲器開銷在300~500 Mbyte之間。同樣情況下如果使用包過濾方式,存取器的開銷在800 Mbyte左右,且時間是流過濾算法的幾十倍。
在設計中過濾模塊不僅可以支持IP包的過濾,還可以支持內容的過濾,對于文本內容的過濾來說它主要包括了4個方面:1)用戶過濾規則的建立;2)獲得待過濾文本內容的特征;3)待過濾文本與用戶過濾規則的匹配;4)通過信息反饋,改進需求模板。
在日常使用的語言中,詞語之間存在著同義詞和多義詞的問題,同義詞的存在使得相同的意思可以用不同的詞語來表達,導致過濾時普通的匹配方式不能匹配成功;多義詞的特點是一個詞有多個意思,這樣在匹配中又會導致匹配到無關的內容。正是由于這種情況的所在,潛在語義索引算法就引入概念空間來解決這個問題,它的基本思想是文本中的詞與詞之間存在某種聯系,即存在某種潛在的語義結構,用這種語義結構來表示詞和文本,可消除詞之間的相關性,達到簡化文本向量的目的[12]。
潛在語義分析其實就是把高維的向量空間模型表示中的文檔映射到低維的潛在語義空間中。這個映射是通過對文檔矩陣的奇異值分解來實現的。文本構成的矩陣通過奇異值分解映射到低維的空間后于待過濾文本映射后的向量進行比較,獲得一個相似度,這個時候必須設置1個過濾閾值,當相似度超過這個閾值時,認為這兩個文本屬于同一主題,即匹配成功。
在設計中使用潛在語義索引算法的主要目的就是消除同義詞和多義詞導致的匹配不成功的可能,并且潛在語義索引算法可以利用低維度的詞條,文本向量代替原始的空間向量,可以有效地處理大規模的文本庫。
在內容過濾的方法中主要包括關鍵詞匹配算法和潛在語義索引算法,通過測試發現,關鍵字匹配算法在準確度方面不如潛在語義索引算法。在3 Gbit/s數據流量下,設置相同的關鍵字進行過濾測試,表2是實驗中的測試數據,可以看出潛在語義索引算法的優勢很明顯。

表2 內容過濾算法測試數據
接入系統需要對應用層的IP碎片進行重組,以便對這些碎片進行統一數據封裝。IP碎片重組在計算機網絡中屬于1個常見問題。在處理IP數據之前需要將可能的碎片重新組合,以保證在處理數據時的完整性。
Linux內核網絡協議棧中實現了IP碎片重組的完整過程。每個碎片序列通過ipq結構進行組織,所有ipq結構通過Hash散列到1個ipq_hash[]數組中,具有相同Hash值的ipq通過鏈表鏈接起來,這是典型的鏈式開放地址Hash查找。此外,每個ipq通過1個雙向鏈表維護當前序列中所有的IP碎片包。
在系統中,面臨著同樣的問題,可以采用上述類似的思想。但在網絡處理器中,還存在許多其他特殊情況,需要針對網絡處理器平臺進行修改。
1)收到的碎片數據包不能像LINUX內核那樣直接掛到ipq的雙向鏈表中,需要先進行內存搬移。Hash表中的所有ipq節點通過雙向鏈表(struct hlist_node)連接,便于插入和刪除。Hash運算采用Linux內核中標準Jhash算法。散列表的維護相對容易,只需對Linux內核中相關接口進行移植即可。
2)在完成重組、封裝后,如果報文長度大于以太網最大幀長,那么在發送數據包時,需要進行重新分片。
3)需要維護一個ipq的LRU隊列,以便ipq維護程序能快速回收超時節點。Hash表中所有ipq節點按照先進先出的順序維護一個雙向鏈表。通過這個雙向鏈表能夠快速定位Hash表中的超時節點??梢栽诠芾鞢ORE的多任務系統中添加一個清理超時節點的任務,這個任務應該是在關中斷的情況下進行相關操作。
4)碎片序列的維護。首先,網絡處理器中不能直接維護輸入數據緩沖區,這些緩沖區屬于系統資源,如不及時釋放,會影響系統的吞吐率。所以,這里不能簡單地將輸入數據掛到ipq的碎片序列鏈表中,在掛接之前,應該先申請一塊臨時緩沖區保存當前碎片的數據。其次,在碎片收集時,需要重新申請一個系統緩沖區進行碎片拼裝。拼裝完成后,進行必要的處理,然后再決定是否發送該系統緩沖區中的IP包。
碎片重組模塊涉及的數據結構如圖4所示。

圖4 數據結構組織
雖然需要進行多次內存搬移,但是碎片重組的效率還是通過多核處理器的并行處理得到提高。碎片重組過涉及到多核的并行處理,在操作關鍵數據結構時,需要用鎖進行保護。平臺提供商的SDK中提供了自旋鎖和讀寫鎖,為了統一接口,最好對SDK中的鎖接口進行統一封裝。
到目前為止,網絡內容管理方面的研究取得了一定成功,也有很多產品已經投入了使用,但是隨著互聯網不斷地發展,現有的一些網絡內容管理工具在效率和性能上存在一定問題,一般只能適用于中小型網絡的使用,而對于骨干網沒有很好的支持,而本文中使用的基于CN56xx網絡處理器的硬件平臺可以很好地解決如今網絡流量大、處理效率低的問題。除此以外本文還詳細描述了幾種數據過濾方面的算發,在硬件能力強大的情況下,通過不斷地優化算法來達到更好的性能,這是本文的最終目的。
[1]彭來獻,田暢,鄭少仁.網絡處理器設計分析及其應用前景[J].電信科學,2001(1):61-64.
[2]雷振甲.計算機網絡管理及系統開發[M].北京:電子工業出版社,2011.
[3]李慧君,徐鷹,李建民.網絡監控系統的設計與實現[J].計算機與現代化,2004(8):65-66.
[4]王東濱,方濱興,云曉春.基于Web管理的網絡監測技術的設計與實現[J]. 計算機工程,2002(10):203-204.
[5]王新剛,柴喬林,李琳.基于Windows的綜合網絡性能監測系統[J].計算機應用研究,2002(10):90-92.
[6]Cavium Networks Corp.Cavium Networks OCTEON Plus CN54/5/6/7XX Hardware Reference Manual[EB/OL].[2011-08-21].http://www.caviumnetworks.com.
[7]吳佳駿,張兆慶.網絡處理器任務調度[J].計算機應用研究,2007(8):34-37.
[8]黃國睿,張平,魏廣博.多核處理器的關鍵技術及其發展趨勢[J].計算機工程與設計,2009(10):2414-2418.
[9]張駿,樊曉椏,劉松鶴.多核、多線程處理器的低功耗設計技術研究[J].計算機科學,2007(10):301-305.
[10]SHAH N.Understanding network processors[EB/OL].[2011-08-21].http://www-soc.lip6.fr/~genius/UnderstandingNPs.pdf.gz.
[11]LEE B K,JOHN L K.NpBench:A benchmark suite for control plane and data plane applications for network processors[EB/OL].[2011-08-21].http://engineering.utsa.edu/~blee/npbench/npbench.pdf.
[12]林鴻飛.基于混合模式的文本過濾模型[J].計算機研究與發展,2001(9):1127-1131.