Строка 1: |
Строка 1: |
− | {{другое значение|Эта статья о протоколе. Статья о клиенте: [[BitTorrent (программа)]].}}
| + | #REDIRECT [[BitTorrent]] |
− | [[Изображение:NewBitTorrentLogo.png|thumb|Логотип BitTorrent]]
| |
− | '''BitTorrent''' (букв. [[английский язык|англ.]] «битовый поток») — пиринговый ([[P2P]]) [[сетевой протокол]], предназначенный для обмена [[файл]]ами через [[Интернет]]. Принцип работы данного протокола состоит в том, что файлы передаются не целиком, а частями, причём каждый [[BitTorrent (программа)|клиент]], получая (закачивая) эти части, в это же время отдаёт (подкачивает) их другим клиентам, что снижает нагрузку и зависимость от каждого клиента-источника и обеспечивает [[избыточность данных]]. BitTorrent был создан программистом [[Коэн, Брэм|Брэмом Коэном]] [[4 апреля]] [[2001]] года, запуск первой версии состоялся [[2 июля]] [[2001]] года. Существует множество совместимых [[BitTorrent (программа)|программ-клиентов]], написанных на различных [[язык программирования|языках программирования]] для различных [[компьютерная платформа|компьютерных платформ]].
| |
− | | |
− | == Принцип работы протокола ==
| |
− | [[Изображение:Torrentcomp small.gif|frame|Принцип работы BitTorrent: нагрузка на распространителя файла уменьшается благодаря тому, что клиенты начинают обмениваться данными сразу же, даже если файл не докачан ими до конца.]]
| |
− | Перед началом скачивания клиент подсоединяется к трекеру, сообщает ему свой адрес и хэш-сумму запрашиваемого файла, на что в ответ клиент получает адреса других клиентов, скачивающих или раздающих этот же файл. Далее клиент периодически информирует трекер о ходе процесса и получает обновлённый список адресов.
| |
− | | |
− | Клиенты соединяются друг с другом и обмениваются сегментами файлов без непосредственного участия трекера, который лишь регулярно обновляет информацию о подключившихся к обмену клиентах и другую статистическую информацию. Для эффективной работы сети BitTorrent необходимо, чтобы как можно больше клиентов были способны принимать входящие соединения. Неправильная настройка [[NAT]] или [[файрвол]]а могут этому помешать.
| |
− | | |
− | При соединении клиенты сразу обмениваются информацией об имеющихся у них сегментах. Клиент, желающий скачать сегмент, посылает запрос и, если второй клиент готов отдавать, получает этот сегмент. После этого клиент проверяет контрольную сумму сегмента и оповещает всех присоединённых пиров о наличии у него этого сегмента.
| |
− | | |
− | Каждый клиент имеет возможность временно блокировать отдачу другому клиенту ({{lang-en|choke}}). Это делается для более эффективного использования канала отдачи. Кроме того, при выборе — кого разблокировать, предпочтение отдается пирам, которые сами передали этому клиенту много сегментов. Таким образом, пиры с хорошими скоростями отдачи поощряют друг друга по принципу «ты — мне, я — тебе».
| |
− | <!--
| |
− | Обмен сегментами ведется по принципу «ты — мне, я — тебе» симметрично в двух направлениях и в случайном порядке. Клиенты периодически сообщают друг другу об имеющихся у них сегментах. Обмен данными начинается, когда обе стороны в нём заинтересованы, то есть каждая из сторон имеет сегменты, которых нет у другой. Количество переданных сегментов подсчитывается, и если одна из сторон обнаруживает, что передаёт в среднем больше, чем принимает, она блокирует ({{lang-en|choke}}) отдачу. Таким образом, в протокол заложена защита от личеров (в негативном смысле слова).
| |
− | | |
− | При получении полного файла клиент переходит в специальный режим работы, в котором он только отдает данные (становится сидом).
| |
− | | |
− | Клиенты периодически информируют трекер об изменениях в состоянии закачек и обновляют списки IP-адресов.
| |
− | | |
− | === Структура трафика ===
| |
− | Как и в других протоколах передачи файлов, [[трафик]] протокола BitTorrent можно разделить на служебный и собственно скачиваемые/отсылаемые данные.
| |
− | -->
| |
− | | |
− | === Общие особенности ===
| |
− | * Отсутствие [[очередь|очередей]] на скачивание.
| |
− | * [[Файл]]ы закачиваются небольшими [[сегмент]]ами; чем менее доступен сегмент, тем чаще он будет передаваться. Таким образом, присутствие в сети «[[#Терминология|сидера]]» с полным файлом для загрузки необязательно — система распределяет сегменты между «[[#Терминология|пирами]]», чтобы в последующем они могли обмениваться недостающими сегментами.
| |
− | * [[Клиент (программный)|Клиенты]] ([[peer]]s) обмениваются сегментами непосредственно между собой, по принципу «ты — мне, я — тебе».
| |
− | * Скачанные сегменты становятся немедленно доступны другим клиентам.
| |
− | * Контролируется [[целостность]] каждого сегмента.
| |
− | * В качестве объекта закачки могут выступать несколько файлов (например, содержимое [[каталог]]а).
| |
− | | |
− | === Протоколы и порты ===
| |
− | Клиенты соединяются с трекером по протоколу [[TCP]]. Входящий порт трекера: 6969.
| |
− | | |
− | Клиенты соединяются друг с другом, используя протокол [[TCP]]. Входящие порты клиентов: 6881—6889.
| |
− | | |
− | Номера портов не фиксированы в спецификации протокола и могут изменяться при необходимости. Более того, в данный момент большинство трекеров используют обычный [[HTTP]] порт 80, а для клиентов рекомендуется выбрать случайный входящий порт.
| |
− | | |
− | [[DHT]]-сеть в BitTorrent-клиентах использует протокол [[UDP]].
| |
− | | |
− | Кроме того, протокол [[UDP]] используется [[:en:UDP tracker|UDP-трекерами]] (не поддерживается всеми клиентами и не является официальной частью протокола) и для соединения клиентов друг с другом через [[UDP]] [[NAT]] Traversal (используется только в клиенте BitComet и не является официальной частью протокола).
| |
− | | |
− | === Файл метаданных ===
| |
− | Для каждого распространяемого файла создаётся файл [[метаданные|метаданных]] с расширением .torrent, который содержит следующую информацию:
| |
− | * [[URL]] трекера;
| |
− | * общую информацию о закачиваемом файле (имя, длину и пр.);
| |
− | * [[Хеширование|контрольные суммы]] (точнее, [[хэш-сумма|хэш-суммы]] [[SHA1]]) сегментов закачиваемого файла.
| |
− | | |
− | Файлы метаданных могут распространяться через любые каналы связи: они (или ссылки на них) могут выкладываться на [[веб-сервер]]ах, размещаться на домашних страницах пользователей сети, рассылаться по [[электронная почта|электронной почте]], публиковаться в [[блог]]ах или новостных лентах [[RSS]]. Клиент начинает скачивание, получив каким-либо образом файл с метаданными, в котором есть ссылка на ''трекер''.
| |
− | | |
− | Первоначально BitTorrent не имел собственной поисковой системы ({{lang-en|search engine}}), но в мае [[2005]] года [[Коэн, Брэм|Брэм Коэн]] устранил этот недостаток.<ref>{{cite web| url=http://www.betanews.com/article/BitTorrent_Creator_Opens_Online_Search/1117065427| title=BitTorrent Creator Opens Online Search| first=David| last=Worthington| coauthors=Nate Mook| publisher=BetaNews| year=May 25, 2005| accessdate=24.11.2007}}</ref>
| |
− | | |
− | === Трекер ===
| |
− | {{main|BitTorrent трекер}}
| |
− | '''Трекер''' ({{lang-en|tracker}}; {{IPA|/ˈtrækə(r)/}}) — специализированный [[Сервер (приложение)|сервер]], работающий по протоколу [[HTTP]]. Трекер нужен для того, чтобы клиенты могли найти друг друга. Фактически, на трекере хранятся [[IP-адрес]]а, входящие порты клиентов и [[хэш-сумма|хэш-суммы]], уникальным образом идентифицирующие объекты, участвующие в закачках. По стандарту, имена файлов на трекере не хранятся, и узнать их по хэш-суммам нельзя. Однако на практике трекер часто помимо своей основной функции выполняет и функцию небольшого [[веб-сервер]]а. Такой сервер хранит файлы метаданных и описания распространяемых файлов, предоставляет статистику закачек по разным файлам, показывает текущее количество подключенных пиров и пр.
| |
− | | |
− | === Работа без трекера ===
| |
− | В новых версиях протокола были разработаны бестрекерные ({{lang-en|trackerless}}) системы, которые решают некоторые из предыдущих проблем. Отказ трекера в таких системах не приводит к автоматическому отказу всей сети.
| |
− | | |
− | Начиная с версии 4.2.0 официального клиента, в нём реализована функция бестрекерной работы, базирующаяся на протоколе [[Kademlia]]. В таких системах трекер доступен децентрально, на клиентах, в форме [[DHT|распределенной хеш-таблицы]].
| |
− | | |
− | На данный момент ещё не все клиенты используют совместимый друг с другом протокол. Совместимы между собой [[BitComet]], [[µTorrent]], [[KTorrent]] и [[BitTorrent (программа)|официальный клиент BitTorrent]]. [[Azureus]] также имеет режим бестрекерной работы, но его реализация отличается от официальной, вследствие чего он не может работать через DHT с вышеперечисленными клиентами.<ref>http://www.utorrent.com/faq.php#What_is_DHT.3F</ref> Однако, для Azureus существует поддержка стандартного DHT через плагин Mainline DHT.
| |
− | | |
− | === Super seeding (cупер-сид) ===
| |
− | [[Super seeding|Супер-сид]] ({{lang-en|super seeding}}) — метод, реализованный в тех клиентах BitTorrent, авторы которых пытаются минимизировать объём данных до первого завершения загрузки пира. Метод был задуман Джоном Хофманом и впервые был осуществлен в клиенте «BitTornado» в середине 2003 г.
| |
− | | |
− | Супер-сид является изменением в поведении сидеров и не может быть осуществлен без нарушения протокола BitTorrent. Тем не менее, это не утверждается ни разработчиком протокола, Брэмом Коэном, ни в официальном клиенте.
| |
− | | |
− | Супер-сид действует, когда имеется только один сидер. Фактически, он заставляет пользователей делиться скачанными данными. Клиент, отдавший одному участнику какую-либо часть файла, прекращает передачу данных до тех пор, пока не обнаружит в сети вторую копию этой части. Поскольку многие участники не имеют возможности или не желают делать доступными для других скачанные данные, общая скорость отдачи падает. В обычном же режиме, в отличие от супер-сид, каждый всегда получает запрошенную информацию, если она имеется, поэтому в нём средняя скорость передачи данных выше.
| |
− | | |
− | Супер-сид эффективен при раздачах с большим количеством качающих. При небольшой группе людей (2—3 человека) их клиенты в силу разных причин могут отказаться устанавливать связь друг с другом. В этом случае включенный супер-сид заставит клиентов ждать, пока данные станут доступны. Когда число качающих велико (10—20 человек), достаточно отдать каждую часть файла только один раз, тогда клиенты смогут обменяться ею между собой, и каждый из них получит файл целиком.
| |
− | | |
− | == Терминология ==
| |
− | * ''Анонс'' ({{lang-en|announce}}) — обращение клиента к [[BitTorrent трекер|трекеру]]. При каждом анонсе клиент передаёт на трекер информацию об объёмах им скачанного и отданного, a трекер передаёт клиенту список адресов других клиентов. Обращение клиента к трекеру происходит через определённые интервалы времени, которые определяются настройками клиента и трекера.
| |
− | * ''Доступность'' ({{lang-en|availability}}), или ''distributed copies'' — количество полных копий файла, доступных клиенту. Каждый сид добавляет 1,0 к этому числу; личеры увеличивают доступность в зависимости от количества скачанного, которого нет у других личеров. К примеру, если на раздаче есть один сид и два личера, скачавшие по 50% файла (скачанные части равны между собой), то доступность равна 1,50.
| |
− | [[Изображение:Leech bittorrent.png|thumb|right|200px|Личер и его рой.]]
| |
− | * ''[[Личер]]'' ({{lang-en|leech}} — пиявка) — пир, не имеющий пока всех сегментов, то есть продолжающий скачивание. Термин часто употребляется и в негативном смысле, который он имеет в других файлообменных сетях: пользователь, который отдает гораздо меньше, чем скачивает.
| |
− | * ''Пир'' ({{lang-en|peer}} — соучастник) — клиент, участвующий в раздаче. Иногда пирами называют только скачивающих участников.
| |
− | * ''Раздача'' ({{lang-en|seeding}}) — процесс распространения файла по протоколу BitTorrent.
| |
− | * ''Рейтинг'' ({{lang-en|share ratio}}) — отношение отданного к скачанному.
| |
− | * ''Рой'' ({{lang-en|swarm}}) — совокупность всех пиров, участвующих в раздаче.
| |
− | * ''Сид'', иногда ''сидер'' ({{lang-en|seeder}} — сеятель) — пир, имеющий все сегменты распространяемого файла, то есть либо начальный распространитель файла, либо уже скачавший весь файл.
| |
− | * ''[[URL]] анонса'' ({{lang-en|announce URL}}) — адрес трекера, к которому клиент делает анонс. Во многих клиентах называется «Tracker URL». Может включать «passkey» — уникальный код, назначаемый трекером для аккаунта пользователя, помогающий идентифицировать его на трекере (добавляется к URL анонса в самом *.torrent-файле).
| |
− | | |
− | == Программы-клиенты ==
| |
− | Кроссплатформенные:
| |
− | * {{не переведено |есть=:en:Aria (software) |надо=aria (программа) |текст=aria2}} — поддерживает HTTP, FTP, BitTorrent; файлы {{не переведено |есть=:en:Metalink |надо=Metalink}} 3.0
| |
− | [[Изображение:Azureus screenshot.png|thumb|250px|Использование протокола BitTorrent на примере [[Azureus]].]]
| |
− | * [[Azureus]] — написан на языке [[Java]], поэтому является [[Кроссплатформенное программное обеспечение|кроссплатформенным]];
| |
− | * [http://en.wikipedia.org/wiki/BitTyrant BitTyrant] кроссплатформенный клиент (Linux, Mac OS X, Windows), написан на языке [[Java]]. BitTyrant является модифицированным вариантом клиента [[Azureus]] 2.5.
| |
− | * [[BitTornado]] — кроссплатформенный клиент, написанный на языке [[Python]];
| |
− | * [[Deluge]] — кроссплатформенный клиент, написанный на языке [[Python]]; использует [[GTK]];
| |
− | * [[FoxTorrent]] — [[Расширение Firefox|расширение]] для браузера [[Mozilla Firefox]], реализующее функции клиента BitTorrent;
| |
− | * [[LeechCraft]] — кроссплатформенный клиент, существует плагин для поддержки BitTorrent;
| |
− | * [[mlDonkey]] — кроссплатформенный клиент;
| |
− | * [[Браузер]] [[Opera]] полностью поддерживает закачку торрентов, начиная с версии 9.0;
| |
− | * [[TorrentFlux]] — написан на [[PHP]], работает на удаленном [[Web]]-сервере как PHP-[[скрипт]], позволяя не держать свой компьютер включенным постоянно, но при этом качать и раздавать торренты.
| |
− | | |
− | Для [[UNIX]]-подобных систем:
| |
− | * [[BTPD]] — консольный клиент для [[Unix]]/GNU+Linux, написанный на [[C++]]; работает в режиме [[демон (программа)|демона]];
| |
− | * [[CTorrent]] — консольный клиент для [[Unix]]/GNU+Linux, прекративший развитие в [[2004 год]]у;
| |
− | * [[KTorrent]] — использует библиотеку [[Qt]]; работает в среде [[KDE]];
| |
− | * [[rTorrent]] — консольный клиент для [[UNIX]]/GNU+Linux, написанный на [[C++]]; использует библиотеки [[ncurses]] и [[libTorrent]];
| |
− | * [[Transmission]] — клиент для [[Mac OS X]], [[FreeBSD]], [[OpenBSD]], [[NetBSD]], [[GNU/Linux]] и [[BeOS]], использующий [[GTK]].
| |
− | * [[Bitflu]] — консольный клиент для [[Unix]]/GNU+Linux, написанный на [[Perl]]; работает в режиме [[демон (программа)|демона]], с поддержкой [[chroot]] окружения. Имеет [[web-интерфейс]], управляется через [[telnet]];
| |
− | | |
− | Для [[Microsoft Windows]] и [[Windows NT]]:
| |
− | * [[µTorrent]];
| |
− | * [[BitComet]];
| |
− | * [[BitSpirit]];
| |
− | * [[FlashGet]];
| |
− | * [[GetRight]];
| |
− | * [[Shareaza]] — поддерживает работу с несколькими файлообменными сетями, в том числе и BitTorrent;
| |
− | * [http://www.freedownloadmanager.org/ Free Download Manager];
| |
− | | |
− | Для [[Mac OS]]:
| |
− | * [[XTorrent]];
| |
− | * [http://bitrocket.org/ BitRocket].
| |
− | * [[Transmission]]
| |
− | | |
− | == Примечания ==
| |
− | {{reflist}}
| |
− | | |
− | == См также ==
| |
− | * [[Одноранговая сеть]]
| |
− | * [[Файлообменная сеть]]
| |
− | * [[Файлообменные программы]]
| |
− | * [[Сравнение BitTorrent программ|Сравнение BitTorrent-программ]]
| |
− | | |
− | == Ссылки ==
| |
− | * [http://www.bittorrent.com/ Официальная страница BitTorrent].
| |
− | * {{dmoz|Computers/Internet/File_Sharing/BitTorrent/|BitTorrent}}.
| |
− | * [http://nikito.su/forum Крупнейший открытый BitTorrent].
| |
− | | |
− | {{IPstack|nocat}}
| |
− | {{Хорошая статья|Компьютер}}
| |
− | | |
− | [[Категория:BitTorrent]]
| |
− | [[Категория:Файлообменные сети]]
| |
− | [[Категория:Файлообменные протоколы]]
| |
− | | |
− | [[ar:بت تورنت]]
| |
− | [[bg:Торент система]]
| |
− | [[bs:BitTorrent]]
| |
− | [[ca:BitTorrent]]
| |
− | [[cs:BitTorrent]]
| |
− | [[da:BitTorrent]]
| |
− | [[de:BitTorrent]]
| |
− | [[el:Torrent]]
| |
− | [[en:BitTorrent (protocol)]]
| |
− | [[eo:BitTorrent]]
| |
− | [[es:BitTorrent]]
| |
− | [[fa:بیتتورنت]]
| |
− | [[fi:BitTorrent]]
| |
− | [[fr:BitTorrent]]
| |
− | [[gl:BitTorrent]]
| |
− | [[he:ביטורנט]]
| |
− | [[hr:BitTorrent]]
| |
− | [[hu:BitTorrent]]
| |
− | [[id:BitTorrent]]
| |
− | [[ilo:BitTorrent]]
| |
− | [[it:BitTorrent]]
| |
− | [[ja:BitTorrent]]
| |
− | [[ka:ტორენტი]]
| |
− | [[ko:비트토렌트]]
| |
− | [[ku:BitTorrent]]
| |
− | [[lt:BitTorrent]]
| |
− | [[lv:BitTorrent]]
| |
− | [[ml:ബിറ്റ് ടോറന്റ്]]
| |
− | [[mr:बिटटॉरेंट]]
| |
− | [[ms:BitTorrent]]
| |
− | [[nl:BitTorrent]]
| |
− | [[nn:BitTorrent]]
| |
− | [[no:BitTorrent]]
| |
− | [[pl:BitTorrent]]
| |
− | [[pt:BitTorrent]]
| |
− | [[ro:BitTorrent]]
| |
− | [[sk:BitTorrent]]
| |
− | [[sl:BitTorrent]]
| |
− | [[sq:BitTorrent]]
| |
− | [[sv:Bittorrent]]
| |
− | [[ta:பிட்டொரென்ட்]]
| |
− | [[th:บิตทอร์เรนต์]]
| |
− | [[tr:BitTorrent]]
| |
− | [[uk:BitTorrent]]
| |
− | [[vi:BitTorrent]]
| |
− | [[zh:BitTorrent]]
| |
− | [[zh-yue:BitTorrent]] | |