Обзор протокола одноранговых сообщений .
Клиент может использовать два протокола для обмена информацией с пирами, 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 имеет unchocked его, то он может послать запрос сообщение попросить блок , принадлежащий к одной части он знает LC имеет благодаря битовым сообщениям.
Когда узел получил весь кусок , он может отправить кусок сообщение , чтобы сообщить все эти удаленные сверстникам , так что они обновляют ассоциированные битовые они держат.
Это очень простой обзор, и, конечно, здесь не все подробности предоставлены, например, алгоритм удушения и т. Д. Если вы хотите больше подробностей, проверьте две ссылки, которые я опубликовал выше, в разделе комментариев (как новый пользователь, я могу не более двух ссылок в сообщении).