BitTorrent is a peer-to-peer (P2P) file distribution protocol. The protocol was designed in April 2001 and created in Summer 2002 by programmer Bram Cohen, and is now maintained by BitTorrent, Inc.
BitTorrent is a method of distributing large amounts of data widely without the original distributor incurring the whole of the corresponding costs of hardware, hosting and bandwidth resources. Instead of the distributor alone servicing each recipient, under BitTorrent the recipients each also supply data to newer recipients, thus significantly reducing the cost and burden on any given individual source as well as providing redundancy against system problems, and reducing dependence upon the original distributor.
CableLabs, the research organization of the North American cable industry, believes that BitTorrent could represent 55% of the upstream traffic on the cable company's access network.CacheLogic puts that number at roughly 35% of all traffic on the Internet.Another paper states that some 18% of all broadband traffic carries torrent files needed to initiate BitTorrent downloads.The large discrepancies in these numbers could be caused by dissenting opinions on the methodology to measure P2P traffic on the Internet.
The original BitTorrent client was written in Python. Its source code, as of version 4.0, has been released under the BitTorrent Open Source License, which is a modified version of the Jabber Open Source Licence. There are numerous compatible clients, written in a variety of programming languages, and running on a variety of computing platforms.
Comparison with other file sharing systems
Though both ultimately transfer files over a network, a BitTorrent download differs from a classic full-file HTTP request in several fundamental ways :
- BitTorrent makes many small P2P requests over different TCP sockets, while web-browsers typically make a single HTTP GET request over a single TCP socket.
- BitTorrent downloads in a random or "rarest-first" approach that ensures high availability, while HTTP downloads in a contiguous manner.
Taken together, BitTorrent achieves much lower cost, much higher redundancy, and much greater resistance to abuse or "flash crowds" than a regular HTTP server. However, this protection comes at a cost: downloads take time to ramp up to full speed because these many peer connections take time to establish, and it takes time for a node to get sufficient data to become an effective uploader. As such, a typical BitTorrent download will gradually ramp up to very high speeds, and then slowly ramp back down toward the end of the download. This contrasts with an HTTP server that, while more vulnerable to overload and abuse, ramps up to full speed very quickly and maintains this speed throughout. Furthermore, BitTorrent's non-contiguous download methods prevent it from supporting "progressive downloads" or "streaming playback," as is possible with HTTP.
The method used by BitTorrent to distribute files parallels the method used by the eDonkey2000 network, but nodes in eDonkey's file sharing network usually share and download a much larger number of files, making the bandwidth available to each transfer much smaller. While the original eDonkey2000 client provided little "leech resistance," most new clients have some sort of system to encourage uploaders. eMule, for example, has a credits system whereby a client rewards other clients that upload to it by increasing their priority in its queue. However, the nature of the eDonkey2000 concept means download speeds tend to be much more variable, although the number of available files is far greater.
eMule also prefers to request the most common parts of a file - this resulted in a large number of incomplete files on the network, with many users having the same common chunks of the file, but the only user having a missing piece being offline.
A similar method to BitTorrent was the Participation Level introduced in Kazaa in 2002. A user's Participation Level would increase when they uploaded and decrease when they downloaded. Then when a user uploaded a file, the person with the highest Participation Level would get it first, then the next highest, and so on. This can be visualised as a pyramid, with the clients who have the most upload bandwidth available at the top and those with less bandwidth on progressively lower levels. This is the most efficient way to distribute a file to a large number of users: it is probable that even the people at the bottom of the pyramid will get the file faster than if the file was served by a non-P2P method. Unfortunately the Kazaa implementation is flawed as it relies on the client accurately reporting their Participation Level, making it easy to cheat using one of the many unofficial clients.