Kademlia は XOR メトリックを使用します。とりわけ、これにはいわゆる「単方向」特性があります (= 任意の点 x と距離 e>0 に対して、d(x,y)=e となる点 y が 1 つだけ存在します)。
最初の質問は一般的な質問です。メトリックのこのプロパティは Kademlia の機能にとって重要ですか、それとも特定のノードからの圧力を明らかにするのに役立つだけのものですか (元の論文が示唆しているように)。言い換えれば、メトリックを変更したい場合、「一方向」のメトリックも付属することがどれほど重要なのでしょうか?
2 番目の質問は、メトリックの具体的な変更に関するものです。ノード識別子 (アドレス) が X ビットの数値であると仮定すると、次のメトリックのいずれかが Kademlia で機能しますか?
d(x,y) = abs(x-y)
d(x,y) = abs(x-y) + 1/(x xor y)
最初のメトリックは単に数値の差を提供するため、ノード ID 100 の場合、ID 90 と 110 のノードは同じ距離にあるため、これは単方向のメトリックではありません。2 番目のケースでは、1/(x xor y) を追加することを修正します。ここで、(x xor y) は単方向であることがわかっているため、1/(x xor y) を使用するとこのプロパティが保持されます。
したがって、ノード ID 100 の場合、ノード ID 90 はd(100,90) = 10 + 1/62
であり、ノード ID 110 からの距離は ですd(100,110) = 10 + 1/10
。