ANDNA-温sホストネームサービス



みなさんこんにちは! これは、最新のインターネットに代わるP2Pを作成するプロジェクトであるNetsukukuに関する2番目の記事です。



今回は、ANDNA(A Netsukuku Domain Name Architecture)-IPアドレスの名前を解決するサービスについて説明します。これは、DNSのローカルアナログであり、プロトコルと互換性のあるプロトコルです。



それが何であるかを知らない人のために、私は最初の部分を読むことをお勧めします。





まえがき





前の記事で、お尻のインスピレーションの爆発の結果として、ルーティングとトレースパケットのタイプについて話すことを約束しました。 ただし、このトピックでは、マニュアルのかなり徹底的な再考と思慮深い照明が必要であり、十分な時間がありませんでした。 そのため、ネームサービスについて理解するのが簡単になったので、ネームサービスについて書くことにしました。



一般的に、2番目の部分は判明したとおりに判明しました:)



基本原則





現代のインターネットでは、特定のネットワークノードに到達する2つの方法があります。 1つは、ホストのIPアドレスを直接指定することです。 2番目の方法は、名前でノードをアドレス指定することです。 良い名前はほとんどなく、誰もが手に入れたいと思っています。 したがって、名前の割り当てと使用は法律で規制する必要があります。 これを行うために、ゾーンの作成プロセスを管理し、個々の国のレジストラに権限を委任するICANN組織があります。



ネツククの場合、物事は異なります。 ホストアドレスは変数であるため、名前をIPに直接バインドすることはできません。 ネットワークは分散化されており、通常は管理されていません。 したがって、名前を登録するプロセスへのアプローチもこれらの要件を満たす必要があります。



すべてのノードには、名前を受け取るための同等の権限があります。 唯一の制限は、1つのノードに関連付けられた名前の数に関連しています(サイバースクワットを防ぐため)。 それ以外の場合、ユーザーは最大500文字の名前を自由に選択できます。 想像力があれば、名前が不足することはありません:)



Netsukukuネットワーク全体と同様に、ANDNAサービスは分散ベースで構築されています。 したがって、単一のデータウェアハウスはありません。 情報はネットワークのすべてのノードに広がります。 繰り返しの複製により、作業の信頼性と耐障害性が保証されます。 計算によれば、各ノードのベースのボリュームは、最悪の場合でも、300 Kbを超えてはなりません。そのため、使用されるリソースを最小化するための要件が​​ここで観察されます。



ホスト名を登録する





あるノードXが「habr.ru」という名前を登録したいとします:











これを行うために、h( "habr.ru")= 0x11223344に代わってハッシュを計算します。 ハッシュの数値表現は、ストレージと見なされるノードのアドレスとして解釈されます。 これは、ノード(ノードH)のいわゆるハッシュです。 さらに、ノードのハッシュはいくつかのチェック(後述)を実行し、名前とアドレスの関連付けをデータベースに入力します。 その後、Xノードは名前の所有者と見なされ、名前が失われることはありません。



「habr.ru」という名前のノードのアドレスを知りたいノードは、同じ方法でハッシュを計算し、ノードH(または、同じグループからランダムに選択されたネイバー)にリクエストを行います。



もちろん、アドレスの人口が少ない場合、ハッシュの直接的なヒットは非常にまれなので、いくつかの仮定が行われます。



•アドレスHのノードが存在する場合、それが使用されます。

•そうでない場合、Hアドレスのgnodeが使用されます(11.22.33.x)。

•そのようなグループが存在しない場合、目的のグループに最も近い番号のグループが取得されます(たとえば、11.22。34 .x)。 このようなグループは、丸められたgnodeと呼ばれます。



これは、サービスの通常の運用を決して妨害しないことに注意することが重要です。 ネットワーク内のどこかに新しいノードが現れると、サービスは条件の変化に自動的に適応します。



アクセス制御





何らかの良い名前を登録したので、当然、任意のノードがそれを取得することは望ましくありません。 これはデジタル証明書によって提供されます。 権利管理は相互作用のすべての段階で実行され、非常に信頼できます。



新しい名前を登録するとき、開始ノードは暗号化キーのペアを生成し、他の登録情報の中でも公開キーをドメインに送信します。 このキーは、指定された名前の存続期間中、ハッシュノードによって保存されます。 所有者の行動は、適切なデジタル署名によって確認する必要があります。 したがって、ホストのIPアドレスを変更する場合、または名前の登録を拡張する場合、ホストホストはまずその権利を確認する必要があります。



デフォルトでは、ノードのハッシュは登録後30日間名前情報を保存します。 その後、名前を更新するための名前の所有者のアクションが必要です。 少なくとも月に一度サイトがネットワークに表示される場合、あなたの名前はあなたのもののままです。



この期間を過ぎても登録が更新されない場合は、次の人に名前が与えられます。 さらに、「ライブキュー」のメカニズムがここで提供されます。



登録キュー





特定の名前に関連付けることができるのは、常に1つのノードのみです。 ただし、自分で登録しようとすることで、誰でも名前を申請できます。 ハッシュノードは、登録の5つの候補のリストを保存します。このリストは、要求が受信された順に入力されます。



名前が解放されるとすぐに、ノードのハッシュは最上位レコードを削除し、新しい所有者に名前を再登録します。 要するに、通常のアプローチ-早く起きた人は誰でもスリッパです。



名前制限





正式には、ノードには任意の数の名前を付けることができます。 ただし、実用上の理由から、256に等しい名前の数に制限が導入されています。16は屋根よりも高かったようですが、著者は異なる意見を持っているようです:)



ハッシュノードに加えて、いわゆるいわゆる登録も参加します。 カウンターノード-カウンターノード。 このノードには、ソースノードに関連付けられた名前の数が格納されます。 次のように機能します。











登録要求を受信すると、ノードHのHハッシュは、ノードXの公開キー「ABC」からハッシュを計算します。これは、すでにカウンターノードCのアドレスとして処理されます。ノードのハッシュは、登録ノードで。



この量が制限を超えていない場合、カウンターは1増加し、登録が続行されます。 そうでない場合、ドメインはノードへの登録を拒否されます。



情報の単一のリポジトリがなく、誰がカウンタノードとして使用されるかが事前にわからないため、このメカニズムを侵害することは事実上不可能です。



実際、クラッカーのタスクは、既知のハッシュ(アドレス)によってキーペアを生成するタスクに削減されます。 そして、これはすぐに2つの困難なタスクにつながります:a)ハッシュ関数の衝突を見つける(元のブロックを復元する)と、b)このブロックから秘密鍵を構築する(公開鍵)、これは二重に非現実的です。



分散クエリキャッシング





特定の名前をアドレスに解決する各ノードは、キャッシュに結果を保存します。 このキャッシュは、周囲の誰でも読み取り可能です。 ノード検索を実行するノードXは、実際には、ランダムに選択された同じグループに隣接Yを要求します。 2つのオプションが可能です。



オプション1:ネイバーはキャッシュ内のエントリをチェックし、ノードXに返します。









オプション2:キャッシュエントリがありませんでした。 ノードYは通常の方法で解像度を生成します。









このアルゴリズムの結果、サービスの速度が向上し、一般的な名前に対応するハッシュノードの負荷が軽減されます。



名前解決の逆引き





ノードXがノードYに関連付けられているすべての名前を知りたい場合、ノードYにこれについて単純に尋ねます:)











冗長性





ネットワーク内のノードはいつでも切断できるため、情報の保存に冗長メカニズムを提供する必要があります。 これは、ノードのハッシュを含むグループのレベルで実装されます。











新しい名前を登録すると、グループのすべてのノードに情報が入力されます。つまり、ハッシュノードに近いノードのグループ全体に情報のコピーが含まれます。 したがって、ノードのメインハッシュを無効にすると、グループ内のすべてのノードが質問に答えることができます。



名前が解決されると、ハッシュを計算するノードは任意のグループハッシュノード、つまりabcxを参照するため、グループ内のすべてのノードが均一に要求を処理することがわかります。



同様のメカニズムがカウンターのグループに適用されます。



DNSの互換性





ANDNAサービスは、従来のDNSとの互換モードで動作できます。 これを行うには、ユーザーのノードで「ラッパー」を起動し、ポート53でリッスンし、リクエストをネットワークにリダイレクトします。 これにより、既存のソフトウェアを変更することなく、Netsukukuネットワークで動作させることができます。



まとめ





そのため、この記事では、ホスト名の保存と解決に使用されるANDNAサービスについて検討しました。 このサービスは、Netsukukuネットワーク全体のイデオロギーと一致しており、分散されており、フォールトトレラントであることがわかりました。 情報を保存しても、各ノードに大きな迷惑をかけることはないため、問題も発生しません。 どんな予算のルーターでも仕事をするでしょう。



おわりに





結論として、この記事は実際にはドキュメントの無料の改定であることに注意したいと思います。 著者は、一般に、サービスアーキテクチャはよく開発されているが、まだ完全にはほど遠いことに注意します。 特に、冗長性を導入するメカニズムに多少混乱しています。



上記のように、冗長性は、ノードのハッシュのグループ内の情報の配布によって達成されます。 一方では、これにより、ノード間で負荷を簡単に分散し、ノードをランダムに選択できます。



一方、グループ全体が突然ネットワークから切断された場合の対処方法は完全には明確ではありません。 ネットワークの残りの部分には、名前を解決できる単一のノードはなく、そのハッシュは切断されたグループに当てはまることがわかります。 おそらく、その解決策は、ハッシュグループの名前の所有者による定期的なポーリングのメカニズムで求められるべきです。 突然完全に使用できない場合は、名前を再登録してください。 その後、接続が復元されると、グループのハッシュは常に一致します(キーを比較し、名前の両方のコピーの所有者が同じであることがわかります)。



シムについては、立ち去るようお願いします。 前の記事と同じくらいこの記事を楽しんでいただけたことを願っています:)



PS:次回、ルーティングの問題、QSPNアルゴリズム、およびそれに関連する問題についてさらに詳しく説明します。



PPS:別の質問:このレベルの詳細は記事に適していますか? 掘り下げてみる価値があるのでしょうか? またはその逆で、実装よりもアイデアに重点を置いていますか? 後者はほとんど存在しませんでしたが。



チャートは、 smartdrawエディターを使用して作成されます。

iconfinder.netから取得した個別のグラフィック要素



All Articles