Вопрос

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top