這段時間在研究BT數據流如何突破防火墻的,但是最后好像有點攔截的意思,反了:(,還是把它總結一下,歡迎討論,wengpingbo@gmail.com BitTorrent 協議介紹 BitTorrent 是一種 P2P 協議。用于在對等網絡中,用戶群和用戶群 (peer-to-peer) 之間的文件分享。并
這段時間在研究BT數據流如何突破防火墻的,但是最后好像有點攔截的意思,反了:(,還是把它總結一下,歡迎討論,wengpingbo@gmail.com
BitTorrent是一種P2P協議。用于在對等網絡中,用戶群和用戶群(peer-to-peer)之間的文件分享。并且,對于一個文件,用戶群越大,下載速度就越快。BitTorrent協議能夠減少服務端和網絡環境對分享大文件的影響,由于是分布式節點互傳數據,某一部分的網絡擁堵或服務器宕機并不會對整個傳輸鏈路造成太大的影響。
BitTorrent協議是由程序員Bram Cohen在2001年四月份設計的,最終版本在2008年確定。有很多客戶端實現了BitTorrent協議,最常見的有Vuze、μTorrent、BitTorrent、BitComet、Transmission和Xunlei。
一個BitTorrent文件傳輸過程,通常需要由以下幾個部分組成:
一個種子文件,通常是以.torrent后綴結尾。BitTorrent協議規定,torrent文件本身,內容必須是utf8編碼格式,并且其中的字段結構采用bencoding編碼格式。
Torrent種子文件由兩部分組成:announce(tracker url)和文件信息。
下面以一個正常的torrent文件來分析種子文件的結構。
該種子文件的一部分如下:
d8:announce78:http://www.chinahdtv.org/announce.php?passkey=6e7a1c7ca4164d87e9b0e00ec63aa74910:created by13:uTorrent/204013:creation datei1369699038e8:encoding5:UTF-84:infod5:filesld6:lengthi158784e4:pathl53:Iron.Man.3.2013.HDSCR.ULTRA.EDiTiON.720p.x264.chn.srteed6:lengthi107117e4:pathl54:Iron.Man.3.2013.HDSCR.ULTRA.EDiTiON.720p.x264.chn1.srteed6:lengthi93644e4:pathl54:Iron.Man.3.2013.HDSCR.ULTRA.EDiTiON.720p.x264.chn2.srteed6:lengthi4272200020e4:pathl49:Iron.Man.3.2013.HDSCR.ULTRA.EDiTiON.720p.x264.mkveee4:name56:鋼鐵俠3.Iron.Man.3.2013.HDSCR.ULTRA.EDiTiON.720p.x26412:piece lengthi4194304e6:pieces20380:012ef......:privatei1e6:source23:[hd.gg] CNHD ChinaHDTVee
根據bencoding編碼格式,把這段字符解碼還原后,就是如下內容:
announce:http://www.chinahdtv.org/announce.php?passkey=6e7a1c7ca4164d87e9b0e00ec63aa749
created by:uTorrent/2040
creation date:1369699038
encoding:UTF-8
info:
{files:[
{length:158784,path:[Iron.Man.3.2013.HDSCR.ULTRA.EDiTiON.720p.x264.chn.srt]}, {length:107117,path:[Iron.Man.3.2013.HDSCR.ULTRA.EDiTiON.720p.x264.chn1.srt]}, {length:93644,path:[Iron.Man.3.2013.HDSCR.ULTRA.EDiTiON.720p.x264.chn2.srt]},
{length:4272200020,path:[Iron.Man.3.2013.HDSCR.ULTRA.EDiTiON.720p.x264.mkv]}],
name:鋼鐵俠3.Iron.Man.3.2013.HDSCR.ULTRA.EDiTiON.720p.x264,
piece length:4194304,
pieces:P1,P2,P3...P1019
private:1
source:[hd.gg] CNHD ChinaHDTV
}
關于具體bencoding編碼,請參考引用中的鏈接。從上面的結果可以看出,一個torrent種子文件有點類似于XML格式的文件,包含如下組成部分:
注意,以上的每個屬性并不是必須的,有的屬性屬于BitTorrent Enhancement Proposals (BEPs),就是BitTorrent協議的擴展,雖然不屬于正式標準的一部分,但是很多客戶端都支持這種格式
BitTorrent協議支持基于TCP或UTP網絡協議進行數據傳輸,但是由于TCP協議是有連接的,需要先進行握手。在進行數據傳輸的過程中,每個種子會占有大量的TCP連接,從而占有大量的用戶帶寬。這給其他需要高實時性的應用造成很大的網絡壓力。
于是BitTorrent又支持UTP協議用來進行數據傳輸,這也是當前大部分BT下載客戶端所采用的實現方式。UTP(uTorrent Transport Protocol)是基于UDP網絡協議的,也就是無連接協議,采用這種協議進行數據交換,可以很容易進行帶寬控制,不會造成網絡擁堵。
下面主要分析BitTorrent中的UTP協議,因為這個常用嘛!
UTP協議的包結構如下:(不包含UDP header)
Fig. 1 UTP包結構(來自bittorrent.org)
可能說這么多,有點混亂了,下面以一個具體的UTP包做說明。
數據包內容如下:
0000 78 ac c0 55 45 4a 00 0c 86 23 b8 00 08 00 45 00
0010 00 30 2f e7 00 00 66 11 a4 23 01 a4 60 2e db f6
0020 42 ea 8f b9 cf 46 00 1c 00 00 21 00 19 a2 ec 07
0030 ea 27 c3 62 4a be 00 37 f5 10 11 89 32 d4
其中0x00-0x29是UDP header,這里不再分析。咱來看一下它的數據部分:
210019a2ec07ea27c3624abe0037f510118932d4
可以看出來:
由于BitTorrent數據包是應用層協議,所以必須要通過DPI技術,才能識別這種協議的流量。識別這種流量有兩種方法:
一是檢測兩個peer之間的大流量連接。如果發現兩個ip之間出現大量異常udp數據包,可以采取丟包的方式,來限制傳輸速率。
另外一種方法,就是運用DPI技術,讀取UDP數據部分,如果發現大量的UDP包的負載前幾個字節是0x0100,則判斷為BitTorrent流量,并采取相應的措施。
1. http://en.wikipedia.org/wiki/BitTorrent_client
2. http://en.wikipedia.org/wiki/BitTorrent
3. http://www.bittorrent.org/beps/bep_0000.html
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com