JP2007049755A - データ通信プロトコル - Google Patents

データ通信プロトコル Download PDF

Info

Publication number
JP2007049755A
JP2007049755A JP2006307121A JP2006307121A JP2007049755A JP 2007049755 A JP2007049755 A JP 2007049755A JP 2006307121 A JP2006307121 A JP 2006307121A JP 2006307121 A JP2006307121 A JP 2006307121A JP 2007049755 A JP2007049755 A JP 2007049755A
Authority
JP
Japan
Prior art keywords
server
client
commands
data
command
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2006307121A
Other languages
English (en)
Other versions
JP4938418B2 (ja
Inventor
Ahmed Mohamed
モハメド アハメド
David Kruse
クルーズ デイヴィッド
Mathew George
ジョージ マシュー
Pradeep Jnana Madhavarapu
ジュナナ マダバラプ プラディープ
Sundar Subbarayan
サブバラヤン スンダル
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US11/182,251 external-priority patent/US8332526B2/en
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2007049755A publication Critical patent/JP2007049755A/ja
Application granted granted Critical
Publication of JP4938418B2 publication Critical patent/JP4938418B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/06Protocols specially adapted for file transfer, e.g. file transfer protocol [FTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/14Session management

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer Hardware Design (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer And Data Communications (AREA)
  • Communication Control (AREA)

Abstract

【課題】クライアントとサーバが、サーバがクライアント所望のプロトコルに対応しない場合にクライアントに折衝を再試行するよう求めないやり方で折衝するデータ通信プロトコルを提供すること。
【解決手段】1つの例示的実装形態では、所望のプロトコルはSMB2.0以上である。このプロトコルは、おそらく、組み込み拡張可能性のための追加のコンテキストデータが添付された作成コマンド、および複数の関連するコマンドまたは関連しないコマンドを含む複合コマンドを記述する。多重チャネルコマンドは別個のデータチャネル上でのデータ転送を要求し、署名付き機能検証は保護された接続が確立されることを保証するのに使用され、このプロトコルは、要求に応答して、サーバから拡張された誤りデータを転送することのできる機能を提供する。
【選択図】図2

Description

データ通信プロトコルに関する。
SMB(サーバメッセージブロック)プロトコルなど、今日なお使用されている多くのデータ通信プロトコルは、例えば、ネットワーク帯域幅が、通常は、制約されており、メモリが非常に貴重であるといった、コンピューティングリソースが非常に異なっていた時代に開発されたものである。結果として、現代のネットワークで使用されるとき、そのようなプロトコルは、全体的性能を制限することがある。例えば、メモリが不十分であったときに設計されているために、小さいバッファサイズが使用されており、大量のデータを伝達するのにより多くの往復を必要とする。
さらに、既存のSMBプロトコルには、時間の経過と共に明らかになってきた他の限界もある。例えば、既存のSMBプロトコルは、サービス拒否攻撃の影響を受けやすい。すなわち、このプロトコルの設計がこれらの攻撃に対抗するのを難しくしている。同様に、パケットセキュリティを保証する方法も煩雑である。また、例えば、信頼されるクライアントが信頼されないクライアントと同じサーバリソースを獲得するという点で、現在一般的なサービス品質のような操作を行う機構がない。
時間の経過と共にSMBプロトコルの様々な改訂版、またはダイアレクトが開発されているが、それらのダイアレクトはそれぞれ、本質的には、何らかの追加機能を付加するために様々な部分を微調整するパッチベースの手法である。ゆえに、拡張性は簡単なものではない。要するに、既存のSMBバージョンは、依然として使用頻度が高く、貴重なプロトコルではあるが、現代のネットワークリソースと共に使用されるときに理想的とはいえない。
簡単にいえば、本発明の様々な態様は、クライアントおよびサーバが、ファイル共有などのための通信に使用するデータ通信プロトコルを対象とする。クライアントは、クライアントが理解する1組のプロトコルダイアレクトを識別するサーバに折衝パケット(negotiation packet)を送る。このパケットは、第2のデータ通信プロトコルによる通信をする能力があるサーバが、別の要求を必要とせずに、第1の通信プロトコルを使用すべきであると示すような形式である。サーバが第2のデータ通信プロトコルによる通信をする能力がある場合、サーバはそのように応答する。クライアントは、サーバによって示される対応するプロトコルを介してサーバとの通信を処理するドライバを呼び出す。1つの例示的実施形態では、第2の通信プロトコルはSMB2.0以上である。
このプロトコルの他の態様および機能拡張には、追加のコンテキストデータが添付された作成コマンド、複数の関連するコマンドまたは関連しないコマンドを含む複合コマンドが含まれ得る。別の態様および機能拡張には、別個のデータチャネル上でのデータ転送を要求することに関連する多重チャネルコマンド、保護された接続が確立されることを保証するよう求める署名付き機能検証要求、および要求に応答してサーバから拡張された誤りデータを転送することのできる機能が含まれる。
サーバは、複合要求を受け取ると、その複合要求が関連しないコマンドを含むか、それとも関連するコマンドを含むか判定する。複合要求が関連しないコマンドを含むとき、各要求は別々の要求として処理され、そうではなく、複合要求が関連するコマンドを含むとき、各要求は順次に処理される。作成/オープンコマンドを含む関連するコマンドのとき、作成/オープンコマンドからのファイルハンドルは、例えば、クライアントからのハンドル戻りを待たずに、サーバにおいて各後続関連コマンドごとに使用される。
その他の利点は、以下の詳細な説明を図面と併せて読めば明らかになるであろう。
本発明を、例としてあげるにすぎないが、添付の図に示す。図において類似の参照番号は類似の要素を示す。
例示的動作環境
図1に、本発明が実施され得る適切なコンピューティングシステム環境100の一例を示す。コンピューティングシステム環境100は、適切なコンピューティング環境の一例にすぎず、本発明の用途または機能の範囲に関するどんな限定を示唆するものでもない。また、コンピューティング環境100は、例示的動作環境100に示す構成要素のいずれか1つまたはそれらの組み合わせに関連するどんな依存関係または要件を有するものであるとも解釈すべきではない。
本発明は、他の多数の汎用または専用コンピューティングシステム環境または構成と共に動作する。本発明と共に使用するのに適し得るよく知られているコンピューティングシステム、環境、および/または構成の例には、それだけに限らないが、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドまたはラップトップ機器、タブレット機器、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラム可能家庭用電化製品、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、上記のシステムまたは機器のいずれか、印刷サーバやプリンタ自体といった様々なネットワークアプライアンス機器の1つ、ならびにNAS記憶装置を含む分散コンピューティング環境などが含まれる。
本発明は、コンピュータにより実行される、プログラムモジュールなどのコンピュータ実行可能命令の一般的なコンテキストで説明され得る。一般に、プログラムモジュールには、個々のタスクを実行し、または個々の抽象データ型を実施するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。また、本発明は、タスクが、通信ネットワークを介してリンクされたリモート処理装置によって実行される分散コンピューティング環境でも実施され得る。分散コンピューティング環境では、プログラムモジュールは、メモリ記憶装置を含むローカルおよび/またはリモートのコンピュータ記憶媒体に置くことができる。
図1を参照すると、本発明を実施する例示的システムは、コンピュータ110の形で汎用コンピューティングデバイスを含む。コンピュータ110の構成要素には、それだけに限らないが、処理装置120、システムメモリ130、およびシステムメモリを含む様々なシステム構成要素を処理装置120に結合するシステムバス121が含まれ得る。システムバス121は、様々なバスアーキテクチャのいずれかを使用するメモリバスまたはメモリコントローラ、周辺バス、およびローカルバスを含む数種類のバス構造のいずれでもよい。例としてあげるにすぎないが、そのようなアーキテクチャには、ISA(Industry Standard Architecture)バス、MCA(Micro Channel Architecture)バス、EISA(Enhanced ISA)バス、VESA(Video Electronics Standards Association)ローカルバス、およびメザニンバスとも呼ばれるPCI(Peripheral Component Interconnect)バスが含まれる。
コンピュータ110は、通常、様々なコンピュータ可読媒体を含む。コンピュータ可読媒体は、コンピュータ110によってアクセスされ得る任意の使用可能な媒体とすることができ、それには揮発性と不揮発性両方の媒体、取り外し可能と取り外し不能両方の媒体が含まれる。例としてあげるにすぎないが、コンピュータ可読媒体には、コンピュータ記憶媒体および通信媒体が含まれ得る。コンピュータ記憶媒体には、コンピュータ可読命令、データ構造、プログラムモジュール、その他のデータなどの情報を記憶するための任意の方法または技術で実施された、揮発性および不揮発性、取り外し可能および取り外し不能の媒体が含まれる。コンピュータ記憶媒体には、それだけに限らないが、RAM、ROM、EEPROM、フラッシュメモリなどのメモリ技術、CD−ROM、ディジタル多用途ディスク(DVD)などの光ディスク記憶、磁気カセット、磁気テープ、磁気ディスク記憶などの磁気記憶装置、あるいは所望の情報を格納するのに使用でき、コンピュータ110によってアクセスされ得る他の任意の媒体が含まれる。通信媒体は、通常、コンピュータ可読命令、データ構造、プログラムモジュールまたはその他のデータを、搬送波や他の搬送機構などの変調されたデータ信号中に具現化するものであり、任意の情報伝達媒体が含まれる。「変調されたデータ信号」という用語は、その特性の1つまたは複数が、その信号に情報を符号化するような方式で設定または変更されている信号を意味する。例としてあげるにすぎないが、通信媒体には、有線ネットワークや直接配線接続などの有線媒体、および音響、RF、赤外線、その他の無線媒体などの無線媒体が含まれる。また、上記のいずれかの組み合わせも、コンピュータ可読媒体の範囲内に含めるべきである。
システムメモリ130は、読出し専用メモリ(ROM)131やランダムアクセスメモリ(RAM)132などの揮発性および/または不揮発性メモリの形でコンピュータ記憶媒体を含む。基本入出力システム(BIOS)133は、始動時などに、コンピュータ110内の諸要素間での情報転送を支援する基本ルーチンを含み、通常、ROM131に格納される。RAM132は、通常、処理装置120から直ちにアクセス可能であり、かつ/または処理装置120によって現在操作されているデータおよび/またはプログラムモジュールを含む。例としてあげるにすぎないが、図1に、オペレーティングシステム134、アプリケーションプログラム135、その他のプログラムモジュール136、およびプログラムデータ137を示す。
また、コンピュータ110は、他の取り外し可能/取り外し不能、揮発性/不揮発性コンピュータ記憶媒体も含み得る。例にすぎないが、図1に、取り外し不能、不揮発性磁気媒体との間で読取りまたは書込みを行うハードディスクドライブ141、取り外し可能、不揮発性磁気ディスク152との間で読取りまたは書込みを行う磁気ディスクドライブ151、およびCD−ROMや他の光媒体などの取り外し可能、不揮発性光ディスク156との間で読取りまたは書込みを行う光ディスクドライブ155を示す。例示的動作環境で使用され得る他の取り外し可能/取り外し不能、揮発性/不揮発性のコンピュータ記憶媒体には、それだけに限らないが、磁気テープカセット、フラッシュメモリカード、ディジタル多用途ディスク、ディジタルビデオテープ、ソリッドステートRAM、ソリッドステートROMなどが含まれる。ハードディスクドライブ141は、通常、インターフェース140などの取り外し不能メモリインターフェースを介してシステムバス121に接続され、磁気ディスクドライブ151および光ディスクドライブ155は、通常、インターフェース150などの取り外し可能メモリインターフェースによってシステムバス121に接続される。
前述の、図1に示す各ドライブおよびそれらに関連するコンピュータ記憶媒体は、コンピュータ110のためのコンピュータ可読命令、データ構造、プログラムモジュールおよびその他のデータの記憶を提供する。図1では、例えば、ハードディスクドライブ141は、オペレーティングシステム144、アプリケーションプログラム145、その他のプログラムモジュール146、およびプログラムデータ147を格納するものとして示されている。これらのコンポーネントは、オペレーティングシステム134、アプリケーションプログラム135、その他のプログラムモジュール136、およびプログラムデータ137と同じでも、異なっていてもよいことに留意されたい。オペレーティングシステム144、アプリケーションプログラム145、その他のプログラムモジュール146、およびプログラムデータ147には、少なくともそれらが異なるコピーであることを示すために、図では異なる番号が付与されている。ユーザは、タブレットまたは電子ディジタイザ164や、キーボード162や、マイクロホン163や、一般にマウス、トラックボール、タッチパッドなどと呼ばれるポインティングデバイス161といった入力装置を介してコンピュータ110にコマンドおよび情報を入力することができる。図1に示していない他の入力装置には、ジョイスティック、ゲームパッド、衛星パラボラアンテナ、スキャナなどが含まれ得る。上記その他の入力装置は、しばしば、システムバスに結合されたユーザ入力インターフェース160を介して処理装置120に接続されるが、パラレルポート、ゲームポート、ユニバーサルシリアルバス(USB)といった他のインターフェースおよびバス構造によっても接続され得る。また、モニタ191または他の種類の表示装置も、ビデオインターフェース190などのインターフェースを介してシステムバス121に接続される。また、モニタ191は、タッチスクリーンパネルなどを用いて一体化することもできる。モニタおよび/またはタッチスクリーンパネルは、タブレット型パーソナルコンピュータなどのように、コンピューティングデバイス110が組み込まれているハウジングに物理的に結合され得ることに留意されたい。また、コンピューティングデバイス110などのコンピュータは、スピーカ195やプリンタ196など他の周辺出力装置を含むこともでき、それらは、出力周辺装置インターフェース194などを介して接続され得る。
コンピュータ110は、リモートコンピュータ180など、1つまたは複数のリモートコンピュータへの論理接続を使用するネットワークで接続された環境で動作し得る。リモートコンピュータ180は、パーソナルコンピュータ、ハンドヘルド機器、サーバ、ルータ、ネットワークPC、ピアデバイスまたはその他一般のネットワークノードとすることができ、通常は、コンピュータ110に関連して前述した要素の多くまたはすべてを含むが、図1には、メモリ記憶装置181だけが示されている。図1に示す論理接続には、ローカルエリアネットワーク(LAN)171および広域ネットワーク(WAN)173が含まれるが、他のネットワークも含まれ得る。そのようなネットワーク環境は、オフィス、企業規模のコンピュータネットワーク、イントラネットおよびインターネットではよく見られるものである。
LANネットワーク環境で使用されるとき、コンピュータ110は、ネットワークインターフェースまたはアダプタ170を介してLAN171に接続される。WANネットワーク環境で使用されるとき、コンピュータ110は、通常、モデム172またはインターネットなどのWAN173を介して通信を確立する他の手段を含む。モデム172は、内蔵でも外付けでもよく、ユーザ入力インターフェース160または他の適切な機構を介してシステムバス121に接続され得る。ネットワークで接続された環境では、コンピュータ110に関連して示すプログラムモジュール、またはその一部は、リモートのメモリ記憶装置にも格納され得る。例にすぎないが、図1に、リモートアプリケーションプログラム185を、メモリ装置181上にあるものとして示す。図示のネットワーク接続は例であり、コンピュータ間で通信リンクを確立する他の手段も使用され得ることが理解されるであろう。
データ通信プロトコル
本明細書で説明する技術の様々な態様は、SMBプロトコルの後期バージョン(2.x以上)などのデータ通信プロトコルを対象とする。本明細書で一般的に説明する1つの例示的実装形態では、SMBプロトコルがファイルデータ転送に使用される。しかしながら、容易に理解され得るように、本発明は、本明細書で説明する任意の特定の実装形態や例はもちろんのこと、ファイルデータにも限定されるものではない。そうではなく、プリンタ、名前付きデータパイプ、一般の装置などとの通信での使用を含めて、本発明を実施する多数のやり方が実行可能である。したがって、本発明は、本明細書で使用する特定のファイルベースの例のいずれにも限定されず、コンピューティング一般において利益および利点を提供する多数のやり方で使用され得る。
本明細書で説明する技術の他の様々な態様は、ファイルサーバ対話がその上に構築され得るSMBの新しい改訂版を対象とする。理解されるように、より拡張性があり、新しい機能を用いて更新するのがより容易であると同時に、既存の(上位)機能をサポートするより軽量なプロトコルが提供される。
図面の図2を見ると、クライアント202が1つまたは複数の通信チャネルを介してサーバ204と通信するネットワーク環境の一例を表すブロック図が示されている。クライアントマシン202とサーバ204の機能およびコンポーネントを、図1の主コンピュータシステム110とリモートコンピュータシステム180のような、2つの別々のコンピュータ内に位置するものとして説明するが、これら2つのコンピュータのコンポーネントまたはそれらによって実行される機能は、1つのマシン上で提供することもでき、いくつかのコンピュータにわたって分散させることもできる。
アプリケーションプログラム206からのネットワークファイルシステムコマンドは、ファイルシステム212に対するコマンドを実行するために相手先の共通ネットワークモジュール(SRVNET)210と通信する、クライアントリダイレクタコンポーネント208によって処理される。そのようなコマンドが処理される前に、クライアントとサーバが同意する通信プロトコル、一般に、両方の理解する最新バージョン/ダイアレクトが折衝される。
一般に、クライアント202は、接続を確立し、次いで、図3に一般的に表すように、サーバ204と折衝して最終的にセッションをセットアップする。クライアントは、サーバに対して、それがSMB2.xクライアント(本明細書で使用する場合、2.xという数は、既存のSMB1.xバージョンに対する任意のより新しいバージョンを表す)であることを直接示すこともできるが、クライアントは、後方互換の折衝パケットによって折衝することもできる。このようにして、クライアントは、SMB1.xだけにしか対応しないサーバとも通信し、しかも、より上位レベルの折衝での試行に失敗した場合でも、別の接続をセットアップすることを必要とせずに通信することができる。同時に、各プロトコルを実施するコードは、それ独自の独立ドライバにパッケージされ得る。
1つの例示的実装形態では、クライアントSMBエンジンコンポーネント220は、サーバ(サーバ204など)に対して、クライアント202が少なくとも1つのSMB1.0セッションを折衝していることを示すパケットを提供する。SMB1ダイアレクトと、このプロトコルの新しいSMB2改訂版の両方を話すクライアント202では、クライアントは、従来のSMB1折衝パケットではあるが、さらに、このパケットが、利用可能であれば、実際にはSMB2.xを要求しているという指示も含む折衝パケットを送ることができる。SMB2対応サーバは、この要求を検出し、SMB2折衝応答で応答する。より具体的には、クライアント202がSMB2.xに対応することを示すために、このSMB1.0折衝パケットは、そのうちの1つが、クライアントがSMB2.x通信にも対応することを示す、1組のダイアレクトストリングを含む。
ゆえに、クライアント202は、クライアント202がサポートするマイナーバージョン番号を含む初期折衝を送る。1つの最新の改訂版は0(ゼロ)、すなわち、SMB2.0である。将来において、クライアントは、ダイアレクト改訂版の任意のサブセットをサポートすると主張し得る。
サーバ204は、このパケットを受け取ると、その対応能力に基づいて応答する。サーバ204は、任意の1.xダイアレクト情報と共に、SMB1.0折衝応答で応答することができ、SMB2.x通信対応の場合には、SMB2.0折衝応答で応答する。また、通常は、クライアント202が提供したダイアレクトバージョンの中でサーバ204が処理し得る最大数のバージョンである、ダイアレクトストリングの1つにマッチする特定のSMBダイアレクト改訂版も返され得る。
このために、サーバ204は、クライアント202がどのダイアレクト改訂版を話すかを知ると、これらを、サーバ204が理解する改訂版と比較し、好ましい共通ダイアレクト改訂版(通常は最高のものになる)を返す。例えば、サーバはダイアレクト1〜8をサポートするが、クライアントは1、2および4だけをサポートする場合、サーバは4を返す。これにより、クライアント202は、それがサーバ204にどのコマンドを送ることができるか明確に理解することができる。どのダイアレクトを使用すべきか選択するために、SRVNETモジュール210は、基本的に、折衝を開始し、1つのSMBプロバイダがパケット内容に基づいてこの通信セッションを処理することに同意するまで、バージョン/ダイアレクトに関して最高から最低の順で、SRVNETモジュール210が持つ各SMBプロバイダ2221〜222mにパケットを渡す。その後、この接続上での通信がそのプロバイダ、この例ではSMB2.0プロバイダ222mに経路指定される。
クライアント側において、SMBエンジンコンポーネント220は応答を受け取り、応答中のバージョン/ダイアレクト情報に基づいて、サーバと通信するのにどのクライアントSMBコンポーネント2241〜224nを使用すべきか知る。このようにして、クライアント202とサーバ204は共に、所与のセッションにどのSMBダイアレクトを使用すべきかについて合意する。クライアントは、それぞれ異なるバージョン/ダイアレクトの、同時に走る複数のSMBコンポーネント2241〜224nを持つことができ、それによって、例えば、クライアントは、SMB2.xを介して別のサーバと通信するのと同時に、SMB1.xを介してあるサーバと通信することができることに留意されたい。
また、サーバ204は、クライアントに対して、サーバ204がセキュリティ署名を必要とするかどうかクライアント202に知らせるセキュリティモードを含めて、他の情報も返す。以前は、セキュリティ署名は利用可能であったが、最初の少数の(例えば、対応能力折衝)パケットは妨げられず、そのため、攻撃者はクライアントに、攻撃者がその脆弱性を知っているより下位のプロトコルを強制することができたことに留意されたい。
保護された接続は、(署名が使用可能であるか否かを問わず)署名付きの別の対応能力検証往復を提供することによって動作する。図7に、セットアップに続くそのような要求/応答を示す。サーバが、別のエンティティではなくそれが応答したことを実際に検証することができるように、IPアドレスなど他の情報がパケットに入れられ得る。署名は、IPSECまたは他の任意の形のネットワークセキュリティがアクティブである場合には、オフにされ得る。
サーバ204は、サーバの対応能力ビット(capabilities bits)、例えば、サーバがDFS(分散ファイルシステム)対応であるかどうか、およびサーバがLWIO(軽量入力)対応であるかどうかなどを返すことができる。クライアント202は、それが理解しないどんな対応能力ビットも無視し、これは、サーバ204がクライアントの対応するバージョンより新しいバージョンを持つ場合に起こり得る。折衝のやり取りで返され得る他の情報には、サーバの一意のID、サーバが受け入れる最大読取り/書込みサイズ、より高速の書込み処理のためのデータオフセットヒント、サーバの現在のシステム時刻、および拡張されたセキュリティの場合に認証をシードするのに使用されるセキュリティ情報が含まれる。
セッションセットアップは新しいセッションの認証プロセスを処理し、複数の往復イベントとすることができる。クライアント202は、ローカルセキュリティシステムに、ネットワークを介して送るセキュリティブロブを問い合わせ、以下で説明するように、対応能力、最大サイズフィールド、およびVcNumberを入力して、最初のセッションセットアップを送る。サーバ204は、このブロブを受け取り、それをセキュリティシステムに渡す。サーバ204は、さらなる情報が必要であると判断した場合、誤りコードSTATUS_MORE_PROCESSING_REQUIREDと共に、それ自体のセキュリティブロブを返す。クライアント202は、このブロブをローカルセキュリティシステムに戻し、プロセスは、失敗が発生し、または認証に成功するまで繰り返す。
VcNumberは、サーバ204に、この同じクライアント202から確立された他の接続があり得るかどうか知らせる。これがゼロである場合、サーバ204は、このクライアントから他の接続が行われていないと仮定し、見つかったそのようなどんな接続も(それらが失効しているものと仮定して)切断する。VcNumberが1以上である場合、サーバ204は、既存のどんな接続も切断しない。
チャネルは、サーバ204に、このクライアント202が既存のセッションと別の接続を確立しようとしていることを知らせる。このセッションは、このセッションセットアップがそこから受け取られたユーザ/コンピュータ対によって識別され得る。チャネルは、同じTreeId/UserId/ProcessId/FileId情報を共有する。チャネル認証では、認証ブロブは、クライアント202とサーバ204が相互に相手を認証し合うことができるように、第1のチャネルを介して暗号化され、第2のチャネルを介して送り返されるチャレンジ/レスポンスとすることができる。正常な応答時に、サーバ204は、クライアント202に、そのどちらかが妥当な場合には、クライアントがゲストとして認証されているか、それともヌルユーザとして認証されているかも通知する。
セッションがセットアップされると、クライアント202は、作成、読取り、書込みおよびクローズを含む、以下で説明する様々なコマンドを使ってデータ転送を行うと共に、ファイルロッキングおよびディレクトリ関連の操作を行うことができる。これらのコマンドを使用すると、サーバは、クライアントによるサーバリソース使用を制御することができる。また、プロトコルは、どんな情報が伝達されるか、およびそれがどのようにして伝達されるかに関して、いくつかの効率改善も提供する。
図4に一般的に表すように、この作成コマンドは、コマンドにコンテキスト情報を添付させるように拡張されている。一般に、コンテキスト情報は、作成コマンドにタグ付けされる随意の追加の作成パラメータを含む。例えば、トランザクションファイルシステム関連の作成コマンド用のトランザクション識別子が添付され得る。サーバがその追加コンテキスト情報を理解する限り、サーバは、拡張情報の知らせを受け(サーバは、それらが理解しない追加データを無視することに留意されたい)、そのコンテキストに関連付けられた情報を返すことができる。容易に理解されるように、これは、プロトコルを変更せずに追加機能を提供し、本質的に組み込みの拡張可能性を提供するものである。
コマンドIDおよびダイアレクト改訂番号が、以下に示すように、新しいSMBヘッダで提供される。このヘッダは、コマンドフィールドに、UCHARではなく、USHORTを持つ。このUSHORTの最初のバイトを使ってダイアレクトを表し、後のバイトを使ってコマンドを表すことによって、コマンド表が既存のコマンドのために明確に定義され、大部分は後で拡張するためにオープンとされる。一般に、クライアントは、所与のコマンドを発行する関数を指し示すポインタを含む各ダイアレクトごとの表を維持することができる。単一のダイアレクトをサポートするクライアントでは、この表は以下のように示されるはずである。
Figure 2007049755
キャッシュ機能では、クローズに際して、ファイルからより多くの情報が検索され得る。そのため、この新しい機能をサポートするために新しいクローズコマンドが提供される。今やクライアントは2つのダイアレクトをサポートしており、表は以下のように示される。
Figure 2007049755
変更されたクローズコマンドを除いて、機能の大部分は同じままであることに留意されたい。また、クライアントは、今や、ダイアレクト2サーバと話し、新しい機能を使用することもできるが、ダイアレクト1サーバには依然として古い機能を使用する。ダイアレクト1サーバとの通信に変更はない。
技術が進化するにつれて、相対的にはるかに大きい読取りおよび書込みを実行することができるなど、新しいネットワークハードウェアが利用可能になる。このリリースでは、ダイアレクト#3が提供され、それによって表が以下のように拡大される。
Figure 2007049755
そのような表を備えるクライアントは、3つのダイアレクトを話すことができ、各ダイアレクトで利用可能な機能を利用する。この方法を使用することの利点の中には、各SMBコマンドが、(ダイアレクト|コマンド)で構成されるために、それがそこに導入されたダイアレクトに逆マップされ得ることが含まれる。これは、コマンドがいつ導入されたか、およびどんなサーバがそれらのコマンドをサポートしているか判断するのを容易にする。所与のコマンドの機能が新しいダイアレクトで変更されない場合、そのコードは変化しない。機能が変更される場合、下位レベルのインターフェースコードは変化せず、むしろ、新しい機能をサポートするための新しいコードが追加される。
サーバ側では、サーバディスパッチ表が、(ダイアレクト)と(コマンド)の間のダブルスイッチ(double switch)になる。これは、コードにおいて新しい機能を論理的に分離し、それを理解し変更するのを容易にすることができる。
効率性を提供するプロトコルの一態様を見ると、複数のコマンドが単一のパケット(またはいくつかのより少ない数のパケット)に複合され得る。ゆえに、複雑なタスクが、クライアント202とサーバ204の間の往復回数を低減するようなやり方で実行され得る。例をあげると、複合要求パケットは、ファイルを作成する/開くコマンド、ファイルに書き込むコマンドおよびファイルから読み取るコマンドを含み得る。このようにして、複合は、(例えば、同じファイルハンドルを持つ)関連する操作を処理すると共に、関連しない操作が組み合わされることも可能にする。
関連する要求を複合する一例を、図5に一般的に表す。図5では、(例えば、図4などとは対照的に)単一の要求で書込みおよび読取りを処理し、適切なパラメータを提供することができる。図5に表すように、単一の要求は、1つの複合応答および/または個々の応答を、例えば、それらがいつ完了するかに応じて、受け取ることができることに留意されたい。作成/オープンし、読み取り、書き込み、閉じるといった、より複雑な要求も単一の要求に含まれ得る。これは、関連する操作を持つとパケットにマークすることによって達成される。すなわち、サーバは、それが作成/オープンに続いて受け取るファイルハンドルが、複合要求のその他のコマンドに適用されることを知る。しかしながら、関連する複合要求は、それらがパッケージされている順序で処理され、ゆえに、それらが送信前に正しく順序付けられることを保証するのはクライアントの責任であることに留意されたい。
SMB2における複合は、SMB1に存在していた複雑な規則より簡単である。このために、(以下で詳述する)SMB2_HEADERは、現在のコマンドのヘッダからの次のコマンドのヘッダのオフセットを識別するのに使用される「NextOffset」を含む。各コマンドは、別々のMessageIdを含む、独自のSMB2_HEADERを備える。1つまたは複数のサーバ応答は、図5に示すように、単一の複合応答として、または別々の応答としてもたらされ得る。失敗の場合、応答は、他の任意の失敗したコマンドと同じになるはずである。
関連しないメッセージでは、コマンドは、常に、あたかもそれらが別々に受け取られたかのように処理される。これは、リダイレクタまたは中間コンポーネントが関連しないパケットを自動的に複合することを可能にする。特に、遅延時間が往復時間に対して相対的に小さい場合には、遅延を使って複合すべきパケットが獲得され得る。サーバはそれらのパケットが別々に受け取られたとみなすため、サーバは、そのような複合の関連しない要求をアンパックするように別に変更される必要がない。しかしながら、その複合を実行したエンティティは、サーバが別に別々の応答を結合することができるため、任意の複合応答を分離しなければならないことがある。
関連するモードは、クライアントが、あるコマンドの結果が潜在的に次のコマンドで使用される、順次に実行されるべき一連のコマンドを送ることを可能にする。そのようなコマンドは、同じセッション/プロセス/ツリー/ファイルIDを共有し、順次に実行され、最初の誤り発生時に処理を停止する。失敗の後に処理すべき他のコマンドがあった場合、それらの操作は、STATUS_NOT_PROCESSEDで直ちに失敗する。これがどのようにして使用され得るかの一例が、セッションセットアップをツリー接続と組み合わせることである。セッションを確立するのに失敗した場合、ツリー接続は決して試行されず、STATUS_NOT_PROCESSEDで失敗する。セッションセットアップに成功した場合、セッションセットアップコマンドからのSessionIdを使ってツリー接続が行われる。同じ方法を使って、作成に続けてQueryFileInformation、または作成/読取り/クローズのセットさえも行うことができるはずである。
また、条件付きまたは暗黙の複合も実行可能である。例えば、1回の往復で、小さいファイルは開いて自動的に獲得するが、大きいファイルは開くだけとする、開き、かつ、ファイルが64KB未満であれば読み取るなどの条件付複合コマンドを送ることができる。また、明示的に要求されなくとも、ディレクトリを開く要求に応答してディレクトリ列挙データを自動的に返すなどの暗黙の複合も、往復回数を削減することができる。そのような拡張された複合の利益および利点は、高遅延ネットワークにおいて増大する。
このプロトコルによってうまく効率が改善される別のやり方は、多重チャネル通信によるものである。クライアントとサーバの間で、データをストリーミングする交替チャネルを指定するコマンドを用いて、コマンド用トランスポート接続が使用され得る。例えば、読取り要求は、オフセットおよび長さ、ならびにデータを読み込む交替チャネルを指定することができる。書込み要求も同様に動作する。図6に、オフセット0から開始し、データがデータチャネル5にストリーミングされるよう要求する1GBの読取り要求の一例を示す。
交替チャネル上のストリーミングデータは、パケットヘッダを含み、それを処理する必要がなくなることを含めて、いくつかの利益を提供する。クライアントは、バッファを事前に配置し、そこにデータをストリーミングさせることができ、従来方式の単一チャネル通信の場合のように、あるバッファから別のバッファにコピーする必要がなくなる。別の利益は公平性であり、それは、例えば、制御チャネル上のある要求は、その他の要求が処理される前に、完了すべき大量のデータ(例えば5GB)が送信されるのを待つ必要がないという点においてである。というのは、その5GBはデータチャネルを介して進むからである。
複数のNICがより一般的になるにつれて、プロトコルは、任意の利用可能なネットワーク帯域幅を利用する。これは、接続が確立されているトランスポート(またはNIC)を問わず、同じセッションのために複数の接続にまたがって処理することを含む。専用ハードウェアも用いられ得る。
ゆえに、SMB2.xを用いると、セッションは接続にバインドされない。そうではなく、異なる物理接続にまたがって存在する多重「チャネル」が確立され得る。セッションはこれらの接続のそれぞれに存在することができ、ファイルおよびプロセスを参照するのに使用されるIDは、チャネル間で共通である。これは、名前空間操作および作成を行うための通常のチャネルを備えるが、利用可能なときには、読取りおよび書込みに専用ネットワークハードウェアを使用することを可能にする。しかも、小さいネットワークグリッチはデータ損失を生じ得ない。というのは、1つのチャネルがあるセッションに対して開いたままである限り、そのセッションは活動状態のままだからである。本明細書では、セッションセットアップコマンドおよび読取り/書込みコマンドに関連して様々な実装詳細を説明する。
例として、企業の公衆網を介してサーバに単純なTCPによる接続を確立するクライアントを考える。これは最初の接続であり、そのため、常にチャネル0である。クライアントとサーバ両方の側が、それらがデータ転送を行うための私設網を備えている(例えば、それぞれがギガビットカードを備えている)ことを検出すると、クライアントおよびサーバは、チャネル1として、このカードを介した第2の接続を確立することができる。クライアントがいくつかのファイルをブラウズしている間、ディレクトリ問い合わせはチャネル0を介して送られ、他方、データはチャネル1を介して送られている。クライアントが、サーバ上で暗号化されているいくつかのディレクトリにブラウズしようとする場合、クライアントがデータを要求すると、リダイレクタは、そのデータが機密であることを理解し、そのため、その上でIP Sec(IPセキュリティ)をアクティブにしているサーバへの新しいチャネル(チャネル2)を確立する。クライアントは、機密データを要求するときに、それがチャネル2を介して送られるよう求めるが、通常の機密性の低いデータは(より高速であるため)引き続きチャネル1を介してもたらされ得る。
容易に理解されるように、サービス品質およびセキュリティ改善の機会は、単純な帯域幅ゲインと共に、著しい利益を提供する。チャネル読取り/書込みに際して、サーバ/クライアントは、データが読み取られる前に受信バッファを置くことができ、そのため、この機構は、さらに、データ移動からコピーする必要をなくすことができ、これは、サーバ/クライアント拡張性も改善し得ることに留意されたい。
さらに、SMB誤りパケットには、随意のデータをタグ付けすることができる。ゆえに、何かがなぜ失敗したかが記述され、それが値を提供し得る。図8に一般的に表すように、シンボリックリンク評価は、随意データをタグ付けすることがクライアントに役立つ情報を提供する一例である。本質的に、クライアント作成要求は、実際には別のパスへのシンボリックリンクであるパスを求めることによって失敗し得る。単にその要求を失敗させるのではなく、新しいパスを提供する情報は、クライアントが最終的に成功することになる再解析パスに変更することを可能にする。成功するパスを見つけるには、いくつかの要求に及ぶ反復が必要とされ得ることに留意されたい。
例示的プロトコル定義
新しいヘッダは64バイト構造(例えば、1つの現在の構造の2倍のサイズなど)である。
Figure 2007049755
Protocolは、単に、パケットを識別するプロトコル識別子である。既存のSMB実装形態では、これは、{0xFF,’S’,’M’,’B’}からなる。新しいプロトコルでは、これを{0xFE,’S’,’M’,’B’}とする。
StructureSizeは、SMB2_HEADER構造のサイズを識別し、後で他の変更が導入される場合に、ヘッダ自体の内でのマイナーバージョン管理に使用される。
Epochはサーバの「バージョン数」を表す。これは、サーバがサイクル動作をした(またはサーバサービスが停止され、開始された)ときに、クライアントに対して、サーバが切断にまたがって状態を維持することができているかどうか示すために増分される。これは、永続的ハンドルを用いたその後の使用のためであり、当面の間は「予約済み」とみなされ得る。
Statusは、既存のSMB実装形態の場合と同様に、所与の操作での誤り状況を提供する。
Commandは本明細書で説明するように、パケットのコマンドを識別する。
CreditsGranted/CreditsRequestedは、クライアントによって送信時により多くのクレジットを要求するために使用され、サーバによってその応答時に、新しいクレジット管理方式内でより多くのクレジットを許可するために使用される。
メッセージに関連するFlagには以下が含まれる。
Figure 2007049755
これが存在するとき、そのメッセージが要求に対する応答であることを示す。
Figure 2007049755
応答時、サーバは、それを非同期的に処理していることを示すようにこのフラグを設定してSTATUS_PENDINGを返す。
Figure 2007049755
複合メッセージのクライアントメッセージ送信時に、操作が関連しており、そのため、作成で開かれているファイルが後の操作でFileIdとして使用されることを示すために設定される。
Figure 2007049755
パケットが署名されているときに設定される。受信側は、その署名を検証する必要がある。署名に使用される鍵は、そのパケットを送信したセッションに基づくものである。
Figure 2007049755
これはDFS操作である。サーバは、DFSに名前を変更(munge)させる必要がある。これは、作成オプションで置換され得る。
MessageIdは、その応答と共に送られるメッセージを識別する。
ProcessIdは、コマンドを発行するプロセスのクライアント側識別を記述する。
SessionIdは、コマンドの確立されたセッション、またはセッションが使用されていない場合には0を識別する。
TreeIdは、コマンドのツリー接続、またはツリー接続が使用されていない場合には0を識別する。
AsyncId:メッセージIDは実際には連番であり、利用可能な連番のウィンドウは、常に、右側にスライドするように設定される。極端に長期間実行されるコマンド(そのいずれもが無期限にブロックし得る、名前付きパイプ読取りまたは変更通知、あるいはoplock解除時に保留する作成など)は、ウィンドウがスライドする機能を停止させることがある。この問題に対処するために、サーバは、任意選択で、任意のコマンドにSTATUS_PENDINGを用いて応答することができ、前述のSMB2_FLAGS_ASYNC_COMMANDフラグを設定し、Session/Tree/ProcessIdの代わりに一意の識別子を提供する。これは、クライアントが、あたかも応答を受け取ったかのようにウィンドウをスライドし続けられることを意味する。その後のある時点に、本物の応答が、要求を満たすマッチングAsyncId(およびCommandId)と共にもたらされる。クライアントがそのようなコマンドを取り消そうとする場合には、クライアントは、フラグ設定およびマッチングAsyncIdと共に取消しを送る。
セキュリティ署名は、もはや隠れたインデックス番号が無いことを除けば、以前のプロトコルと同じである。インデックスは、必ずしもMIDでの連番の使用を伴わない(これは、直接再現可能性を防止する)。これは、操作がトランスポートに向かう途中で順序付けられるよう強制せずに、セキュリティ署名の使用を可能にする。
NextCommandは、このヘッダの先頭からメッセージ中の次のコマンドへのオフセットである。メッセージは、クワッド整列(quad−align)される必要がある。SMB2_FLAGS_RELATED_COMMANDの使用は、前述のように、複合のための様々な機能を可能にする。
コマンド形式
NEGOTIATE
前述ように、クライアントとサーバは、相互の対応能力を判定するのに役立つハンドシェークの一部として、折衝要求と応答を交換する。
形式
Figure 2007049755
SESSION SETUP
前述のように、Session Setup(セッションセットアップ)は、新しいセッションの認証プロセスを処理する。
形式
Figure 2007049755
LOGOFF
既存のセッションをログオフする。
形式
Figure 2007049755
このコマンドは、ヘッダで指定されるSessionIDを持つセッションを切断する。開いているファイルは閉じられ、他の既存の構造(ツリー接続など)は切断される。所与のSessionIdでは、それ以上の操作は処理され得ない。
TREE CONNECT
サーバマシン上の共有リソースへのツリー接続を作成する。
形式
Figure 2007049755
クライアントは、ツリー接続を確立するためにサーバにこのコマンドを発行する。パスは、\\server\shareの形のものであり、バッファに記入される。サーバ名を包含することは、共有スコーピング(share scoping)のような機能を可能にする。
サーバからの正常な応答時に、クライアントは、ヘッダでShareFlagsおよびShareCapabilitiesと共にTreeIdを受け取る。現在、共有フラグは、クライアントに、共有用のCSCキャッシュ特性が何であるかを示すが、後でさらに多くが付加され得る。対応能力は、クライアントに、その共有を支持するファイルシステムが、ファイルレベルのセキュリティ、タイムワープ、TxF(トランザクションファイルシステム)、またはクライアント側の暗号化をサポートするかどうか知らせる。ファイルシステムが、これらの特性を、全部ではなく一部のサブツリー上でサポートしている場合(マウントポイントの場合など)、ファイルシステムはこれらの特性をサポートしていると返し、それが許容されない場合には、単に、これらの特性の使用を求める個々の要求を失敗させるはずである。クライアントは、それが理解しないどんなフラグも対応能力も無視するはずである。
TREE DISCONNECT
既存のTreeConnectを切断する。
形式
Figure 2007049755
コマンドが処理された後は、所与のTreeIdに関してそれ以上の操作は正常に完了され得ない。TreeIdは、ヘッダから取られる。
CREATE
ファイル、プリンタ、またはパイプを開く。
形式
Figure 2007049755
Figure 2007049755
作成要求は、従来の明確な属性以外の様々な属性を持つファイルの作成を可能にするよう求める可変長要求である。(拡張された属性が存在しない)標準的な場合は簡単明瞭である。すなわち、クライアントは、RootDirectoryFid(必要に応じて相対オープンのため)、DesiredAccess、FileAttributes、ShareAccess、CreateDisposition、およびCreateOptionsに記入する。これらは、所望のoplockレベルを設定し、サービス品質のためのSecurityFlagsおよびImpersonation(偽装)レベルに記入する。現在、SmbCreateFlagsは定義されていないが、その使用ためのスペースが割り振られている。クライアントはこのパケットをサーバに送り、サーバはファイルを開いて、失敗コードを返し、または、ファイルを識別するFileId、Creation/LastAccess/LastWrite/LastChangeTime、AllocationSizeおよびEndOfFile情報、ならびにFileAttributesと共にSuccess(成功)を返す。
それは、現在のプロトコルが行うのとほぼ同じように動作する通常の場合である。より高度な場合について、ユーザが拡張された属性(EA)を持つファイルを作成しようとしていると考える。以前のプロトコルでは、Transact(トランザクション)呼び出しを介した、これを処理する全く異なるやり方があった。今や、クライアントは、通常どおり作成要求を組み立て、しかも、その作成要求の末尾にCreateContextを付加することもできる。その要求は、「ExtA」という名前を持ち、データはファイルに関して設定するEAを含むはずである。サーバは、これを受け取ると、EAデータを構文解析し、それを作成と共に発行するはずである。また、作成コンテキストは、作成応答時に追加情報を提供するためにも返され得る。最初の反復では、名前は、長さ4のものになり、そのため、それらをlong型としてフォーマットし、それらをオンにすることができる。現在のCreateContextのリストは以下の通りである。
1)「ExtA」−データは、作成ファイルに持たせる拡張された属性を含む。
2)「SecD」−データは、作成ファイルに持たせる自己相対セキュリティ記述子を含む。
3)「TWrp」−データは、開くファイルを検索するのに使用されるべきタイムワープタイムスタンプを含む。タイムスタンプはシステム時刻形式である。
4)「MrTx」−データは、トランザクションでファイルを開くときに使用されるマーシャリングされたトランザクションを含む。
5)「MnVr」−データは、処理ファイルを開くためのミニバージョン番号(ULONG)を含む。
6)「Vers」−データは、開かれたファイルのバージョン番号(ULONG)を含む(作成応答)。
7)「NFid」−データは、開かれたファイルのNTFS Fid(LARGE_INTEGER)を含む(作成応答)。
8)「$Efs」−データは、新しい暗号化ファイルにスタンプされる$EFSストリームを含む。
9)「CSE1」−データは、開かれた暗号化ファイルの$EFSストリームを含む(作成応答)。
サーバがサポートする際により多くのCreateContext値が追加され得る。(クライアントが、作成要求を発行する前に、サーバがどのタグをサポートしているかわかるように、値が追加される際、それらの値は、それらに関連付けられた対応能力ビットを持ち、または新しいダイアレクト改訂版に関連付けられるはずである。)未認識コンテキストタグを持つ作成要求を受け取るサーバは、その要求を失敗させるはずである。
CLOSE
クライアントは、以前に開かれたファイルのインスタンスを閉じるためにClose(クローズ)を送る。クローズが処理されると、以前のFIDに関してどんな操作も許容されない。
形式
Figure 2007049755
クローズコマンドで、クライアントは、閉じられるファイルのFileIdを、(SystemTime形式の)LastWriteTimeと共に指定する。これは、クライアントが、ファイルにキャッシュ書込みが行われた最後の時刻をファイルに対する最後の書込み時刻として設定することを可能にする。また、クライアントは、LastWriteTimeを指定しないことを示すために、LastWriteTimeについてゼロを送ることもできる。また、この構造は、現在は未定義であるが、後の時点において使用され得るCloseフラグのための場所も割り当てる。
FLUSH
フラッシュコマンドは、サーバに、所与のファイルに関するすべてのキャッシュデータをフラッシュするよう知らせる。
形式
Figure 2007049755
サーバからの正常な応答時に、クライアントは、すべてのキャッシュデータがその永続的補助記憶にフラッシュされていることを保証される。クライアントは、フラッシュしようとするファイルのFileIdを指定する。パイプのフラッシュは、そのパイプからすべてのデータが消費されるまで戻らず、それにはしばらく時間がかかることがある。
READ
開いたファイルからデータを読み取る。
形式
Figure 2007049755
Read(読取り)は非常に分かりやすい。クライアントがファイル(FileIdによる)、オフセット、および読取りの長さを指定し、サーバがデータを返す。クライアントが指定し得ることが他にいくつかある。MinCountは、サーバに、正常な戻りのためにそれがファイルから読み取る最小量を知らせる。読取りがその量に達しない場合、サーバは、単に、データバッファ全体を返すのではなく失敗を返す。また、クライアントは、より適切な処理のためのPadding(パッディング)を推奨することもできる。これは、サーバがデータを入れるべき読取り応答パケットへのオフセットである。これは、クライアントが、情報をトランスポートから外れて受け取るときに、より効率のいいやり方で読取り応答バッファを設定することを可能にする。残りのフィールドは、サーバに、これがその読取りの一部にすぎない場合、読取り全体がどれほどになるか示す。ゆえに、クライアントが1kチャンク単位で8kを読み取ることになる場合、クライアントは、Remaining(残り)=7kとして1kの読取りを発行するはずである。これは、サーバに、8k全部を1回の操作で読み取り、そのデータをクライアントに戻してバッファすることにより最適化するオプションを可能にする。
サーバは、サーバ応答時に、読取りコマンドで指定されたDataRemainingと共に(DataLengthフィールドで)どれほどのデータを返すか示す。
コマンドで指定されたチャネルが、そのコマンドがもたらされたチャネルでない場合、ユーザは、チャネル読取りを求めている。これは、チャネル0上で、「channel=1、Length=0、Remaining=64k」として読取りを要求する場合、サーバは、「DataLength=0、DataRemaining=64k」で応答し、チャネル1を介してもたらされる次の64kバイトがそのデータであることを意味する。クライアントは、このコマンドが発行されるときにチャネル1上でどんなデータ応答も未処理にならないようにこれを同期させる役割を果たす。また、クライアントは、応答が先頭の1kのデータを含み、データの残り(後の7k)がチャネル1を介してストリーミングされるように、(チャネル0上で)「read Channel=1、DataLength=1k、Remaining=7k」を発行することもできる。
WRITE
開いたファイルにデータを書き込む。
形式
Figure 2007049755
クライアントは、(FileIdで識別される)ファイル、オフセット、書込みの長さを記入し、データを添付する。サーバ性能を助けるために、データが最初の折衝応答で返されるときパッディングされることが推奨される。また、クライアントは、サーバを最適化させるために、どれほど追加のデータをサーバに書き込むか示すこともできる。応答時に、サーバは、どれほどが書き込まれたか示し、さらに予期している量を返す。
書込みで指定されたチャネルが、コマンドがもたらされたチャネルでない場合、クライアントは、別のチャネルでデータをストリーミングするよう求めている。一例が、チャネル0上で、「Channel=1、Length=0、Remaining=64k」と共に受け取られる書込みであろう。クライアントは、チャネル1で64kの書込みをストリーミングするよう求めている。サーバは、この書込みを可能にするために、「Count=0、Remaining=64k」として応答するはずである。応答は、このチャネル上でデータが送られ、確認された後でもたらされる第2の応答のAsyncIdを含む。その場合、チャネル1上でストリーミングされる次の64kバイトがそのデータになるはずである(ヘッダなし)。完了時に、サーバは、操作の成功/失敗を示すためにチャネル0上でSMB2_RESP_WRITEを送り、AsyncId情報を使って第2の応答を送る。ただし、特定のチャネルが固有の肯定応答を可能にする場合はこの限りではなく、それは、そのチャネル自体で行われる。
BREAK_OPLOCK
ファイルに対して講じられる便宜的ロックの解除を要求し、確認するのに使用される。
形式
Figure 2007049755
別のユーザが、既存のロックの解除を必要とするやり方で、クライアントが便宜的ロックを保持しているファイルへのアクセスを要求すると、SRVは、そのクライアントに、SMB2_RESP_BREAK_OPLOCKを送る。次いで、クライアントは、そのoplockを解除するために所与のファイルについてREQ_BREAK_OPLOCKを送るはずであり、SRVは、この場合もやはり、それに応答してこれを確認する。
LOCK
バイト範囲ロックを要求するのに使用され、便宜的ロックを要求する(また、ロックが解除されたときにクライアントに知らせる)のにも使用される。
形式
Figure 2007049755
Lock(ロック)要求の構文は、SMB1ロック要求に類似している。クライアントは、FileIdと、ロックしようとするオフセットおよび長さを示す1つまたは複数のSMB_LOCK構造を指定する。これらのロック構造のすべてはロックまたはアンロックでなければならない。しかしながら、単一のバッチロック操作(batched lock operation)において、共有された排他的ロック要求を混在させることができる。ロックバッチ処理(lock batching)の最も一般的な用途は、バッチoplock解除の一部として一連のロックを請求することであり、それらロックすべてが成功することが保証されているときに最も有用である。
正常な戻りは、クライアントが要求されたバイト範囲ロックを獲得した(または解除した)ことをクライアントに示す。失敗の場合には、バイト範囲ロックは許可されていない。
ECHO
Echoは、クライアントによって、サーバが、所与の時点において依然として稼動しているかどうか判定するのに使用される。このコマンドを受け取ると、サーバは、単に、それを反転させ、成功を返す。
形式
Figure 2007049755
サーバは、パケットに応答して、適正に動作していることを示す。クライアントにサーバを「ping」させるのに使用される。
CANCEL
クライアントによって、送信済み操作の取消しを要求するのに使用される。
形式
Figure 2007049755
Cancel(取消し)に応答はないが、結果として、コマンド自体が正常に完了され、またはSTATUS_CANCELLEDで失敗することになるはずであり、これは可能な限り早く行われるはずである。送られる操作は、それが取消しコマンドのMessageIdを共有することになるため識別される。これは、サーバに送信されたMessageIdがすでに以前に使用されている場合の一事例である。応答がAsyncIdと共にもたらされた場合、それはヘッダにあるはずであり、サーバ側でコマンドを探し出すのに使用される。
IOCTL
IOCTLは、ネットワークを介してDevice Control(デバイス制御)またはFile System Control(ファイルシステム制御)コマンドを発行するのに使用される。
形式
Figure 2007049755
IOCTLは、ネットワークを介して汎用のファイルシステムまたはデバイス制御コマンドを発行するのに使用される。これは、制御コードのMETHODに基づいて入力および出力バッファをパックし、ネットワークを介してそれらを送る。次いで、サーバ側は、それらを再パッケージし、ファイルオブジェクトに対するFSCTL/IOCTLを発行する。その結果は同様にパックされ、ステータスコードと共にユーザに返される。許容可能なFSCTL/IOCTLコードのセットは、SRVによっても、基礎をなすファイルシステムによっても制限され得る(必ずしもすべてがリモートで有効であるとは限らない)。
バッファされた、また直接の要求では、要求時には入力だけが有効であり、出力は応答時に送られる。どちらの要求でも、入力も出力も両方向に送られることはない。
QUERY DIRECTORY
クライアントがネットワークを介して開いたディレクトリハンドル上でディレクトリ列挙を問い合わせることを可能にする。
形式
Figure 2007049755
QueryDirectory呼び出しは、既存のNTセマンティクスに非常にマッチする。呼び出し側は、InfoClass、開いているディレクトリのFileId、(ワイルドカード/ファイルサーチパラメータまたは既存のサーチでの再開名(resume name)を指定する)ファイル名部分、および呼び出しに関連付けられた任意の有効なSL_フラグを提供し、SRVは最大でOutputBufferLengthまでのバッファを返す。
また、QueryDirectoryフラグ構造に含まれ得る新しいフラグ(SMB2_REOPEN)もある。このフラグは、SL_RESTART_SCANフラグのより強力なバージョンである。後者は、指定されたサーチが変化していない場合にスキャンを再開することのみを許容する(すなわち、*.*またはt*サーチを再開する)。前者は、サーバに、指定されたサーチが変化している場合にスキャンを再開するよう命じる。このフラグを使用するために、呼び出し側は、呼び出し全体にわたる排他的使用、および(変更通知などの)未処理の操作がないことを保証しなければならない。サーバは、この操作を実行するための適切な手段を講じ、それにはサーバ側で基礎をなすディレクトリハンドルを閉じ、再開することが関与し得る。これは、クライアントからは見えない。
CHANGE NOTIFY
この潜在的に長期間続く操作は、クライアントがディレクトリに関する変更通知のために登録することを可能にする。
形式
Figure 2007049755
呼び出し側は、呼び出し側がどの変更を対象とするか指定するCompletionFilterと共にディレクトリのFileIdを送る。また、呼び出し側は、再帰的通知操作を示すSL_WATCH_TREEフラグも送ることができる。この操作は、無限の期間保留することができるため、ほとんどの場合「async」挙動を呼び出す。また、同じハンドルに関するこれ以上のどんな変更も、ローカルファイルシステム挙動の場合と同様に、最初の変更が完了するのを待って保留することにも留意されたい。
QUERY INFO
クライアントがリモートシステムからの情報を問い合わせることを可能にする。現在、これは、ファイル情報、ファイルシステム情報、セキュリティ情報、またはクォータ情報(quota information)を問い合わせるのに使用され得る。
形式
Figure 2007049755
クライアントは、InfoTypeで、これがファイル情報を求める要求か、ファイルシステム情報を求める要求か、セキュリティ情報を求める要求か、それともクォータ情報を求める要求か示すSMB2_0_INFO_*オプションを指定する。FileIdは(ファイル情報またはセキュリティ情報での)当該のファイルを示す。ファイルが存在するボリュームは、ファイルシステム情報またはクォータ要求に使用される。
下位情報レベルは、FileInfoClassに記入され、問い合わせられる情報の種類に依存する。これは、ファイル情報問い合わせではFILE_INFORMATION_CLASSになり、ファイルシステム情報ではFS_INFORMATION_CLASSになる。クォータおよびセキュリティについては0になる。
入力バッファは、現在、クォータ要求だけに使用される。というのは、クォータ要求は、何が求められるか決定するために、入力時にSMB2_QUERY_QUOTA_INFO構造を取るからである。その他の要求では、これは空になる。
OutputBufferLengthは、ユーザに返す最大量のデータを指定する。
SET INFO
クライアントがリモートシステムに関する情報を設定することを可能にする。現在、これは、ファイル情報、ファイルシステム情報、セキュリティ情報、またはクォータ情報を設定するのに使用され得る。
形式
Figure 2007049755
設定される情報の種類および特定のクラスがQUERY_INFOについて前述したように、FlagsおよびFileInfoClassフィールドに設定される。提供される入力バッファは設定される情報であり、FileIdはファイルを識別する。
SetSecurity呼び出しでは、SecurityInformationフィールドが設定される情報を表す(すなわち、OWNER_SECURITY_INFORMATIONなど)。
結論
本発明には様々な変更および代替構成の余地があるが、本発明のいくつかの例示的実施形態を図面に示し、本明細書で詳細に説明している。しかしながら、本発明を開示の特定の形に限定する意図はなく、それとは反対に、本発明は、本発明の精神および範囲内に含まれるすべての変更、代替構造、および均等物をカバーするものであることを理解すべきである。
本発明の様々な態様が組み込まれ得る汎用コンピューティング環境の一例を示す図である。 本発明の様々な態様による、クライアントがサーバと通信するネットワーク環境の一例を表すブロック図である。 本発明の様々な態様による、クライアントとサーバの間の折衝およびセッションセットアップの一例を表すタイミング図である。 本発明の様々な態様による、作成コンテキストを伴うcreateコマンドを含む様々なコマンドを表すタイミング図である。 本発明の様々な態様による、クライアントとサーバの間の複合要求および可能な応答を表すタイミング図である。 本発明の様々な態様による、複数のチャネルを介したクライアント/サーバ通信を表す図である。 本発明の様々な態様による、保護された接続の検証を表す図である。 本発明の様々な態様による、シンボリックリンクに基づく一例を使用する拡張された誤り戻り情報を表す図である。
符号の説明
120 処理装置
121 システムバス
130 システムメモリ
134 オペレーティングシステム
135 アプリケーションプログラム
136 その他のプログラムモジュール
137 プログラムデータ
140 取り外し不能不揮発性メモリインターフェース
144 オペレーティングシステム
145 アプリケーションプログラム
146 その他のプログラムモジュール
147 プログラムデータ
150 取り外し可能不揮発性メモリインターフェース
160 ユーザ入力インターフェース
161 マウス
162 キーボード
163 マイクロホン
164 タブレット
170 ネットワークインターフェース
171 ローカルエリアネットワーク
172 モデム
173 広域ネットワーク
180 リモートコンピュータ
185 リモートアプリケーションプログラム
190 ビデオインターフェース
191 モニタ
194 出力周辺装置インターフェース
195 スピーカ
196 プリンタ
202 クライアント
204 サーバ
206 アプリケーション
208 リダイレクタ
210 SRVNET(共通ネットワークモジュール)
212 ファイルシステム
220 SMBエンジン
2221 SMB1.0プロバイダ
222m SMB2.0プロバイダ

Claims (5)

  1. 実行されると、
    サーバにおいて、クライアントから複数のコマンドを含む複合要求を受け取ること、
    前記複合要求が、関連しないコマンドを含むか、それとも関連するコマンドを含むか判定すること、
    前記複合要求が、関連しないコマンドを含む場合、各要求を別個の要求として処理すること、および
    前記複合要求が、関連するコマンドを含む場合、各要求を順次に処理すること
    を含むステップを実行するコンピュータ実行可能命令を有することを特徴とする少なくとも1つのコンピュータ可読媒体。
  2. 前記複合要求は、作成/オープンコマンドを含む関連するコマンドを含み、各要求を順次に処理することは、後続の各関連するコマンドごとに前記作成/オープンコマンドからのファイルハンドルを使用することを含むことを特徴とする請求項1に記載のコンピュータ可読媒体。
  3. 前記作成コマンドと共に受け取られる追加のコンテキストデータを処理することを含むさらなるコンピュータ実行可能命令を有することを特徴とする請求項1に記載のコンピュータ可読媒体。
  4. 前記複合要求が受け取られたチャネルとは別個のデータチャネル上で入出力関連の要求を処理することを含むさらなるコンピュータ実行可能命令を有することを特徴とする請求項1に記載のコンピュータ可読媒体。
  5. 追加コンテキストデータが添付されている作成コマンド、複数の関連するコマンドを含む関連する複合コマンドおよび複数の関連しないコマンドを含む関連しない複合コマンド、および/または別個のデータチャネル上でのデータ通信を要求するデータ関連コマンドを含む、前記クライアントから前記サーバに送られる1組のコマンドからの少なくとも1つのコマンドを受け取ることをさらに含むことを特徴とする請求項1に記載のコンピュータ可読媒体。
JP2006307121A 2005-05-25 2006-11-13 データ通信プロトコル Active JP4938418B2 (ja)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US68500805P 2005-05-25 2005-05-25
US60/685,008 2005-05-25
US11/182,251 2005-07-15
US11/182,251 US8332526B2 (en) 2005-05-25 2005-07-15 Data communication protocol including negotiation and command compounding

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2005356145A Division JP2006333433A (ja) 2005-05-25 2005-12-09 データ通信プロトコル

Publications (2)

Publication Number Publication Date
JP2007049755A true JP2007049755A (ja) 2007-02-22
JP4938418B2 JP4938418B2 (ja) 2012-05-23

Family

ID=36950840

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2005356145A Pending JP2006333433A (ja) 2005-05-25 2005-12-09 データ通信プロトコル
JP2006307121A Active JP4938418B2 (ja) 2005-05-25 2006-11-13 データ通信プロトコル

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2005356145A Pending JP2006333433A (ja) 2005-05-25 2005-12-09 データ通信プロトコル

Country Status (3)

Country Link
EP (1) EP1727056B1 (ja)
JP (2) JP2006333433A (ja)
KR (2) KR100794432B1 (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8850025B2 (en) 2005-05-25 2014-09-30 Microsoft Corporation Data communication coordination with sequence numbers
US8856582B2 (en) 2011-06-30 2014-10-07 Microsoft Corporation Transparent failover
US9331955B2 (en) 2011-06-29 2016-05-03 Microsoft Technology Licensing, Llc Transporting operations of arbitrary size over remote direct memory access
US10630781B2 (en) 2011-09-09 2020-04-21 Microsoft Technology Licensing, Llc SMB2 scaleout

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100974916B1 (ko) * 2008-03-21 2010-08-09 주식회사 나우콤 가상 디스크드라이브 파일 전송 시스템 및 그 방법
US8806030B2 (en) * 2010-12-06 2014-08-12 Microsoft Corporation Multichannel connections in file system sessions
US8631277B2 (en) 2010-12-10 2014-01-14 Microsoft Corporation Providing transparent failover in a file system
US8788579B2 (en) 2011-09-09 2014-07-22 Microsoft Corporation Clustered client failover
US9537899B2 (en) * 2012-02-29 2017-01-03 Microsoft Technology Licensing, Llc Dynamic selection of security protocol
CN102857504B (zh) * 2012-09-06 2016-01-06 深信服网络科技(深圳)有限公司 网络优化方法及装置
US20140330937A1 (en) * 2013-05-03 2014-11-06 Microsoft Corporation End-to-end classification of storage traffic streams
US9244615B2 (en) 2013-09-13 2016-01-26 Microsoft Technology Licensing, Llc Systems and methods based on policy criteria for controlling the flow of data storage input/output requests between endpoints
JP7077896B2 (ja) 2018-09-25 2022-05-31 ブラザー工業株式会社 通信装置及び通信装置のためのコンピュータプログラム
CN111614612B (zh) * 2020-04-03 2023-06-23 视联动力信息技术股份有限公司 通讯协议实现方法、装置、网管服务器和存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6019341A (ja) * 1983-07-13 1985-01-31 Usac Electronics Ind Co Ltd 回線制御方式
JPH0374745A (ja) * 1989-08-15 1991-03-29 Oki Electric Ind Co Ltd データ処理装置
JPH05143488A (ja) * 1991-11-18 1993-06-11 Nippon Telegr & Teleph Corp <Ntt> 複数コマンドの転送方法
JPH0675890A (ja) * 1992-08-26 1994-03-18 Chugoku Nippon Denki Software Kk クライアント・サーバ間の要求データ応答データ授受方式

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100272567B1 (ko) 1997-12-31 2000-11-15 서평원 이동통신 네트워크를 이용한 이동 인터넷
JP2007512593A (ja) 2003-11-07 2007-05-17 ソニー エレクトロニクス インク モバイルコンピュータのファイル転送プロトコル
US7673066B2 (en) * 2003-11-07 2010-03-02 Sony Corporation File transfer protocol for mobile computer

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6019341A (ja) * 1983-07-13 1985-01-31 Usac Electronics Ind Co Ltd 回線制御方式
JPH0374745A (ja) * 1989-08-15 1991-03-29 Oki Electric Ind Co Ltd データ処理装置
JPH05143488A (ja) * 1991-11-18 1993-06-11 Nippon Telegr & Teleph Corp <Ntt> 複数コマンドの転送方法
JPH0675890A (ja) * 1992-08-26 1994-03-18 Chugoku Nippon Denki Software Kk クライアント・サーバ間の要求データ応答データ授受方式

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8850025B2 (en) 2005-05-25 2014-09-30 Microsoft Corporation Data communication coordination with sequence numbers
US9071661B2 (en) 2005-05-25 2015-06-30 Microsoft Technology Licensing, Llc Data communication coordination with sequence numbers
US9332089B2 (en) 2005-05-25 2016-05-03 Microsoft Technology Licensing, Llc Data communication coordination with sequence numbers
US9438696B2 (en) 2005-05-25 2016-09-06 Microsoft Technology Licensing, Llc Data communication protocol
US9331955B2 (en) 2011-06-29 2016-05-03 Microsoft Technology Licensing, Llc Transporting operations of arbitrary size over remote direct memory access
US10284626B2 (en) 2011-06-29 2019-05-07 Microsoft Technology Licensing, Llc Transporting operations of arbitrary size over remote direct memory access
US8856582B2 (en) 2011-06-30 2014-10-07 Microsoft Corporation Transparent failover
US10630781B2 (en) 2011-09-09 2020-04-21 Microsoft Technology Licensing, Llc SMB2 scaleout

Also Published As

Publication number Publication date
KR20060121648A (ko) 2006-11-29
EP1727056A2 (en) 2006-11-29
KR100794432B1 (ko) 2008-01-16
EP1727056B1 (en) 2008-11-05
JP2006333433A (ja) 2006-12-07
JP4938418B2 (ja) 2012-05-23
EP1727056A3 (en) 2007-02-21
KR20070095845A (ko) 2007-10-01
KR101036751B1 (ko) 2011-05-24

Similar Documents

Publication Publication Date Title
JP4938418B2 (ja) データ通信プロトコル
US9438696B2 (en) Data communication protocol
US11232080B2 (en) Systems and methods for providing access to a data file stored at a data storage system
US6775700B2 (en) System and method for common information model object manager proxy interface and management
RU2388039C2 (ru) Облегченный протокол ввода/вывода
US7987278B2 (en) Web services device profile on a multi-service device: dynamic addition of services
US7526482B2 (en) System and method for enabling components on arbitrary networks to communicate
US20070124344A1 (en) Method, apparatus and program storage device for providing web services-based data replication for Heterogeneous storage systems
US20070162564A1 (en) File system interface to web and network services
US7873647B2 (en) Web services device profile on a multi-service device: device and facility manager
US20040167961A1 (en) Fragment response cache
US7860987B2 (en) Apparatus for providing service in response to user request and method therefor
US7895344B2 (en) Method and apparatus for remote management
KR101130475B1 (ko) 데이터 통신 프로토콜
EP1936922B1 (en) Discovery and addition of services in a multi-service device
US11663058B1 (en) Preemptive filtering of events of an event bus with a deterministic filter
JP2006285620A (ja) アプリケーション実行管理システム、コンピュータ装置、アプリケーション実行管理プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20081121

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110812

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111110

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120214

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120223

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150302

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4938418

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250