第18回 NetBIOS over TCP/IPプロトコル(その1)基礎から学ぶWindowsネットワーク(2/3 ページ)

» 2004年05月20日 00時00分 公開

 NBTとは、NetBIOS over TCP/IPというプロトコルを省略して呼ぶときの呼称である。当初はNetBEUIというプロトコル名に合わせて、TCPBEUIとかNBTCP、NetBTなどと呼ばれていたこともあるようだが、現在ではNBTという呼び方にほぼ統一されているので、本稿でもNBTと呼ぶことにする。NBTの詳細な機能やプロトコルは、RFC1001RFC1002で定義されているので、必要ならば参照してほしい。RFC1001の「PROTOCOL STANDARD FOR A NetBIOS SERVICE ON A TCP/UDP TRANSPORT: CONCEPTS AND METHODS」では、NBTの基本的な機能やサービスの概要などが定義されており、RFC1002の「PROTOCOL STANDARD FOR A NetBIOS SERVICE ON A TCP/UDP TRANSPORT: DETAILED SPECIFICATIONS」ではNBTの詳細なプロトコル(パケット構造)や動作などが定義されている。

NBT = TCP/IP上のNetBIOS

 NBTはTCP/IP上にNetBIOS APIを実装したものであり、その一番の特長は、TCP/IPネットワークとの親和性が高いということである。

 前回解説したNetBEUIは、ルーティングが困難なプロトコルであった。これはNetBIOSのせいではなく、NetBEUIの下位にあるLLCプロトコルがそのような機能を持っていないからである。もともとLLCは、OSI参照モデルでいうと第2層のデータリンク層(MAC副層の上位層)に属するプロトコルなので、同一ネットワーク媒体を越えてルーティングすることができないのは当然である。

 これを改善し、広く普及しているTCP/IP上でNetBIOSサービスを利用可能にしたのがNBTというプロトコルである。TCP/IPを利用することにより、企業内などのネットワークをTCP/IPに統一することができ、管理上も望ましいといえる。TCP/IP以外のネットワーク・プロトコルを許可するとなると、ルーティングなどの管理の手間が何倍にもなり、高機能で高価なネットワーク機器が必要になったり、トラブル・シューティングが困難になったりするという問題があるからだ。

 TCP/IP上でNetBIOSが利用可能になれば、NetBEUIではできなかった、ルータを越えた、より大きなネットワークを構築することができる。家庭内SOHOを除けば、現在ではルータを使って、より大きなネットワークを構築するのは普通のことである。このようなネットワーク環境でも、ルータを超えてNetBIOSサービスを利用することができれば、例えば別の部署に置かれているWindows OSのファイル・サーバを参照したり、全社的にシステムを管理したりすることも可能となる。もしNetBEUIしか利用できなければ、同一のLANセグメント(イーサネット・セグメント)に属するコンピュータ同士でしかアクセスできないし、こうなると、各セグメント単位に管理用コンピュータや管理者を配置する必要があるなど、非常に使いづらいネットワークになってしまうだろう。

 NetBIOSをTCP/IP上で利用できるようにするということは、このような問題点を取り除き、TCP/IPで統一されたネットワークに統合できるというメリットがある。

NBTにおける通信モデル

 ではどのようにしてTCP/IP上でNetBIOSサービスを利用可能にしているのであろうか。

 まず典型的なNetBIOSによる通信のメカニズムについて考えてみる。NetBIOSでは、「NetBIOS名」を使って通信相手や接続するサービスを特定している。具体的には、通信相手を検索するために、NetBIOS名前解決サービスを使って、NetBIOS名をブロードキャストする。ブロードキャストを受信したコンピュータは、その名前が自分のNetBIOS名ならば、名前解決に対する応答を返す(該当しないコンピュータは、何も応答しない)。これにより、通信先のコンピュータを特定することができる(お互いのMACアドレスなどを知ることができる)。いったん通信相手が分かれば、あとはユニキャスト通信を使って、相手と通信することができる。

 NBTでもこの基本的な通信モデルはまったく変わらない。NetBEUIの場合と異なるのは、NetBIOS名を(何らかの方法で)IPアドレスに対応付け、そのIPアドレスを元にして通信相手とデータをやりとりしているというところである。TCP/IPでは、IPアドレスさえ分かれば途中の経路には関係なく、ネットワーク上の任意の相手と通信することができる。NetBEUIでは、LLCプロトコルに頼っていたため、ローカルのネットワーク・セグメント上でしか通信することができなかったのと比べると、大きな進歩である。

 ただしここで注意してほしいのは、NBTにしたからといってNetBIOS名が不要になるというわけではないということである。NetBIOS名を使って通信を行うのは、NetBIOSサービスの基本的な決まりごとであり、これを変えてしまっては従来のNetBIOSサービスと互換性がなくなってしまう。NBTでは、NetBIOSインターフェイス(NetBIOSサービスの呼び出し方法や利用方法)はそのままにして、その下位のプロトコルだけを変更・改良している()。もっともNetBIOSレベルで互換性があるからといっても、NetBEUIとNBTがお互いに通信できるわけではない。NetBEUIしかインストールしていないコンピュータと、NBTしかインストールしていないコンピュータではお互いに通信することはできない。

CIFS―NetBIOSを利用しないファイル共有サービス

 Windows OSでは、SMBというプロトコルを使ってファイル共有などを実現しているが、Windows 2000以降のOSでは、「ダイレクト・ホスティングSMB」とか「CIFS」と呼ばれる、NetBIOSインターフェイスを利用しないファイル共有メカニズムが用意されている。これについては今後の連載で解説するので、ここでは触れない。


NetBIOS名からIPアドレスへの変換

 NetBIOSサービスでは、NetBIOS名が重要な意味を持つ。通信相手の特定も、利用するサービスも、すべてNetBIOS名で識別しているからだ。これに対してTCP/IPプロトコルではIPアドレス(とポート番号)が重要な意味を持つし、IPアドレスがなくては通信することができない。そこでNBTでは、NetBIOS名とIPアドレスを対応付けるためのメカニズムを用意している。NetBIOSを使うアプリケーションがNetBIOS名で通信しようとすると、そのNetBIOS名に対応するIPアドレスを求め、TCP/IPプロトコルを使ってデータを送信するのである。

 TCP/IPではコンピュータ名やFQDN名からIPアドレスを求める方法がいくつか用意されているように、NBT環境でも、NetBIOS名からIPアドレスを求める方法はいくつか用意されている。代表的な方法としては、ブロードキャストを使う方法、LMHOSTSファイルを使う方法、WINSサーバを使う方法などがある。以下にその例を示す。

NBT環境における名前解決の例
NBTプロトコルでも、NetBIOS名からIPアドレスを求める方法がいくつか用意されている。(1)のローカルでNetBIOS名をブロードキャストする方法はNetBEUIにおける通信方法に近い。(2)は、リモートのネットワーク上にあるWINSサーバに問い合わせる方法であり、ルータを越えてWindowsネットワークを使う場合の一般的な方法である。

 (1)はブロードキャストを使う方法である。NetBIOS名をセットしたNBTの名前問い合わせパケットをローカルでブロードキャストする。すると、その対象となるコンピュータが自分のIPアドレスをセットした応答パケットを返す。これにより、送信元のコンピュータは相手のIPアドレスを知ることができる。このあたりの手順は、ローカルでブロードキャストするNetBEUIの場合とほとんど同じである。LLCではなく、TCP/IPで(正確にはUDPで)ブロードキャストを行っている。

 これに対して(2)の方法は、WINSサービスを使って名前解決を行う例である。WINSサービスとは、簡単にいうと、NetBIOS名とIPアドレスの対応を管理するサービスのことであり、Windows Server OSに含まれている標準的なサービスである。WINSのサーバに問い合わせることにより、NetBIOS名からIPアドレスを求めることができる。ネットワーク上にこのようなWINSサーバを配置してNetBIOS名データベースを集中的に管理すれば、ネットワークを超えてNBTクライアントが通信できる。

 NetBIOS名からIPアドレスを求める方法は、これ以外にもDNSサーバを利用する方法などもある。具体的な名前解決のやりとりなども含め、詳細については、次回に解説する。

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。