Открыть сервис

Network File System

Network File System (NFS) — это протокол сетевого доступа к файловым системам, позволяющий клиентским компьютерам монтировать удалённые каталоги и работать с файлами на них так, как если бы они находились на локальном диске. NFS относится к классу распределённых файловых систем (DFS) и работает на основе модели «клиент-сервер». Протокол изначально разработан компанией Sun Microsystems в 1984 году и с тех пор стал одним из стандартов де-факто для организации общего доступа к файлам в средах Unix и Linux, а также поддерживается в операционных системах Microsoft Windows, macOS и других.

История

Разработка и ранние версии

Первая версия NFS (NFSv1) была создана в 1984 году инженерами Sun Microsystems (в частности, Расселом Сэндбергом и Биллом Джой) для внутреннего использования в сети компании. В 1985 году вышла открытая спецификация NFSv2, которая стала доступна сторонним разработчикам. Эта версия использовала протокол UDP (User Datagram Protocol) как основной транспортный уровень и поддерживала только 32-битные идентификаторы файлов (file handles).

Версия 3

В 1995 году была опубликована спецификация NFSv3 (RFC 1813), которая принесла ряд значительных улучшений:

  • Поддержка 64-битных идентификаторов — позволила работать с файлами размером более 2 ГБ.
  • Асинхронные операции записисервер мог подтверждать запись до её физического завершения, что повышало производительность.
  • Улучшенная обработка ошибок — клиент мог получать более детальную информацию о причинах сбоев.
  • Поддержка TCP — протокол мог работать поверх TCP, что обеспечивало надёжную доставку данных в ненадёжных сетях.

Версия 4

NFSv4 (RFC 3530, 2003 год) стала фундаментальным пересмотром протокола. Основные изменения включали:

  • Интеграция с механизмами безопасности — встроенная поддержка Kerberos, LIPKEY и SPKM-3.
  • Упрощение работы с блокировками — протокол объединил операции с файловыми блокировками (ранее реализованные через отдельный протокол Network Lock Manager, NLM).
  • Поддержка работы через брандмауэры — использование единого порта (2049) для всех операций.
  • Поддержка состояния соединений — клиенты могли возобновлять прерванные сессии.
  • Введение псевдо-файловой системы — клиент мог видеть все экспортируемые ресурсы как единое дерево.

В 2010 году вышла уточнённая версия NFSv4.1 (RFC 5661), которая добавила:

  • Поддержку параллельного доступа к нескольким серверам (pNFS) — позволяла распределять хранение данных между несколькими серверами для повышения производительности.
  • Улучшенную обработку сессий — клиенты могли безопасно восстанавливать соединения после сбоев.

Версия 4.2

Последняя стабильная версия, NFSv4.2 (RFC 7862, 2016 год), добавила:

  • Поддержку разреженных файлов (sparse files) — эффективное хранение файлов с большими пустыми областями.
  • Операции с метками безопасности (security labels) — поддержка мандатного контроля доступа (например, SELinux).
  • Улучшенную работу с кэшированием — клиенты могли получать уведомления об изменениях файлов на сервере.

Архитектура и принцип работы

Компоненты

Система NFS состоит из двух основных компонентов:

  • NFS-сервер — компьютер, на котором запущена служба NFS и который предоставляет доступ к определённым каталогам (экспортируемым ресурсам).
  • NFS-клиент — компьютер, который монтирует удалённый ресурс и обращается к нему через протокол NFS.

Протоколы и порты

NFS использует несколько протоколов и портов:

  • Порт 2049 (TCP/UDP) — основной порт для NFS-трафика.
  • Portmapper (rpcbind) — служба, работающая на порту 111, которая сопоставляет RPC-программы с сетевыми портами.
  • Mount protocol — протокол, используемый для начального монтирования ресурса.
  • NLM (Network Lock Manager) — протокол для управления файловыми блокировками (используется в NFSv2/v3).
  • Rquotad — протокол для получения информации о квотах.

Процесс монтирования

  1. Клиент отправляет запрос к серверу через протокол Mount.
  2. Сервер проверяет права доступа (на основе IP-адреса, имени хоста или аутентификации).
  3. Сервер возвращает клиенту уникальный идентификатор файловой системы (file handle).
  4. Клиент использует этот идентификатор для всех последующих операций с файлами.
  5. Клиент может выполнять операции чтения, записи, создания, удаления и переименования файлов.

Модель безопасности

NFSv2/v3 полагались на простую аутентификацию на основе IP-адресов и идентификаторов пользователей (UID/GID). Это было уязвимо для подмены адресов и атак на уровне сети. NFSv4 ввёл обязательную поддержку криптографической аутентификации через Kerberos (RPCSEC_GSS), что обеспечивает:

  • Аутентификацию — проверку подлинности клиента и сервера.
  • Целостность данных — защиту от модификации данных в пути.
  • Шифрование — защиту от перехвата данных.

В современных реализациях (NFSv4.1 и выше) также поддерживается аутентификация через сертификаты и токены.

Реализации и поддержка

Unix и Linux

NFS является встроенной функцией большинства дистрибутивов Unix и Linux. В Linux NFS реализована на уровне ядра (модули nfs, nfsd, lockd, rpcbind). Для настройки используются утилиты:

  • exportfs — управление экспортируемыми ресурсами на сервере.
  • mount — монтирование удалённых ресурсов на клиенте.
  • showmount — просмотр списка экспортируемых ресурсов на сервере.

Microsoft Windows

В Windows NFS реализована как дополнительная функция (Services for NFS), доступная в серверных и некоторых клиентских версиях. Она позволяет Windows-клиентам монтировать NFS-ресурсы и предоставлять Windows-каталоги в качестве NFS-экспортов.

macOS

macOS поддерживает NFS как клиент (с версии Mac OS X) и как сервер (с версии macOS Server). Встроенная поддержка позволяет монтировать NFS-ресурсы через Finder или командную строку.

Другие системы

NFS также реализована для:

  • OpenVMS — через сторонние пакеты.
  • IBM z/OS — в составе операционной системы.
  • Встраиваемые системы — через урезанные реализации (например, в маршрутизаторах и NAS-устройствах).

Производительность и ограничения

Преимущества

  • Простота — протокол легко настраивается и не требует сложной инфраструктуры.
  • Стандартизация — поддержка на большинстве платформ.
  • Низкая задержка — для локальных сетей (LAN) NFS обеспечивает высокую скорость доступа.
  • Прозрачность — клиентское приложение не знает, что файл находится на удалённом сервере.

Недостатки

  • Чувствительность к задержкам — в глобальных сетях (WAN) с высокой задержкой производительность резко падает.
  • Отсутствие встроенного шифрования — в NFSv2/v3 данные передаются в открытом виде (шифрование возможно только через VPN или туннели).
  • Проблемы с блокировками — в NFSv2/v3 механизмы блокировок (NLM) работают нестабильно в условиях сетевых сбоев.
  • Сложность с кэшированием — при одновременном доступе нескольких клиентов к одному файлу могут возникать конфликты кэша.
  • Ограничения масштабирования — для больших кластеров (сотни серверов) NFS может стать узким местом.

Сравнение с альтернативами

ПротоколТипОсновное применениеПреимуществаНедостатки
NFSРаспределённая файловая системаUnix/Linux-среды, NASПростота, стандартностьНет встроенного шифрования (v2/v3)
SMB/CIFSСетевой протоколWindows-средыВстроенная поддержка в Windows, шифрованиеМеньшая производительность в Unix
AFPПротокол ApplemacOSПростота настройкиУстаревший, мало поддержки
GlusterFSРаспределённая ФСКластерыМасштабируемостьСложность настройки
CephОбъектное хранилищеОблачные решенияГибкость, отказоустойчивостьВысокие требования к ресурсам

Применение

NFS широко используется в:

  • Корпоративных сетях — для организации общего доступа к файлам (документы, проекты, базы данных).
  • Научных вычислениях — в кластерах HPC (High-Performance Computing) для общего доступа к данным.
  • Виртуализации — для хранения образов виртуальных машин (например, в VMware через NFS).
  • Домашних NAS-системах — для организации медиа-библиотек и резервного копирования.
  • Разработке и тестировании — для обмена кодом и конфигурациями между серверами.

Интересные факты

  • NFS является одним из старейших активно используемых сетевых протоколов (с 1984 года).
  • Sun Microsystems (разработчик NFS) передала спецификацию протокола в IETF (Internet Engineering Task Force) для стандартизации.
  • NFSv4 стал первым протоколом NFS, который полностью отказался от использования UDP в пользу TCP.
  • В 2012 году NFSv4.1 был принят как стандарт для хранения образов виртуальных машин в VMware vSphere.
  • Некоторые реализации NFS (например, в Linux) поддерживают «прямой доступ к памяти» (RDMA) через InfiniBand для сверхвысокой производительности.

Источники

  • RFC 1094 (NFSv2, 1989)
  • RFC 1813 (NFSv3, 1995)
  • RFC 3530 (NFSv4, 2003)
  • RFC 5661 (NFSv4.1, 2010)
  • RFC 7862 (NFSv4.2, 2016)
  • «NFS Illustrated» by Brent Callaghan (Addison-Wesley, 2000)
  • Документация Linux Kernel — NFS (https://www.kernel.org/doc/html/latest/filesystems/nfs/)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →