Введение

Протокол распределённой файловой системы – это специализированный протокол, первоначально разработанный компанией Sun Microsystems (Sun) в 1984 году, позволяющий пользователю на клиентском компьютере получать доступ к файлам по компьютерной сети аналогично доступу к локальному хранилищу. NFS, как и многие другие протоколы, построен на системе удалённого вызова процедур Open Network Computing (ONC RPC). NFS является открытым стандартом IETF, определённым в документе Request for Comments (RFC), что позволяет любому реализовать этот протокол.

Версии и вариации

Sun использовал версию 1 только для внутренних экспериментальных целей. Когда команда разработчиков внесла существенные изменения в NFS версии 1 и выпустила её за пределы Sun, они решили выпустить новую версию как v2, чтобы протестировать взаимодействие версий и возможность отката до предыдущей версии RPC. Интерфейс виртуальной файловой системы обеспечивает модульную реализацию, что отражается в простом протоколе. К февралю 1986 года были продемонстрированы реализации для операционных систем, таких как System V release 2, DOS и VAX/VMS с использованием Eunice, а также атрибуты вместе с именами файлов при сканировании каталога и различные другие улучшения. Первое предложение по NFS версии 3 в Sun Microsystems было создано вскоре после выпуска NFS версии 2. Основной причиной была попытка смягчить проблему производительности синхронной операции записи в NFS версии 2. К июлю 1992 года практическая реализация решила многие недостатки NFS версии 2, оставив лишь отсутствие поддержки больших файлов (64-битные размеры файлов и смещения) актуальной проблемой. Это стало острой проблемой для Digital Equipment Corporation с появлением 64-битной версии Ultrix для поддержки их недавно выпущенного 64-битного RISC-процессора Alpha 21064. К моменту появления версии 3 поддержка TCP в качестве протокола транспортного уровня начала расти. Хотя несколько производителей уже добавили поддержку NFS версии 2 с TCP в качестве транспорта, Sun Microsystems добавила поддержку TCP для NFS одновременно с поддержкой версии 3. Использование TCP в качестве транспорта сделало использование NFS через WAN более целесообразным и позволило использовать большие размеры блоков чтения и записи, чем ограничение в 8 КБ, установленное протоколом UDP.

WebNFS

WebNFS было расширением для NFSv2 и NFSv3, позволяющим ему работать за строгими брандмауэрами без сложности протоколов Portmap и MOUNT. WebNFS использовал фиксированный номер TCP/UDP-порта (2049), и вместо того, чтобы требовать от клиента обращаться к RPC-сервису MOUNT для определения начального дескриптора каждой файловой системы, оно вводило понятие публичного дескриптора (нулевого для NFSv2, нулевой длины для NFSv3), который можно было использовать как начальную точку. Оба этих изменения впоследствии были включены в NFSv4.

NFSv4

Версия 4 (RFC 3010, декабрь 2000 г.; пересмотренная в RFC 3530, апрель 2003 г. и снова в RFC 7530, март 2015 г.), разработанная под влиянием Andrew File System (AFS) и Server Message Block (SMB, также известного как CIFS), включает улучшения производительности, требует надежной защиты и представляет протокол с состоянием. Версия 4 стала первой версией, разработанной совместно с Internet Engineering Task Force (IETF) после передачи Sun Microsystems разработки протоколов NFS. Версия NFS 4.1 (RFC 5661, январь 2010 г.; пересмотренная в RFC 8881, август 2020 г.) призвана обеспечить поддержку протокола для использования кластерных серверных решений, включая возможность масштабируемого параллельного доступа к файлам, распределенным между несколькими серверами (расширение pNFS). Версия 4.1 включает механизм объединения сеансов (также известный как NFS Multipathing) и доступна в некоторых корпоративных решениях, таких как VMware ESXi. Версия NFS 4.2 (RFC 7862) была опубликована в ноябре 2016 г. с новыми функциями, включая: клонирование и копирование на стороне сервера, рекомендации по вводу-выводу для приложений, разреженные файлы, резервирование дискового пространства, блоки данных приложений (ADB), NFS с метками безопасности sec label, поддерживающий любую систему MAC-безопасности, и две новые операции для pNFS (LAYOUTERROR и LAYOUTSTATS). Одним из главных преимуществ NFSv4 перед предыдущими версиями является использование всего одного порта UDP или TCP – 2049 – для работы службы, что упрощает использование протокола через межсетевые экраны.

Платформы

NFS часто используется с операционными системами Unix (такими как Solaris, AIX, HP UX), macOS от Apple и Unix-подобными операционными системами (такими как Linux и FreeBSD). Он также доступен для операционных систем, таких как Acorn RISC OS, AmigaOS, классическая Mac OS, OpenVMS, MS-DOS, Microsoft Windows, OS/2, ArcaOS, Novell NetWare и IBM i. Альтернативные протоколы удаленного доступа к файлам включают Server Message Block (SMB, также известный как CIFS), Apple Filing Protocol (AFP), NetWare Core Protocol (NCP) и файловую систему OS/400 File Server (QFileSvr.400). SMB и NetWare Core Protocol (NCP) чаще встречаются, чем NFS, в системах под управлением Microsoft Windows; AFP чаще встречается, чем NFS, в системах Apple Macintosh; а QFileSvr.400 – в системах IBM i. В 2012 году Haiku добавила поддержку NFSv4 в рамках проекта Google Summer of Code.

Разработка протокола

Во время разработки протокола ONC (тогда известного как SunRPC) лишь сетевая вычислительная система Apollo (NCS) предлагала сопоставимые возможности. Две конкурирующие группы развивались из-за фундаментальных различий между этими двумя системами удаленного вызова процедур. Основные споры касались метода кодирования данных: внешнее представление данных (XDR) ONC всегда представляло целые числа в порядке big endian, даже если обе стороны соединения использовали мало эндианные машинные архитектуры, в то время как метод NCS стремился избежать перестановки байтов, когда обе стороны имели общую эндианность. В марте 1987 года был создан Сетевой вычислительный форум (Network Computing Forum) в (в конечном итоге безуспешной) попытке согласовать две сетевые вычислительные среды. В 1987 году Sun и AT&T объявили о совместной разработке AT&T UNIX System V Release 4. Это вызвало обеспокоенность у многих других лицензиатов AT&T UNIX System, которые опасались, что это даст Sun преимущество, и в конечном итоге привело к тому, что Digital Equipment, HP, IBM и другие компании основали Open Software Foundation (OSF) в 1988 году. Ирония заключалась в том, что Sun и AT&T ранее конкурировали за Sun NFS и Remote File System (RFS) AT&T, а быстрое распространение NFS по сравнению с RFS компаниями Digital Equipment, HP, IBM и многими другими производителями компьютеров склонило большинство пользователей в пользу NFS. Взаимодействию NFS способствовали мероприятия под названием "Connectathons", начавшиеся в 1986 году, которые позволяли производителям нейтрально тестировать совместимость своих реализаций. OSF приняла Distributed Computing Environment (DCE) и Distributed File System DCE (DFS) вместо Sun/ONC RPC и NFS. DFS использовал DCE в качестве RPC, а DFS был разработан на основе файловой системы Andrew (AFS); сама DCE была создана на основе набора технологий, включая NCS и Kerberos от Apollo.

1990-е годы

Sun Microsystems и Internet Society (ISOC) достигли соглашения о передаче "управления изменениями" ONC RPC, чтобы инженерно-стандартный орган ISOC, Internet Engineering Task Force (IETF), мог публиковать стандарты (RFC), касающиеся протоколов ONC RPC, и расширять ONC RPC. OSF пыталась сделать DCE RPC стандартом IETF, но в итоге отказалась передавать управление изменениями. Позже IETF решила расширить ONC RPC, добавив новый механизм аутентификации на основе Generic Security Services Application Program Interface (GSSAPI), RPCSEC GSS, чтобы соответствовать требованиям IETF к безопасности протокольных стандартов. Впоследствии Sun и ISOC заключили аналогичное соглашение о передаче ISOC управления изменениями NFS, при этом в контракте были четко исключены версии 2 и 3 NFS. Вместо этого ISOC получила право добавлять новые версии протокола NFS, что привело к тому, что IETF специфицировала версию NFS 4 в 2003 году.