Почему NFS использует UDP по умолчанию?

Я уверен, что для этого есть какая-то древняя наследственная причина, но что это такое? Это похоже на сервис, ориентированный на надежную доставку данных.

8 ответов


  • NFS был первоначально разработан для использования в локальной сети, где потери очень низкие.
  • UDP быстрее и имеет меньше накладных расходов
  • NFS не имеет состояния, поэтому клиентам просто повторить попытку

обратите внимание, что NFS v3+ может использовать TCP.


UDP по умолчанию для NFSv2 (который никто не должен использовать в эти дни), но NFSV3 использует TCP по умолчанию. TCP-крепления более надежны, и вы знаете, что у вас проблема с сетью намного быстрее, чем с UDP.


Я предполагаю, что это, вероятно, по наследственным (историческим) причинам. Первоначально NFS, вероятно, использовался в сетях с низкой задержкой, где было очень мало возможности ошибки, поэтому накладные расходы на инициирование трехстороннего рукопожатия для настройки TCP-соединения (вместе с двунаправленным подтверждением всех сообщений) перевешивали простоту использования протокола без подключения, такого как UDP.

когда UDP используется в качестве транспортного протокола, предположительно, это будет до NFS клиент для управления ретрансляциями при необходимости.


UDP не имеет состояния, TCP-нет, но TCP имеет много предопределенных свойств, которые не включали NFS или, скорее, NFS хотел управлять спецификацией. В частности, когда TCP выполняет пакетные передачи, он управляет тайм-аутами и т. д.

с UDP вы теряете накладные расходы,которые вам не особенно нужны. Когда файловая система NFS, мысль изначально была, система делает запись, и если она заканчивается только наполовину, это было бы плохо ... таким образом, NFS (в жестком режиме) будет продолжать повторите попытку завершить транзакцию навсегда: 1 минута, 5, 10 и час в день ... когда соединение возвращается, транзакция может продолжаться до завершения...

NFS следит за" состоянием " вместо TCP, чья конструкция устанавливает новое состояние на новом соединении (или повторном подключении), это соединение (и состояние) может умереть по любой (аппаратной) причине, и новое соединение не будет сохраняться в этом состоянии ... Подумайте об обработке файла ... вы просто оставите процесс в покое, NFS соединение выпадает на некоторое время, но когда оно возвращается, все будет просто продолжаться.. В наши дни приложения умнее, маршруты многочисленны, вещи более модульные, и мы намного более нетерпеливы... если это не собирается планировать .. кто-то получает телефонный звонок и должен войти в систему и запустить его так или иначе ... в те дни, когда его можно было оставить, он был более плавным ... То, как это работает, по-прежнему хорошо сегодня, но теперь у вас есть еще много вариантов и, как правило, больше людей теперь все чинится быстрее. Также идея о том, чтобы каждый конец передавал объекты сеанса назад и вперед и не совершал между заданиями, пока обе стороны не согласятся, что они сделаны-в тот день NFS сделал много этого для вас ....

аналогия несколько похожа на то, как работал материал RS232 ... электроника будет делать свое дело и загружать свои буферы и будет заполняться и должна остановиться (или потерять информацию), они могут передать этот поток информации (и очистить свои буферы и продолжайте), когда CTS (ясно, чтобы отправить pin - как в металлическом штыре на вилке) был высоким или низким (что когда-либо должно быть).


UDP используется, когда протокол будет управляться самим приложением. Приложение может иметь лучшее представление о том, как сделать это, или это может быть быстрее (при особых условиях применения). TCP очень хороший, но имеет много накладных расходов, связанных с ним.


производительность. UDP имеет гораздо более низкие накладные расходы, чем TCP. С другой стороны, NFS должен обрабатывать надежный транспорт самостоятельно (по сравнению с TCP), но поскольку это протокол для LANs, где проблемы с подключением и падение пакетов (или лучше: должно быть) не проблема, он оптимизирован для производительности.


UDP также использовался, потому что он может значительно уменьшить использование памяти. В 1980-х годах, когда NFS была первоначально разработана, у вас была бы система UNIX с 4-8MB ОЗУ, и (по крайней мере, в академической среде) "сервер" мог быть просто одной из этих систем 4-8MB с несколькими дополнительными дисками, подключенными к ней. Использование ОЗУ на сервере было большой проблемой,вы могли потерять несколько MBs для буферов TCP, которые лучше использовать в качестве дискового кэша. Он также сделал его легким отрегулировать давление памяти, перегруженный сервер NFS может просто отбросить запросы.


соединение UDP без состояния минимизирует сетевой трафик, так как сервер NFS отправляет клиенту файл cookie после авторизации клиента для доступа к общему тому. Этот файл cookie является случайным значением, хранящимся на стороне сервера и передается вместе с запросами RPC от клиента.