それには古代の遺産の理由があると確信していますが、それは何ですか? 信頼性の高いデータ配信を目的としたサービスのようです。
8 に答える
- NFSは元々、損失率が非常に低いLANで使用するように設計されていました。
- UDPはより高速で、オーバーヘッドが少ない
- NFSはステートレスであるため、クライアントが再試行するのは簡単です
NFSv3+はTCPを使用できることに注意してください。
UDPはNFSv2のデフォルトです(最近は誰も実際に使用するべきではありません)が、NFSv3はデフォルトでTCPを使用します。TCPマウントはより信頼性が高く、UDPよりもはるかに高速にネットワークの問題が発生していることがわかります。
UDP はステートレスであり、TCP はそうではありませんが、TCP には、NFS に適していない、または NFS が詳細を管理することを望んでいた多くの事前定義されたプロパティがあります。特に、TCP がパケット転送を行っている場合、タイムアウトなどを制御します。
UDP を使用すると、特に必要のないオーバーヘッドが失われます。NFS ファイルシステムの場合、元々考えられていたのは、システムが書き込みを行い、それが半分しか終了しない場合、それは悪いことです...したがって、NFS (ハードモード) はトランザクションを完了するために永遠に再試行し続けます, 1 分, 1 日 5、10、および 1 時間...接続が戻ってくると、トランザクションは完了まで続行できます...
そして今、より多くの人々がすべてをより迅速に修正する傾向があります。また、両端がセッションオブジェクトを前後に受け渡し、ジョブ間でコミットしないという考えも、両方の側が完了したことに同意するまで続きます.
類推は、RS232 がどのように機能するかに多少似ています...電子機器はその機能を実行してバッファをロードし、いっぱいになり、停止する (または情報を失う) 必要があり、その情報ストリームを渡す (そしてバッファを空にして、続行) CTS (Clear to send pin- プラグの金属ピンのように) が高または低 (想定されているものは何でも) の場合。
UDP は、プロトコルがアプリケーション自体によって管理される場合に使用されます。アプリはそれを行う方法についてより良いアイデアを持っているか、より高速である可能性があります (アプリケーションの特別な条件下で)。TCP は非常に優れていますが、それに関連する多くのオーバーヘッドがあります。
パフォーマンス。UDP のオーバーヘッドは TCP よりもはるかに低くなります。一方、NFS は (TCP と比較して) 信頼性の高いトランスポートを独自に処理する必要がありますが、これは LAN のプロトコルであるため、接続の問題やパッケージのドロップが問題にならない (または、そうあるべき) ため、パフォーマンスが最適化されています。
おそらくレガシー(歴史的)な理由によるものだと思います。当初、NFS はおそらく、エラーの可能性がほとんどない低遅延ネットワークで使用されていたため、TCP 接続をセットアップするために 3 ウェイ ハンドシェイクを開始するオーバーヘッド (すべてのメッセージの双方向確認応答と合わせて) が、 UDP などのコネクションレス プロトコルを使用します。
UDP がトランスポート プロトコルとして使用される場合、おそらく、必要に応じて再送信を管理するのは NFS クライアント次第です。
ステートレス UDP 接続は、クライアントが共有ボリュームへのアクセスを承認された後に NFS サーバーがクライアントに Cookie を送信するため、ネットワーク トラフィックを最小限に抑えます。この Cookie は、サーバー側に保存されるランダムな値であり、クライアントからの RPC 要求と共に渡されます。