NFS is implemented using the RPC Protocol, designed to support remote procedure calls. All NFS operations are implemented as RPC procedures. A summary of NFS procedures is show below:
Procedure 0: NULL - Do nothing Procedure 1: GETATTR - Get file attributes Procedure 2: SETATTR - Set file attributes Procedure 3: LOOKUP - Lookup filename Procedure 4: ACCESS - Check Access Permission Procedure 5: READLINK - Read from symbolic link Procedure 6: READ - Read From file Procedure 7: WRITE - Write to file Procedure 8: CREATE - Create a file Procedure 9: MKDIR - Create a directory Procedure 10: SYMLINK - Create a symbolic link Procedure 11: MKNOD - Create a special device Procedure 12: REMOVE - Remove a File Procedure 13: RMDIR - Remove a Directory Procedure 14: RENAME - Rename a File or Directory Procedure 15: LINK - Create Link to an object Procedure 16: READDIR - Read From Directory Procedure 17: READDIRPLUS - Extended read from directory Procedure 18: FSSTAT - Get dynamic file system information Procedure 19: FSINFO - Get static file system Information Procedure 20: PATHCONF - Retrieve POSIX information Procedure 21: COMMIT - Commit cached data on a server to stable storage
NFS is a stateless protocol. This means that the file server stores no per-client information, and there are no NFS "connections". For example, NFS has no operation to open a file, since this would require the server to store state information (that a file is open; what its file descriptor is; the next byte to read; etc). Instead, NFS supports a Lookup procedure, which converts a filename into a file handle. This file handle is an unique, immutable identifier, usually an i-node number, or disk block address. NFS does have a Read procedure, but the client must specify a file handle and starting offset for every call to Read. Two identical calls to Read will yield the exact same results. If the client wants to read further in the file, it must call Read with a larger offset.
Of course, this is seldom seen by the end user. Most operating systems provide system calls to open files, and read from them sequentially. The client's operating system must maintain the required state information, and translate system calls into stateless NFS operations.
NFS performance is closely related to RPC performance. Since RPC is a request-reply protocol, it exhibits very poor performance over wide area networks. NFS performs best on fast LANs.