では,実際にWindowsパソコンの間でファイル共有するときのパケットをキャプチャして,ファイルを共有する際のネットワーク上の挙動を確認してみよう。

一覧の取得でファイル共有の流れを見る

 まずは,Vistaパソコン(コンピュータ名:VISTA-PC2,IPアドレス:192.168.1.28)から,XP Professional/プロフェッショナル(コンピュータ名:XP-PRO1,IPアドレス:192.168.1.21)の共有フォルダ(共有名:¥¥XP-PRO1¥SHARE)へ接続した場合のパケットを見ている(図4)。最初に書いたように,VistaではSMB 1.0とSMB 2.0の両方をサポートしているが,XPなどSMB1.0しかサポートしない従来OSのコンピュータとの通信ではSMB 1.0を使う。

図4●XPの共有フォルダに接続して一覧情報を取得した際のパケットのやりとり
図4●XPの共有フォルダに接続して一覧情報を取得した際のパケットのやりとり
[画像のクリックで拡大表示]

 Vistaにおける具体的な操作を確認しておこう。Vistaのネットワーク・ウィンドウ上で,「XP-PRO1」というサーバーのアイコンを選択して,そのサーバーの共有リソース(共有フォルダと共有プリンタ)の一覧を表示させた。その表示された共有フォルダの中から,一つのフォルダ(Share)を選択し,Shareフォルダへ接続して,そのフォルダ下に存在するフォルダ/ファイルの一覧が表示するという操作を実行した。

 こうしてサーバーの共有フォルダ一覧を取得する時点で,すでにSMBプロトコルが使われている。このため,ここまでの一連のパケットを確認すれば,Windowsネットワークにおけるファイル共有の基本的な流れを確認できる。

やりとりしているパケットを確認してみよう

 図4のパケットを見てみると,サーバーのコンピュータのアイコンを選択した場合に,まずNo.10536~10539のパケットで,コンピュータ名の名前解決が行われていることがわかる。具体的には,IPv4のマルチキャスト・アドレス(224.0.0.252)とIPv6のマルチキャスト・アドレス(ff02::1:3)あてにLLMNRによる名前解決パケットを送るのと並行して,192.168.1.255というブロードキャスト・アドレスあてにNetBIOS名前解決パケットが送られている。これに対し,OSがXPであるサーバーからはLLMNRに対する応答はなく,NetBIOS名前解決の応答だけが返答され,192.168.1.21というIPアドレスが通知されている(No.10539のパケット)。

 次に,名前解決で得たサーバーのIPアドレスの139番ポートに対してTCPセッションを確立している(No.10540と10541のパケット)。これが図3でいう(1)の部分に当たる。続いて,No.10542と10543のパケットで,「VISTA-PC2<00>」から「XP-PRO1<20>」に対してNetBIOSセッションを確立している。これが図3の(2)に該当する。

 ここまでの作業が終了すると,いよいよSMB通信が始まる。具体的には,No.10546と10547のパケットで,SMBネゴシエーションのリクエストとレスポンスがやりとりされ,図3の(3)に当たるSMBネゴシエーションが実行されている。そのあとに,No.10548~10553のパケットで,チャレンジ・レスポンス型による認証が実行されSMBセッションが確立されている。

 そうやって確立したSMBセッション上でSMBのコマンドをやりとりして,フォルダの内容を取得している。これ以降のやりとりについては,誌面の都合上,ここでは詳しく解説しないが,リモート・プロセス間通信共有(IPC$)に接続し,名前付きパイプ(srvsvc)を使ってサーバーの共有リソース名の一覧を取得している(No.10554~10567のパケット)。そして,選択した共有フォルダ(¥¥XP-PRO1\SHARE)へ接続し(No.10569と10570のパケット),その後ファイルやフォルダへの各種操作が実行される。