今回より、Windowsネットワークの核心、SMB/CIFSに入る。ネットワーク設計やトラブルシュートなどで不可欠な知識だ。
前回までは、NetBIOSやNBT(NetBIOS over TCP/IP)、TCP/IPといった、Windowsネットワークの下部を支えるプロトコルについて解説してきた。今回からはWindowsネットワーク・アーキテクチャの核心である、ファイル共有サービスと、それを実現するSMBプロトコルについて解説を行う。今回は、Windows OSにおけるファイル共有サービスの概要と、基本的な利用方法などについてまとめる。
■連載目次
第1回 Windowsネットワークの舞台裏
第2回 レイヤ・モデルとファイル共有
第3回 NetBIOSを理解する(1)
第4回 NetBIOSを理解する(2)
第5回 NetBIOSの通信の実際
第6回 TCP/IP始めの一歩
第7回 IPアドレスとネットマスク
第8回 アドレス・クラスとIPアドレス
第9回 IPルーティング
第10回 IPパケットの構造
第11回 MACアドレスを解決するARP
第12回 TCP/IPを支えるICMP
第13回 データグラム通信を実現 UDP
第14回 信頼性を実現するTCP(1)
第15回 信頼性を実現するTCP(2)
第16回 信頼性を実現するTCP(3)
第17回 LLCとNetBEUI
第18回 NetBIOS over TCP/IP(1)
第19回 NetBIOS over TCP/IP(2)
第20回 ファイル共有SMB/CIFS(1)
第21回 ファイル共有SMB/CIFS(2)
第22回 ファイル共有SMB/CIFS(3)
第23回 ブラウザ・サービス
この連載ではWindows OS上に実装されているネットワーク機能を指して単に「Windowsネットワーク」と呼んでいるが、もともとこの機能はWindows以前から利用されていたものである。当初はMS-Networks(MS-DOS 3.xにネットワーク機能を付加したもの)で利用されていたサービスがその大元であると考えられるが、当時は現在のものほど機能は多くなかったし、当時のコンピュータの性能はあまり高くなかったので、MS-DOS上ではクライアント機能しか利用できなかった。サーバは、専用のLAN-Manager ServerやOS/2システムなどが利用されており、現在のように、サーバ機能とクライアント機能を同時に利用するのが一般的になったのは、Windows for Workgroups 3.x(このOSは日本語化されていない)以降である。
なお、一口にWindowsネットワークといっても、そこに含まれる機能は多数あるし、Windows OSには次々と新しいプロトコルやサービスが実装され続けているが、本連載では、ファイル共有サービスおよびブラウズ・サービスまでを取り扱うことにする。
Windows OSにおけるファイル共有サービスのアーキテクチャ(概略)を次に示しておく。ただし図ではクライアントとサーバを別々に記述しているが、現在のWindows OSではこれらは1台のコンピュータ上で両方実装されている。
これを見ると分かるように、ファイル共有サービスは、クライアント側の「Workstationサービス」と、サーバ側の「Serverサービス」の2つから成り立っていることが分かる(サービス名はWindows NTやWindows 2000、Windows XPの場合)。この図を元にして、Windows OSのファイル共有サービスの仕組みについて見ていこう。Windowsネットワークにおけるファイル・アクセスの概要はすでに連載第2回「Windowsネットワークのレイヤ・モデルとファイル共有」でも述べているので、参考にしていただきたい。
いまクライアント・コンピュータ上で、あるアプリケーションがサーバ上のファイルへアクセスしようとしているとする。するとその要求は次のような段階を経て、サーバに届けられる。
1.アプリケーションからのファイル・アクセス
アプリケーションがネットワーク上のファイルをアクセスするといっても、ネットワーク上のサーバのファイルであることを特別に意識することはほとんどない。ローカルのファイルであっても、ネットワーク上のファイルであっても、アプリケーションではファイル名を表す文字列をWindows OSにそのまま渡すだけであり、その内容について特別に解釈する必要性はほとんどないからだ。例えばメモ帳に渡すファイル名がc:\user\suzuki\\test.txtでも\\winserver-01\user\suzuki\test.txtでも、メモ帳の処理は変わらない。指定されたファイル名(を表す文字列)をそのままWindows OSに渡すだけで、あとの処理はすべてOS側で行ってくれる。OS側では、渡されたファイル名がローカルのディスク上のものであるか、それともネットワーク上のサーバのものであるかを判定し、後者ならば、Workstationサービスへと引き渡す。
2.ネットワーク・アクセス
リモートのファイル・サーバ上のファイルに対するアクセス要求は、Workstationサービスにおいて、「SMB(Server Message Block)」プロトコルを使ったアクセス要求に分解され、リモートのファイル・サーバに送信される。SMBプロトコルとは、Windowsネットワークにおける基幹ファイル・サービス・プロトコルである。ネットワーク階層でいえば、最上位のアプリケーション層やプレゼンテーション層に相当するファイル・サービス・プロトコルであり、下位プロトコルとしては、NetBIOSを経由してサーバと通信している。いままで述べてきたように、NetBIOSとはインターフェイスであり、実際のプロトコルとしてはNetBEUIやNBT(NetBIOS over TCP/IP)、IPX/SPXをトランスポート層として利用している。
3.ディスク・アクセス
クライアントからSMBプロトコルを経由して送られてきたアクセス要求は、Serverサービスによって受信される。そして実際のディスク上のファイルへのアクセス要求として処理され、その結果がまたSMBプロトコルを経由して、クライアントへと送り返される。
以上がWindows OSにおけるファイル共有サービスの概要であるが、もう少し詳しくネットワーク・プロトコルについてみると、次のようになっている(WorkstationサービスとServerサービスをまとめてファイル共有サービスとしている)。
Windowsネットワークにおけるファイル共有サービス用のプロトコルは、「Server Message Block」(以下「SMB」と表記)とか、「Common Internet File System」(以下「CIFSと表記)と呼ばれている。当初のWindowsネットワークではSMBと呼ばれていたが、その後、仕様変更や機能拡張などを行い、現在ではCIFSという名称で公開され、Windows以外のシステムにも広く実装されるようになっている。マイクロソフト社のドキュメント中でもSMBとCIFSの両方の呼称が登場しているが、以下では特に断らない限り単にSMBと呼ぶことにする。
SMBもCIFSもともに同じファイル共有サービスを提供するプロトコルであるが、下位のトランスポート層プロトコルの扱いが少し異なる。
Windowsネットワークの開発当初から利用されているSMBでは、NetBIOSインターフェイスを経由してデータを送受信している。NetBIOSは、実際にはNetBEUIやTCP/IP、(図には含まれていないが)IPX/SPXをトランスポート層として利用するサービスである。よって、通信相手のサーバを見つける場合にはNetBIOSの名前解決サービスやデータグラム・サービスを利用するし、サーバとの通信にはNetBIOSの提供するセッション・サービスを利用する。この結果、サーバ名やクライアント名はNetBIOSの規約に基づいた名前を付ける必要があるし、もしもインターネットを介して通信しようとすると、(セキュリティ的なことは別にして)NetBIOSが通信できるようにネットワーク環境をセットアップする必要がある。
これに対してCIFSは、NetBIOSインターフェイスを経由せず、ただ1つのTCPのポート(445番)だけでサービスできるように改良されたプロトコルである。提供するサービスそのものはSMBの場合とほとんど同じであるが、使用するポートが1つだけでよいので、ファイアウォールなどでの管理も容易になっている(NetBIOSでは複数のポートを使用する)。CIFSはWindows 2000以降のWindows OSで利用できる。
Copyright© Digital Advantage Corp. All Rights Reserved.