The BitTorrent Protocol Specification



Sat Feb 4 12:58:40 2017 +0100

Bram Cohen <>


24-Jun-2009 (, clarified the encoding of strings in torrent files.

20-Oct-2012 (, clarified that info-hash is the digest of en bencoding found in .torrent file. Introduced some references to new BEPs and cleaned up formatting.

11-Oct-2013 (, correct the accepted and de-facto sizes for request messages 04-

Feb-2017 (, further info-hash clarifications, added resources for new implementors

BitTorrent is a protocol for distributing files. It identifies content by URL and is designed to integrate seamlessly with the web. Its advantage over plain HTTP is that when multiple downloads of the same file happen concurrently, the downloaders upload to each other, making it possible for the file source to support very large numbers of downloaders with only a modest increase in its load.

A BitTorrent file distribution consists of these entities:

There are ideally many end users for a single file.

To start serving, a host goes through the following steps:

  1. Start running a tracker (or, more likely, have one running already).
  2. Start running an ordinary web server, such as apache, or have one already.
  3. Associate the extension .torrent with mimetype application/x-bittorrent on their web server (or have done so already).

  4. Generate a metainfo (.torrent) file using the complete file to be served and the URL of the tracker.

  5. Put the metainfo file on the web server.
  6. Link to the metainfo (.torrent) file from some other web page.

  7. Start a downloader which already has the complete file (the 'origin').

To start downloading, a user does the following:

  1. Install BitTorrent (or have done so already).

  2. Surf the web.
  3. Click on a link to a .torrent file.

  4. Select where to save the file locally, or select a partial download to resume.
  5. Wait for download to complete.
  6. Tell downloader to exit (it keeps uploading until this happens).



BEP-0003 (last edited 2019-01-22 00:22:02 by xj9)