Email This Page

NFS: Network File System

Network File System (NFS), originally developed by Sun Microsystems and then extended by IETF, allows file sharing over network among different types of systems. In other words, NFS was designed for remote file access and sharing over network with various types of machines, operating systems, network architecture and transport protocols.

NFS uses a client/server architecture and consists of a client program and a server program. The server program makes file systems available for access by other machines via a process called exporting. NFS clients access shared file systems mountingthem from an NFS server machine. NFS mount protocol is used to communicate between the server and the client for the file access and sharing. NFS mount protocol also allows the server to grant remote access privileges to a restricted set of clients via export control.

NFS Version 2, the first widely implemented version of NFS, originally operated entirely over UDP and was meant to keep the protocol stateless. Several vendors had extended NFSv2 to support TCP as transport. NFS Version 3 introduced support for using TCP as transport. Using TCP as transport made using NFS over a WAN more feasible . Inheritated the good features of the previous versions, the current NFS Version 4 features the following improvements:

·   Improved access and performance on the Internet. The protocol is designed to transit firewalls easily, perform well where latency is high and bandwidth is low, and scale to very large numbers of clients per server.

·   Strong security with negotiation built into the protocol. The protocol builds on the work of the ONCRPC working group in supporting the Remote Prcedure Call (RPC) RPCSEC_GSS protocol. Additionally, the NFS version 4 provides a mechanism to allow clients and servers to negotiate security and require clients and servers to support a minimal set of security schemes.

·   Designed for protocol extensions. The protocol is designed to accept standard extensions that do not compromise backward compatibility.

NFS is strongly associated with UNIX systems, though it can be used on any platform such as Macintosh and Microsoft Windows operating systems. The Server Message Block (SMB) and Common Internet File System (CIFS) are a similar protocol that have equivalent implementation of a network file system under Microsoft Windows.



Protocol Structure - Network File System (NFS) Structured Data

INFS protocol support many basic data types of files. In addition NFS protocol supports the following structured data types:
Name Structure Notes
nfstime4 struct nfstime4 {
int64_t seconds;
uint32_t
}
The nfstime4 structure gives the number of seconds and nanoseconds since 0 hour January 1, 1970 Coordinated Universal Time (UTC). This data type is used to pass time and date information.
time_how4 enum time_how4 {
SET_TO_SERVER_TIME4 = 0,
SET_TO_CLIENT_TIME4 = 1
};
It is used as the attribute definitions to set time values.

settime4

union settime4 switch {

case SET_TO_CLIENT_TIME4:

nfstime4   time;

default:

void;

};

It is used as the attribute definitions to set time values.

specdata4

struct specdata4 {

uint32_t specdata1;

uint32_t specdata2;

};

This data type represents additional information for the device file types NF4CHR and NF4BLK.

fsid4

struct fsid4 {

uint64_t  major;

uint64_t  minor;

};

This type is the filesystem identifier that is used as a mandatory attribute.

fs_location4

struct fs_location4 {

utf8str_cis server<>;

pathname4 rootpath;

};

It is used for the fs_locations recommended attribute which is used for migration and

replication support.

fs_locations4

struct fs_locations4 {

pathname4  fs_root;

fs_location4  locations<>;

};

It is used for the fs_locations recommended attribute which is used for migration and

replication support.

fattr4

 

struct fattr4 {

bitmap4 attrmask;

attrlist4  attr_vals;

};

The fattr4 structure is used to represent file and directory attributes.

 

change_info4

 

struct change_info4 {

bool atomic;

changeid4 before;

changeid4 after;

};

This structure is used with the CREATE, LINK, REMOVE, RENAME operations to let the client know the value of the change attribute for the directory in which the target filesystem object resides.

clientaddr4

struct clientaddr4 {

string r_netid<>;

string r_addr<>;

};

It is used as part of the SETCLIENTID   operation to either specify the address of the client that is using a clientid or as part of the callback registration. 

cb_client4

struct cb_client4 {

unsigned int  cb_program;

clientaddr4   cb_location;

};

This structure is used by the client to inform the server of its call back address; includes the program number and client address.

nfs_client_id4

struct nfs_client_id4 {

verifier4 verifier;

opaque id<NFS4_OPAQUE_LIMIT>;

 };

This structure is part of the arguments to the SETCLIENTID operation.

open_owner4

Struct open_owner4 {

clientid4  clientid;

opaque wner<NFS4_OPAQUE_LIMIT>;

};

This structure is used to identify the owner of open state.

lock_owner4

struct lock_owner4 {

clientid4  clientid;

opaque owner<NFS4_OPAQUE_LIMIT>;

};

This structure is used to identify the owner of file locking state.

open_to_lock_owner4

struct open_to_lock_owner4 {

seqid4 open_seqid;

stateid4  open_stateid;

seqid4    lock_seqid;

lock_owner4  lock_owner;

};

This structure is used for the first LOCK operation done for an open_owner4.  It provides both the open_stateid and lock_owner such that the transition is made from a valid open_stateid sequence to that of the new lock_stateid sequence. 

stateid4

 

struct stateid4 {

uint32_t  seqid;

opaque other[12];

};

This structure is used for the various state sharing mechanism between the client and server. 


Related Protocols
SMB , CIFS , RPC , TCP , UDP <

Sponsor Source
NFS was originally created by Sun Microsystems and now is an IETF protocol(http://www.ieee.org ).

Reference

http://www.javvin.com/protocol/rfc3530.pdf : NFS Version 4 Protocol Specification

http://www.javvin.com/protocol/rfc1813.pdf : NFS Version 3 Protocol Specification

http://www.javvin.com/protocol/rfc1094.pdf : NFS Version 2 Protocol Specification