楊云
摘要:該文對NFS工作原理進行了詳細介紹,提出了一種基于NFS文件系統(tǒng)來解決Linux系統(tǒng)間共享資源的解決方案,搭建了一個實用的企業(yè)NFS服務器。實驗結果證明,該服務器具有良好的安全性能和可用性。
關鍵詞:NFS;服務器;RPC服務器;守護進程
1NFS服務器概述
NFS從字面上講是網(wǎng)絡文件系統(tǒng),英文是Network File System,先是應用在UNIX操作系統(tǒng)中的共享資源上,后來被Linux操作系統(tǒng)繼承了下來,并發(fā)揚光大。NFS與Windows下的“網(wǎng)上鄰居”十分相似,它允許用戶連接到一個共享位置,然后像對待本地硬盤一樣操作。
NFS最早是由Sun公司于1984年開發(fā)出來的,其目的就是讓不同計算機、不同操作系統(tǒng)之間可以彼此共享文件。由于NFS使用起來非常方便,因此很快得到了大多數(shù)UNIX/Hnux系統(tǒng)的廣泛支持,而且還被IETE(國際互聯(lián)網(wǎng)工程組)制定為RFCl904、RFCl813和RFC3010標準.
如圖1所示為NFS服務器的工作過程示意圖。我們知道,絕大部分的網(wǎng)絡服務都有固定的端口,比如Web服務器的80端口、FTP服務器的2l端口、Windows下NetBIOS服務器的137-139端口、DHCP服務器的67端口……客戶端訪問服務器上相應的端口,服務器通過該端口提供服務。那么NFS服務是這樣嗎?它的工作端口是多少?我們只能很遺憾地說:NFS服務的工作端口不確定。
這是因為NFS是一個很復雜的組件,它涉及身份驗證和文件傳輸?shù)确椒矫婷娴男枨?,并且每一個功能都會占用一個單獨的端口。于是為了避免NFS服務過多的固定端口被占用,NFS服務器采取了使用動態(tài)端口的方式來完成各項工作,每一個功能都使用隨機的小于1024的端口。不過問題又來了,NFS客戶端如何知道它要訪問哪個端口才可以獲得NFS服務呢?
答案是必須使用RPC服務,RPC的英文全稱是Remote Procedure Call,意為遠程進程調用。RPC最主要的功能就是記錄每個NFS功能所對應的端口,它有固定端口號111。當NFS客戶端向服務器提出NFS服務時,必須要訪問NFS服務器的111端口(提供RPC服務的固定端口),遠程進程調作(RPC)將會把NFS工作的端口號返回給NFS客戶端,如圖2所示。那么RPC是怎么知道NFS每個功能的運行端口的呢?這是因為當NFS服務啟動時,它會自動向教程進程調用服務器(RPC服務器)進行注冊,明確告知它NFS各個功能所使用的不同端口。
如圖2所示,常規(guī)的NFS服務是按照如下流程進行的。
1)NFS啟動時,自動選擇工作端口小于1024的1011端口,并向RPC(工作于111端口)匯報,RPC記錄在案。
2)客戶端需要NFS提供服務時,首先向111端口的RPC查詢NFS工作在哪個端口?
3)RPC回答客戶端,它工作在1011端口。
4)于是,客戶端直接訪問NFS服務器的1011端口,請求服務。
5)NFS服務經(jīng)過權限認證,允許客戶端訪問自己的數(shù)據(jù)。