初期のWindowsネットワークでよく使われていたNetBEUIプロトコルにはルーティング機能がないため、大規模なネットワークでは利用しづらかった。現在ではNetBIOSとTCP/IPを組み合わせたNBTが普及している。
前回は、Windowsネットワークと深い関係があるNetBIOSについて解説した。今回はNetBIOSをベースにして発達したNBTプロトコルについて見ていく。
前回はNetBIOSについて解説したが、もともとNetBIOSは小規模な単一ネットワークセグメント向けのネットワークAPIとして開発されたため、大規模なネットワーク環境で運用するにはかなり機能が不足している。最も大きな問題点は、ネットワークパケットのルーティング機能を持っていない、ということである。
TCP/IPを使ったネットワークでは、複数のイーサネット(無線LANも含む)のセグメント(イーサネットのブロードキャストが届く範囲が1つのセグメントになる)をルーターで相互に接続することにより、大規模なネットワーク(社内ネットワークやインターネットなど)を構築している。
これに対してNetBIOSでは、基本的にはNetBIOS名をブロードキャストすることによって通信相手を認識・特定している。そのため、ブロードキャストが届かないネットワーク(ルーターによって中継されている他のネットワークセグメント)同士のノードでは、お互いに通信することができない。その結果、NetBIOSを使った通信は単一のブロードキャストセグメント内に限定されることになる。これでは大規模なネットワークは構築できない。
そこで、このような制約を避け、別のネットワークセグメント上にあるノード同士で通信させる方法として考案されたのが「NBT(NetBios over TCP/IP)」である。NetBIOSの通信パケットをTCP/IP上に実装することにより、TCP/IPの持つルーティング機能やネットワーク基盤を生かしたまま、アプリケーションレベルではNetBIOS APIをそのまま使えるようにしている。これにより、NetBIOSを利用するアプリケーションはそのままで、複数のセグメントが存在するような大規模ネットワークでも利用できるようになった。NBTプロトコルは、以下のRFCなどで標準として定義されている。
NetBIOSは単なるネットワーク用のAPIセットであり、実際にネットワークケーブル上でやりとりされるパケットの構造やプロトコルについては特に規定はされていなかった。使用するハードウェアに応じてイーサネットやTokenRing、HDLC(いずれもメインフレームコンピューターなどでよく使われていた通信技術)、シリアル回線など、いくつかの通信メディアがサポートされている。
その後NBTなどを導入するときに正式な仕様や下位のプロトコル(トランスポート層プロトコル)の扱いなどが整理された。図にすると次のようになる。
ここではNetBIOSと共に使われる3種類のトランスポート層プロトコルについてまとめておく。
■オリジナルのNetBIOSべースのNetBEUI
NetBIOSが開発された当初に使われていたプロトコルとして「NetBEUI(NetBIOS Extended User Interface)」がある。NetBEUIは小規模な単一ネットワークセグメント向けのプロトコルだ。面倒な事前設定などが不要であり(各PCに重複しないようにIPアドレスを割り当てるといった面倒はない)、コンピューター名さえ付けておけば簡単に相互通信が可能である。DOS時代のMS-NetworksやWindows 9x、Windows NTなどでよく使われていた。
■TCP/IPをベースにしたNBT
TCP/IP上でNetBIOSを利用できるようにしたのがNBTである。TCP/IPの持つルーティング機能や名前解決機能と組み合わせることにより、ルーティングや大規模なネットワーク構成を可能にしている。
■IPX/SPXをベースにしたNBIPX
「IPX/SPX(Internetwork Packet Exchange/Sequenced Packet Exchange)」は、1980年代中頃から1990年代にかけてよく使われた、ノベルのNetWareというネットワークOSで使われていたトランスポート層プロトコルである。このIPX/SPX(もしくは、これと互換な機能を持つように、マイクロソフトによって開発された「NWLINK」)上にNetBIOSサービスを実装した「NBIPX(NetBIOS over IPX/SPX)」は、NetWareを導入していた企業でよく使われていた。
以上のように、さまざまなトランスポート層プロトコル上でNetBIOSが実装されていた。ただし実際にファイル共有サービスなどを受けるためには1つ重要な条件がある。それは、「サーバー側もクライアント側も、同じトランスポート層プロトコルを実装(利用)している必要がある」ということである。ファイルサーバー側にNBTしかインストールしておらず、クライアント側にはNetBEUIしかインストールしていないと(非常に古いWindows OSやMS-DOSシステムではNetBEUIしかインストールされていないことがある)、お互い通信することはできない。
もっとも現在ではTCP/IPが広く普及しているため、NBT以外のプロトコルが使われていることはないだろう。
ファイル共有サービスがどのプロトコルを利用しているかは、ネットワークプロトコルの「バインド(結合状態)」状態を確認すれば分かる。
この画面の例ではNBTだけでなく、NetBEUIやIPX/SPX(NWLink)も使われている。1つのサービス(ファイル共有サービスやクライアントサービス)に複数のプロトコルがバインドされている場合は、それらを指定された優先度に基づいて順番に試し、最初に接続が確立されたプロトコルを使って通信が行われる。
現在のWindows OSではNetBEUIやNWLinkプロトコルは廃止されていて、ファイル共有サービスではNBTか(NetBIOSインターフェースを使わない)TCP/IPの直接接続でのみアクセスするようになっている。例えばWindows XPでは以下のTIPSの方法でNetBEUIプロトコルを追加できたが、現在のWindows 7やWindows 8などではTCP/IPのIPv4かIPv6へのバインドのみが制御可能である。
次の画面はWindows 8.1における同じ詳細設定画面の例である。
もともとのNetBIOSではブロードキャストでのみ名前解決を行っていたため、その動作は単純であった。通信したい相手の名前をNetBIOSでローカルのネットワーク上でブロードキャスト送信すると、その名前を持つノードが応答する、というように動作している。
だがNBTが利用されている環境では名前解決の方法が少し複雑になる。通信したい相手がローカルのネットワーク上だけでなく、ルーターで接続された別のネットワーク上にも存在するからだ。またTCP/IP環境では、通信相手はNetBIOS名ではなく、IPアドレスで指定しなければならない。そのため、NetBIOS名とIPアドレスを関連付ける何らかの仕組みやサービスを用意する必要がある。
この名前解決のためにWindows OSでは、「LMHOSTSファイル」や「WINS」というサービスを用意している。
「LMHOSTS(LAN Manager hosts file)」とは、NetBIOS名とIPアドレスの対応付けを記述したテキストファイルである。UNIXやLinuxでは、/etc/hostsというテキストファイルでIPアドレスとホスト名の対応付けを行っていたが、それをNBT向けに拡張したのがLMHOSTSファイルである。Windows OSではLMHOSTSファイルを「%windir%\System32\drivers\etc」というフォルダーに保存することになっている。NBTで名前を検索させると、このファイルからNetBIOS名に対応するIPアドレスを見つけ、そのTCP/IPノードと通信が行われる。
※lmhostsファイルの例
C:\>cd C:\Windows\System32\Drivers\etc ……etcフォルダーへ移動する。UNIXやLinuxの/etcに相当するフォルダー
C:\Windows\System32\Drivers\etc>dir ……ファイルを確認する
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は 2631-970C です
C:\Windows\System32\Drivers\etc のディレクトリ
2013/08/22 17:17 <DIR> .
2013/08/22 17:17 <DIR> ..
2013/08/22 15:13 824 hosts ……サンプルのhostsファイル。必要なホストを自分で追加してもよい
2015/01/07 11:03 291 lmhosts ……lmhosts.samファイルをコピーして自分で作成したlmhostsファイル
2013/08/22 17:16 3,683 lmhosts.sam ……サンプルのlmhostsファイル。これを参考にlmhostsファイルを作成すること
2013/08/22 15:13 407 networks
2013/08/22 15:13 1,358 protocol ……プロトコル一覧
2013/08/22 15:13 17,463 services ……TCPやUDPのサービスポート一覧
5 個のファイル 24,026 バイト
2 個のディレクトリ 126,765,182,976 バイトの空き領域
C:\Windows\System32\Drivers\etc>type lmhosts ……内容を確認してみる
102.54.94.97 rhino #PRE #DOM:networking #net group's DC
102.54.94.102 "appname \0x14" #special app server
102.54.94.123 popular #PRE #source server
102.54.94.117 localsrv #PRE #needed for the include
※この例は、元のlmhosts.samファイル中で定義されていたもの。
・lmhostsファイル中には、IPアドレスとNetBIOS名、その用途などを定義する
・固定IPアドレスを持つWindowsのサーバーOSなどを登録しておくのが一般
・「#PRE」を付けるとNetBIOSキャッシュにプリロードされ、素早く検索できる
・「#DOM」はNTドメインで使われるドメインコントローラーを指定するために使われる
LMHOSTSファイルでは、NetBIOS名とTCP/IPアドレスの「静的な」関連付けを定義しているが、一般的にTCP/IPではDHCPなどを使って動的なIPアドレス割り当てを行うのが普通である。そこでNetBIOS名とIPアドレスの関連付けを動的に管理する「NBNS(NetBIOS Name Server)」というサービスが開発された。これはコンピューター名(FQDN名)とIPアドレスの動的な管理を行うDNSサービスと同じような機能を持つ。
サーバー系のWindows OSには、このNBNSを実装したものとして「WINS(Windows Internet Name Service)」というサービスが用意されている。NBTを利用するクライアントは起動時にWINSサーバーに自分自身のNetBIOS名とIPアドレスを登録しておく。そして他のNetBIOSノードを検索する場合には、まずWINSサーバーに問い合わせを行うと、そのIPアドレスが分かるという仕組みだ。WINSサーバーのアドレスは、通常はDHCPサービスでクライアントに配布・設定する。
なおNetBIOS名には階層構造はないため、重複したNetBIOS名(コンピューター名)を付けないように注意する。1台のWINSサーバーで社内の全てのネットワーク(上のコンピューター)の名前解決を行おうとすると、同じ名前のコンピューターがあった場合に名前解決に失敗することがある。
以上で述べたように、NetBIOSの名前解決には「ブロードキャスト」「LMHOSTSファイル」「WINSサーバー」という3つの方法がある。またTCP/IPにおける標準的な名前解決手段である「DNSサーバー」と「hostsファイル」も合わせると、さらに多くの方法が利用できる(実際にはこれ以外にもIPv6でのみ有効な名前解決手段もある。関連記事参照)。
これら複数の名前解決手段をどのように組み合わせて、どの順番で利用するかはシステムの構成によって変わる。Windows OSではこれを「NetBIOSノードタイプ」といい、「b(broadcast)ノード」「p(point-to-point)ノード」「m(mix)ノード」「h(hybrid)ノード」の4種類がある。具体的には次のようになっている。
4種類あるノードタイプのうち、どれを使うかはシステムの構成によって変わる。デフォルトは「bタイプ」か「hタイプ」だが(WINSサーバーの指定があればhタイプ、なければbタイプとなる)、DHCPなどで、IPアドレスやWINSサーバーアドレスなどと共にクライアントPCに設定することもできる。現在のノードタイプはコマンドプロンプト上で「ipconfig /all」コマンドを実行すれば確認できる。
C:\>ipconfig /all ……TCP/IPの構成情報を表示させる
Windows IP 構成
ホスト名. . . . . . . . . . .: PCWIN81UPROX1
プライマリ DNS サフィックス .:
ノード タイプ . . . . . . . .: ハイブリッド ……NetBIOSノードタイプ
IP ルーティング有効 . . . . .: いいえ
WINS プロキシ有効 . . . . . .: いいえ
DNS サフィックス検索一覧. . .: example.jp
イーサネット アダプター Ethernet0:
接続固有の DNS サフィックス . . .: example.jp
……(以下省略)……
今回はNetBIOSの下位プロトコル、特にNBTについて解説した。現在ではNBT以外のプロトコルを使うことはほとんどないだろうが、その仕組みをよく理解していないと、特に古いWindowsクライアントとの接続などで問題になることがある。次回はより上位のプロトコルであるSMBについて解説する予定である。
Copyright© Digital Advantage Corp. All Rights Reserved.