Появилась потребность реализовать свой простенький BitTorrent клиент.
Найденная документация BitTorrent протокола описывает принцип общения с трекером и подобные вещи, но к сожалению не касается механизмов работы клиентов друг с другом.
Таких как создание соединения между пирами (как 2 пира создают соединение если оба за NAT), описание протоколов передачи файлов между пирами.
UDP соединения между пирами.
Здравствуйте, evger, Вы писали:
E>Появилась потребность реализовать свой простенький BitTorrent клиент. E>Найденная документация BitTorrent протокола описывает принцип общения с трекером и подобные вещи, но к сожалению не касается механизмов работы клиентов друг с другом. E>Таких как создание соединения между пирами (как 2 пира создают соединение если оба за NAT), описание протоколов передачи файлов между пирами. E>UDP соединения между пирами.
Если оба за NAT, то никак, если только хотя бы с одной стороны port forwarding не налажен. Многие клиенты умеют его себе сами налаживать, если на роутере включен UPnP, но это уже за пределами битторрентного протокола.
Насчет UDP, поищите сами там вокруг, мне лень
Имейте ввиду, я слышал где-то краем уха, что ранняя опубликованная спецификация это не то, что фактически реализовано в микроторренте. Вроде правильная спецификация (или поправки к ранней) тоже не являются секретом.
А зачем вам UDP? Его незначение — не быстрее качать, а наоборот, медленнее качать, чтобы не мешаться "нормальному" траффику.
Огромное спасибо за спецификацию, буду изучать.
По поводу UDP, мне наоборот казалось чтобы увеличить скорость закачки — ну это не суть.
Для меня не понятно, большинство компьютеров в сети не имеет реальных статических IP, т.е не может принимать входящие соединения, но тем не менее я вижу большое количество пиров, неужели у них всех статичный внешний IP, может есть какая-то хитрость с проксированием двух пиров через другие?
Что касается UPnP, понимаю что за пределами протокола, но как раз протокол то мне понятен, не понятен принцип работы клиента.
Еще интересный момент, мой uTorrent к примеру как-то делает соединения без VPN (у меня корбина) между клиентами в одной подсети.
Т.е клиенты передают на треккер все свои IP в том числе локальные, с VPN, без VPN а треккер выдает конкретному пиру уже
тот который считает удобнее для него? Или это как раз задача DHT?
Где можно найти такого плана информацию, именно то, как клиенты BitTorrent связываются друг с другом.
Здравствуйте, Pzz, Вы писали:
Pzz>Здравствуйте, evger, Вы писали:
E>>Появилась потребность реализовать свой простенький BitTorrent клиент. E>>Найденная документация BitTorrent протокола описывает принцип общения с трекером и подобные вещи, но к сожалению не касается механизмов работы клиентов друг с другом. E>>Таких как создание соединения между пирами (как 2 пира создают соединение если оба за NAT), описание протоколов передачи файлов между пирами. E>>UDP соединения между пирами.
Pzz>http://bittorrent.org/beps/bep_0003.html — спецификация базового протокола Pzz>http://bittorrent.org/beps/bep_0000.html — ссылки на остальные спецификации
Pzz>Если оба за NAT, то никак, если только хотя бы с одной стороны port forwarding не налажен. Многие клиенты умеют его себе сами налаживать, если на роутере включен UPnP, но это уже за пределами битторрентного протокола.
Pzz>Насчет UDP, поищите сами там вокруг, мне лень
Pzz>Имейте ввиду, я слышал где-то краем уха, что ранняя опубликованная спецификация это не то, что фактически реализовано в микроторренте. Вроде правильная спецификация (или поправки к ранней) тоже не являются секретом.
Pzz>А зачем вам UDP? Его незначение — не быстрее качать, а наоборот, медленнее качать, чтобы не мешаться "нормальному" траффику.
Здравствуйте, evger, Вы писали:
E>Для меня не понятно, большинство компьютеров в сети не имеет реальных статических IP, т.е не может принимать входящие соединения, но тем не менее я вижу большое количество пиров, неужели у них всех статичный внешний IP, может есть какая-то хитрость с проксированием двух пиров через другие?
Что бы принимать входящие соединения статический IP совсем не нужен, да и без реального можно обойтись если настроен port forwarding. А это уже весьма значительная часть интернета (исследований не проводил ).
E>Что касается UPnP, понимаю что за пределами протокола, но как раз протокол то мне понятен, не понятен принцип работы клиента. E>Еще интересный момент, мой uTorrent к примеру как-то делает соединения без VPN (у меня корбина) между клиентами в одной подсети. E>Т.е клиенты передают на треккер все свои IP в том числе локальные, с VPN, без VPN а треккер выдает конкретному пиру уже E>тот который считает удобнее для него? Или это как раз задача DHT?
Вроде DHT, да.
E>Где можно найти такого плана информацию, именно то, как клиенты BitTorrent связываются друг с другом.
Ну... Например в исходниках
RT>Что бы принимать входящие соединения статический IP совсем не нужен, да и без реального можно обойтись если настроен port forwarding. А это уже весьма значительная часть интернета (исследований не проводил ).
Ну рассмотрим к примеру стандартную схему, я сижу за натом на моем роутере я могу настроить форвард.
Но мой роутер за натом провайдера, у него какой нить айпи типа 10.81.хх.хх. Как я могу принять входящее соединение? Надо же на стороне провайдера настроить форвард?
Или я сижу под впн, мой внешний ip обычно публичный, как я могу настроить форвард порта на мой комп?
RT>Ну... Например в исходниках
Спасибо, сейчас смотрю сорсы transmission, это тоже гляну.
Здравствуйте, evger, Вы писали:
E>Для меня не понятно, большинство компьютеров в сети не имеет реальных статических IP, т.е не может принимать входящие соединения, но тем не менее я вижу большое количество пиров, неужели у них всех статичный внешний IP, может есть какая-то хитрость с проксированием двух пиров через другие?
Большинство компьютеров в сети имеют динамические, но при этом вполне реальные IP-адреса. Чтобы принимать входящие соединения, пользователю приходится настраивать port forwarding на роутере. Тем, кто этого не сделал, приходится довольствоваться исходящими соединениями. В том же положении находятся бедолаги, у которых адреса совсем серые.
Между прочим, не надо думать, что провайдеры полностью игнорируют существование битторрента в природе. Дело в том, что с одной стороны, битторрент съедает 40-60-80% провайдерского траффика (по разным оценкам), что для провайдера заметно дорого. С другой, именно битторрентным пользователям можно впаривать всякие там дорогие тарифы с большой скоростью.
Разные провайдеры относятся к этой проблеме по-разному. Одни, негласно, стараются торрентщикам всячески осложнить жизнь, чтобы они разбежались и не тратили провайдерские денежки. Другие, наоборот, торрентщикам не мешают, в надежде, что получат таким образом больше клиентов, да еще и с дорогими тарифными планами. Третьи, таких пока немного, пытаются как-то направить торренты в удобное для них русло. Например, используют ретреккеры в надежде локализовать траффик (держать большую часть траффика внутри сети провайдера, экономя на внешнем траффике).
E>Что касается UPnP, понимаю что за пределами протокола, но как раз протокол то мне понятен, не понятен принцип работы клиента. E>Еще интересный момент, мой uTorrent к примеру как-то делает соединения без VPN (у меня корбина) между клиентами в одной подсети. E>Т.е клиенты передают на треккер все свои IP в том числе локальные, с VPN, без VPN а треккер выдает конкретному пиру уже E>тот который считает удобнее для него? Или это как раз задача DHT? E>Где можно найти такого плана информацию, именно то, как клиенты BitTorrent связываются друг с другом.
Корбина использует собственный ретрекер. Если вы, сидя в корбине, скачаете с torrents.ru торрент, в нем будет прописано два треккера. Один — http://bt.torrents.ru/...,
другой — http://retracker.local/.... Корбиновский DNS резолвит retracker.local в адрес, на котором у них стоит ретреккер, а он в свою очередь сводит локальных клиентов между собой по их внутренним адресам. Работает это (в корбине) из ряда вон плохо, поэтому все нормальные люди прописывают retracker.local в своем /etc/hosts или эквиаваленте во что-нибудь типа 127.1