連載
» 2015年01月19日 18時00分 UPDATE

その知識、ホントに正しい? Windowsにまつわる都市伝説(23):ファイル共有プロトコル、SMBとCIFSの違いを正しく理解できていますか?(前編)

Windowsのファイル共有サービスの主要プロトコルである「SMB」と「CIFS」の二つの用語は、さまざまな使われ方をされてきました。CIFSという用語が使われ始めた1990年代後半と、SMB 2.x/3.xがある現在では、これらの用語の解釈が変わっていることにご注意ください。

[山市良,テクニカルライター]
「Windowsにまつわる都市伝説」のインデックス

連載目次

最新のWindowsはSMB 1.0/CIFSのサポートを削除できる

 「SMB(Server Message Block)」は、Windowsネットワークにおける標準のファイル共有プロトコルです。SMBの歴史は長く、Windowsにネットワーク機能が標準搭載される前から存在し、さまざまなバージョンがあります。

 Windows XPおよびWindows Server 2003 R2以前はSMB 1.0であり、Windows VistaおよびWindows Server 2008からはWindowsのバージョンアップと同時に新しいバージョン(SMB 2.0以降)が提供されています。実は、SMB 1.0までも複数のバージョンが存在しました。

SMBのバージョン 搭載するWindows
SMB 2.0 Windows Vista および Windows Server 2008
SMB 2.1 Windows 7 および Windows Server 2008 R2
SMB 3.0 Windows 8 および Windows Server 2012
SMB 3.02 Windows 8.1 および Windows Server 2012 R2

 Windowsネットワークの互換性を維持するため、最新のWindowsは以前のSMBをサポートしてきました。しかし、Windows 8.1およびWindows Server 2012 R2では、以下のドキュメントに記されているように、SMB 1.0の使用は推奨されなくなり、将来のWindowsでは削除される機能の候補になりました。

 なお、現在、マイクロソフトはWindowsの次期バージョンを開発中ですが、提供中のプレビュー版である「Windows Server Technical Preview」や「Windows 10 Technical Preview」では、SMB 1.0は削除されていません。

 Windows 8.1、Windows Server 2012 R2、および次期バージョンのTechnical PreviewはSMB 1.0をサポートしていますが、オプションでSMB 1.0のサポートを削除することもできるようになっています。

 Windows 8.1では「コントロールパネル」の「Windowsの機能の有効化または無効化」を、Windows Server 2012 R2では「サーバーマネージャー」の「役割と機能の削除ウィザード」を使用して、「SMB 1.0/CIFSファイル共有のサポート」を削除することができます(画面1)。

画面1 画面1 Windows 8.1およびWindows Server 2012 R2では「SMB 1.0/CIFSファイル共有のサポート」を削除することで、古いバージョンであるSMB 1.0のサポートを削除できる

 この方法で削除されるファイル共有プロトコルは、「SMB 1.0」ではなく「SMB 1.0/CIFS」と表現されています。皆さんは「SMB」(SMB 1.0)と「CIFS(Common Internet File System)」、この二つの用語の使い分けはできていますか?

SMBとCIFSの使い分け、正しいのはどれ?

 ここで問題です。以下に、SMBとCIFSの二つの用語を用いた、これらのプロトコルを説明するいくつかの表現を用意しました。どの表現が正しいでしょうか?

  1. CIFSは、Windowsのファイル共有サービスのプロトコルであるSMBを拡張し、Windows以外のプラットフォームでも利用できるように、仕様を公開したものである
  2. CIFSは、NetBIOSに依存しない、TCP/IP上で直接動くファイル共有プロトコルである
  3. マイクロソフトによる実装がSMB、Sambaなどマイクロソフト以外による実装がCIFSである
  4. SMBは名前解決にNetBIOSブロードキャストまたはWINSを使用し、CIFSは名前解決にDNSを使用する
  5. NBT(TCPポート139など)を使用するのがSMB、Microsoft-DS(TCPポート445)を使用するのがCIFSである
  6. Windows NT 4.0やWindows 98までがSMBであり、Windows 2000でCIFSになった。CIFSプロトコルはSMBプロトコルの後継プロトコルである

 いずれも、インターネットを検索すると簡単に見つかる、SMBとCIFSに関する説明です。答えは、SMBとCIFSに関する現在の解釈では、全て間違いになります。

 (1)(6)については、この表現で正しい時代もありました。例えば、Windows 2000のネットワークアーキテクチャについて書かれた以下の公式ドキュメントでのCIFSの説明は、(6)の説明と矛盾しません。しかし、この説明は現在のSMBおよびCIFSの解釈とは相いれないものです。

"The Common Internet File System(CIFS)is the standard way that computer users share files across corporate intranets and the Internet. An enhanced version of the Microsoft open, cross-platform Server Message Block(SMB)protocol, CIFS is a native file-sharing protocol in Windows 2000."(CIFSは、コンピューターユーザーが企業のイントラネットやインターネットの間でファイルを共有するための標準です。マイクロソフトのオープンでクロスプラットフォームのSMBプロトコルであるCIFSは、Windows 2000のネイティブなファイル共有プロトコルです)

 LinuxにおけるSMBのサポートといえば「Samba」ですが、Sambaのmanページ(オンラインマニュアル)には、新しい解釈に基づいた記述と、古い解釈に基づいた記述の両方を見つけることができます(画面2)。

画面2 画面2 SambaのmanページのCIFSに関する説明は正しいが、「mount.cifs」のmanページの説明は古い解釈に基づいたもの

 このように、SMBとCIFSの用語は、そのときどきの解釈によって使われ方が変わってくるため、ドキュメントや記事が書かれた時期を踏まえて読み解くことが必要になります。書き手の思い込みによるものとは思いますが、新しいドキュメントや技術解説記事でも誤った使われ方がされていることがあります。

SMBとCIFS、かつての解釈

 筆者が記憶しているところでは、SMBはもともとIBMによって開発され、その後、マイクロソフトが独自に拡張を進めてきたものです。CIFSは、Windows NT 4.0に実装されたSMBをベースに、プラットフォームやトランスポートに依存しない、オープンなプロトコルとして、インターネット標準を目指して公開された仕様でした。

 IETF(Internet Engineering Task Force)にインターネットドラフトとして提出されたCIFSの仕様は、以下のURLで確認できます。なお、このインターネットドラフトは標準仕様になることなく、有効期限切れ(無効)となりました。

 それまでのSMBは、NetBIOS(Network Basic Input Output System)インターフェースに依存するプロトコルでしたが、CIFSはトランスポートに依存しないのが特長です。上記のインターネットドラフトでは、TCP/IP上での実装方法の参考として「NetBIOS Transport over TCP」と「TCP Transport」の二つが説明されています。

 前者は「NetBIOS over TCP/IP」(NBT)のことです。後者の実装としては、マイクロソフトはWindows 2000で「Microsoft Direct Hosting of SMB」(Microsoft-DS)を採用しました。

 その後、2006年にWindows Vistaが完成し、SMB 2.0がこの世に出るまで、長い間、SMBのプロトコルに変更はありませんでした。SMBの一般的な名称としてCIFSを使う人もいれば、Windows 2000以降のSMBをCIFSと呼ぶ人もいました。CIFSはSMBの別名にすぎないという認識の人も多いと思います。

SMBとCIFS、現在の解釈

 SMBとCIFSの現在の解釈については、マイクロソフトがプロトコルに関して公開している以下のドキュメントの内容に従うべきでしょう。MS-SMBは、SMB 2.0以降を含まないSMB 1.0のことです。

 ざっとまとめると、次のような解釈が可能です。後の二つは以前の解釈とは全く逆の説明になっていますね。

  • CIFSは、クロスプラットフォームで、トランスポートから独立したファイル共有プロトコルである
  • CIFSは、たくさんあるSMBプロトコルの中のダイアレクト(Dialect)の一つである
  • SMB 1.0は、CIFSを拡張したプロトコルであり、CIFSを置き換えるものである(ダイアレクトの変更はなし)
  • Windows NT 3.51、Windows NT 4.0、Windows 98、およびWindows 98 Second Edition(SE)に実装されているものがCIFS、Windows 2000以降に実装されたものがSMB(SMB 1.0)である

 「ダイアレクト」(Dialect)は「方言」という意味を持つ言葉です。SMBにはたくさんの方言があり、お互いが話せる方言を選択する「ネゴシエート」(Negotiate)という手続きを行ってからSMBセッションを開始します。

 CIFSとSMB 1.0のダイアレクトは共通しており、「NT LM 0.12」を使用します。Windows XP以前のWindowsのプロダクトライフサイクルはすでに終了してしまっています。そのため、最後の厳密な区別は必要なく、「SMB 1.0=CIFS」と認識しても問題はないでしょう。

 SMB 2.0〜3.02のバージョンは、以下のドキュメントで説明されています。「MS-SMB2」という分類ですが、SMB 3.0以降を含みます。実は、SMB 3.0はWindows 8の開発中、途中まで「SMB 2.2」と呼ばれていました。SMB 2.0〜3.02の各バージョンは、MS-SMB2に含まれるダイレクトの種類ということもできます。

SMB 1.0/CIFSの削除は、いったい何を削除するのか?

 話を最初に戻しますが、Windows 8.1やWindows Server 2012 R2から「SMB 1.0/CIFSファイル共有のサポート」を削除した場合にどうなるのかというと、MS-CIFSとMS-SMBのプロトコルが削除されるということになります。

 SMBはダイアレクトをネゴシエートすることで、クライアントとサーバーの両方で利用可能な最上位のダイアレクト、つまりSMBバージョンを選択します。例えば、Windows同士の通信では、Windowsのバージョンによって使用されるSMBバージョンが表1のように決まります。

表1 表1 Windowsのバージョンと使用されるSMBのバージョン(ダイアレクト)の組み合わせ

 「SMB 1.0/CIFSファイル共有のサポート」を削除した場合、MS-SMB2に規定されているSMB 2.0以降のネゴシエートのみを行うようになります。MS-CIFSとMS-SMBの「NT LM 0.12」およびそれ以前のダイアレクトはネゴシエートしなくなるため、Windows XPやWindows Server 2003 R2以前、およびSMB 2.0以降に対応していないPCやデバイスとはSMBで通信することができなくなります。

 「SMB 1.0/CIFSファイル共有のサポート」を削除すると、同時に「Computer Browser」サービスも削除されます。このサービスは、Windows NT 4.0やWindows 9x以前のWindowsに対して、ブラウジングと名前解決の互換性を提供するためのものでした。古いSMBプロトコルの削除により、このサービスの必要性はなくなります。

 Windows 2000からはActive DirectoryとDNSが、以前のブラウジングと名前解決の機能を引き継ぎました。Windows Vista以降は「SSDP」(Simple Service Discovery Protocol)、「WSD」(WS-Discovery)、「LLTD」(Link-Layer Topology Discovery)、「LLMNR」(Link-Local Multicast Name Resolution)といったブロードキャストを使用して、非ドメイン環境におけるブラウジングと名前解決が可能です。

 以下の図1に、Windows 8.1およびWindows Server 2012 R2におけるSMBの実装を示しました。図の赤い部分が、「SMB 1.0/CIFSファイル共有のサポート」の削除で削除されるものです。

図1 図1 最新のWindowsにおけるSMBの実装。「SMB 1.0/CIFSファイル共有のサポート」を削除すると、赤い部分が削除される

 以前のWindowsでは、NetBIOSインターフェースを使用したSMBの通信に、NetBEUIやIPXを使用することもできましたが、NetBEUIのサポートはWindows XPおよびWindows Server 2003で、IPXのサポートはWindows VistaおよびWindows Server 2008で削除されました。

 筆者は使用したことがないのですが、IPX上でSMBを直接使用する「Direct Hosting of IPX」という方法もあったようです。Direct Hosting of IPXはMS-CIFSで説明されている機能であり、Microsoft-DSよりも以前からあったようです。これも、IPXのサポートの削除と同時に利用できなくなりました。

 なお、「SMB 1.0/CIFSファイル共有のサポート」を削除しても、NetBIOSインターフェースを使用するNBTのサポートが削除されることはありません(画面3)。NBTのサポートは、Windows 2000でMicrosoft-DSが採用されたときからすでに、IPv4プロトコルの詳細設定にある「WINS」タブを使用して無効化できるようになっています(画面4)。なお、NBTはIPv6に対応していないため、IPv6の詳細設定にNBTを無効化するためのオプションは存在しません。

画面3 画面3 「SMB 1.0/CIFSファイル共有のサポート」を削除しても、NBTのサポートは削除されず、NBTのポート(139/TCP、137/UDP、138/UDP)はリッスン状態のまま
画面4 画面4 IPv4でNBTのサポートを無効にする方法。この方法は、Windows 2000から変わらない

 次回は、SMBのダイアレクトとネゴシエートについて、もう少し踏み込んで説明します。

「その知識、ホントに正しい? Windowsにまつわる都市伝説」バックナンバー

筆者紹介

山市 良(やまいち りょう)

岩手県花巻市在住。Microsoft MVP:Hyper-V(Oct 2008 - Sep 2014)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。マイクロソフト製品、テクノロジを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。


Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

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

メールマガジン登録

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