2015-07-08 8 views
1

Я работаю над реализацией еще одного клиента bittorrent и в это время борюсь с DHT. Он реализован в соответствии с этой спецификацией http://www.bittorrent.org/beps/bep_0005.html, но, начав отладку, я заметил, что ответы других узлов в сети различаются.Каковы последние рекомендации по внедрению DHT-решений Bittorrent?

Например, find_node должен возвращать информацию о целевом узле или 8 ближайших узлах. Большинство узлов отвечают 34 ближайшими узлами и обычно только 1 - 3 узлами из этих 34 успешно отвечают на последующий запрос ping.

Есть ли другой документ с лучшей рекомендацией по внедрению? Может быть, уже доказано, что использование 15-минутного интервала для изменения состояния узлов до сомнительного неэффективно, и мне нужно использовать 10 или другой номер? Где я могу найти лучшие современные предложения?

Есть еще одна странная вещь. Узлы Bootstrap, такие как router.bittorrent.com, отвечают с еще более близкими узлами, и обычно длина буфера свойств «узлов» BDictionary не делится на 6 (информация о компактном узле: 4 для IP и 2 для порта). На данный момент я просто отсекаю буфер на ближайшей делимой до 6 длины, но все это странно. Кто-нибудь знает, почему это может случиться?

ответ

2

спецификация говорит (курсив мой):

Когда узел получает запрос find_node, он должен реагировать с ключом «узлами» и значением строки, содержащей компактной информацией узла для [. ..]

Далее вниз:

Контактная информация для узлов кодируется как 26-байтовой строкой. Также известен как «Компактная информация о узле» 20-байтовый идентификатор узла в сетевом порядке байтов имеет компактную информацию о IP-адресе/порте, конкатенированную до конца.


Кроме того, вы должны прочитать оригинальную Kademlia бумагу, так как битторрент BEP основывается на концепции, описанные в нем, и не включает более глубокие объяснения этих понятий.

Вы также можете прочитать несколько несколько расширений, которые более или менее де-факто стандартом для большинства реализаций Теперь http://libtorrent.org/dht_extensions.html

И прочитал другой DHT, связанные с BEPs, некоторые из них довольно широкое распространение и изменение/уточнить поведение, описанное BEP-5, но, как правило, с обратной совместимостью.


Например, find_node должен возвращать либо данные узла мишени или 8 ближайших узлов

Узлы будет возвращать переменное количество записей. Может быть больше 8. Или меньше.

 Смежные вопросы

  • Нет связанных вопросов^_^