鐘 銳,劉夏寧,陶智勇
(1.光纖通信技術與網絡國家重點實驗室,湖北 武漢 430074;2.武漢郵電科學研究院,湖北 武漢 430074)
IPv6是替代現行IPv4的下一代IP協議,具有比IPv4更為豐富的IP地址空間。作為提高互聯網容量的基礎和先導,IPv6直接支撐著移動互聯網、云計算、物聯網等領域的發(fā)展。雖然,IPv6已經為大家所廣泛接受,但是普及速度始終相當緩慢。不過,隨著各種智能終端的爆發(fā),尤其是iPad和其他平板、智能手機的普及和良好的市場驅動,各種設備聯網需求猛增,將迅速催生IPv6的快速普及。但是與IPv4的頭部長度20 byte相比,IPv6的40 byte的頭部長度顯得過于龐大,過大的頭部開銷在一定程度上影響著IPv6數據包的傳輸性能[1]。
眾所周知,大多數實時或交互性應用的程序中經常用一些小包,這些小包一般從幾個字節(jié)到幾百字節(jié)之間。因此IP包的負載數據長度經常與IP的報頭的長度一樣,甚至更短。例如,90%的telnet和rlogin的數據包所傳送的用戶數據少于10 byte[2]。更極端的是用戶經常用一個回車鍵或者其他鍵來回復消息,這些消息經常是單個字符的。這些單字節(jié)的數據將用TCP和IPv6的頭部來傳送,結果導致整個數據包的長度至少變?yōu)?1 byte(數據+IP頭部+TCP頭部(沒有任何選項的TCP頭部為20 byte)),無用的開銷將達到6000%。因此在這樣的場景中,如何減少報頭的大小、提高有效數據所占的比重是需要關注的。
本文設計了在3種不同情況下通過去掉IPv6的頭部中的一些與在LAN中傳輸數據毫無相關的域或者一些域值可以從以太網幀頭中推測出的域的辦法來構建新的IPv6頭部。使用這些設計,含IPv6報頭的數據包在LAN中傳輸數據的性能將顯著提高。
TCP/IP(Transmission Control Protocol/Internet Protocol)即傳輸控制協議/網間協議,是一個工業(yè)標準的協議集,它是為廣域網(WAN)設計的。因此在LAN中使用TCP/IP其實并不是一個很好的選擇,因為IPv6報頭中的一些域(例如Flow label,Hop limit)只與在WAN中傳輸數據有關。除此之外,其他的一些域(例如Interface Identifier,Payload Length,IP version)也顯得多余,因為它們的值在數據鏈路層的幀中也可以得到。因此通過有效的處理這些域,可以顯著提高IPv6數據包在LAN中傳輸的性能。
通過科來網絡分析系統(tǒng)軟件來抓取局域網中的流量,經過一段時間(2 h)后,得到圖1,從圖中可以知道,TCP和IP 的數據包在網絡所有傳輸的數據包中占到了絕對的比重,超過了所以數據量的90%。這也證明了TCP/IP是互聯網的統(tǒng)治協議。TCP/IP協議棧從底層到高層共分為4層,依次為網絡接口層、IP層、傳輸層和應用層[3]。
圖1 局域網數據包監(jiān)測(截圖)
TCP/IP協議棧的每一層都會對數據進行封裝,控制信息被添加到頭部,然后根據協議族將數據發(fā)送到模型中的下一層。圖2中顯示了典型的TCP/IP以太網幀,從該圖中可以看到,當TCP/IP的數據包在以太網中傳輸時,引入了很多額外的負載(圖2中淺色部分為有效數據)。當要傳輸的數據包長度很短時,相關的頭部在數據包中的比例很大。因此,對傳輸效率有著很大的影響。最極端的例子是用telnet遠程登錄,每敲一下鍵盤就產生一個數據報,每個數據報只有1 byte的有效數據,卻要在這一個字節(jié)的數據上封裝TCP報頭和IP報頭,該包的大小為61 byte,導致IP的報頭占到了65.57%(40/61)。所以傳輸效率非常低下,急需改進。對于大包來說,與數據的封裝相比,報頭的長度可以忽略不計,例如,如果一個IP包的有效負載高達1044 byte,則IP頭部只占到了3.69%。
圖2 典型的TCP/IP以太網幀
但是通過科來網絡分析系統(tǒng)軟件來抓取局域網中的流量,經過一段時間(2 h)后,得到圖3,從中可以看到:小于64 byte的數據包為56224個,65~127 byte的包為37813個,在檢測時間內的總包數為157884個,因此小于128 byte的包占數據量中的大部分,約為59.6%,而大于1024 byte的包只為28.3%。
圖3 局域網數據包監(jiān)測(截圖)
因此,針對LAN中傳輸的數據量中大部分的包為小于128 byte的小包,而IPv6頭部卻有40 byte的情況。在本文中,提出了3種不同情況下旨在減少IPv6頭部開銷的設計,這3種設計對標準的IPv6的頭部進行一定的修改,使IP數據包在LAN中的傳輸效率更加高。這些設計對于LAN中的設備或LAN/WAN邊緣的路由器的layer2和layer3是透明的。在LAN中傳輸的數據包將按照本文設計的IPv6報頭進行傳輸,而到WAN中的數據包的IPv6報頭將在LAN邊緣的路由器被還原成標準的IPv6報頭格式。
新設計的IPv6的頭部是在標準頭部的基礎上把一些在LAN中傳輸數據無關或冗余的域去掉。圖4為標準的IPV6的報頭格式。
圖4 標準的IPv6的報頭格式
如果一個數據報文的源和目的在同一個鏈路上,那么稱這個目的地址對于這個源地址是在線(On-Link)的[4]。在源主機向目標主機發(fā)送數據包的時候,源和目的IP地址、版本、流量類型、流標簽和有效載荷長度字段都可以去掉。對只在本地傳輸的數據包來說,跳數限制(Hop Limit)為1(當路由器收到一個IPv6報頭中的跳數限制字段值為1的數據報時,會丟棄該數據包并向源主機發(fā)送ICMPv6超時報文),因此Hop Limit也可以去掉。去掉這些域后,剩下的IPv6報頭將如圖5所示。從圖5中可以看到,為只在LAN中傳輸的數據設計的IPv6報頭從原來的40 byte減少到1 byte。新設計的IPv6報頭將在源主機封裝成幀然后發(fā)送到目標主機。在目標機中,在該包交付給網絡層前,該包中的IPv6頭部將先被還原成標準的IPv6報頭。因為源主機和目標機在同一個局域網中,所以它們的網絡前綴就是標準的Link-local前綴,該前綴值可以作為源和目的地址的前綴值,而Interface-ID的值則可以從以太網的幀頭中提取出來,在幀中的源和目標MAC地址轉換成EUI-64格式[5-6],轉換方法為:
圖5 LAN到LAN情況用IPv6報頭
1)將48位的MAC地址從中間分開,插入一個固定數值FFFE:0050:3EE4:4C00—> 0050:3EFF:FEE4:4C00。
2)將第7個比特位反轉,如果原來是0,就變?yōu)?,如果原來是1,就變?yōu)?,0050:3EFF:FEE4:4C00—> 0250:3EFF:FEE4:4C00。
3)加上前綴FE80::0250:3EFF:FEE4:4C00這就是一個完整的IPv6地址),然后加上網絡前綴得到128 bit的源和目標IP地址。版本和有效負載長度的值也可以從以太網幀中獲取,而流量類型和流標簽的值則可以設置為0。在重組成含標準的IPv6報頭的包后,該包就可以提交到網絡層然后就可以像正常情況下一樣處理該包。
當源主機在WAN中,而目標主機在一個LAN中時,數據包會先傳送到邊緣路由器,然后邊緣路由器會對數據包進行檢查然后找到LAN中的目標主機[7]。因此,在邊緣路由器上數據包的報頭可以重新設計,以便于更快捷地把該包發(fā)送給LAN中的目標主機。包中的目標主機的IP地址、流量類型、負載長度、跳數限制可以去除,只保留版本號、流標簽、Next Header和源主機的IP地址。此時,包含著重新設計的IPv6頭部的數據包將在數據鏈路層封裝成幀然后發(fā)送給目標主機。在目標主機上,該包的IPv6頭部在該包傳送到網絡層之前又可以恢復成標準頭部的格式。在這個恢復過程中,版本號和負載長度的域值可以從以太網的幀頭中讀取到;而在IPv6中,IP地址被分割為前綴部分和接口ID[8-9],因此目的地址可以由路由通告的標準的全局前綴加上從以太網的幀頭中獲取到的目的MAC地址的接口ID組成。流量類型和流標簽的域值則可以設置為0。包含著已經成標準恢復的IPv6報頭的數據包就可以傳送到網絡層,然后進行相應的處理,該設計使得IPv6的數據包的報頭長度從40 byte減少到20 byte。圖6為WAN到LAN情況用IPv6報頭。
圖6 WAN到LAN情況用IPv6報頭
當源主機在LAN中,而目標主機在WAN中的情況下。目標主機將有一個全局的IPv6地址[10],如果是這種情況,可以設計另一種IPv6報頭,去掉源IP地址,保留目地地址;此外,流量類型、負載長度、跳數限制都可以去掉,流標簽則保存。此時包含新的IPv6頭部的數據包將傳送給數據鏈路層,封裝成幀并發(fā)送給邊緣路由器。在邊緣路由器上,該數據包在被傳送給網絡層之前,里面的IPv6頭部就可以被恢復成標準格式。負載長度的值可以從以太網幀的頭部中獲得,跳數限制的值將被設置為默認值,流量類型的值如果沒有在邊緣路由器上特別設置的話就直接設置為0,從邊緣路由器中獲得的源IP地址的前綴加上從以太網中幀中獲得的接口ID就可以組成標準的源IP地址。當該數據包中的IP頭部被恢復成標準格式后,該數據包就可以傳送到網絡層,然后發(fā)送到目標主機。該設計使得IPv6的數據包的報頭長度從40 byte減少到了20 byte,圖7為LAN到WAN情況用IPv6報頭。
圖7 LAN到WAN情況用IPv6報頭
從上面3種情況可以看到,新設計的3種IPv6頭部使得壓縮IPv6頭部以及整個數據包的大小成為了可能。通過理論計算,可以得到圖8,從圖中可以直觀地看到標準的IPv6頭部和新設計的頭部在LAN中傳輸的效率。對于128 byte和256 byte的數據包,使用新設計的IPv6頭部的數據包的傳輸效率比使用標準的IPv6頭部的數據包的傳輸效率最高可達71%((60-35)/35)和23%((80-65)/65)。因此,可以得出,對于小包,使用新設計的IPv6頭部的數據包的傳輸效率要明顯高于使用標準的IPv6頭部的數據包。這對于在帶寬受限的WLAN中傳輸IPv6小包有著重要的意義。
圖8 在100 Mbit/s上幀長與吞吐量的對應關系
頭部的長度對協議的性能在兩個方面有著影響:第一,過大的頭部將增加數據包交換和傳輸的延時;第二,過大的報頭會占據過量的帶寬,從而降低了鏈路的吞吐量。如果數據包中的數據部分占的比例很大,則該影響可以忽略不計;但是如果數據包中的數據部分在整個包中占的比例很小,則該影響會很大。
在本文中,介紹并且討論了使用新設計的3種IPv6頭部來減少在局域網數據流中IPv6報頭大小。該方法減小了其頭部乃至整個數據包的大小,從而使得傳輸IPv6數據包(特別是小包)的LAN中的傳輸效率有著顯著的改善。
[1]林惠君,張思東,張宏科.基于IPv6的入侵檢測系統(tǒng)的研究與實現[J].電視技術,2005,29(10):64-66.
[2]CACERES R,DANZIG P B,JAMIN S,et al.Characteristics of wide-area TCP/IP conversations[EB/OL].[2012-08-20].http://wenku.baidu.com/view/9c33b225a5e9856a5612600a.html.
[3]STEVENS.TCP/IP詳解,卷 1:協議[M].北京:機械工業(yè)出版社,2000.
[4]周伯揚.IPv6技術初探[M].北京:國防工業(yè)出版社,2011.
[5]鐘銳,陶智勇.基于Linux環(huán)境的IPv6的自動配置分析及實驗[J].計算機應用,2012(A01):1-4.
[6]RFC1454 Comparison of Proposals for Next Version of IP[EB/OL].[2012-08-20].http://www.knowsky.com/381409.html.
[7]楊國良.IPv6技術、部署與業(yè)務應用[M].北京:人民郵電出版社,2011.
[8]HINDEN R,DEERING S.IP version 6 addressing architecture[EB/OL].[2012-08-20].http://wenku.baidu.com/view/1a91b0e8b8f 67c1cfad6b87e.html.
[9]李清.IPv6詳解:卷1 核心協議實現[M].北京:人民郵電出版社,2009.
[10]王相林.IPv6核心技術[M].北京:科學出版社,2011.