Обзор протокола одноранговых сообщений.
Клиент может использовать два протокола для обмена информацией с пирами, TCP или uTP (по UDP). Эти данные соответствуют спецификации протокола bittorrent, сообщения однорангового узла.
Таким образом, программно должно быть установлено соединение между двумя клиентами. После того, как соединение установлено (через TCP или uTP), клиент инициирует битрент-квитирование, которое получило информацию удаленного узла (ip & port) с трекера или через DHT. Это рукопожатие содержит info_hash, который идентифицирует торрент, о котором будет происходить соединение.
Давайте сначала посмотрим, как данные Torrent усекаются по протоколу. Часть - это часть данных, которыми вы делитесь через сеть. Не путать с блоком, который является частью куска, завернутого в пакет. Блок является зернистость делить кусок через пакеты, а часть является зернистость делить Torrent через коллег.
Когда соединение начинается, оба клиента (локальный клиент, которого я назову LC, и удаленный клиент, RC ) блокируются и не заинтересованы. Choked означает «Я не буду отвечать ни на одно из ваших сообщений, слишком занят, но я мог бы принять их во внимание». Поэтому Unchocked означает "Я отвечу на ваши сообщения". Заинтересованный означает, конечно, что я хотел бы некоторые кусочки у вас есть. Следовательно, состояние соединения между двумя одноранговыми узлами может быть определено с помощью этих четырех состояний: LC_chocked?, LC_interested?, RC_chocked?, RC_interested? Чтобы предупредить RC, что я (не) забит или (не) заинтересован, я должен отправить ему (не) заинтересованные и (не) забитые сообщения, и взаимно.
Чтобы сообщить друг другу, какие фрагменты у них есть, они могут отправить сообщение битового поля сразу после рукопожатия. Как следует из названия, это битовая строка, где каждый бит установлен в 1
если у клиента есть этот специфический фрагмент, в противном случае 0
.
Таким образом, если LC заблокирован и заинтересован, а RC разблокировал его, то он может отправить сообщения с запросом, чтобы запросить блок, принадлежащий одному фрагменту, который, как он знает, LC имеет благодаря сообщению битового поля .
Когда узел получил весь кусок, он может отправить кусок сообщение , чтобы сообщить все эти удаленные сверстники , так что они обновляют соответствующие битовые они держат.
Это очень простой обзор, и, конечно, здесь не все детали, такие как алгоритм удушения и т. Д ... Если вам нужна более подробная информация, проверьте две ссылки, которые я разместил выше, в разделе комментариев (как новый пользователь, я не могу иметь более двух ссылок в сообщении).