Windows NT における名前解決のアルゴリズム

[samba-jp:03895]において足立@東芝さんが投稿された記事を、 堀田@諫早市 が多少修正して HTML 化したものです。 誤植などのご指摘は堀田の方で受け付けますが、 「ここは実際と違うのではないか」などのご指摘は、 ご面倒ですが Samba-jp メーリングリストの方でお願いいたします。 メーリングリストの参加方法は こちらにあります。


あまり意味があるかどうかわかりませんが、Windows NTに おける名前解決のアルゴリズムを載せておきます。 もっとも、本当はWindows 9Xベースのものの方が、圧倒的に 利用シーンが多いと思うのですが、ちょっと手元に参考資料 が無いので、ご容赦ください。

参考文献:

Windows NT 4.0 および 3.5x(!?) では NetBIOS リソースの所在 を確認するために以下の方法を採ることができます。

これらは、最終的にリソースを提供するマシンの IP アドレスを 取得するための方法であり、これらの総称を一般に「名前解決」 と呼びます。 数種類ある名前解決の方法がどのような順序で行われるかというのは、 コンピュータの種類によって異なりますが、Windows NT では一般に以下の種類をサポートし、それぞれ「ノード」と呼ばれます。

ノード種別説明
B ノード ブロードキャストを使用して名前解決を行う
P ノード WINS サーバを照会することにより名前解決を行う
M ノード まず B ノードを使用し、必要に応じて P ノードに切り替わる
H ノード まず P ノードを使用し、必要に応じて B ノードに切り替わる。 ただし、WINS サーバからの応答がない場合にも定期的にポーリングを行い、 WINS サーバからの応答があった時点で P ノードに切り替わる。
Microsoft 拡張 標準のノードに加え、ローカル LMHOSTS ファイル、 または WINS プロキシと Windows Sockes gethostbyname() 呼び出しの組み合わせを用いる。
Windows Sockes gethostbyname() 標準 DNS とローカル HOSTS ファイルを使用する

これらのノードの組み合わせや順序は、 以下のようなフローチャートで表すことができます。

まず、ホスト名の長さで処理が分かれます:

ノード種別により処理が分かれます:

(作ってから知ったのですが、 こちらの方が数段わかりやすいかもしれません(;_;))。