SMBクライアントとしてのMacから見てみましょう。Macで共有フォルダーに接続するには、「Finder」ウィンドウの「共有」セクションにあるコンピューターの一覧から選択します。あるいは、「Finder」の「移動|サーバーへ接続」メニューを開いて、「サーバーアドレス」に「smb://<コンピューター名またはIPアドレス>/<共有名>」を入力して接続します(画面5)。
以下の画面6は、Windows 8.1の共有フォルダーに対して、Yosemiteから接続する際の通信トラフィックをWindows 8.1側の「Wireshark」でキャプチャした結果です。
SMBクライアント(ここではMacです)は、MS-SMB(SMB 1.0/CIFS)でネゴシエート要求を開始しますが、SMBクライアント側がSMB 2.1以降のダイアレクト対応していることを提示しているため、プロトコルをMS-SMB2に切り替え、SMB 2.1以降のネゴシエートを行っています。最終的にこの接続では、ダイアレクトとしてWindows 8.1標準のSMB 3.02が選択されました。つまり、YosemiteのSMBクライアントは、最新のSMB 3.02に対応していることが分かります。
実は、Mac側でも「ターミナル」で「smbutil statshares -a」というコマンドラインを実行することで、自分がSMBクライアントとして接続しているセッションのダイアレクトと、セッションで使用できるSMBの情報を取得できます(画面7)。「smbutil」コマンドの「statshares」オプションは、Mavericksから利用可能な新しいオプションであり、Windows 8以降のWindows PowerShellコマンドレット「Get-SmbConnection」と同じように使えます。
SMBのネゴシエートに関しては、前出の画面6を見れば一目瞭然です。YosemiteのSMBクライアントはSMB 1.0/CIFSより前の古いダイアレクトには対応していませんが、SMB 1.0/CIFSから最新のSMB 3.02までに対応しており、接続先に応じて利用可能な最上位のSMBバージョンを自動的に選択するようになっています。
前出の画面7は、Windows 8.1(WIN81TG64)、Windows 7(DP380)、およびWindows XP(VirtualXP-36130)の共有フォルダーに接続中の様子であり、それぞれSMB 3.02、SMB 2.1、SMB 1.0/CIFSで接続されていることが分かります。
では、SMBより下のTCPプロトコルレベルではどうなっているでしょうか。Windowsの場合、TCPポート139を使用する「NetBIOS over TCP/IP(NBT)」と、TCPポート445を使用する「Microsoft Direct Hosting of SMB(Microsoft-DS)」のいずれかを使用し、両方が利用可能な場合はMicrosoft-DSを優先します。
以下の画面8は、YosemiteからWindows 8.1の共有フォルダーに接続する際の通信トラフィックのうち、表示フィルターを変えて、TCPポート139およびTCPポート445に関連するものだけを抜き出したものです。
SMBのネゴシエートから以降はTCPポート445のMicrosoft-DSを使用していますが、その前のTCPセッションの開始(3ウェイハンドシェイク)は、NBTとMicrosoft-DSの両方で行っている様子が分かるでしょう。これは、WindowsのSMBクライアント機能と同様の動きです。
試しに、Windows 8.1の「セキュリティが強化されたWindowsファイアウォール」の「受信の規則」に、TCPポート445に対するブロック規則を設定してみました。すると、Yosemiteからの接続は、NBTのTCPポート139で確立されました(画面9)。
Copyright © ITmedia, Inc. All Rights Reserved.