摘要:分析了P2P流量的特征,討論了當前有關P2P流量識別與測量的研究現狀。在分析一個通過應用層匹配來識別P2P流量的模塊IPP2P基礎上,給出了一個基于Netfilter的P2P流量測量系統。該系統通過高速的內核字符串匹配來識別P2P數據流,在此基礎上運用連接跟蹤技術進行高效的流量統計,實現對P2P流量的實時測量。
關鍵詞:P2P流量測量; Netfilter; IPP2P; 應用層識別; 連接跟蹤
中圖分類號:TP393文獻標志碼:A
文章編號:1001-3695(2008)04-1224-03
P2P以其獨特的技術優勢在這幾年內迅速發展,其應用不斷增長。據統計,P2P應用已占ISP業務總量的60%~80%,成為網絡帶寬最大的消費者。然而P2P對帶寬的影響至今還不能給出一個定量的評估,這一切源于P2P特有的協議特征,給識別、測量帶來了巨大的挑戰,傳統基于端口的流量分類和測量的方法已經失效。為此,本文提出在Netfilter框架下實現的一個P2P流量測量系統,該系統能較準確地識別并測量P2P流量,進而可定量研究P2P流量對網絡的性能影響。
1P2P流量特征及相關研究現狀
當前P2P技術主要應用于文件共享和交換,且大多是用于大型的多媒體文件的共享和交換,其對帶寬的占用上已居統治地位,它有以下特征:
a)無處不在。P2P應用已經深入到網絡的每一個角落,通過內網穿透技術導致連內部網均充斥著P2P應用的端點。
b)帶寬耗盡。P2P應用竭盡所能地消耗著鏈路帶寬,已成為帶寬的最大消耗者。
c)協議豐富。每種P2P應用均有其特定的協議細節,且各不相同,增加了檢測和分類的難度。
d)持續在線。鑒于多媒體文件的巨大數據量以及協議保證的共享精神,P2P應用總是保持在線。
要測量P2P流量,最重要的就是必須對P2P流量進行有效的識別。然而,許多P2P通信使用了不同的通信技術和協議,使用傳統的第四層報文分析技術來識別它們非常困難。比如,許多P2P協議不使用固定的端口,而是使用動態端口,包括使用一些知名服務的端口。KaZaA就可以使用端口80(通常是http/web)來通信,從而穿透傳統的基于IP和端口的防火墻和包過濾器。所以,通過簡單的基于IP地址和端口的分類技術(分析IP包頭、IP地址、端口號等)很難識別、跟蹤或控制這類通信。
當前并沒有一套成熟的方案來解決所有P2P流量的識別問題,通常采用的方法是進行應用層識別,如可通過查找應用層數據,若發現BitTorrent protocol特征串,則可認為該數據流屬于BT應用。
當前P2P流量的測量也沒有很完善的解決方案,大多依賴于專門硬件實現,如思科SCE系列設備,可對每個用戶的應用級IP流量實施基于會話的分類和控制;還有德國Ipoque公司生產的PRX P2P filter系統,可提供實時流量數據和流量管理。
2Linux防火墻Netfilter
從Linux Kernel 2.4開始,一個新的網絡包過濾框架Netfilter/Iptables代替了原來的Ipchains/Ipfwadm系統。作為內核網絡協議棧的一個擴展子集,Netfilter可以在內核空間非常高效地進行包過濾、網絡地址轉換(NAT)和包重組。
Netfilter為每種網絡協議(IPv4、IPv6等)定義一套鉤子函數(IPv4定義了五個鉤子函數),這些鉤子函數在數據報流過協議棧的幾個關鍵點被調用。在這幾個點中,協議棧將數據報及鉤子函數標號作為參數調用Netfilter框架。每個希望嵌入Netfilter中的模塊均可以為多個協議族的多個調用點注冊多個鉤子函數(hook),這些鉤子函數將形成一條函數指針鏈,每次協議棧代碼執行到NF_hook()函數時(有多個時機),均會依次啟動所有這些函數,處理參數所指定的協議棧內容。Netfilter提供的是一套hook框架,其優勢是易于擴充。Netfilter 核心部分提供了一個分析、處置 packet 的架構,但是核心部分代碼并不具體地去分析、處置 packet。這個具體的分析、處置的任務被交給其他的 module來完成。所以擴展Netfilter的方法就是編寫自己的module。可供擴充的Netfilter構件主要包括table、match、target和connection track protocol helper四類,分別對應四套擴展函數。通常擴展Netfilter的方法是為Netfilter寫一個規則表match或者寫一個新的鉤子函數注冊到Netfilter。
本文提出的P2P流量測量系統正是在Netfilter的一個擴展模塊IPP2P基礎上通過擴充其功能來實現的。
3P2P測量系統的實現
要實現P2P流量的測量,首先就要準確地識別P2P流量。當前通過軟件的方式已經有比較成熟的實現P2P流量識別的項目,最典型的就是得到Ipoque GmbH資助的IPP2P項目和另一個開源項目L7-filter。IPP2P通過一組字符匹配函數,在內核實現高速匹配來搜索數據包,識別出包含某些P2P協議特征的數據包;L7-filter通過引入各個流行P2P協議的規則文件,運用正則表達式匹配來識別P2P協議。
IPP2P是在內核直接進行字符串匹配,效率較高,對系統性能影響不大,而L7-filter需要消耗更多的資源來滿足其性能要求,因此選擇IPP2P作為本測量系統的識別模塊,在其基礎上擴展實現P2P流量測量系統。
3.1P2P測量系統IPP2P_M框架
IPP2P是作為內核的一個可加載模塊實現的,為保持獨立性,采用給模塊打補丁的方法實現所有擴展,即使用patch技術擴展所需要的功能。通過改變其流程,增加流量統計的相關功能,即可實現基于Netfilter的P2P流量測量系統IPP2P_M。
IPP2P的處理過程是對到達的數據包逐一進行應用層數據匹配,雖然這樣可以準確地識別到達的每一個P2P數據包(在其支持的協議范圍內),但是這對流量測量來說遠遠不能滿足效率要求,因為流量測量要盡可能地減少其對網絡性能的影響,繁重的匹配工作會增加延時、降低吞吐率,因此必須針對流量測量的特點進行改進。
P2P數據流有其自身的特征,研究表明P2P流量具有長時固定連接的特點。所以可以充分利用該特征,引入連接跟蹤技術,即發現一條連接的第一個包是P2P數據包后,后面針對該連接的所有數據包均認定是P2P數據包,而無須進行深層次的應用層匹配。
連接跟蹤技術是Iptables/Netfilter框架下的NAT模塊采用的一個機制,其目的就是為了實現更為高效的網絡地址轉換。在P2P流量測量系統中,可以借鑒NAT的連接跟蹤技術實現一個簡化的P2P連接跟蹤。首先定義一個struct ip_p2p_conntrack來描述一個P2P連接。該結構定義如下:
struct ip_p2p_conntrack
{
unsigned long status;//該連接的狀態
struct ip_p2p_conntrackinfo_count
{
//統計該連接的流量信息
} conntrackinfo;
struct ip_p2p_conntrack_tuple_hash
{
struct list_head list;
struct ip_conntrack_tuple tuple;
}tuplehash[P2P_CONN_MAX];
//時間函數,超時則丟棄該連接,防止hash表無限增長
struct timer_list timeout;
}
該結構中ip_p2p_conntrack_tuple_hash結構可將此ip_p2p_conntrack鏈接進設置的hash表中,結構中的ip_conntrack_tuple結構成員借用了Iptables/Netfilter框架的標準定義,它包含了確定該連接的元組信息:源端IP和端口、目的端IP和端口、協議。測量模塊的整個流程如圖1所示。
數據包進入之后,首先提取其元組信息,依據元組信息查找hash表,若該連接已在hash表中,則將該包與流量測量相關的信息記錄到該連接的流量統計參數,同時置該連接狀態為活動狀態;若未找到,則轉入原IPP2P匹配流程,進行
應用層匹配,若匹配成功,表示該數據是P2P協議的數據,則將該連接添加進hash表中,初始化一個新的P2P連接;若應用層匹配失敗,則表明該數據包不是P2P協議或者不在支持的P2P協議范圍之內,暫不作處理。
標志一條連接的ip_p2p_conntrack結構中設置了一個定時器timer_list,通過系統時鐘以中斷的方式調用時間函數,定期查詢該連接的狀態。若處于非活躍狀態,則將該連接清除出hash表,防止hash表無限增長。
在內核完成P2P識別、連接跟蹤、流量信息統計后,通過內核與用戶空間通信來輸出結果,用戶空間可采用分布式系統來高速處理統計結果,完成流量測量。
3.2應用層識別模塊IPP2P
IPP2P是Iptables/Netfilter框架下的一個擴展模塊,它通過一個新的matching module來為Netfilter 核心部分提供一個新的匹配規則來識別P2P數據流。
IPP2P通過合適的查找模式來識別各種P2P流量,通過為每種特定的P2P協議實現一個識別函數,通過查找數據包中的應用層特征來識別P2P數據流。當前支持的傳輸層協議包括TCP和UDP,最新版本支持的應用層協議包括eDonkey、eMule、Kad、Bittorrent、Gnutella、KaZaA、Ares、SoulSeek、WinMX、appleJuice等。
當用戶通過Iptables配置Netfilter,添加進IPP2P模塊,并指定所要識別的P2P協議后,一個攜帶該信息的matchinfo參數便傳入內核的match模塊。Match模塊首先獲取網絡數據包sk_buff,先檢查是否是IP分片,然后根據傳輸層協議分別調用不同的識別函數;若是TCP協議,先判斷是否是fin、syn或rst包,若是,則不匹配;否則,根據matchinfo參數調用相應的具體P2P協議匹配函數進行匹配并返回結果;若是UDP協議,直接根據matchinfo參數調用相應的P2P協議匹配函數進行匹配并返回結果。所有匹配均在內核高速完成。其流程如圖2所示。
3.3內核與用戶的通信
上述P2P識別、連接跟蹤、流量信息統計,均是在內核高速完成,但是流量測量需要對獲取的流量數據進行系統的處理才能得到符合標準的流量信息,因此需要將內核中獲得的流量信息從內核空間輸出到用戶空間的數據庫中,再進一步處理,最終得到流量信息。然而內核和用戶空間是兩個不同的內存空間,互通不了信息,需要專門的設計來解決。
Netlink 是一種在內核與用戶應用間進行雙向數據傳輸的有效方式。目前在最新的 Linux 內核(2.6.*)中使用netlink 進行應用與內核通信的應用很多,如Netfilter 日志、Netfilter 子系統、IPv6 防火墻等。
在IPP2P模塊的初始化函數中,調用netlink_kernel_create函數創建一個netlink socket;在用戶空間中,使用標準的 socket API創建的netlink socket,以一定的時間粒度調用sendmsg向內核發送請求信息;內核netlink socket收到請求后,調用函數 netlink_unicast 來發送單播消息,將當前時間段的所有流量信息返回給用戶空間,完成內核與用戶空間的通信,為流量的實時測量奠定基礎。
3.4流量的實時統計
在用戶空間,要將從內核獲取的流量信息存入數據庫,然后依據不同的統計方法進行數據處理,獲得各種特征的流量。
內核中的統計是以連接為單位的,并且可以任意的時間粒度輸出流量信息,用戶空間可以實現實時的流量統計,可以精確統計出不同協議、不同網段的P2P流量,為網絡的優化和控制提供準確的依據。
4實驗結果及分析
4.1實驗結果
在一臺局域網網關上,用命令iptables-A FORWARD-m ipp2p_m -bit -j ACCEPT配置Netfilter,使其調用IPP2P_M模塊,該局域網內常用的P2P軟件主要是BitTorrent,所以協議項中僅指定bit,僅完成對BitTorrent軟件的流量測量。
測量時間為10:00~22:00,時間跨度12 h,以5 min為時間粒度輸出結果。取其中5 h的結果分析。圖3是流量曲線。其中實線表示的結果是通過IPP2P擴展模塊進行應用層匹配統計而得,虛線表示的結果是基于BT默認端口(6881~6889)統計的結果;圖4是以IP對為單位的連接數增加量與時間的關系,以5 min為時間單位統計;實驗結果中UDP數據包的流量相對較小,與TCP流量相比基本可以忽略。
4.2實驗結果分析
從流量結果可以看出,以IPP2P進行應用層匹配的測量結果要比傳統基于端口的測量更為準確。BT協議可用于動態端口,所以IPP2P進行應用層匹配測得的流量結果始終要高于基于端口的測量結果。另一方面,在沒有限制BT下載的情況下,一般用戶均會使用BT客戶端軟件的默認設置進行下載,所以基于IPP2P_M匹配測量和基于端口測量的結果差異并不是很明顯,在實驗中有接近90%流量均經過6885端口。從新建連接的曲線圖(圖4)上可以看出,時刻均會有新的連接加入進來。
5結束語
本文分析了越來越流行的P2P應用軟件的流量特征,介紹了Linux防火墻Netfilter/Iptables框架及其擴展機制,在分析應用層識別P2P數據流的模塊IPP2P之后,給出在其基礎上實現的P2P流量測量系統IPP2P_M,通過應用層識別P2P數據流及連接跟蹤技術,實現對P2P流量的實時精確測量。通過實驗及實驗結果分析來檢驗該系統的有效性。系統可應用于網關監測P2P流量,統計P2P流量對帶寬的占用率,也可作為大規模網絡流量測量中抽樣測量的基礎。
參考文獻:
[1]NICOLL J R, BATEMAN M, RUDDLE A, et al. Challenges in measurement and analysis of the BitTorrent content distribution model[C]//Proc of International Postgraduate Symposium on the Convergence of Telecommunications, Networking and Broadcasting.Liverpool: Liverpool John Moores University, 2004.
[2]YANG W J, KIM T I, JUNG H W. Optimizing hash table structure of flow exporting software: advanced communication technology[C]//Proc of the 8th International Conference.2006.
[3]KARAGIANNIS T, BROIDO A, FALOUTSOS M, et al. Transport layer identification of P2P traffic[C]//Proc ofInternet Measurement Conference. 2004.
[4]GUMMADI K P, DUNN R J, STEVEN S S, et al. Measurement, modeling, and analysis of a peer-to-peer file-sharing workload[C]//Proc of the 19th ACM Symposium on Operating Systems Principles.2003.
[5]netfilter/iptables [EB/OL] .[2006-10-20]. http://www.netfilter.org/.
[6]IPP2P [DB/OL]. [2006-10-25]. http://www.ipp2p.org/.
[7]L7-filter [DB/OL]. [2006-10-25]. http://l7-filter.sourceforge.net.
“本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文”