There are three generations of the NFS protocol. In NFS version 2 (or simply ``NFS v2''), the client and the server communicate via remote procedure calls (RPCs) over UDP. A key design feature of NFS version 2 is its stateless nature--the NFS server does not maintain any state about its clients, and consequently, no state information is lost if the server crashes.
The next version of NFS--NFS version 3--provides the following enhancements: (i) support for a variable length file handle of up to 64 bytes, instead of 32 byte files handles; (ii) eliminates the 8 KB limit on the maximum data transfer size; (iii) support for 64 bit offsets for file operations, up from 32 bits; (iv) reduces the number of fetch attribute calls by returning the file attributes on any call that modifies them; (v) supports asynchronous writes to improve performance; and (vi) adds support for TCP as a transport protocol in addition to UDP.
The latest version of NFS--NFS version 4--aims to improve the locking and performance for narrow data sharing applications. Some of the key features of NFS version 4 are as follows: (i) it integrates the suite of protocols (nfs, mountd, nlm, nsm) into one single protocol for ease of access across firewalls; (ii) it supports compound operations to coalesce multiple operations into one single message; (iii) it is stateful when compared to the previous incarnations of NFS -- NFS v4 clients use OPEN and CLOSE calls for stateful interaction with the server; (iv) it introduces the concept of delegation to allow clients to aggressively cache file data; and (v) it mandates strong security using the GSS API.