我敢肯定它有一些古老的遗产原因,但它是什么?这似乎是一种面向可靠数据传输的服务。
8 回答
- NFS 最初设计用于丢失率非常低的 LAN。
- UDP速度更快,开销更少
- NFS 是无状态的,因此客户端重试很简单
请注意,NFS v3+ 可以使用 TCP。
UDP 是 NFSv2 的默认设置(现在应该没人真正使用它),但 NFSv3 默认使用 TCP。TCP 挂载更可靠,并且您知道您遇到网络问题的速度比使用 UDP 快得多。
UDP 是无状态的,TCP 不是,但 TCP 有许多不适合 NFS 的预定义属性,或者更确切地说,NFS 想要控制细节。特别是,当 TCP 进行数据包传输时,它确实控制超时等。
使用 UDP,您将失去您并不特别想要的开销。当 NFS 文件系统,最初的想法是,系统进行写入,如果它只完成一半,那将是糟糕的......所以 NFS(在硬模式下)将继续重试以永远完成事务,1 分钟, 5、10、小时、一天……当连接恢复时,交易可以继续完成……
现在往往会有更多的人更迅速地修复所有问题。还有每个结束来回传递会话对象而不是在工作之间提交的想法,直到双方同意他们已经完成 - 回到那天 NFS 为你做了很多......
这个类比有点类似于 RS232 的工作方式......电子设备会做它的事情并加载他们的缓冲区,并且会变满并不得不停止(或丢失信息),他们可以传递该信息流(并清空他们的缓冲区和继续)当 CTS(清除发送引脚-如插头上的金属引脚)高或低(无论它应该是什么)时。
UDP was also used because it could greatly reduce the memory usage. In the 1980s when NFS was originally developed, you'd have a UNIX system with like 4-8MB of RAM, and (at least in academic environment) the "server" may have simply been one of these 4-8MB systems with a few extra disks hooked up to it. RAM use on the server was a big concern, you could have lost several MBs to TCP buffers that my have been better used as disk cache. It also made it easy to handle memory pressure, an overtaxed NFS server could simply drop requests.
当协议将由应用程序本身管理时使用 UDP。该应用程序可能对如何执行此操作有更好的想法,或者它可能更快(在应用程序的特殊条件下)。TCP 非常好,但有很多与之相关的开销。
表现。UDP 的开销比 TCP 低得多。另一方面,NFS 必须自己处理可靠的传输(与 TCP 相比),但由于这是一种用于连接问题和包丢失(或更好:应该)不是问题的 LAN 协议,因此它针对性能进行了优化。
我的猜测是,这可能是由于遗留(历史)原因。最初 NFS 可能用于低延迟网络,其中出错的可能性很小,因此启动 3 次握手以建立 TCP 连接(连同所有消息的双向确认)的开销超过了使用像UDP这样的无连接协议。
当 UDP 用作传输协议时,可能需要 NFS 客户端来管理重传。
无状态 UDP 连接将网络流量降至最低,因为 NFS 服务器在客户端被授权访问共享卷后向客户端发送 cookie。此 cookie 是存储在服务器端的随机值,并与来自客户端的 RPC 请求一起传递。