NFS
NFS (Network File System, сетевая файловая система) — протокол сетевого доступа к файловым системам, разработанный компанией Sun Microsystems в 1984 году. NFS позволяет клиентским компьютерам монтировать удалённые файловые системы и работать с ними так, как если бы они находились на локальном диске. Протокол работает поверх стека TCP/IP и широко применяется в корпоративных и серверных средах, особенно в UNIX-подобных операционных системах.
История
Разработка и первые версии
NFS был создан инженером Sun Microsystems Биллом Джойем (Bill Joy) в 1984 году. Первоначально протокол предназначался для обеспечения совместного доступа к файлам в локальных сетях рабочих станций Sun. В 1985 году Sun опубликовала спецификацию NFS как открытый стандарт, что позволило другим производителям реализовывать поддержку протокола в своих системах. Версия 2 (NFSv2) была стандартизирована в 1989 году в RFC 1094 и поддерживала только протокол UDP, работая поверх 32-битных файловых указателей, что ограничивало размер файлов 4 ГБ.
Версия 3
В 1995 году вышла версия NFSv3, описанная в RFC 1813. Основные нововведения включали:
- Поддержку 64-битных файловых указателей, что сняло ограничение на размер файлов.
- Использование как UDP, так и TCP.
- Асинхронные операции записи, повышающие производительность.
- Улучшенную обработку ошибок и расширенные атрибуты файлов.
NFSv3 стала самой распространённой версией протокола на протяжении 2000-х годов.
Версия 4
В 2000 году был опубликован стандарт NFSv4 (RFC 3010, обновлён в 2003 году RFC 3530). Эта версия кардинально переработала протокол:
- Объединение всех операций в один протокол, работающий поверх TCP.
- Встроенная поддержка безопасности через RPCSEC_GSS (Generic Security Services), включая Kerberos.
- Поддержка мандатных блокировок (mandatory locking) и делегирования файлов.
- Улучшенная поддержка кэширования и работы через медленные каналы.
В 2010 году вышло обновление NFSv4.1 (RFC 5661), добавившее поддержку параллельного доступа через pNFS (Parallel NFS) и улучшенную работу с кластерами. В 2016 году была стандартизирована версия NFSv4.2 (RFC 7862), которая расширила возможности сжатия, дедупликации и пространственных операций.
Архитектура и принцип работы
Модель клиент-сервер
NFS работает по классической модели «клиент-сервер». Сервер экспортирует (делает доступными) одну или несколько файловых систем. Клиент монтирует эти экспортированные ресурсы, после чего может выполнять стандартные файловые операции: чтение, запись, создание, удаление, переименование файлов и каталогов. Протокол не имеет состояния (stateless) в версиях 2 и 3, то есть сервер не хранит информацию о состоянии открытых файлов клиента — каждый запрос содержит всю необходимую информацию. В NFSv4 протокол стал stateful, что позволило реализовать блокировки и делегирование.
Протоколы и порты
Традиционно NFS использует следующие сетевые протоколы и порты:
- Portmapper (rpcbind) — порт 111 (TCP/UDP) для регистрации и поиска RPC-сервисов.
- mountd — демон монтирования, обычно порт 20048 (TCP/UDP).
- nfsd — демон NFS, порт 2049 (TCP/UDP) для версий 2 и 3; для NFSv4 используется только порт 2049 (TCP).
- nlockmgr — демон блокировок (для NFSv2/v3), порт варьируется.
- quotad — демон квот, порт варьируется.
В NFSv4 все операции выполняются через один порт (2049), что упрощает настройку межсетевых экранов.
Формат данных
NFS использует протокол удалённого вызова процедур (RPC) для передачи запросов. Данные сериализуются с помощью External Data Representation (XDR). В NFSv4 применяется расширенный формат, поддерживающий составные операции (compound operations), что позволяет объединять несколько запросов в один пакет.
Классификация и версии
NFSv2
- Стандарт: RFC 1094 (1989).
- Протокол: UDP.
- Размер файлов: до 4 ГБ (32-битные указатели).
- Особенности: минимальная безопасность, отсутствие блокировок, stateless.
NFSv3
- Стандарт: RFC 1813 (1995).
- Протокол: UDP и TCP.
- Размер файлов: до 16 ЭБ (64-битные указатели).
- Особенности: асинхронная запись, улучшенная обработка ошибок, поддержка символических ссылок и ACL.
NFSv4
- Стандарт: RFC 3530 (2003), RFC 5661 (2010) для v4.1, RFC 7862 (2016) для v4.2.
- Протокол: TCP (обязательно), поддержка UDP не предусмотрена.
- Размер файлов: до 16 ЭБ.
- Особенности: stateful, встроенная безопасность (Kerberos, LIPKEY), мандатные блокировки, делегирование, pNFS, сжатие, дедупликация.
pNFS (Parallel NFS)
Расширение NFSv4.1, позволяющее распределять данные по нескольким серверам хранения. Клиент может обращаться к разным серверам параллельно, что значительно повышает производительность в кластерных и высоконагруженных системах. pNFS поддерживает три типа метаданных: файловые (file), блочные (block) и объектные (object).
Применение
Корпоративные и серверные среды
NFS является стандартом де-факто для организации сетевого хранения в UNIX-подобных системах. Он используется для:
- Организации домашних каталогов пользователей в корпоративных сетях.
- Совместного доступа к данным между серверами приложений.
- Хранения резервных копий и архивов.
- Развёртывания контейнерных и виртуальных сред (например, в Kubernetes через CSI-драйверы).
Кластерные вычисления
В высокопроизводительных вычислительных кластерах (HPC) NFS применяется для организации общей файловой системы, доступной всем узлам. Однако для критически высоких нагрузок часто используются более производительные решения, такие как Lustre или GPFS, хотя pNFS частично решает эту проблему.
Встраиваемые системы и IoT
NFSv4 используется в некоторых встраиваемых системах и устройствах интернета вещей (IoT) для доступа к удалённым данным при ограниченных ресурсах.
Альтернативы
Основными конкурентами NFS являются:
- SMB/CIFS — протокол Microsoft для сетевого доступа, широко применяемый в Windows-средах. В Linux поддерживается через Samba.
- AFS (Andrew File System) — распределённая файловая система, разработанная в Университете Карнеги — Меллона.
- 9P — протокол, используемый в Plan 9 от Bell Labs.
- HDFS — распределённая файловая система Hadoop, оптимизированная для больших данных.
Безопасность
Аутентификация и шифрование
В NFSv2 и v3 безопасность минимальна: аутентификация основана на UID/GID клиента, передаваемых в открытом виде. Для защиты применяются внешние средства (VPN, Kerberos). В NFSv4 встроена поддержка RPCSEC_GSS, позволяющая использовать Kerberos 5, LIPKEY и другие механизмы. Шифрование трафика возможно через туннелирование (IPsec, SSH-туннели) или через использование Kerberos с шифрованием.
Экспорт и монтирование
На сервере экспорт файловых систем настраивается в файле /etc/exports (Linux) или аналогичных конфигурациях. Для каждого экспорта можно задать:
- Список разрешённых клиентов (по IP-адресу или домену).
- Права доступа (чтение/запись).
- Опции отображения пользователей (root squash, all squash).
- Синхронность/асинхронность записи.
Уязвимости
Исторически NFS был подвержен ряду атак, включая:
- Перехват трафика (sniffing) из-за отсутствия шифрования в ранних версиях.
- Подмена UID/GID для получения несанкционированного доступа.
- Атаки на rpcbind и mountd.
- Проблемы с блокировками в NFSv3.
Современные версии NFSv4 с Kerberos и использованием файрволов считаются достаточно безопасными для корпоративного использования.
Интересные факты
- NFS был одним из первых протоколов, реализовавших концепцию «сетевой файловой системы» в UNIX-мире.
- В 2000-х годах компания Network Appliance (NetApp) активно продвигала NFS как альтернативу Fibre Channel SAN для хранения данных.
- NFSv4.2 поддерживает операции с пространственными данными (sparse files), что полезно для виртуальных машин и баз данных.
- В операционной системе Linux поддержка NFS реализована как в пространстве ядра (kernel NFS), так и в пользовательском пространстве (nfs-utils).
- Протокол NFS используется в некоторых суперкомпьютерах из списка TOP500 для организации общей файловой системы.
Источники
- RFC 1094 — NFS: Network File System Protocol specification (1989).
- RFC 1813 — NFS Version 3 Protocol Specification (1995).
- RFC 3530 — Network File System (NFS) version 4 Protocol (2003).
- RFC 5661 — Network File System (NFS) Version 4 Minor Version 1 Protocol (2010).
- RFC 7862 — Network File System (NFS) Version 4 Minor Version 2 Protocol (2016).
- Callaghan, B. (2000). NFS Illustrated. Addison-Wesley.
- Sun Microsystems (1985). NFS: Network File System Protocol Specification. Sun Microsystems, Inc.
- Документация ядра Linux:
Documentation/filesystems/nfs/(kernel.org).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →