web-dev-qa-db-ja.com

NFSがデフォルトでUDPを使用するのはなぜですか?

それにはいくつかの古代の遺産の理由があると確信していますが、それは何ですか?信頼性の高いデータ配信を目的としたサービスのようです。

25
jdizzle
  • NFSは元々、損失率が非常に低いLANで使用するように設計されていました。
  • UDPはより高速で、オーバーヘッドが少ない
  • NFSはステートレスであるため、クライアントが再試行するのは簡単です

NFS v3 +はTCPを使用できることに注意してください。

24
dwc

UDPはNFSv2のデフォルトです(最近は誰も実際に使用するべきではありません)が、NFSv3はデフォルトでTCPを使用します。TCPマウントの方が信頼性が高く、 UDPよりもはるかに高速なネットワークの問題。

6
Keltia

UDPはステートレスですが、TCPはそうではありませんが、TCPには、NFSに適合しない、またはNFSが詳細を管理したいという多くの事前定義されたプロパティがあります。特に、TCPがパケット転送を行っている場合、タイムアウトなどを管理します。

UDPを使用すると、特に必要のないオーバーヘッドが失われます。 NFSファイルシステムが元々考えられていたとき、システムは書き込みを行い、半分しか終了しない場合、それは悪いことです...したがって、NFS(ハードモード)はトランザクションを永久に完了するために再試行し続けます、1分、 5、10、および1時間、1日...接続が回復すると、トランザクションは完了し続ける可能性があります...

NFSは、TCPの代わりに「状態」を管理します。TCPの設計では、新しい接続(または再接続)に新しい状態が設定されます。その接続(および状態)は、何らかの(ハードウェア)理由で停止する可能性があり、新しい接続はそれを維持しません。状態...ファイルの処理について考えてみてください...プロセスをそのままにしておくと、NFS接続が少し途絶えますが、戻ってくるとすべてが続行されます。最近のアプリケーションはよりスマートになり、ルートは多数あります。物事はよりモジュール化されており、私たちははるかに焦ります...それが計画されていない場合..誰かが電話を受けてログオンし、とにかくそれを実行する必要があります...残すことができます、それはよりシームレスなものでした...それが機能する方法は今日でも良いですが、今では非常に多くのオプションがあり、より多くの人々が今より迅速にすべてを修正する傾向があります。また、各エンドがセッションオブジェクトを前後に渡し、ジョブ間でコミットしないという考えは、双方が完了したことに同意するまでです。当時、NFSはこれをたくさん行っていました..。

アナロジーはRS232のものがどのように機能したかと幾分似ています...電子機器はそのことを行い、バッファをロードし、いっぱいになって停止する(または情報を失う)必要があり、その情報のストリームを渡す(そしてバッファを空にして続行)CTS(プラグの金属ピンのようにピンを送信するためにクリア)が高または低(想定されているもの)の場合。

2
user2282018

また、メモリ使用量を大幅に削減できるUDPも使用されました。 NFSが最初に開発された1980年代には、4〜8 MBのRAMを備えたUNIXシステムがあり、(少なくとも学術環境では)「サーバー」は単にこれらの4〜8MBのシステムの1つであり、いくつかありました。それに接続された余分なディスク。 RAMサーバーでの使用は大きな懸念事項でした。ディスクキャッシュとして使用したほうがよいTCPバッファーに、数MBを失う可能性があります。メモリの負荷を処理するのは簡単で、過大な負担のNFSサーバーは単にリクエストをドロップする可能性があります。

2
user153822

UDPは、プロトコルがアプリケーション自体によって管理される場合に使用されます。アプリはそれを行う方法についてより良いアイデアを持っているかもしれません、またはそれはより速いかもしれません(アプリケーションの特別な条件下で)。 TCPは非常に優れていますが、それに関連するオーバーヘッドがたくさんあります。

1
gbarry

パフォーマンス。 UDPのオーバーヘッドはTCPよりはるかに低くなっています。一方、NFSは(TCPと比較して)信頼性の高いトランスポートを単独で処理する必要がありますが、これは接続の問題やパッケージのドロップが問題にならない(または問題がないはずの)LANのプロトコルであるため、パフォーマンスが最適化されています。

1
Kosi2801

私の推測では、それはおそらくレガシー(歴史的)な理由によるものだと思います。もともとNFSは、エラーの可能性がほとんどない低遅延ネットワークで使用されていたため、3ウェイハンドシェイクを開始してTCP接続(双方向と一緒に)をセットアップするオーバーヘッドすべてのメッセージの確認)は、UDPのようなコネクションレス型プロトコルを使用する単純さを上回りました。

UDPがトランスポートプロトコルとして使用される場合、おそらく、必要に応じて再送信を管理するのはNFSクライアント次第です。

ステートレスUDP接続は、クライアントが共有ボリュームへのアクセスを許可された後にNFSサーバーがクライアントにCookieを送信するため、ネットワークトラフィックを最小限に抑えます。このCookieはサーバー側に保存されるランダムな値であり、クライアントからのRPC要求とともに渡されます。

0
josu