Server Message Block

Server Message Block (SMB) は、主にWindowsを中心とした環境でLANを通じてファイル共有やプリンタ共有などに使用される通信プロトコルの総称。OSI参照モデルでは第7層アプリケーション層に該当する。認証つきプロセス間通信機構としても動作する。
下位層のプロトコルとしてNetBEUIを使用していた時代には、サブネットを越えるルーティングはできず、中大規模のネットワークには向かないとされたが、NetBIOS over TCP/IPや、NetBIOSも必要としないCIFS（Common Internet File System）により、大規模ネットワークでも使用可能となっている。

SMB/CIFS/SMB1

2015年現在では、SMB 1.0以前のものを明確には区別せずにダイアレクト（方言）として扱うことが一般的である。「SMB1/CIFS」などとまとめて表記することも多い。また、下記のSMB 1.0以前の説明は2015年現在のマイクロソフトの説明に従って記載しているが、マイクロソフトは過去には下記とは矛盾する説明をしていたこともあったため、注意が必要である。

初期のSMB

SMBは1982年にIBMのBarry Feigenbaumが設計した。DOSのローカルファイルアクセス用「割り込み 33」(21h) をネットワーク上のファイルシステム向けに変えることを目標としていた。マイクロソフトはこれにかなりの機能追加や修正を施した。1990年ごろ、マイクロソフトはSMBプロトコルをスリーコムと共同開発していた LAN Manager製品に組み込んだ。さらにその後のWindows製品でもSMBプロトコルに機能を追加していった。

CIFS

マイクロソフトは1996年にSMBをCommon Internet File System (CIFS) と改称し、Windows NT 3.51、Windows NT 4.0、Windows 98に搭載し、さらなる機能追加を行った。例えば、シンボリックリンク、ハードリンク、より大きなファイルの操作、NetBIOSを使わずにTCPポート445番で直接接続する方式（実験的な試みであり、さらなる改良が必要だった）などへの対応である。また、認証プロトコルである NTLMv1（もともとのSMB仕様では、IBMのLAN Managerのパスワードを使うことになっていて、そこから生まれたプロトコル）ではDESを間違った形で使っていたため、NTLMv2を追加した。さらに、NT 4.0のドメインログイン用プロトコルでは、アメリカ合衆国以外では40ビットの暗号を使っている（128ビットの暗号は輸出規制されていたため）。ダイアレクトは「NT LM 0.12」を使用する。
サン・マイクロシステムズがWebNFSを発表したころ、1997年、マイクロソフトは部分的仕様をいくつかインターネットドラフトとしてIETFに提出したが、いずれも1998年までに有効期限切れとなっている。

SMB 1.0

2000年、マイクロソフトは名称をSMBに戻し、SMB 1.0(SMB1)としてWindows 2000で導入した。Kerberos認証やActive Directoryに対応した。また、ダイレクトホスティングSMBと呼ばれるTCP上で直接動作させる機能も導入された（その場合サーバがTCPポート445番で待機）。ダイアレクトはCIFSと同じ「NT LM 0.12」を使用するため、技術的にはCIFSと区別されない。

終焉

その後の技術の進化の結果、SMB1は暗号化強度の面や通信効率の面からも好ましくないとされるようになる。
2012年、マイクロソフトはStorage Developer ConferenceでSMB1を無効化することを技術者たちに提案した。
2013年、マイクロソフトはWindows Server 2012 R2以降のOSではSMB1を使用することを非推奨と定義し、速やかに新しい技術への移行を促した。
2014年、マイクロソフトは期限を明確にはしていないものの、将来のWindowsでは機能を削除する方針であることを公表した。
2016年、マイクロソフトは改めて速やかにSMB1の使用を停止するよう呼び掛けた。
2017年1月、アメリカ国土安全保障省の配下組織US-CERTは、セキュリティ対策のベストプラクティスとして、SMB1の無効化を呼び掛けた。
2017年9月5日、Linux kernel 4.13において既定のプロトコルをSMB3とし、SMB1を無効化した。
2017年9月、マイクロソフトはWindows 10 Version1709でSMB1を初期状態では無効とした。ただし、セキュリティ上推奨されていないものの、必要であれば設定を変更することで有効化できる。

SMB 2.1

Windows 7とWindows Server 2008 R2で搭載された。SMB 2.0と比べてさらにファイル転送の速度が向上、特に複数のクライアントから同時にアクセスされた際は約3.5倍の向上が図られている。

SMB 3.0

Windows 8とWindows Server 2012で搭載された。SMB ダイレクト、SMB マルチチャネル、SMB 暗号化などの機能が追加された。開発段階ではSMB2.2と呼ばれていた。

SMB 3.0.2

Windows 8.1とWindows Server 2012 R2で搭載された。透過フェイルオーバー使用時の自動リバランス、SMB ダイレクトの性能向上などの更新にとどまる。

SMB 3.1.1

Windows 10で搭載された。認証の耐タンパ性の向上とSMB暗号化使用時のAES-128-GCMの追加が含まれる。

クライアント-サーバ方式

SMBはPeer to Peer方式の動作をし、クライアントが何らかの要求を送ると、サーバがそれに対応して応答する。SMBプロトコルの一部は特にファイルシステムへのアクセスを扱っており、クライアントはファイルサーバとの通信にその部分を使う。しかし、SMBプロトコルにはプロセス間通信 (IPC) に特化した部分もある。SMBプロトコルはローカルなサブネットでの使用に最適化したが、インターネット経由で他のサブネットとの間でSMBを使うこともできる。Windowsのファイル共有やプリンタ共有に関わるエクスプロイトは、そのような使用法を主なターゲットとしている。
SMBサーバはファイルシステムや他のリソースに、ネットワーク上のクライアントがアクセスできるようにする。クライアントはサーバ上の共有ファイルシステムやプリンタにアクセスする。このような用法・機能としてはSMBは最も有名で最も広く使われている。しかし、SMBのファイルサーバとしての面には、NTドメインを構成するプロトコル群が重要であり、それらによって少なくともNT式のドメインベースの認証を提供している。NTドメインプロトコルはSMBのIPCである名前付きパイプのためだけにMSRPCサービスを提供し、SMBサーバの実装のほとんどはリソースへのユーザーアクセスの妥当性を検証するのにNTドメインの認証を使う。

性能問題

SMBプロトコルでは、各クライアントが自身の存在を知らせるためにサブネット全体にブロードキャストするため、ネットワークの帯域幅を占有しすぎると思われている。しかし、実はSMB自体はブロードキャストを使わない。SMBと結び付けられているブロードキャスト問題は、実際にはNetBIOSのサービス・ロケーション・プロトコルのせいである。デフォルトでは、WindowsのサーバはNetBIOSを使ってサービスの告知と発見を行う。NetBIOSは特定ホスト上で利用可能なサービスを一定間隔でブロードキャストすることで機能する。ホストが20台以下のネットワークではそのような設定でも十分だが、それ以上にホスト台数が増えるとブロードキャストのトラフィックが問題を生じるようになる。NetBIOS Name Server (NBNS) を適切に実装すると、この問題を緩和できる。例えばWindows Internet Naming Service (WINS) はマイクロソフトのネットワーク環境では適切な解決策を提供する。WINSはサービス要求の集中管理と登録のためのシステムを提供するが、ネットワークの設計と保守がより複雑化する。マイクロソフトは、Active Directory環境でのダイナミックDNSの利用を推奨している。
ネットワークを設計する際には、SMBプロトコルの性能はレイテンシに大きく影響されることを考慮しなければならない。SMBを使ってディレクトリを渡り歩いてファイルを探すような操作をしたとき、このレイテンシの影響が見た目にも明らかになる。例えばインターネット経由のVPNコネクションではレイテンシが大きくなることが多く、そのような環境ではディレクトリの中身（ファイル一覧）がなかなか表示されないということになる。