为什么NFS默认使用UDP?

jdi*_*zle 25 unix networking rpc nfs

我确信它有一些古老的遗产原因,但它是什么?它似乎是一种面向可靠数据传输的服务.

dwc*_*dwc 24

  • NFS最初设计用于损耗率非常低的LAN.
  • UDP速度更快,开销更少
  • NFS是无状态的,因此客户端重试很简单

请注意,NFS v3 +可以使用TCP.


Kel*_*tia 6

UDP是NFSv2的默认设置(现在没人应该使用),但NFSv3默认使用TCP.TCP挂载更可靠,您知道网络问题比使用UDP快得多.

  • 这是真的 - 当你使用NFS over TCP并且存在网络问题时,你会得到很长的超时和陈旧的句柄.使用UDP,它可以通过UDP数据包爆破的强大力量恢复. (5认同)

小智 5

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

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

NFS 负责“状态”而不是 TCP,TCP 的设计在新连接(或重新连接)上设置新状态,该连接(和状态)可能会因任何(硬件)原因而终止,并且新连接不会持续存在状态...想想处理一个文件...您只需不管这个过程,NFS 连接会断开一段时间,但当它回来时,一切都会继续..现在的应用程序更加智能,路由很多,事情变得更加模块化,我们更加不耐烦......如果它不按计划......有人接到电话,必须登录并无论如何他们可以......回到一天,当它可以留下,这是一个更加无缝的事情......它的工作方式今天仍然很好,但现在有更多的选择,并且现在往往有更多的人更迅速地修复所有问题。另外,每个端来回传递会话对象并且不在作业之间提交的想法,直到双方都同意它们已完成 - 回到那天 NFS 为您做了很多这样的事情......

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