BitTorrent
Материал из Википедии — свободной энциклопедии
- Эта статья о протоколе. Для статьи о клиенте, см. BitTorrent (программа).
- Прикладной уровень
- HTTP, SMTP, FTP, TFTP, DHCP, SSH, IRC, SNMP, DNS,
IMAP, NNTP, SIP, Telnet, BitTorrent, XDR, rlogin… - Транспортный уровень
- TCP, UDP, SCTP, DCCP, RTP, RUDP…
- Сетевой уровень
- IPv4, IPv6, ARP, RARP, ICMP, IGMP
- Канальный уровень
- Ethernet, 802.11 WiFi, Token ring, FDDI, PPP,
SLIP, ATM, DTM, Frame Relay, SMDS… - Физический уровень
- RS-232, EIA-422, RS-449, EIA-485…
BitTorrent ( дословно "поток битов" ) — P2P-протокол, предназначенный для обмена файлами через интернет. BitTorrent был создан программистом Брэмом Коэном (англ. Bram Cohen).
Содержание |
[править] Отличительные черты
[править] Общие особенности
- Отсутствие очередей на закачку.
- Файлы закачиваются небольшими сегментами; чем менее доступен сегмент, тем чаще он будет передаваться. Таким образом, присутствие в сети «сида» с полным файлом для загрузки необязательно - система распределяет сегменты между «пирами», чтобы в последующем они могли обмениваться недостающими сегментами.
- Клиенты (peers) обмениваются сегментами непосредственно между собой, по принципу «ты — мне, я — тебе».
- Закачанные сегменты становятся немедленно доступны другим клиентам.
- Контролируется целостность каждого сегмента.
- В качестве объекта закачки могут выступать несколько файлов (например, содержимое каталога).
[править] Терминология
раздача - процесс распространения файла по протоколу BitTorrent.
пир (англ. peer соучастник) — клиент, участвующий в раздаче.
сид (англ. seed зерно, источник) — пир, имеющий все сегменты распространяемого файла (т.е. либо начальный распространитель файла, либо уже скачавший весь файл).
личер (англ. leech пиявка) — пир, не имеющий пока всех сегментов, т.е. продолжающий скачивание.
Выше даны первоначальные значения терминов пир, сид и личер согласно описанию протокола. Таким образом, для скачивания пиры подключаются к раздаче как личеры и, скачав файл, становятся сидами. Со временем значения этих терминов несколько сместились, и теперь пиром чаще называют скачивающего клиента (т.е. личера), а слово личер приобрело негативный смысл и означает пользователя, который отдает гораздо меньше, чем скачивает.
рой - Группа компьютеров, которые коллективно связываются для закачки конкретного файла. Например, если вы начинаете с клиента BitTorrent, и он сообщает вам, что вы подключены к 10-ти пирам и 3-м сидам, то рой состоит из 13-ти других компьютеров.
рейтинг англ. share ratio - отношение розданного к скаченному. Некоторые сидеры устанавливают ограничения для личеров с низким рейтингом (обычно при рейтинге ниже 0.5). Рекомендуется поддерживать рейтинг выше 1.0.
доступность англ. availability (также distributed copies) Количество полных копий файла, доступных клиенту. Каждый seed добавляет 1.0 к этому числу, поскольку они обладают полной копией файла. Те участники (peers), которые скачали только часть файла, увеличивают его доступность на столько, сколько ими уже скачанно. Однако, если несколько peer'ов скачали одинаковые части, то доступность от этого не увеличивается. К примеру, если у двух peer'ов скачано 50% и скачанные части равны между собой, и есть один seed, то доступность равна 1.50
[править] Протоколы и порты
Клиенты соединяются с трекером по протоколу HTTP, используя протокол TCP. Входящий порт трекера: 6969.
Клиенты соединяются друг с другом, используя протокол TCP. Входящие порты клиентов: 6881—6889.
Номера портов не фиксированы в спецификации протокола и могут изменяться при необходимости. Более того, в данный момент большинство трекеров используют обычный HTTP порт 80, а для клиентов рекомендуется выбрать случайный входящий порт.
DHT (Distributed Hash Table) сеть в BitTorrent клиентах использует протокол UDP.
Кроме того протокол UDP используется UDP-трекерами (не поддерживается всеми клиентами и не является официальной частью протокола) и для соединения клиентов друг с другом через UDP NAT Traversal (используется только в клиенте BitComet и не является официальной частью протокола).
[править] Файл метаданных
Bittorrent не имеет системы поиска: для каждого распространяемого файла создаётся файл метаданных с расширением torrent, который содержит следующую информацию:
- URL трекера (см. ниже).
- общую информацию о закачиваемом файле (имя, длину и пр.)
- контрольные суммы (точнее, хэш-суммы SHA1) сегментов закачиваемого файла.
Файлы метаданных могут распространяться через любые каналы связи — например, эти файлы (или ссылки на них) могут выкладываться на веб-серверах, размещаться на домашних страницах пользователей сети, рассылаться по электронной почте, публиковаться в блогах или новостных лентах RSS.
Клиент начинает закачку, получив каким-либо образом файл с метаданными, в котором есть ссылка на трекер.
[править] Трекер
Трекер (англ. tracker) — специализированный сервер, работающий по протоколу HTTP. Трекер нужен для того, чтобы клиенты могли найти друг друга. Фактически, на трекере хранятся IP-адреса и входящие порты клиентов и хэш-суммы, уникальным образом идентифицирующие объекты, участвующие в закачках. По стандарту, имена файлов на трекере не хранятся, и узнать их по хэш-суммам нельзя. В практических реализациях, однако, трекер часто, помимо своей основной функции, выполняет и функцию небольшого веб-сервера. Такой сервер хранит файлы метаданных и описания распространяемых файлов, предоставляет статистику закачек по разным файлам, показывает текущее количество подключенных пиров и пр.
[править] Работа без трекера
В новых версиях протокола были разработанны бестрекерные системы (trackerless), которые решают некоторые из предыдущих проблем. Отказ трекера в таких системах не приводит к автоматическому отказу всей сети.
Начиная с версии 4.2.0 официального клиента в нем реализована функция бестрекерной работы, базирующаяся на протоколе Kademlia. В таких системах трекер доступен децентрально, на клиентах, в форме распределенной хеш-таблицы (Distributed Hash Table).
На данный момент еще не все клиенты используют совместимый друг с другом протокол. Совместимы BitComet, µTorrent, KTorrent и официальный клиент BitTorrent.
[править] Super seeding (Супер сид)
Super seeding является особенностью некоторых клиентов BitTorrent, которые пытаются минимизировать объем данных до первого завершения загрузки пира. Эта было задумано Джоном Хофманом и сначала было осуществлено на клиенте BitTornado в середине 2003г. Эта особенность должна использоваться, когда есть только один сидер. Super seeding является изменением в поведении сидеров и не может быть осуществлен без нарушения протокола BitTorrent. Тем не менее, это не утверждается ни разработчиком протокола, Брэмом Коэном, ни в официальном клиенте. Супер-сид заставляет пользователей делиться скачаным. Отдав одному участнику какую-либо часть файла, твой клиент ничего больше ему не даст, пока не увидит в сети вторую копию этой части. А поскольку многие делиться не любят (или в данный момент возможности нет), то общая скорость отдачи падает. Как только ты переключаешься в обычный режим, твой клиент начинает раздавать всем кто чего попросит. Скорости возрастают. Супер-сид эффективен при раздачах с большим количеством качающих. Если качающих 2-3 человека их клиенты в силу разных причин могут отказаться устанавливать связь друг с другом. Соответственно нет обмена между ними и, как следствие, все сидят и ждут когда твой клиент их осчастливит. Когда качающих много (ну, пусть 10-20 человек) в идеале достаточно раздать до коэффициента 1. Тогда в сети окажутся все части файла и пиры смогут ими обменяться.
[править] Принцип работы протокола
Перед началом закачки клиент подсоединяется к трекеру, сообщает ему свой адрес, и получает адреса других клиентов, скачивающих или раздающих этот же файл. Далее клиент периодически информирует трекер о своем прогрессе и получает обновленный список адресов.
Клиенты соединяются друг с другом и обмениваются сегментами файлов без непосредственного участия трекера. Для эффективной работы сети BitTorrent необходимо, чтобы как можно больше клиентов были способны принимать входящие соединения. Неправильная настройка NAT или файрвола могут этому помешать.
При соединении клиенты сразу обмениваются информацией об имеющихся у них сегментах. Клиент, желающий скачать сегмент, посылает запрос и, если второй клиент готов отдавать, получает этот сегмент. После этого клиент проверяет контрольную сумму сегмента и оповещает всех присоединенных пиров о наличии у него этого сегмента.
Каждый клиент имеет возможность временно блокировать отдачу другому клиенту (англ. choke). Это делается для более эффективного использования канала отдачи. Кроме того, при выборе кого разблокировать предпочтение отдается пирам, которые сами передали этому клиенту много сегментов. Таким образом, пиры с хорошими скоростями отдачи поощряют друг друга по принципу «ты — мне, я — тебе».
[править] Программы-клиенты
- Менеджер закачек FlashGet поддерживает закачку торрентов начиная с версии 1.80 Beta 1
- Браузер Opera поддерживает закачку торрентов начиная с версии 9.0
- Azureus
- BitComet
- BitTornado
- µTorrent
- mlDonkey
- Shareaza
- CTorrent
[править] См также
[править] Ссылки
- Официальная страница BitTorrent
- Первоначальная спецификация протокола на www.bittorrent.org
- Современная спецификация протокола на wiki.theory.org
Эта статья входит в число хороших статей русскоязычного раздела Википедии. |