検索
連載

第22回 ファイル共有プロトコルSMB/CIFS(その3)基礎から学ぶWindowsネットワーク(3/3 ページ)

SMB/CIFSプロトコルのパケットの構造やコマンド・コードの詳細。Windowsネットワークのトラシューには必須の情報だ。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
前のページへ |       

 それでは実際のSMB/CIFSプロトコルの例を見てみよう。以下は、クライアント(UXPC23というコンピュータ)からサーバ・コンピュータ(SERVER07)のCという公開リソースに接続して、ファイルを書き込もうとしているところである。ネットワーク・モニタでパケットをキャプチャして解析してみた。


ファイル書き込みまでの例
コマンド・プロンプト上でcopyコマンドを使ってファイルをコピーした場合のパケットの例。「copy c:\testdata.doc \\server07\c」というコマンドを実行し、その様子をキャプチャして解析した。
  (1)プロトコルのネゴシエーション。
 (2)セッション・セットアップ。
 (3)IPC$リソースへのツリー・セットアップ。
 (4)Cドライブ・リソースへのツリー・セットアップ。
 (5)ファイルの作成要求の送信。
 (6)ファイル・データの書き込み。

 [説明]欄の最初に表示されている[C]と[R]の文字は、それぞれ「Command(コマンド)」と「Response(応答)」を表している。CとRが交互に並んでいることから分かるように、クライアントから送信したコマンドに対して、サーバ側から応答を返し、それが何度も繰り返されて処理が進む。

 このファイル・アクセスの大まかな流れを述べると、次のようになる。最初の3つの処理については前回の記事も参照にしていただきたい。

(1)プロトコルのネゴシエーション
 サーバのリソースを利用するためには、最初にお互いのサポートしているSMB/CIFSプロトコルのバージョンのすり合わせを行わなければならない。これを行うのが「Negotiate」というコマンドである(図中の(1))。クライアントが自身のサポートしているダイアレクトの一覧をサーバに渡すと(このクライアントは「NT LM 0.12」という最高レベルのダイアレクトまでサポートしている)、それに対して「Dialect # = 5」という応答を返している。これは「NT LM 0.12」をサポートしているということを表している。

(2)セッション・セットアップ
 次はサーバとクライアント間でSMB/CIFSプロトコルの通信のためのセッションを開設する。それが「session setup & X」というコマンドである。最後に付いている「& X」という文字列は、先ほどのコマンド一覧にある「SMB_COM_SESSION_SETUP_ANDX」の最後の「_ANDX」を意味している。_ANDXは、その後にまだ別のコマンドが続くので、それらは連続して(不可分に)実行しなければならない、ということを表している。

(3)IPC$リソースへのツリー・セットアップ
 セッションを開設したら、次はサーバ側のリソースに、「ツリー・セットアップ」という操作を行う。Windows OSでは、最初に「IPC$」というリソースに接続し、この時点でユーザー名とパスワードを使った認証を受ける。これが許可されればそのリソースへのアクセスが許可される。この例では、「R connect & X, Type = IPC」という応答が戻ってきているが、これはエラーが発生せずに、正しく接続できたということを表している。このコマンドに限らず、何らかのエラーが発生した場合は、この[説明]欄に「R コマンド名 - error, code = (番号) エラー・メッセージ」といったメッセージが表示されるので、すぐに分かるようになっている。

(4)Cドライブ・リソースへのツリー・セットアップ
 (3)はユーザー認証のためのツリー・セットアップであったが、この認証が許可されると今度は、実際に利用したいリソースに対するツリー・セットアップを行う。この例では「\\SERVER07\C」というリソースに対してツリー・セットアップを行い、ファイルを書き込もうとしている。

(5)ファイルの作成要求の送信
 「C NT create & X, File = ファイル名」は、ファイルを書き込みモードで作成するというコマンドである。コピー先のファイルをこうやって用意し、そこにデータを書き込むことによって、ファイル・コピーを実現している。コマンドの応答の「R NT create & X, FID = 番号」にあるFIDとは、ファイルをアクセスするためのID番号(File ID)である。ファイルのオープンや作成が成功すると、サーバからFID番号が返ってくるので、以後のファイル・アクセスではこの番号を指定してファイルを特定し、データを読み書きする。

(6)ファイル・データの書き込み
 ファイルの作成が成功したら、次は「C write &X, FID = 番号、Write サイズ at オフセット」コマンドを使って順次データを書き込む。「番号」はFID、「サイズ」は、書き込みデータのサイズ(SMBパケットで送信するデータ部分のサイズ)、「オフセット」はファイル上の書き込み位置をそれぞれ表している。この例では、ファイルの先頭(オフセット0x00000000の位置)から、0x7a00 bytes書き込もうとしている。

 以上で解説した以外にも、サーバとクライアント間でいくつかのSMB/CIFSコマンドがやりとりされているが、これらは、エクスプローラや(コマンド・プロンプトの)COPYコマンドが、コピー前にファイルが存在するかどうかや、ファイルの一覧などを確認するために実行しているものである。エクスプローラやコマンド・プロンプトなどでファイル・サーバをアクセスし、その様子をネットワーク・モニタでキャプチャすると、おどろくほど多くのパケットがやりとりされていることが分かるだろう。特にエクスプローラでは、ファイル名を表示するだけでなく、場合によってはファイルの概要をポップアップ表示させたりするために、ファイルの一部を読み出すこともあるので、非常に多くのネットワーク・トラフィックが発生する可能性がある。

より詳細なSMB/CIFSプロトコルの例

 今度はある1つのSMB/CIFSパケットの構造について、より詳しく見てみよう。上の(5)のファイル作成コマンドを詳細表示させたのが次の画面である。


SMB/CIFSパケットの詳細構造
SMB/CIFSパケットはコマンドも応答も同じ構造になっている。コマンドと応答はSMB/CIFSヘッダ中にあるフラグ・フィールドで区別される。ヘッダのサイズは32bytesで、その後に必要に応じてパラメータ部分が続く。この例では、32bytesのヘッダ部分の後に、80bytesのパラメータ部が続いている。
  (1)送信したファイル作成コマンドの概要。「\testdata.docというファイルを作成するコマンド」という意味。
 (2)コマンドの概要。(1)と同じ。
 (3)これを選択すると、(7)が反転表示する。ここがSMB/CIFSの固定長ヘッダ部分(32bytes)。
 (4)コマンド(コマンド番号は0xa2)。
 (5)ファイル作成時の挙動。指定されたファイルが存在する場合はその内容を消去して上書きし、存在しない場合は新規作成する、というオプション。
 (6)作成するファイルの名前。
 (7)SMB/CIFSの固定長ヘッダ部分(32bytes)。
 (8)SMB/CIFSの「ワード・データ」部分。この例では49bytes。作成するファイルの初期属性などの情報が入っている。
 (9)SMB/CIFSの「バイト・データ」部分。この例では49bytes。作成するファイルの名前がUnicodeで入っている。

 このコマンドに対するサーバ側の応答は次のようになっている。ファイルを作成すると、サーバはFID(ファイルID)と呼ばれる数値を返す(この例では0x4007となっている)。以後のファイル・アクセスでは、このFIDを指定してコマンドをやりとりする。


サーバからの応答
ファイルを作成すると、サーバからFIDや作成したファイルに関する情報が返される。
  (1)サーバからの応答の概要。
 (2)SMB/CIFSパケットのヘッダ情報。TIDやPID、UIDなどの情報が表示されている。
 (3)FID情報。
 (4)作成されたファイルの情報。既存のファイルに上書きする場合は、作成時刻などの情報は元のファイルのままになっている。COPYコマンドなどでは、ファイルをクローズした後、コピー元ファイルの時刻情報をコピー先ファイルへ設定している。


 以上簡単であるが、SMB/CIFSプロトコルに関する解説は今回で終わりとする。これ以上の詳細(各コマンドの動作の詳細やパラメータ、エラー・コードなど)については、前回挙げたリンクを参考にしていただきたい。またドキュメントを参照するだけでなく、Windows Server OSに付属のネットワーク・モニタを使って、実際のネットワーク・パケットをキャプチャして調査するのもよい勉強になるだろう。

 次回は、ブラウザ・サービスについて解説する。


「連載 基礎から学ぶWindowsネットワーク ―― Windowsネットワーク管理者への道 ―― 」のインデックス

連載 基礎から学ぶWindowsネットワーク ―― Windowsネットワーク管理者への道 ―― 

前のページへ |       

Copyright© Digital Advantage Corp. All Rights Reserved.

ページトップに戻る