【问题标题】:Why does NFS use UDP by default?为什么 NFS 默认使用 UDP?
【发布时间】:2010-10-09 16:56:19
【问题描述】:

我敢肯定它有一些古老的遗产原因,但它是什么?这似乎是一种面向可靠数据传输的服务。

【问题讨论】:

  • 似乎 NFS 默认不再使用 UDP,请参阅一些答案。 NFSv4 甚至可能只使用 TCP?
  • 是的,对于 NFSv4,请参阅 tools.ietf.org/html/rfc7530#section-3.1。在这一点上,UDP 基本上已经消失了。

标签: unix networking rpc nfs


【解决方案1】:

当协议将由应用程序本身管理时使用UDP。该应用程序可能对如何执行此操作有更好的想法,或者它可能更快(在应用程序的特殊条件下)。 TCP 非常好,但与之相关的开销很大。

【讨论】:

    【解决方案2】:

    性能。 UDP 的开销比 TCP 低得多。另一方面,NFS 必须自己处理可靠的传输(与 TCP 相比),但由于这是一种用于 LAN 的协议,连接问题和数据包丢失(或更好:应该)不是问题,因此它针对性能进行了优化。

    【讨论】:

    • 这只是误导。 UDP 作为默认传输是如果配置不正确,快速链路(例如 Gbit/s 或 10 GBit/s 以太网)上的 NFS 非常慢的最重要原因。
    • @Feuermurmel 我不确定为什么这会产生误导。在做出此 NFS 协议决策时,Gbit/s 或更高已不是网络基础设施的常见情况。此外,TCP 堆栈并没有像今天那样优化和(或多或少)容错。我非常有信心 NFS 开发人员在决定实施手工协议之前对当前的网络堆栈/协议进行了相当一部分的性能测试。更高的网络速度和其他优化都无法解决问题,这可能是他们在以后的版本中更改默认设置的原因。
    【解决方案3】:

    我的猜测是,这可能是由于遗留(历史)原因。最初 NFS 可能用于低延迟网络,其中出错的可能性很小,因此启动 3 次握手以建立 TCP 连接(连同所有消息的双向确认)的开销超过了使用 UDP 等无连接协议。

    当 UDP 用作传输协议时,可能需要 NFS 客户端来管理重传。

    【讨论】:

      【解决方案4】:

      UDP 是 NFSv2 的默认设置(现在没人应该真正使用它),但 NFSv3 默认使用 TCP。 TCP 挂载更可靠,并且您知道您遇到网络问题的速度比使用 UDP 快得多。

      【讨论】:

      • 这是真的 - 当您使用基于 TCP 的 NFS 并且存在网络问题时,您会遇到长时间的超时和过时的句柄。使用 UDP,它通过 UDP 数据包爆破意志的强大力量恢复。
      【解决方案5】:
      • NFS 最初设计用于丢失率非常低的 LAN。
      • UDP 速度更快,开销更少
      • NFS 是无状态的,因此客户端很容易重试

      注意 NFS v3+ 可以使用 TCP。

      【讨论】:

        【解决方案6】:

        无状态 UDP 连接可最大限度地减少网络流量,因为 NFS 服务器在客户端被授权访问共享卷后向客户端发送 cookie。此 cookie 是存储在服务器端的随机值,与来自客户端的 RPC 请求一起传递。

        【讨论】:

          【解决方案7】:

          UDP 是无状态的,TCP 不是,但 TCP 有许多不适合 NFS 的预定义属性,或者更确切地说,NFS 想要控制细节。特别是,当 TCP 进行数据包传输时,它确实控制超时等。

          使用 UDP,您将失去您并不特别想要的开销。当 NFS 文件系统,最初的想法是,系统进行写入,如果它只完成一半,那就太糟糕了......所以 NFS(在硬模式下)将继续重试以永远完成事务,1 分钟, 5、10、小时、一天……当连接恢复时,事务可以继续完成……

          NFS 关注“状态”而不是 TCP,其设计在新连接(或重新连接)上设置了新状态,该连接(和状态)可能因任何(硬件)原因而死,而新连接不会t保持这种状态...考虑处理文件...您只需不理会该过程,NFS连接会中断一段时间,但是当它回来时,一切都会继续..如今应用程序更智能,路由很多,事情更加模块化,我们更加不耐烦......如果它不打算计划......有人接到电话,必须登录并继续进行...... ,当它可以离开时,它是一件更加无缝的事情......它的工作方式今天仍然很好,但现在有更多的选择,并且现在倾向于让更多的人更快地修复所有东西。还有每个结束来回传递会话对象而不是在工作之间提交的想法,直到双方同意他们已经完成 - 回到那天 NFS 为你做了很多......

          这个类比有点类似于 RS232 的工作原理......电子设备会做它的事情并加载它们的缓冲区,并且会变满并不得不停止(或丢失信息),它们可以传递该信息流(并且为空它们的缓冲区并继续)当 CTS(清除发送引脚-如插头上的金属引脚)高或低(无论它应该是什么)时。

          【讨论】:

            【解决方案8】:

            还使用了UDP,因为它可以大大减少内存使用量。在最初开发 NFS 的 1980 年代,您将拥有一个具有 4-8MB 内存的 UNIX 系统,并且(至少在学术环境中)“服务器”可能只是这些 4-8MB 系统之一,具有一些额外的磁盘连接到它。服务器上的 RAM 使用是一个大问题,您可能已经丢失了几 MB 到 TCP 缓冲区,我已经更好地用作磁盘缓存。它还可以轻松处理内存压力,负担过重的 NFS 服务器可能会简单地丢弃请求。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2019-11-08
              • 2010-11-27
              • 2016-06-19
              • 2023-03-23
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-09-19
              相关资源
              最近更新 更多