1.引言
VLAN(802.1Q協議)是一種通過將局域網內的設備邏輯地而不是物理地劃分成一個個網段從而實現虛擬工作組的技術。它的實現方式是在原有以太網幀的頭部添加4字節的VLAN標簽,用其中的12位TCI數據段來標記VLAN號,使得VLAN號相同的計算機被劃為一個虛擬子網。
但是,VLAN技術在傳統的以太網幀格式中只定義了4096個VLAN號,限制了其在更大規模的網絡中的應用。解決以太網大規模應用如何突破VLAN劃分瓶頸的一種方案是STACKING VLAN,又名QinQ或Double VLAN。它在 原有VLAN標簽的基礎上,再添加4字節的VLAN標簽。這樣將VLAN號數量擴充至4096*4096=16000000以上,可以滿足大規模的城域網的要求(為了描述方便,下面稱VLAN為稱單VLAN,STACKING VLAN為雙VLAN)。
目前實現單雙VLAN技術的主要方法是為現有網絡增加各種支持單雙VLAN功能的交換機。對于一個典型的支持VLAN的交換機而言,它可以在不同端口上指定不同的VLAN號,在收發用戶數據包時,自動將VLAN號加入或剝離出用戶數據包。
但單雙VLAN在廣域網和局域網中的廣泛應用,也會帶來一些不同網絡的兼容性問題。兩種典型的問題如圖1所示。

在圖1左側可以看到,當運營商想把一臺原來在普通廣域網中部署的服務器接入到應用雙VLAN的廣域網中時,如果想保持服務器上的原有配置不變,并且不再重新開發已有的網絡應用程序,則必須增加一臺或多臺支持雙VLAN功能的交換機,來實現從普通網絡到雙VLAN網絡的轉換。
在圖1右側可以看到,當運營商自己的服務器同時部署在雙VLAN的廣域網中和單VLAN的公司局域網中時,如果保持服務器上的原有配置不變,并且不再重新開發已有的網絡應用程序,則必須增加一臺或多臺支持單雙VLAN功能的交換機,來實現單雙VLAN網絡到普通網絡的轉換。
如果通過增加交換機硬件解決單雙VLAN問題,其優點是所有添加和去除VLAN標志的工作由交換機完成,服務器端無需任何改變;缺點是硬件價格昂貴,項目成本增加。
如果運營商的網絡服務器為Linux操作系統,可以使用內核自帶的一個由Ben Greear開發的8021q網絡接口驅動包。通過正確配置網絡接口后,可以實現對包含有單VLAN的數據包的支持。但是現有的接口驅動模塊只能完成對某一單VLAN號的過濾功能,并不支持帶有雙VLAN的數據包,也不支持任意帶有VALN號的數據包通過同一接口進行過濾。同時它也沒有解決當增加VLAN標志后導致MTU大于1500學節所引發的問題。
2.解決單雙VLAN問題的軟件方法
本文提出一種Linux環境下解決單雙VLAN網絡問題的軟件方法,它是基于原有的8021q模塊實現的。
在接收網絡數據時,通過增加VLAN協議層來接收和處理VLAN類型的網絡數據包,并提交給更上的協議層處理。在發送數據時,通過增加VLAN網絡設備接口,把路由選擇該接口來發送數據的上層應用程序傳遞而來的數據包,添加上相應的單雙VLAN頭,并交給網卡設備驅動發送數據。正確刪除、添加單雙VLAN頭的工作,通過維護一定長度的HASH表完成。
在實現該軟件方法的過程中,遇到兩個重要問題:MTU問題和ARP請求問題,將在下面詳細描述。
3.超長MTU帶來的問題與解決方法
當使用以太網作為鏈路層時,其最大傳輸單元MTU為1500字節,如果IP層有一個數據報要傳,而且數據的長度比鏈路層的MTU還大,那么IP層就需要進行分片,把數據分成若干片,這樣每一片長度都小于或等于MTU。
而在使用Linux上8021q模塊的單VLAN以太網鏈路層中,由于會在以太網數據包頭添加4字節的VLAN標志,導致了在接收和發送大數據包時出現一些問題。
我們提出的解決該問題的方法是,將鏈路層以太網卡驅動中的MTU值增大到1508字節,同時將VLAN網絡接口層中的MTU參數仍設置為1500字節。這樣發送端IP層分片時,采用VLAN接口層傳遞過來的MTU1500,傳到VLAN接口層的數據包長度不會超過1500字節。當在VLAN接口層添加4字節或8字節的VLAN頭后,傳至鏈路層的整個數據包長度不會超過1508字節,滿足鏈路層MTU1508字節的要求,可以正常發送。而接收端鏈路層MTU為1508,可以接收各種帶4字節或8字節VLAN頭的數據,因為接收的數據包長度最大為1508。
4.ARP緩存更新
所謂ARP,Address Resolution Protocol,就是地址解析協議,它為這兩種不同的地址形式提供映射:32bit的IP地址和數據鏈路層使用的任何類型的地址。
為了高效運行ARP,在每個主機端都有一個ARP高速緩存,其中存放了最近訪問的IP地址到硬件地址之間的映射記錄。高速緩存中每一項的生存時間一般為20分鐘,當超時后將重新進行ARP過程。
我們設計的單雙VLAN混合模塊添加VLAN頭的過程,是以發送數據包的以太網目的地址為關鍵字,Hash查找其對應VID標志。當作ARP請求時,由于目的地址為0xFFFFFFFFFFFF,無法通過一般的Hash方法進行查找。為了保證ARP的正常工作,軟件通過順序查找IP關鍵字的方法,獲得對應的VID標志,與Hash查找相比較,效率會低一些。用戶可以通過增加主機端的ARP高速緩存超時設置,來減少ARP進行的次數。
5.效率測試及性能評價
測試環境描述:
服務器配置:Linux操作系統,內核版本2.6.11
交換機配置:港灣網絡BigHammer 6802系列千兆交換機
客戶機配置:Windows2000操作系統
測試內容與方法:服務器端在添加8021q模塊、添加單雙VLAN模塊和不添加任何模塊三種情況下,使用UDP TEST測試程序,持續通過VLAN網絡接口向客戶機發送長度為10,000字節的數據包,每正確發送10,000個數據包記錄后,記錄時間一次。
觀察平均耗時可以看到,在添加單雙VLAN模塊后,網絡傳輸效率比沒有添加任何模塊時略微有所下降(<1.4%),其主要原因是單雙VLAN模塊在處理VLAN包頭時需耗費少許時間。但是與Linux內核自帶的8021q模塊相比較,提高效率約1.4%。
6.結論
本文提出并實現了一種Linux環境下VLAN和STACKING VLAN混合過濾軟件解決方案。與常見的硬件解決方案相比較,它不需要增加額外的支持VLAN和STACKING VLAN的交換機,只需要在Linux服務器上配置一個模塊接口即可,可以大大節省項目成本。而與以前的VLAN8021q軟件解決方案相比,本解決方案增加了對VLAN和STACKING VLAN混合過濾功能,圓滿解決了MTU問題和ARP問題,在效率上也超過原有的VLAN8021q解決方案,為用戶解決VLAN和STACKING VLAN不同網路兼容性提供了一種新的解決方法。
(作者單位:廊坊師范學院)