Ответов (8)8
Представление. UDP имеет гораздо меньшие накладные расходы, чем TCP. С другой стороны, NFS должна самостоятельно обрабатывать надежный транспорт (по сравнению с TCP), но поскольку это протокол для локальных сетей, где проблемы с подключением и отбрасывание пакетов (или лучше: должно быть) не являются проблемой, он оптимизирован для производительности.
UDP-соединение без сохранения состояния минимизирует сетевой трафик, поскольку сервер NFS отправляет клиенту файл cookie после того, как клиент авторизован для доступа к общему тому. Этот файл cookie представляет собой случайное значение, которое хранится на стороне сервера и передается вместе с запросами RPC от клиента.
UDP не имеет состояния, TCP - нет, но TCP имеет много предопределенных свойств, которые не подходят для NFS, или, скорее, NFS хочет управлять спецификой. В частности, когда TCP выполняет передачу пакетов, он регулирует тайм-ауты и т. Д.
С UDP вы теряете накладные расходы, которые вам совершенно не нужны. Когда файловая система NFS, как изначально предполагалось, система выполняет запись, и если она завершится только наполовину, это будет плохо ... поэтому NFS (в жестком режиме) будет продолжать повторять попытки завершить транзакцию навсегда, 1 минута, 5, 10 и час, день ... когда соединение восстановится, транзакция может продолжиться до завершения ...
и, как правило, больше людей сейчас исправляют все быстрее. Также идея о том, что каждый конец передает объекты сеанса туда и обратно и не фиксирует между заданиями, пока обе стороны не согласятся, что они выполнены - в те времена, когда NFS много это делала за вас ...
Аналогия в чем-то похожа на то, как работает RS232 ... электроника сделает свое дело и загрузит свои буферы, будет заполнена и должна будет остановиться (или потерять информацию), они могут передать этот поток информации (и очистить свои буферы и продолжить), когда CTS (Clear to send pin - как металлический штифт на вилке) был высоким или низким (каким бы он ни был).
Я предполагаю, что это, вероятно, по наследственным (историческим) причинам. Первоначально NFS, вероятно, использовался в сетях с низкой задержкой, где была очень небольшая вероятность ошибки, поэтому накладные расходы на инициирование 3-стороннего рукопожатия для установки TCP-соединения (вместе с двунаправленным подтверждением всех сообщений) перевешивали простоту с использованием протокола без установления соединения, такого как UDP.
Когда UDP используется в качестве транспортного протокола, по-видимому, клиент NFS должен будет управлять повторными передачами, если это необходимо.
UDP также использовался, потому что он мог значительно уменьшить использование памяти. В 1980-х годах, когда изначально была разработана NFS, у вас была система UNIX с 4-8 МБ ОЗУ, и (по крайней мере, в академической среде) «сервер» мог быть просто одной из этих систем размером 4-8 МБ с несколькими к нему подключены дополнительные диски. Использование ОЗУ на сервере было большой проблемой, вы могли потерять несколько МБ из-за буферов TCP, которые лучше использовать в качестве дискового кеша. Это также упростило работу с нехваткой памяти: перегруженный сервер NFS мог просто отбрасывать запросы.