歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> Unix教程 >> NFSv4 提供無縫的網絡訪問

NFSv4 提供無縫的網絡訪問

日期:2017/2/27 17:40:10   编辑:Unix教程

2006 年 10 月 23 日

網絡文件系統(NFS)從 20 世紀 80 年代中期開始就已成為免費操作系統的一部分,並且成為了專有 UNIX 系統的最愛。了解 NFS 方面的知識十分重要,其原因很簡單:能夠在 UNIX 網絡之間實現無縫訪問對於系統來說非常關鍵。在本文中我們將學習 NFS 最新的發行版 NFSv4 如何解決很多關鍵問題,尤其是版本 2 和版本 3 中都十分突出的安全性問題。

我們很容易把文件系統認為是想當然就有的。我們在計算機上工作,計算機讓我們能夠訪問打印機、照相機、數據庫、遠程傳感器、望遠鏡、編譯器和移動電話。這些設備幾乎沒什麼共性 —— 實際上,其中很多都是在 Internet 得到廣泛應用之後才成為了現實的(例如,綜合了小型計算機功能的照相機和移動電話)。然而,它們都需要某種類型的文件系統來安全地存儲和訪問數據。

通常來說,我們都不會真的去問這樣的問題:數據、使用數據的應用程序以及將數據呈現給我們的接口是如何存儲在計算機上的?很多用戶都(不無道理地)將文件系統當作是一面將自己與以位和字節形式保存的原始數據分隔開來的牆。連接文件系統所使用的協議棧對於大部分用戶來說通常都是一個黑盒子,實際上對於大部分程序員來說也是如此。在所有這些設備之間進行互聯也就相當於啟用了文件系統之間的通信。

網絡文件系統

從很多方面講,通信都不僅僅是信息的長距離傳輸。網絡協議也並不是使通用通信成為可能的惟一手段。畢竟,每個計算機系統都必須將數據報翻譯成另外一端的操作系統可以理解的內容。TCP 是一種高效的傳輸協議,但是它並沒有被優化來協助快速文件訪問和啟用應用程序軟件的遠程控制。

分布式計算和網絡計算的比較

傳統的網絡協議對於計算在計算機之間(實際上是網絡上)分發的方法所能做的貢獻不多。只有那些蹩腳的程序員才會依賴於傳輸協議和光纖電纜來進行並行計算。相反,我們通常都依賴於一個連續模型,其中鏈接層的協議在連接初始化完成後進行接管,並要在網卡之間進行相當復雜的握手。並行計算和分布式文件系統都不再識別 IP 或以太網了。現在,只要事關性能,我們就可以忽略它們。然而,安全性問題卻另當別論。

文件訪問在計算機系統之間的組織方式仍然是個謎。現在,不管所訪問的文件是在一台計算機上還是在多台合理分布的計算機上,對於訪問系統來說都應該沒什麼區別。文件系統的語義和文件系統的數據結構現在已經成為了兩個完全不同的主題。在 Plan 9 安裝上的或在 Andrew 文件系統(AFS)風格的分布式文件系統上的文件系統語義隱藏了文件的組織方式和文件系統到硬件和網絡的映射方式。NFS 並不需要隱藏文件和目錄在遠程文件系統上的存儲方法,但是它也沒有公開存儲文件系統、目錄和文件的實際硬件。

NFS:UNIX 問題的一個解決方案

分布式文件系統訪問需要使用多個命令來使用戶可以將網絡上一台計算機中的目錄掛載到自己的系統上來。Sun Microsystems 在很多年之前就面臨了這種挑戰,當時它正開始著手推廣稱為 遠程過程調用(RPC)的技術和 NFS。

Sun 公司需要解決的根本問題是如何將幾台 UNIX 機器連接在一起,從而構成一個無縫的分布式工作環境,而不需要重新編寫 UNIX 文件系統的語義,同時也不用添加太多分布式文件系統特有的數據結構。當然,要想讓 UNIX 工作站的網絡看起來像一個大系統是不可能的:在保留每個系統的完整性的同時,要讓用戶能夠在其他計算機的目錄上進行操作,而且不會體驗到不可接受的延時或任何的工作流程限制。

當然,NFS 所做的遠遠不止於實現了對文本文件的訪問,我們還可以通過 NFS 來分發 “可運行的” 應用程序。必須要有一些安全過程來支持網絡以防對可執行程序的惡意接管。但是這一切究竟是如何實現的呢?

NFS 是一個 RPC 標准

NFS 傳統上是作為一個 RFC 應用程序來定義的,它要求 NFS 服務器使用 TCP 協議,NFS 客戶機使用 TCP 或另外一種可以避免網絡擁塞的協議。Internet 工程任務組(IETF)在 RFC 1832 發布了 PRC 的 Request for Comments (RFC)。另外一個對於 NFS 實現來說至關重要的標准則描述了 NFS 所使用的數據格式;它已經在 RFC 1831 中以 “External Data Representation”(XDR)文檔的形式發布了。

其他一些 RFC 是關於在 NFS 會話過程中交換驗證信息所需要的安全性和加密算法的。這裡我們先來關注一下 NFS 的基本機制,相關的一個協議是 Mount 協議,它是在 RFC 1813 的附錄 1 中描述的。

這個 RFC 告訴我們哪些協議讓 NFS 得以工作,但是它並沒有告訴我們 NFS 目前是如何工作的。 NFS 協議已經被定義為 IETF 標准的事實多少說明了它的重要性。最新的 NFS 發行版依然還是版本 3,RFC 的發展也沒有超出 RFC 的描述報告階段,因此 REC 一直被認為是一個限於 Sun Microsystems 眾多的工程人員研究的對象和一種專有 UNIX 變種。Sun NFS 從 1985 年開始已經推出了很多版本,因此很多年以來一直在最當前的文件系統種類中處於領先地位。Sun Microsystems 在 1998 年將 NFS 的控制權轉交給了 IETF,許多 NSF 版本 4(NFSv4)的活動都是在 IETF 的支持下進行的。

因此,現在的 RPC 和 NFS 版本反映了 Sun 公司之外的公司和興趣團體的意願。不過,很多 Sun 公司的工程師仍然對 NFS 的開發保持著極大的興趣。

NFS 版本 3

版本 3 的 NFS(NFSv3)是無狀態的,而 NFSv4 是有狀態的。現在這一事實並不會引起太大爭議:盡管 NFS 構建於的 TCP/IP 世界一直都是無狀態的,這也恰恰是一些流量分析和安全性軟件公司運轉得很好的原因之一。

NFSv3 必須要依賴於幾個輔助協議實現對遠程計算機上目錄的無縫加載,而不會太過依賴於底層的文件系統機制。NFS 在這種嘗試中並非一直都成功。舉例來說, Mount 協議調用初始文件句柄,而 Network Lock Manager 協議解決文件鎖定,這兩個操作都需要狀態,而 NFSv3 卻並沒有提供狀態。因此,在沒有提供類似的數據流機制的協議層需要進行復雜的交互。現在,如果再考慮到在 Microsoft® Windows® 中創建的文件和目錄與 UNIX 上創建的文件和目錄有很大的差異的這一事實,那麼事情就變得更加復雜了。

NFSv3 必須要使用幾個端口來協調一些輔助協議,這樣端口和協議層的以及與它們相關的安全問題就更加復雜了。目前,這個操作模型已經被捨棄了,以前在各個端口上要進行的輔助協議的所有操作在 NFSv4 中都可以使用一個知名端口來進行的。

NFSv3 也已經准備好進行啟用了 Unicode 的文件系統操作了 —— 這直到二十世紀九十年代還是相當理論的一個優勢。總之,NFS 對於 UNIX 文件系統語義映射得非常好,並且促進了分布式文件系統實現之間的競爭,例如 AFS 和 Samba。雖然 Windows 的支持很差,不過 Samba 文件服務器已經解決了在 UNIX 和 Windows 系統之間訪問共享文件的問題。

Copyright © Linux教程網 All Rights Reserved