Аккордовый протокол. Распределенная хеш-таблица (DHT). Пиринговый. (P2P), - PullRequest
3 голосов
/ 22 января 2012

Я пытаюсь реализовать этот протокол: http://en.wikipedia.org/wiki/Chord_(peer-to-peer)

Что я понял из этого, так это то, что каждый узел, который присоединяется к «кругу», размещается в произвольном месте внутри круга, в зависимости от хэшированного значения IP + порта. Но мой вопрос ... как я могу получить целочисленное значение (индекс) для каждого узла? Как назначить уникальное хеш-значение порта ip + уникальному индексному номеру ... Некоторые функции проверяют, находится ли, например, идентификатор в интервале (например, id> n & id <= successor), поэтому кажется, что мне нужен уникальный int для каждого узла, я не могу просто использовать значение хеша. Есть предложения? </p>

Ответы [ 2 ]

2 голосов
/ 22 января 2012

Вы можете скачать реализацию Chord от создателей (это бесплатно)

http://pdos.csail.mit.edu/chord/#downloads

(Извините, вы только что хотели работать с DHT!)

[править] Я считаю, что подход, основанный на хэше, является лучшим способом, если вы хотите избежать именования коллизий.Однако, если вам нужно использовать INT, вы можете внести небольшие накладные расходы, если ваш DHT будет управлять коллизиями имен и работать с ними в той или иной форме.Затем, чтобы убедиться, что у вас есть представление int, вы можете просто умножить два последних адресных пространства IP-адреса.например, ip = 192.168.2.14 идентификатор будет 28.

Это, очевидно, делает вашу систему менее надежной.По какой причине вы не можете использовать хеши?

[/ edit]

0 голосов
/ 20 декабря 2015

Разве вы не можете просто преобразовать хеш-значение в целое число?

Например, в python после взятия хэша sha1 (ip-адрес + порт) вы получаете 20 байтов (160 бит). (ip-адрес - это строка, а порт - int)

Конвертировать байты в int. Вы получаете число от 0 до 2 ** 160 - 1. Например,

Пусть data_in_bytes будет значением хеш-функции.

(int) .from_bytes (data_in_bytes, byteorder = 'big') - целочисленное значение.

Одним из способов измерения расстояния между двумя значениями хеш-функции является использование оператора XOR. int1 ^ int2 - расстояние между 2 узлами на окружности.

...