<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Glusterfs之nfs模塊源碼分析(上)之nfs原理和協(xié)議

      我的新浪微博:http://weibo.com/freshairbrucewoo

      歡迎大家相互交流,共同提高技術(shù)。

       

      一、網(wǎng)絡(luò)文件系統(tǒng)概述

       

      Sun Microsystems公司于1984年推出了一個(gè)在整個(gè)計(jì)算機(jī)工業(yè)中被廣泛接受的遠(yuǎn)程文件存取機(jī)制,它被稱為Sun的網(wǎng)絡(luò)文件系統(tǒng)(Network File System),或者簡(jiǎn)稱為NFS。該機(jī)制允許在一臺(tái)計(jì)算機(jī)上運(yùn)行一個(gè)服務(wù)器,使對(duì)其上的某些或所有文件都可以進(jìn)行遠(yuǎn)程存取,還允許其他計(jì)算機(jī)上的應(yīng)用程序?qū)@些文件進(jìn)行存取。

      它使我們能夠達(dá)到文件的共享。當(dāng)使用者想用遠(yuǎn)端檔案時(shí)只要用"mount"就可把remote檔案系統(tǒng)掛接在自己的檔案系統(tǒng)之下,使得遠(yuǎn)端的文件操作上和本地機(jī)器的文件沒(méi)兩樣。一個(gè)應(yīng)用程序可以打開(Open)一個(gè)遠(yuǎn)程文件以進(jìn)行存取,可以從這個(gè)文件中讀取(Read)數(shù)據(jù),向該文件中寫入(Write)數(shù)據(jù),定位(Seek)到文件中的某個(gè)指定位置(開始、結(jié)尾或者其他地方),最后當(dāng)使用完畢后關(guān)閉(Close)該文件。并且這些操作都是對(duì)編程者透明的,操作方法和對(duì)本地文件的操作方法完全一樣。

      二、NFS協(xié)議

      NFS協(xié)議使用NFS,客戶端可以透明地訪問(wèn)服務(wù)器中的文件系統(tǒng),這不同于提供文件傳輸?shù)腇TP協(xié)議。FTP會(huì)產(chǎn)生文件一個(gè)完整的副本;NFS只訪問(wèn)一個(gè)進(jìn)程引用文件部分,并且一個(gè)目的就是使得這種訪問(wèn)透明。這就意味著任何能夠訪問(wèn)一個(gè)本地文件的客戶端程序不需要做任何修改,就應(yīng)該能夠訪問(wèn)一個(gè)NFS文件。NFS是一個(gè)使用SunRPC構(gòu)造的客戶端/服務(wù)器應(yīng)用程序,其客戶端通過(guò)向一臺(tái)NFS服務(wù)器發(fā)送RPC請(qǐng)求來(lái)訪問(wèn)其中的文件。盡管這一工作可以使用一般的用戶進(jìn)程來(lái)實(shí)現(xiàn),即NFS客戶端可以是一個(gè)用戶進(jìn)程,對(duì)服務(wù)器進(jìn)行顯式調(diào)用,而服務(wù)器也可以是一個(gè)用戶進(jìn)程。因?yàn)閮蓚€(gè)理由,NFS一般不這樣實(shí)現(xiàn)。首先訪問(wèn)一個(gè)NFS文件必須對(duì)客戶端透明,因此NFS的客戶端調(diào)用是由客戶端操作系統(tǒng)代表用戶進(jìn)程來(lái)完成的;其次,出于效率的考慮,NFS服務(wù)器在服務(wù)器操作系統(tǒng)中實(shí)現(xiàn)。如果NFS服務(wù)器是一個(gè)用戶進(jìn)程,每個(gè)客戶端請(qǐng)求和服務(wù)器應(yīng)答(包括讀和寫的數(shù)據(jù))將不得不在內(nèi)核和用戶進(jìn)程之間進(jìn)行切換,這個(gè)代價(jià)太大。第3版的NFS協(xié)議在1993年發(fā)布,下圖所示為一個(gè)NFS客戶端和一臺(tái)NFS服務(wù)器的典型結(jié)構(gòu)。 

       

      圖1  NFS客戶端和NFS服務(wù)器的典型結(jié)構(gòu) 

      (1)訪問(wèn)一個(gè)本地文件還是一個(gè)NFS文件對(duì)于客戶端來(lái)說(shuō)是透明的,當(dāng)文件被打開時(shí),由內(nèi)核決定這一點(diǎn)。文件被打開之后,內(nèi)核將本地文件的所有引用傳遞給名為“本地文件訪問(wèn)”的框中,而將一個(gè)NFS文件的所有引用傳遞給名為“NFS客戶端”的框中。

      (2)NFS客戶端通過(guò)其TCP/IP模塊向NFS服務(wù)器發(fā)送RPC請(qǐng)求,NFS主要使用UDP,最新的實(shí)現(xiàn)也可以使用TCP。

      (3)NFS服務(wù)器在端口2049接收作為UDP數(shù)據(jù)包的客戶端請(qǐng)求,盡管NFS可以被實(shí)現(xiàn)為使用端口映射器,允許服務(wù)器使用一個(gè)臨時(shí)端口,但是大多數(shù)實(shí)現(xiàn)都是直接指定UDP端口2049。

      (4)當(dāng)NFS服務(wù)器收到一個(gè)客戶端請(qǐng)求時(shí),它將這個(gè)請(qǐng)求傳遞給本地文件訪問(wèn)例程,然后訪問(wèn)服務(wù)器主機(jī)上的一個(gè)本地的磁盤文件。

      (5)NFS服務(wù)器需要花一定的時(shí)間來(lái)處理一個(gè)客戶端的請(qǐng)求,訪問(wèn)本地文件系統(tǒng)一般也需要一部分時(shí)間。在這段時(shí)間間隔內(nèi),服務(wù)器不應(yīng)該阻止其他客戶端請(qǐng)求。為了實(shí)現(xiàn)這一功能,大多數(shù)的NFS服務(wù)器都是多線程的——服務(wù)器的內(nèi)核中實(shí)際上有多個(gè)NFS服務(wù)器在NFS本身的加鎖管理程序中運(yùn)行,具體實(shí)現(xiàn)依賴于不同的操作系統(tǒng)。既然大多數(shù)UNIX內(nèi)核不是多線程的,一個(gè)共同的技術(shù)就是啟動(dòng)一個(gè)用戶進(jìn)程(常被稱為“nfsd”)的多個(gè)實(shí)例。這個(gè)實(shí)例執(zhí)行一個(gè)系統(tǒng)調(diào)用,使其作為一個(gè)內(nèi)核進(jìn)程保留在操作系統(tǒng)的內(nèi)核中。

      6在客戶端主機(jī)上,NFS客戶端需要花一定的時(shí)間來(lái)處理一個(gè)用戶進(jìn)程的請(qǐng)求。NFS客戶端向服務(wù)器主機(jī)發(fā)出一個(gè)RPC調(diào)用,然后等待服務(wù)器的應(yīng)答。為了給使用NFS的客戶端主機(jī)上的用戶進(jìn)程提供更多的并發(fā)性,在客戶端內(nèi)核中一般運(yùn)行著多個(gè)NFS客戶端,同樣具體實(shí)現(xiàn)也依賴于操作系統(tǒng)。

      三、NFS的工作原理和服務(wù)進(jìn)程的作用

      Linux中,NFS和服務(wù)進(jìn)程是兩個(gè)不同的概念,但它們確實(shí)緊密聯(lián)系在一起。首先,先介紹NFS的工作原理。

      第一節(jié)、NFS的工作原理

      啟動(dòng)NFS文件服務(wù)器時(shí),/etc/rc.local會(huì)自動(dòng)啟動(dòng)exportfs程序,指定可以導(dǎo)出的文件或目錄,而所能掛載的也只能是其所指定的目錄。
      NFS是基于XDR/RPC協(xié)議的。XDReXternal Data Representation,即外部數(shù)據(jù)表示法)提供一種方法,把數(shù)據(jù)從一種格式轉(zhuǎn)換成另一種標(biāo)準(zhǔn)數(shù)據(jù)格式表示法,確保在不同的計(jì)算機(jī)、操作系統(tǒng)及程序語(yǔ)言中,所有數(shù)據(jù)代表的意義都是相同的。
      RPCRemote Procedure Call,遠(yuǎn)程程序調(diào)用)請(qǐng)求遠(yuǎn)程計(jì)算機(jī)給予服務(wù)。客戶機(jī)通過(guò)網(wǎng)絡(luò)傳送RPC到遠(yuǎn)程計(jì)算機(jī),請(qǐng)求服務(wù)。
      NFS運(yùn)用RPC傳送數(shù)據(jù)的方法有以下幾步:
      1)客戶送出信息,請(qǐng)求服務(wù)。
      2)客戶占位程序把客戶送出的參數(shù)轉(zhuǎn)換成XDR標(biāo)準(zhǔn)格式,并用系統(tǒng)調(diào)用把信息送到網(wǎng)絡(luò)上。
      3)信息經(jīng)過(guò)網(wǎng)絡(luò)送達(dá)遠(yuǎn)程主機(jī)系統(tǒng)。
      4)遠(yuǎn)程主機(jī)將接受到的信息傳給服務(wù)器占位程序。
      5)把XDR形式的數(shù)據(jù),轉(zhuǎn)換成符合主機(jī)端的格式,取出客戶發(fā)出的服務(wù)請(qǐng)求參數(shù),送給服務(wù)器。
      6)服務(wù)器給客戶發(fā)送服務(wù)的逆向傳送過(guò)程。

      第二節(jié)、服務(wù)進(jìn)程的作用

      服務(wù)進(jìn)程是系統(tǒng)在啟動(dòng)計(jì)算機(jī)后自動(dòng)運(yùn)行的程序,包括對(duì)網(wǎng)絡(luò)的連接、網(wǎng)絡(luò)協(xié)議的加載、圖形桌面的顯示、文件系統(tǒng)的加載等,Linux系統(tǒng)中常見的進(jìn)程包括以下幾種。
      (1nfsd
      根據(jù)客戶端對(duì)文件系統(tǒng)的需求,啟動(dòng)文件系統(tǒng)請(qǐng)求服務(wù)進(jìn)程,響應(yīng)客戶的請(qǐng)求,而一般文件系統(tǒng)請(qǐng)求服務(wù)進(jìn)程的數(shù)目是8,這也是在rc.local中寫nfsd 8 &的原因。
      (2biod
      此進(jìn)程是在NFS客戶端上用的,用來(lái)啟動(dòng)異步塊I/O服務(wù)進(jìn)程來(lái)建立Buffer Cache,處理在客戶機(jī)上的讀寫。(3mountd
      這是個(gè)RPC服務(wù)器。啟動(dòng)rpc.mountd服務(wù)進(jìn)程后,mountd會(huì)讀取/etc/xtab查看哪一臺(tái)客戶機(jī)正在掛載哪一個(gè)文件系統(tǒng),并回應(yīng)客戶機(jī)所要掛載的路徑。
      (4inetd Internet services服務(wù)進(jìn)程
      當(dāng)系統(tǒng)啟動(dòng)時(shí),rc.local會(huì)啟動(dòng)inetd讀取inetd.conf配置文件,讀取網(wǎng)絡(luò)上所有服務(wù)器的地址,鏈接啟動(dòng)inetd.conf中所有的服務(wù)器。當(dāng)客戶機(jī)請(qǐng)求服務(wù)時(shí),inetd就會(huì)啟動(dòng)相關(guān)的服務(wù)進(jìn)程,如user使用telnet時(shí),inetd啟動(dòng)telnetd配合user telnet的需求,其余像ftpfingerrlogin等應(yīng)用程序,inetd也都會(huì)啟動(dòng)相對(duì)應(yīng)的服務(wù)程序ftpdfingerdrloingd等。
      (5portmap服務(wù)程序
      主要功能是將TCP/IP通信協(xié)議的端口數(shù)字轉(zhuǎn)換成RPC程序數(shù)字,因?yàn)檫@樣客戶端才能進(jìn)行RPC調(diào)用。一般RPC服務(wù)器是被inet啟動(dòng)的,所以portmap必須在inetd之前啟動(dòng),否則無(wú)法進(jìn)行RPC調(diào)用。 

      四、NFS服務(wù)器之RPC

      因?yàn)?span>NFS支持的功能相當(dāng)多,而不同的功能都會(huì)使用不同的程序來(lái)啟動(dòng)。每啟動(dòng)一個(gè)功能就會(huì)啟用一些端口來(lái)傳輸數(shù)據(jù),因此NFS的功能所對(duì)應(yīng)的端口才沒(méi)有固定,而是采用隨機(jī)取用一些未被使用的小于724的端口來(lái)作為傳輸之用。但如此一來(lái)又造成客戶端要連接服務(wù)器時(shí)的困擾,因?yàn)榭蛻舳艘婪?wù)器端的相關(guān)端口才能夠聯(lián)機(jī),此時(shí)我們需要遠(yuǎn)程過(guò)程調(diào)用(RPC)的服務(wù)。RPC最主要的功能就是指定每個(gè)NFS功能所對(duì)應(yīng)的端口號(hào),并且回報(bào)給客戶端,讓客戶端可以連接到正確的端口上。當(dāng)服務(wù)器在啟動(dòng)NFS時(shí)會(huì)隨機(jī)選用數(shù)個(gè)端口,并主動(dòng)地向RPC注冊(cè)。因此RPC可以知道每個(gè)端口對(duì)應(yīng)的NFS功能。然后RPC固定使用端口111來(lái)監(jiān)聽客戶端的請(qǐng)求并回報(bào)客戶端正確的端口,所以可以讓NFS的啟動(dòng)更為容易。注意,啟動(dòng)NFS之前,要先啟動(dòng)RPC;否則NFS會(huì)無(wú)法向RPC注冊(cè)。另外,重新啟動(dòng)RPC時(shí)原本注冊(cè)的數(shù)據(jù)會(huì)不見,因此RPC重新啟動(dòng)后它管理的所有程序都需要重新啟動(dòng)以重新向RPC注冊(cè)。
      當(dāng)客戶端有NFS文件要存取請(qǐng)求時(shí),它如何向服務(wù)器端要求數(shù)據(jù)?
      1)客戶端會(huì)向服務(wù)器端的RPCport 111)發(fā)出NFS文件存取功能的詢問(wèn)請(qǐng)求。
      2)服務(wù)器端找到對(duì)應(yīng)的已注冊(cè)的NFS daemon端口后會(huì)回報(bào)給客戶端。
      3)客戶端了解正確的端口后,就可以直接與NFS守護(hù)進(jìn)程來(lái)聯(lián)機(jī)。
      由于NFS的各項(xiàng)功能都必須要向RPC注冊(cè),因此RPC才能了解NFS服務(wù)的各項(xiàng)功能的port numberPIDNFS在主機(jī)所監(jiān)聽的IP等,而客戶端才能夠通過(guò)RPC的詢問(wèn)找到正確對(duì)應(yīng)的端口。即NFS必須要有RPC存在時(shí)才能成功地提供服務(wù),因此我們稱NFSRPC Server的一種。事實(shí)上,有很多這樣的服務(wù)器都向RPC注冊(cè)。例如,NISNetwork Information Service)也是RPC Server的一種。所以如下圖所示,不論是客戶端還是服務(wù)器端,要使用NFS都需要啟動(dòng)RPC

       

       

      2 NFSRPC服務(wù)及操作系統(tǒng)的相關(guān)性

       

       

      NFS協(xié)議從誕生到現(xiàn)在為止,已經(jīng)有多個(gè)版本,如NFS V2rfc794)及NFS V3rfc1813)(最新的版本是V4rfc307))。最早,SUN公司曾將NFS V2設(shè)計(jì)為只使用UDP,主要原因是當(dāng)時(shí)機(jī)器的內(nèi)存、網(wǎng)絡(luò)速度和CPU的影響,不得不選擇對(duì)機(jī)器負(fù)擔(dān)較輕的方式。而到了NFS V3SUN公司選擇了TCP作為默認(rèn)的傳輸方式。V3相對(duì)V2的主要區(qū)別如下:
      1)文件尺寸:V2最大只支持32位的文件大小(4 GB),而V3新增加了支持64位文件大小的技術(shù)
      2)文件傳輸尺寸:V3沒(méi)有限定傳輸尺寸,V2最多只能設(shè)定為8 KB,可以使用-rsize and -wsize來(lái)設(shè)定
      3)返回完整的信息:V3增加和完善了返回錯(cuò)誤和成功信息,對(duì)于服務(wù)器的設(shè)置和管理能帶來(lái)很大好處
      4)增加了對(duì)TCP傳輸協(xié)議的支持:V2只提供了對(duì)UDP的支持,在一些高要求的網(wǎng)絡(luò)環(huán)境中有很大限制;V3增加了對(duì)TCP的支持。UDP有著傳輸速度快且非連接傳輸?shù)谋憬萏匦裕窃趥鬏斏蠜](méi)有TCP穩(wěn)定。當(dāng)網(wǎng)絡(luò)不穩(wěn)定或者黑客入侵時(shí)很容易使NFS的性能大幅度降低,甚至使網(wǎng)絡(luò)癱瘓。所以對(duì)于不同情況,網(wǎng)絡(luò)要有針對(duì)性地選擇傳輸協(xié)議。NFS的默認(rèn)傳輸協(xié)議是UDP,然而RHEL 4.0內(nèi)核提供了對(duì)通過(guò)TCPNFS的支持。要通過(guò)TCP來(lái)使用NFS,在客戶端系統(tǒng)上掛載NFS導(dǎo)出的文件系統(tǒng)時(shí)包括一個(gè)“-o tcp”選項(xiàng)。使用TCP的優(yōu)點(diǎn)和缺點(diǎn)如下:
      1)被提高了的連接持久性,因此獲得的NFS stale file handles消息就會(huì)較少。
      2)載量較大的網(wǎng)絡(luò)的性能會(huì)有所提高,因?yàn)?/span>TCP確認(rèn)每個(gè)分組,而UDP只在完成時(shí)才確認(rèn)。
      3TCP具有擁塞控制技術(shù)(UDP根本沒(méi)有),在一個(gè)擁塞情況嚴(yán)重的網(wǎng)絡(luò)上,UDP分組是被首先撤銷的類型。使用UDP意味著,如果NFS正在寫入數(shù)據(jù)(單元為8 KB的塊),所有這8 KB數(shù)據(jù)都需要被重新傳輸。由于TCP的可靠性,8 KB數(shù)據(jù)中只有一部分需要重新傳輸。
      4)錯(cuò)誤檢測(cè)。當(dāng)TCP連接中斷(由于服務(wù)器停止),客戶端就會(huì)停止發(fā)送數(shù)據(jù)而開始重新連接。UDP是無(wú)連接的,使用它的客戶端就會(huì)繼續(xù)給網(wǎng)絡(luò)發(fā)送數(shù)據(jù)直到服務(wù)器重新上線為止。
      5TCP的費(fèi)用在性能方面的提高并不顯著。
      5)異步寫入特性。
      6)改進(jìn)了服務(wù)器的mount性能。
      7)有更好的I/O寫性能。
      8)更強(qiáng)的網(wǎng)絡(luò)運(yùn)行效能,使得網(wǎng)絡(luò)運(yùn)行更為有效。
      9)更強(qiáng)的災(zāi)難恢復(fù)功能。

      Linux上,UDP是默認(rèn)使用的協(xié)議。作為服務(wù)器別無(wú)選擇。但作為客戶端,可以使用TCP和其他使用TCPUNIX NFS服務(wù)器互聯(lián)。在局域網(wǎng)中使用UDP較好,因?yàn)榫钟蚓W(wǎng)有比較穩(wěn)定的網(wǎng)絡(luò)保證。使用UDP可以帶來(lái)更好的性能,Linux默認(rèn)使用V2,但是也可以通過(guò)mount optionnfsvers=n選擇。NFS使用TCP/IP提供的協(xié)議和服務(wù)運(yùn)行于OSI層次模型的應(yīng)用層,如表1所示。


      1  OSI層次模型上的NFS

       

      層    數(shù)

      名    稱

      功    能

      1

      應(yīng)用層

      NFS

      2

      表示層

      XDR

      3

      會(huì)話層

      RPC

      4

      傳輸層

      UDPTCP

      5

      網(wǎng)絡(luò)層

      IP

      6

      數(shù)據(jù)鏈路層

       

      7

      物理層

      Ethernet

      posted @ 2012-05-07 22:38  薔薇理想人生  閱讀(4388)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 艳妇乳肉豪妇荡乳在线观看| 国产精品视频亚洲二区| 久久国产成人午夜av影院| 国产AV影片麻豆精品传媒| 大又大又粗又硬又爽少妇毛片| 樱桃熟了a级毛片| 国产又色又爽又高潮免费| 久久人人97超碰精品| 人妻换着玩又刺激又爽| 东兴市| 国产一级区二级区三级区| 在线 欧美 中文 亚洲 精品| 熟女系列丰满熟妇AV| 国产黄色一区二区三区四区| 美女一区二区三区亚洲麻豆| 欧美日韩亚洲国产| 蜜桃视频网站| 香蕉久久夜色精品国产成人| 日韩幕无线码一区中文| 国内熟妇人妻色在线视频| 成人爽a毛片免费| 亚洲人妻一区二区精品| av高清无码 在线播放| 99久久亚洲综合精品成人网| 伊人久久大香线蕉AV网禁呦| 亚洲人成电影在线天堂色| 久久国产福利播放| 亚洲一级特黄大片在线观看| 久久99精品国产麻豆婷婷| 亚洲国产午夜理论片不卡| 浦江县| 亚洲午夜成人精品电影在线观看| 国产人妻久久精品一区二区三区| 色偷偷中文在线天堂中文| 欧美肥老太牲交大战| 亚洲色精品VR一区二区三区| 亚洲精品乱码久久久久久蜜桃图片| 国产成人AV男人的天堂| 亚洲天天堂天堂激情性色| 天天爱天天做天天爽夜夜揉| 亚洲综合激情五月色一区|