1. ホーム(Home) > 
  2. 製品情報 > 
  3. CIFS NQ
  4.  > SMB

Products

 

SMB

ファイル共有とは?

まず、ファイル共有とは何か?おそらく皆さんが、毎日の様に使っているものです。

自分のPCの「ネットワーク」をクリックすると、ネットワーク上にあるコンピュータ一覧が表示されます。更にその中の一つのPCのアイコンをクリックすると、そのPCが公開しているフォルダ一覧が表示されます(図1)。更にそれらのフォルダの中のファイルを開いたり、コピーしたりすることができます。この様な他のサーバ或いはPCにあるファイルを操作することを「ファイル共有」と言い、ファイル共有を可能にしたのが「ファイル共有プロトコル」です。

図1
【図1】

「ファイル共有」というと、「自分が持っているファイルを公開する」というイメージがありますが、実際はそれだけではなく、自分から相手のファイルにアクセスする行為も、一つのファイル共有の操作です。更に上記にご説明したシーンのような人の手による操作だけではなく、プログラムによるファイル操作もファイル共有の一つです。例えば、スキャナーからスキャンしたファイルをファイルサーバにアップロードしたり、ファイルサーバから設定ファイルを持ってきたりといった作業です。

「ファイル共有」機能を実現しているプロトコルですが、正式な名称は「SMB(エス・エム・ビー)」と言います。「SMB」は「Sever Message Block」の略称です。ファイル共有プロトコルについて、世の中に「CIFS(シフス)」という名称もあります。「CIFS」は「Common Internet File System」の略です。CIFSとSMBの違いはなんでしょうか?以下のファイル共有プロトコルの歴史から見てみましょう。

SMBの歴史

ファイル共有プロトコルにはかなり長い歴史があり、1982年にIBMの研究者が設計したものが起源とされています。当初より「SMB」と呼ばれ、PC DOSや、LANマネージャに搭載されていましたが、その後Microsoftが色々と拡張を行い、名前を「CIFS」に変更しました。その後もMicrosoftは更なる拡張を行い、2000年には名前を「SMB」に戻しました。この為、ファイル共有プロトコルについて現在では「CIFS」と呼んだり、「SMB」と呼んだりしているのですが、基本的には同じ「ファイル共有」プロトコルを指しています。但し、厳密に言うとCIFSはWindows NTに含まれているSMBのことです。(SMBとCIFSの定義について諸説がありますが、ここでは省略します)

Microsoft社2008年にWindows Vistaと共に「SMB2.0」というバージョンをリリースしました。その後はWindows7でSMB2.1、Windows8ではSMB3.0というバージョンをリリースしました。実は世の中にあまり知られていないのですが、Windows8のRC版、つまりβ版の中に、SMB2.2というバージョンがありました。実際にWindows8の正式版がリリースされたときにはバージョンがSMB3.0になっていました。SMB3.0には、SMB2.2にあった機能に、いくつかのセキュリティ関連の機能が追加されています。

SMBの年表

  • SMB - 1982 IBMのDr. Barry Feigenbaum
    • PC-DOS - 1984
    • LAN Manager - 1988
    • Unixなど他のOSに実装(OSの一部、Samba)
  • CIFS - 1996
    • Windows NT 4.0 - 1996
    • IETF draft - Common Internet File System - 1997
    • SNIA Technical Specification - 1999
  • SMBに名称を戻す - 2000
    • Windows 2000 Extensions - 2000
    • Extensions for other implementations of SMB
  • SMB 2.0 (or SMB2) - 2008
    • Windows Vista
    • Windows Server 2008 R1
  • SMB 2.1 (or SMB2.1) - 2010
    • Window 7
    • Windows Server 2008 R2
  • SMB2.2 (正式版は存在しない)
    • Window 8 RC
  • SMB 3.0 (or SMB3) - 2012
    • Window 8
    • Windows Server 2012

このようにSMBにはいくつものバージョンがあるので、最近はSMB2.0以前の古いバージョンについては便宜上、SMB1.0(或いはSMB1/CIFS)という呼び方もあります。先程ご説明しましたように、SMB自体はIBMによって開発されたものですが、その後は色々な会社により拡張されましたので、SMBプロトコルの知的財産所有権の所在は曖昧でした。しかしながら、SMB2.0以降はMicrosoftが完全に独自で再設計を行いましたので、「これからは完全にMicrosoftのもの!他社にはもう何も言わせないよ!」と言えるようになりました。

SMB1.0とSMB2の違い

SMB2.0以降はどのような特長があるかと言いますと、ひとつには、パフォーマンスの違いがあります。現在のネットワーク環境に合わせてSMB2.0以降では様々な拡張が行われ、再設計がされています。例えば、1個のパケットに複数のコマンドを同時に送るといったことも可能になっています。また、SMBプロトコルは「サーバ・クライアント形式」なので、リクエストを送ってレスポンスが戻ってくるというこの一連のやり取りを減らすような工夫もされています。

MB/CIFSのクライアント機能

もう一つの違いはコマンド数です。SMB1.0はもう30年以上の歴史があり、その過程で色々な会社が拡張した為、コマンドがかなり増えてしまいました。その数は諸説あります。例えば、75個あるとか、200個あるとか。SMB2.0になってからは、コマンド数はギュッと絞られて19個になっています。その為、非常に明快な設計になっており、新たに設計し直したことにより、Windows OSの新バージョンを出す度に行うMicrosoft内でのテストが非常にやりやすくなったそうです。

 

SMB2.0以降のもう一つの特徴は、セキュリティの強化です。SMBには元々、認証機能はあったのですが、暗号化機能はありませんでした。SMB3.0には暗号化機能も追加されております。その他にも、SMB2.0、2.1、3.0それぞれにおいて様々な新機能がありますが、それについて別途解説します。

異なるSMBバージョンの接続

このように、SMBには、1.0、 2.0、 2.1、 3.0の4つのバージョンがありますが、これらはどのように使い分けられているのでしょうか?
Windows 8の中にはSMB1.0、 SMB2.0、 SMB2.1、 SMB3.0の4つが入っています。Windows 7にはSMB1.0、 SMB2.0、 SMB2.1の3つのバージョンが入っており、VistaにはSMB1.0とSMB2.0の2つ、XPにはSMB1.0のみが入っています。
SMBプロトコルには最初に接続するときに「ネゴシエーション」を行いますので、そこでバージョン合わせる処理が行われ、両方持っている一番高いバージョンに合わせます。
Windows 8同士であれば、両方SMB3.0を持っているのでSMB3.0で会話をします。Windows 8とWindows Vistaで会話をするときは、互いに共通して持っている一番高いバージョン、つまりSMB2.0で会話をします。

Client / Server OS Windows 8
Windows Server 2012
Windows 7
Windows Server 2008 R2
Windows Vista
Windows Server 2008
Previous versions
of Windows
Windows 8
Windows Server 2012
SMB 3.0 SMB 2.1 SMB 2.0 SMB 1.0
Windows 7
Windows Server 2008 R2
SMB 2.1 SMB 2.1 SMB 2.0 SMB 1.0
Windows Vista
Windows Server 2008
SMB 2.0 SMB 2.0 SMB 2.0 SMB 1.0
Previous versions
of Windows
SMB 1.0 SMB 1.0 SMB 1.0 SMB 1.0

 

SMB1.0の限界

SMB1.0の一つの限界は冗長性です。もう一つはネットワークの遅延を考慮してないところです。一つのタスクを完成の為、一連のパケット往復を必要としています。Compounding(一つのパケットで複数のコマンドを送信する)とpipelining(前のコマンドへの返事を待たずに次のコマンドを送信する)の処理が十分ではない為、WAN或いは遅延の大きいネットワーク環境ではパフォーマンスにかなり落ちます。
また、度重なる拡張により数多くのコマンドとサブコマンドが出来上がり、拡張とメンテナンスが困難となりました。複雑のコマンド体系のため安全性にも問題が生じます。

SMB1.0はいつまで続くのか?

毎年アメリカのサンタクララでSDC(Storage Developers Conference)という会議が開催されます。そこではMicrosoftをはじめとする様々な企業が最新情報のアップデートをしたり、自社機器を持ち込んで互いに接続テストをしたりしています。

 

ここに一枚のスライド(図2)がありますが、これは2012年のSDC2012で、MicrosoftのDavidという人がSMB3.0について説明したプレゼン資料の中のスライドの一部です。プレゼンの中で彼は、「そろそろ真剣に考えようじゃないか」と問題提起しました。何を考えるのか?彼は、「そろそろSMB1.0を無効にしようじゃないか」と提言したのです。ご存知の通り、Microsoftは2014年にXPのサポートを終了します。Sambaも現在、SMB2.0、2.1、及び3.0の一部に対応済みとのことです。またApple社はOS X v10.7から自社開発のSMB1.0を実装しており、昨年のSDC2012では、SMB2.1対応の製品を持ち込んでテストしていました。このように、今では世の中の環境も整ってきているので、そろそろSMB1.0は無くなるのではないか、と推測しています。

図1
【図2】

番外編

ところで、Apple社のSMB2.1対応機器ですが、SDCの会場で「これはいつリリースするの?」と聞いたところ、「We are Apple!(だから教えられないよ!)」とのことでした。Appleは今年2013年の6月にWWDC2013で新OS「Mavericks」をお披露目し、正式リリースを今年2013年秋と発表しました。ドキュメントを見ると「SMB2」搭載と書いてあります。

SMBは他のファイル転送プロトコルと比べるとどこが良いのか?

ファイルの転送には、SMB以外にも、例えば、TFTP、FTP、HTTP、NFSなどのプロトコルがあり、技術的にはそれぞれ特徴がありますが、(詳細は比較はここでは割愛します)SMBプロトコルとそれらのプロトコルとの大きな違いは何でしょうか?決定的な違いは、SMBプロトコルはWindowsに標準搭載されていて、ユーザが使い慣れているところです。
NFSはWindows Serverには搭載されていますが、皆さんが通常お使いになるようなWindowsデスクトップには搭載されていません。FTPサーバ、HTTPサーバは別途IISをインストールする必要があります。
Windowsに搭載されていて、ユーザが使い慣れているということは現実的にかなり重要なポイントです。
世の中にはWindowsがデファクトスタンダードOSとなっていますので、例えば医療機器や、工場用機器とWindows間でデータをやり取りすることが良くあります。そのとき、SMBを使う場合はWindows側に共有フォルダを設定するだけで済むのですが、もしFTPでやり取りしようとすると、Windows側にFTPサーバをインストールしたり、設定したりする必要があります。ここが使用ユーザにとって現実的に大きな問題です。例えばFTPサーバを立ち上げろと言われたら、FTPサーバをどこからかダウンロードしてきて、設定したりする必要があるのですが、一般ユーザにとっては、「FTPって何?IPって何?」という話になってしまいます。

製品情報
アプリケーション/サービス
ミドルウェア
Codec規格適合性検証ツール
SoC向けVideo Codec HW IP
コンテンツ自動検査・品質評価ツール
ソフトウェアエンコーダ
組込みOS
開発環境
プラットフォーム
↑このページのトップ