关闭

NFS基本知识汇总-(1)

257人阅读 评论(0) 收藏 举报
分类:

NFS概述

NFS是 Network FileSystem 的缩写,最早是由 Sun 公司所提出的。 它最大的功能就是可以通过网络,让不同的计算机、不同的操作系统、可以彼此分享档案 (share files)所以,也可以简单的将它看做是一个档案服务器 (fileserver)!这个 NFS 服务器可以让你的PC将网络远端的 NFS 主机分享的目录,挂载到本地端的机器当中, 在本地端的机器看起來,那个远端主机的目录就好像是自己的一个磁盘分区(partition)!使用上相当的方便!

既然 NFS 是通过网络来进行资料的传输,那么 NFS 使用那个 port来进行传输呢?答案是....不知道!因为 NFS 用来传输的 port 是随机选择小于 1024以下的端口来使用的。 那用户端怎么知道服务器端使用那个port 呢?这时候就得要远程过程调用(Remote Procedure Call, RPC) 协议来辅助了。

RPC

远程过程调用 (RPC) 是一种协议程序可使用这种协议向网络中的另一台计算机上的程序请求服务。由于使用 RPC 的程序不必了解支持通信的网络协议的情况,因此 RPC 提高了程序的互操作性。在 RPC 中,发出请求的程序是客户程序,而提供服务的程序是服务器。

因为NFS支持的功能相当的多,而不同的功能都会使用不同的程序来启动, 每启动一个功能就会启用一些 port 来传输资料,因此,NFS 的功能所对应的 port 才没有固定住, 而是采用随机取用一些未被使用的小于1024 的端口来作为传输之用。但如此一来又造成客户端想要连上服务器的困扰, 因为客户端必须要知道服务器端的相关端口才能够连接。

这时候RPC 最主要的功能就是指定每个NFS 功能所对应的 portnumber ,并且反馈给客户端,让客户端可以连接到正确的端口上去。 那 RPC 又是如何知道每个NFS 的端口呢?这是因为服务器在启动NFS 时会随机取用数个端口,并主动的向 RPC 注册,因此 RPC 可以知道每个端口对应的NFS 功能,然后RPC 又是固定使用 port111 来监听客户端的需求并反馈客户端正确的端口。

所以在服务器端启动NFS服务之前,RPC对应的portmap服务就要启动了,否则NFS无法注册端口。

由于 NFS 的各项功能都必須要向RPC 来注册,如此一来 RPC 才能了解 NFS 这个服务的各项功能的 port number, PID, NFS 服务器所监听的 IP 等等,而客户端才能够通过 RPC 找到正确对应的端口。 也就是说,NFS 必須要有 RPC 存在时才能成功的提供服務, 因此我们称 NFS 为RPC server 的一种。事实上,有很多这样的服务器都是向 RPC 注册的, 比如,NIS (Network Information Service) 也是 RPC server 的一种。 此外,不论是客户端还是服务器端,在要使用 NFS 时,两者都需要启动 RPC 才行。


在linux服务器上启动NFS服务的过程

[root@rhel5~]# service nfs start          ç==没有启动portmap服务前,NFS启动不了

StartingNFS services:  [  OK  ]

StartingNFS quotas: Cannot register service: RPC: Unable to receive; errno = Connectionrefused

rpc.rquotad:unable to register (RQUOTAPROG, RQUOTAVERS, udp).

[FAILED]

StartingNFS daemon: [FAILED]

StartingNFS mountd: Cannot register service: RPC: Unable to receive; errno = Connectionrefused

[FAILED]

[root@rhel5 ~]# service portmap start    ç==先启动portmap服务后,NFS启动正常

Starting portmap:[  OK ]

[root@rhel5 ~]#service nfs start

Starting NFSservices:  [  OK  ]

Starting NFSquotas: [  OK  ]

Starting NFSdaemon: [  OK  ]

Starting NFSmountd: [  OK  ]


[root@rhel5 ~]# ps-ef|grep rpc

root      1842    1  0 Dec12 ?        00:00:00 rpc.statd

root      1875    1  0 Dec12 ?        00:00:00 rpc.idmapd

rpc       9280    1  0 18:53 ?        00:00:00 portmap

root      9310    1  0 18:53 ?        00:00:00 rpc.rquotad

root      9319    7  0 18:53 ?        00:00:00 [rpciod/0]

root      9326    1  0 18:54 ?        00:00:00 rpc.mountd

 [root@rhel5 ~]# netstat -tunl

Active Internetconnections (only servers)

Proto Recv-Q Send-QLocal Address               ForeignAddress             State     

tcp        0     0 127.0.0.1:2208              0.0.0.0:*                   LISTEN     

tcp        0     0 0.0.0.0:2049                0.0.0.0:*                   LISTEN     

tcp        0     0 0.0.0.0:5801                0.0.0.0:*                   LISTEN     

tcp        0     0 0.0.0.0:5901                0.0.0.0:*                   LISTEN     

tcp        0     0 0.0.0.0:111                 0.0.0.0:*                   LISTEN     

tcp        0     0 0.0.0.0:752                 0.0.0.0:*                   LISTEN     

tcp        0     0 0.0.0.0:6001                0.0.0.0:*                   LISTEN     

tcp        0     0 0.0.0.0:1010                0.0.0.0:*                   LISTEN     

tcp        0     0 0.0.0.0:47093               0.0.0.0:*                   LISTEN     

tcp        0     0 0.0.0.0:21                  0.0.0.0:*                   LISTEN     

tcp        0     0 127.0.0.1:631               0.0.0.0:*                   LISTEN     

tcp        0     0 0.0.0.0:601                 0.0.0.0:*                   LISTEN     

tcp        0     0 127.0.0.1:25                0.0.0.0:*                   LISTEN     

tcp        0     0 127.0.0.1:2207              0.0.0.0:*                   LISTEN

tcp        0     0 :::6001                     :::*                        LISTEN

tcp        0     0 :::22                      :::*                        LISTEN

udp        0     0 0.0.0.0:1024                0.0.0.0:*                              

udp        0     0 0.0.0.0:2049                0.0.0.0:*                              

udp        0     0 0.0.0.0:1212                0.0.0.0:*                              

udp        0     0 0.0.0.0:5353                0.0.0.0:*                              

udp        0     0 0.0.0.0:746                 0.0.0.0:*                              

udp        0     0 0.0.0.0:749                 0.0.0.0:*                              

udp        0     0 0.0.0.0:1007                0.0.0.0:*                              

udp        0     0 0.0.0.0:111                 0.0.0.0:*                              

udp        0     0 0.0.0.0:631                 0.0.0.0:*                              

udp        0     0 0.0.0.0:1022                0.0.0.0:*                               

udp        0     0 :::1025                    :::*                                   

udp        0     0 :::5353                    :::*             

                      

[root@rhel5~]# rpcinfo -p localhost

    program vers proto   port

    100000    2  tcp    111  portmapper

    100000    2  udp    111  portmapper

    100011    1  udp   1007  rquotad

    100011    2  udp   1007  rquotad

    100011    1  tcp   1010  rquotad

    100011    2  tcp   1010  rquotad

    100003    2  udp   2049  nfs

    100003    3   udp  2049  nfs

    100003    4   udp   2049 nfs

    100003   2  tcp   2049  nfs

    100003   3  tcp   2049  nfs

    100003   4  tcp   2049  nfs

    100021   1   udp   1212 nlockmgr

    100021   3   udp   1212 nlockmgr

    100021   4   udp   1212 nlockmgr

    100021   1   tcp  47093 nlockmgr

    100021   3   tcp  47093 nlockmgr

    100021   4   tcp  47093 nlockmgr

    100005   1   udp   1022 mountd

    100005   1   tcp    601 mountd

    100005   2   udp   1022 mountd

    100005   2   tcp    601 mountd

    100005   3   udp   1022 mountd

   100005    3   tcp   601  mountd


[root@rhel5 ~]# cat/etc/services|grep 111

sunrpc          111/tcp         portmapper      # RPC 4.0 portmapper TCP

sunrpc          111/udp         portmapper      # RPC 4.0 portmapper UDP


NFS是一个分布式文件系统,它容许用户访问远程系统上的文件和目录,这些文件和目录对用户来说好像是在本地。用户可以使用OS命令创建,删除,读写远程文件和目录,以及设置远程文件和目录的属性,而这一切都是在本地完成的。NFS使用RPC而不受本地机器类型、OS和网络结构的限制。


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:63889次
    • 积分:1251
    • 等级:
    • 排名:千里之外
    • 原创:57篇
    • 转载:26篇
    • 译文:0篇
    • 评论:1条
    最新评论