Введение
Протокол распределённой файловой системы – это специализированный протокол, первоначально разработанный компанией Sun Microsystems (Sun) в 1984 году, позволяющий пользователю на клиентском компьютере получать доступ к файлам по компьютерной сети аналогично доступу к локальному хранилищу. NFS, как и многие другие протоколы, построен на системе удалённого вызова процедур Open Network Computing (ONC RPC). NFS является открытым стандартом IETF, определённым в документе Request for Comments (RFC), что позволяет любому реализовать этот протокол.
a specific protocol
Network File System (NFS) is a distributed file system protocol originally developed by Sun Microsystems (Sun) in 1984, allowing a user on a client computer to access files over a computer network much like local storage is accessed. NFS, like many other protocols, builds on the Open Network Computing Remote Procedure Call (ONC RPC) system. NFS is an open IETF standard defined in a Request for Comments (RFC), allowing anyone to implement the protocol.
Версии и вариации
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.
assorted other improvements. The first NFS Version 3 proposal within Sun Microsystems was created not long after the release of NFS Version 2. The principal motivation was an attempt to mitigate the performance issue of the synchronous write operation in NFS Version 2. By July 1992, implementation practice had solved many shortcomings of NFS Version 2, leaving only lack of large file support (64 bit file sizes and offsets) a pressing issue. This became an acute pain point for Digital Equipment Corporation with the introduction of a 64 bit version of Ultrix to support their newly released 64 bit RISC processor, the Alpha 21064. At the time of introduction of Version 3, vendor support for TCP as a transport layer protocol began increasing. While several vendors had already added support for NFS Version 2 with TCP as a transport, Sun Microsystems added support for TCP as a transport for NFS at the same time it added support for Version 3. Using TCP as a transport made using NFS over a WAN more feasible, and allowed the use of larger read and write transfer sizes beyond the 8 KB limit imposed by User Datagram Protocol.
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 году.