Почему NFS использует UDP по умолчанию? - PullRequest
24 голосов
/ 25 февраля 2009

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

Ответы [ 8 ]

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

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

6 голосов
/ 25 февраля 2009

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

3 голосов
/ 15 апреля 2013

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

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

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

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

2 голосов
/ 25 февраля 2009

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

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

1 голос
/ 19 февраля 2018

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

1 голос
/ 25 февраля 2009

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

1 голос
/ 25 февраля 2009

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

0 голосов
/ 17 июня 2009

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

...