diff options
author | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 |
---|---|---|
committer | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 |
commit | 4bfd864f10b68b71482b35c818559068ef8d5797 (patch) | |
tree | e3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc2054.txt | |
parent | ea76e11061bda059ae9f9ad130a9895cc85607db (diff) |
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc2054.txt')
-rw-r--r-- | doc/rfc/rfc2054.txt | 899 |
1 files changed, 899 insertions, 0 deletions
diff --git a/doc/rfc/rfc2054.txt b/doc/rfc/rfc2054.txt new file mode 100644 index 0000000..71ebca5 --- /dev/null +++ b/doc/rfc/rfc2054.txt @@ -0,0 +1,899 @@ + + + + + + +Network Working Group B. Callaghan +Request for Comments: 2054 Sun Microsystems, Inc. +Category: Informational October 1996 + + + WebNFS Client Specification + +Status of this Memo + + This memo provides information for the Internet community. This memo + does not specify an Internet standard of any kind. Distribution of + this memo is unlimited. + +Abstract + + This document describes a lightweight binding mechanism that allows + NFS clients to obtain service from WebNFS-enabled servers with a + minimum of protocol overhead. In removing this overhead, WebNFS + clients see benefits in faster response to requests, easy transit of + packet filter firewalls and TCP-based proxies, and better server + scalability. + +Table of Contents + + 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . 2 + 2. TCP vs UDP . . . . . . . . . . . . . . . . . . . . . . . . 2 + 3. Well-known Port . . . . . . . . . . . . . . . . . . . . . 2 + 4. NFS Version 3 . . . . . . . . . . . . . . . . . . . . . . 3 + 4.1 Transfer Size . . . . . . . . . . . . . . . . . . . . . 3 + 4.2 Fast Writes . . . . . . . . . . . . . . . . . . . . . . 4 + 4.3 READDIRPLUS . . . . . . . . . . . . . . . . . . . . . . 4 + 5. Public Filehandle . . . . . . . . . . . . . . . . . . . . 5 + 5.1 NFS Version 2 Public Filehandle . . . . . . . . . . . . 5 + 5.2 NFS Version 3 Public Filehandle . . . . . . . . . . . . 5 + 6. Multi-component Lookup . . . . . . . . . . . . . . . . . . 6 + 6.1 Canonical Path vs. Native Path . . . . . . . . . . . . . 6 + 6.2 Symbolic Links . . . . . . . . . . . . . . . . . . . . . 7 + 6.2.1 Absolute Link . . . . . . . . . . . . . . . . . . . . 8 + 6.2.2 Relative Link . . . . . . . . . . . . . . . . . . . . 8 + 6.3 Filesystem Spanning Pathnames . . . . . . . . . . . . . 9 + 7. Contacting the Server . . . . . . . . . . . . . . . . . . 9 + 8. Mount Protocol . . . . . . . . . . . . . . . . . . . . . . 11 + 9. Exploiting Concurrency . . . . . . . . . . . . . . . . . . 12 + 9.1 Read-ahead . . . . . . . . . . . . . . . . . . . . . . . 12 + 9.2 Concurrent File Download . . . . . . . . . . . . . . . . 13 + 10. Timeout and Retransmission . . . . . . . . . . . . . . . . 13 + 11. Bibliography . . . . . . . . . . . . . . . . . . . . . . . 15 + 12. Security Considerations . . . . . . . . . . . . . . . . . 16 + + + +Callaghan Informational [Page 1] + +RFC 2054 WebNFS Client Specification October 1996 + + + 13. Acknowledgements . . . . . . . . . . . . . . . . . . . . . 16 + 14. Author's Address . . . . . . . . . . . . . . . . . . . . . 16 + +1. Introduction + + The NFS protocol provides access to shared filesystems across + networks. It is designed to be machine, operating system, network + architecture, and transport protocol independent. The protocol + currently exists in two versions: version 2 [RFC1094] and version 3 + [RFC1813], both built on Sun RPC [RFC1831] at its associated eXternal + Data Representation (XDR) [RFC1832] and Binding Protocol [RFC1833]. + + WebNFS provides additional semantics that can be applied to NFS + version 2 and 3 to eliminate the overhead of PORTMAP and MOUNT + protocols, make the protocol easier to use where firewall transit is + required, and reduce the number of LOOKUP requests required to + identify a particular file on the server. WebNFS server requirements + are described in RFC 2055. + +2. TCP vs UDP + + The NFS protocol is most well known for its use of UDP which performs + acceptably on local area networks. However, on wide area networks + with error prone, high-latency connections and bandwidth contention, + TCP is well respected for its congestion control and superior error + handling. A growing number of NFS implementations now support the + NFS protocol over TCP connections. + + Use of NFS version 3 is particularly well matched to the use of TCP + as a transport protocol. Version 3 removes the arbitrary 8k transfer + size limit of version 2, allowing the READ or WRITE of very large + streams of data over a TCP connection. Note that NFS version 2 is + also supported on TCP connections, though the benefits of TCP data + streaming will not be as great. + + A WebNFS client must first attempt to connect to its server with a + TCP connection. If the server refuses the connection, the client + should attempt to use UDP. + +3. Well-known Port + + While Internet protocols are generally identified by registered port + number assignments, RPC based protocols register a 32 bit program + number and a dynamically assigned port with the portmap service which + is registered on the well-known port 111. Since the NFS protocol is + RPC-based, NFS servers register their port assignment with the + portmap service. + + + + +Callaghan Informational [Page 2] + +RFC 2054 WebNFS Client Specification October 1996 + + + NFS servers are constrained by a requirement to re-register at the + same port after a server crash and recovery so that clients can + recover simply by retransmitting an RPC request until a response is + received. This is simpler than the alternative of having the client + repeatedly check with the portmap service for a new port assignment. + NFS servers typically achieve this port invariance by registering a + constant port assignment, 2049, for both UDP and TCP. + + To avoid the overhead of contacting the server's portmap service, and + to facilitate transit through packet filtering firewalls, WebNFS + clients optimistically assume that WebNFS servers register on port + 2049. Most NFS servers use this port assignment already, so this + client optimism is well justified. Refer to section 8 for further + details on port binding. + +4. NFS Version 3 + + NFS version 3 corrects deficiencies in version 2 of the protocol as + well as providing a number of features suitable to WebNFS clients + accessing servers over high-latency, low-bandwidth connections. + +4.1 Transfer Size + + NFS version 2 limited the amount of data in a single request or reply + to 8 kilobytes. This limit was based on what was then considered a + reasonable upper bound on the amount of data that could be + transmitted in a UDP datagram across an Ethernet. The 8k transfer + size limitation affects READ, WRITE, and READDIR requests. When using + version 2, a WebNFS client must not transmit any request that exceeds + the 8k transfer size. Additionally, the client must be able to + adjust its requests to suit servers that limit transfer sizes to + values smaller than 8k. + + NFS version 3 removes the 8k limit, allowing the client and server to + negotiate whatever limit they choose. Larger transfer sizes are + preferred since they require fewer READ or WRITE requests to transfer + a given amount of data and utilize a TCP stream more efficiently. + + While the client can use the FSINFO procedure to request the server's + maximum and preferred transfer sizes, in the interests of keeping the + number of NFS requests to a minimum, WebNFS clients should + optimistically choose a transfer size and make corrections if + necessary based on the server's response. + + For instance, given that the file attributes returned with the + filehandle from a LOOKUP request indicate that the file has a size of + 50k, the client might transmit a READ request for 50k. If the server + returns only 32k, then the client can assume that the server's + + + +Callaghan Informational [Page 3] + +RFC 2054 WebNFS Client Specification October 1996 + + + maximum transfer size is 32k and issue another read request for the + remaining data. The server will indicate positively when the end of + file is reached. + + A similar strategy can be used when writing to a file on the server, + though the client should be more conservative in choosing write + request sizes so as to avoid transmitting large amounts of data that + the server cannot handle. + +4.2 Fast Writes + + NFS version 2 requires the server to write client data to stable + storage before responding to the client. This avoids the possibility + of the the server crashing and losing the client's data after a + positive response. While this requirement protects the client from + data loss, it requires that the server direct client write requests + directly to the disk, or to buffer client data in expensive non- + volatile memory (NVRAM). Either way, the effect is poor write + performance, either through inefficient synchronous writes to the + disk or through the limited buffering available in NVRAM. + + NFS version 3 provides clients with the option of having the server + buffer a series of WRITE requests in unstable storage. A subsequent + COMMIT request from the client will have the server flush the data to + stable storage and have the client verify that the server lost none + of the data. Since fast writes benefit both the client and the + server, WebNFS clients should use WRITE/COMMIT when writing to the + server. + +4.3 READDIRPLUS + + The NFS version 2 READDIR procedure is also supported in version 3. + READDIR returns the names of the entries in a directory along with + their fileids. Browser programs that display directory contents as a + list will usually display more than just the filename; a different + icon may be displayed if the entry is a directory or a file. + Similarly, the browser may display the file size, and date of last + modification. + + Since this additional information is not returned by READDIR, version + 2 clients must issue a series of LOOKUP requests, one per directory + member, to retrieve the attribute data. Clearly this is an expensive + operation where the directory is large (perhaps several hundred + entries) and the network latency is high. + + The version 3 READDIRPLUS request allows the client to retrieve not + only the names of the directory entries, but also their file + attributes and filehandles in a single call. WebNFS clients that + + + +Callaghan Informational [Page 4] + +RFC 2054 WebNFS Client Specification October 1996 + + + require attribute information for directory entries should use + READDIRPLUS in preference to READDIR. + +5. Public Filehandle + + NFS filehandles are normally created by the server and used to + identify uniquely a particular file or directory on the server. The + client does not normally create filehandles or have any knowledge of + the contents of a filehandle. + + The public filehandle is an an exception. It is an NFS filehandle + with a reserved value and special semantics that allow an initial + filehandle to be obtained. A WebNFS client can use the public + filehandle as an initial filehandle rather than using the MOUNT + protocol. Since NFS version 2 and version 3 have different + filehandle formats, the public filehandle is defined differently for + each. + + The public filehandle is a zero filehandle. For NFS version 2 this + is a filehandle with 32 zero octets. A version 3 public filehandle + has zero length. + +5.1 NFS Version 2 Public Filehandle + + A version 2 filehandle is defined in RFC 1094 as an opaque value + occupying 32 octets. A version 2 public filehandle has a zero in + each octet, i.e. all zeros. + + 1 32 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0| + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +5.2 NFS Version 3 Public Filehandle + + A version 3 filehandle is defined in RFC 1813 as a variable length + opaque value occupying up to 64 octets. The length of the filehandle + is indicated by an integer value contained in a 4 octet value which + describes the number of valid octets that follow. A version 3 public + filehandle has a length of zero. + + +-+-+-+-+ + | 0 | + +-+-+-+-+ + + + + + + + +Callaghan Informational [Page 5] + +RFC 2054 WebNFS Client Specification October 1996 + + +6. Multi-component Lookup + + Normally the NFS LOOKUP request (version 2 or 3) takes a directory + filehandle along with the name of a directory member, and returns the + filehandle of the directory member. If a client needs to evaluate a + pathname that contains a sequence of components, then beginning with + the directory filehandle of the first component it must issue a + series of LOOKUP requests one component at a time. For instance, + evaluation of the Unix path "a/b/c" will generate separate LOOKUP + requests for each component of the pathname "a", "b", and "c". + + A LOOKUP request that uses the public filehandle can provide a + pathname containing multiple components. The server is expected to + evaluate the entire pathname and return a filehandle for the final + component. Both canonical (slash-separated) and server native + pathnames are supported. + + For example, rather than evaluate the path "a/b/c" as: + + LOOKUP FH=0x0 "a" ---> + <--- FH=0x1 + LOOKUP FH=0x1 "b" ---> + <--- FH=0x2 + LOOKUP FH=0x2 "c" ---> + <--- FH=0x3 + + Relative to the public filehandle these three LOOKUP requests can be + replaced by a single multi-component lookup: + + LOOKUP FH=0x0 "a/b/c" ---> + <--- FH=0x3 + + Multi-component lookup is supported only for LOOKUP requests relative + to the public filehandle. + +6.1 Canonical Path vs. Native Path + + If the pathname in a multi-component LOOKUP request begins with an + ASCII character, then it must be a canonical path. A canonical path + is a hierarchically-related, slash-separated sequence of components, + <directory>/<directory>/.../<name>. Occurrences of the "/" character + within a component must be escaped using the escape code %2f. Non- + ascii characters within components must also be escaped using the "%" + character to introduce a two digit hexadecimal code. Occurrences of + the "%" character that do not introduce an encoded character must + themselves be encoded with %25. + + + + + +Callaghan Informational [Page 6] + +RFC 2054 WebNFS Client Specification October 1996 + + + If the first character of the path is a slash, then the canonical + path will be evaluated relative to the server's root directory. If + the first character is not a slash, then the path will be evaluated + relative to the directory with which the public filehandle is + associated. + + Not all WebNFS servers can support arbitrary use of absolute paths. + Clearly, the server cannot return a filehandle if the path identifies + a file or directory that is not exported by the server. In addition, + some servers will not return a filehandle if the path names a file or + directory in an exported filesystem different from the one that is + associated with the public filehandle. + + If the first character of the path is 0x80 (non-ascii) then the + following character is the first in a native path. A native path + conforms to the normal pathname syntax of the server. For example: + + Lookup for Canonical Path: + + LOOKUP FH=0x0 "/a/b/c" + + Lookup for Native Path: + + LOOKUP FH=0x0 0x80 "a:b:c" + +6.2 Symbolic Links + + On Unix servers, components within a pathname may be symbolic links. + The server will evaluate these symbolic links as a part of the normal + pathname evaluation process. If the final component is a symbolic + link, the server will return its filehandle, rather than evaluate it. + + If the attributes returned with a filehandle indicate that it refers + to a symbolic link, then it is the client's responsibility to deal + with the link by fetching the contents of the link using the READLINK + procedure. What follows is determined by the contents of the link. + + Evaluation of symbolic links by the client is defined only if the + symbolic link is retrieved via the multi-component lookup of a + canonical path. + + + + + + + + + + + +Callaghan Informational [Page 7] + +RFC 2054 WebNFS Client Specification October 1996 + + +6.2.1 Absolute Link + + If the first character of the link text is a slash "/", then the + following path can be assumed to be absolute. The entire path must + be evaluated by the server relative to the public filehandle: + + LOOKUP FH=0x0 "a/b" ---> + <--- FH=0x1 (symbolic link) + READLINK FH=0x1 ---> + <--- "/x/y" + LOOKUP FH=0x0 "/x/y" + <--- FH=0x2 + + So in this case the client just passes the link text back to the + server for evaluation. + +6.2.2 Relative Link + + If the first character of the link text is not a slash, then the + following path can be assumed to be relative to the location of the + symbolic link. To evaluate this correctly, the client must + substitute the link text in place of the final pathname component + that named the link and issue a another LOOKUP relative to the public + filehandle. + + LOOKUP FH=0x0 "a/b" ---> + <--- FH=0x1 (symbolic link) + READLINK FH=0x1 ---> + <--- "x/y" + LOOKUP FH=0x0 "a/x/y" + <--- FH=0x2 + + By substituting the link text in the link path and having the server + evaluate the new path, the server effectively gets to evaluate the + link relative to the link's location. + + The client may also "clean up" the resulting pathname by removing + redundant components as described in Section 4. of RFC 1808. + + + + + + + + + + + + + +Callaghan Informational [Page 8] + +RFC 2054 WebNFS Client Specification October 1996 + + +6.3 Filesystem Spanning Pathnames + + NFS LOOKUP requests normally do not cross from one filesystem to + another on the server. For instance if the server has the following + export and mounts: + + /export (exported) + + /export/bigdata (mountpoint) + + then an NFS LOOKUP for "bigdata" using the filehandle for "/export" + will return a "no file" error because the LOOKUP request did not + cross the mountpoint on the server. There is a practical reason for + this limitation: if the server permitted the mountpoint crossing to + occur, then a Unix client might receive ambiguous fileid information + inconsistent with it's view of a single remote mount for "/export". + It is expected that the client resolve this by mirroring the + additional server mount, e.g. + + Client Server + + /mnt <--- mounted on --- /export + + /mnt/bigdata <--- mounted on --- /export/bigdata + + However, this semantic changes if the client issues the filesystem + spanning LOOKUP relative to the public filehandle. If the following + filesystems are exported: + + /export (exported public) + + /export/bigdata (exported mountpoint) + + then an NFS LOOKUP for "bigdata" relative to the public filehandle + will cross the mountpoint - just as if the client had issued a MOUNT + request - but only if the new filesystem is exported, and only if the + server supports Export Spanning Pathnames described in Section 6.3 of + RFC 2055 [RFC2055]. + +7. Contacting the Server + + WebNFS clients should be optimistic in assuming that the server + supports WebNFS, but should be capable of fallback to conventional + methods for server access if the server does not support WebNFS. + + + + + + + +Callaghan Informational [Page 9] + +RFC 2054 WebNFS Client Specification October 1996 + + + The client should start with the assumption that the server supports: + + - NFS version 3. + + - NFS TCP connections. + + - Public Filehandles. + + If these assumptions are not met, the client should fall back + gracefully with a minimum number of messages. The following steps are + recommended: + + 1. Attempt to create a TCP connection to the server's + port 2049. + + If the connection fails then assume that a request + sent over UDP will work. Use UDP port 2049. + + Do not use the PORTMAP protocol to determine the + server's port unless the server does not respond to + port 2049 for both TCP and UDP. + + 2. Assume WebNFS and V3 are supported. + Send an NFS version 3 LOOKUP with the public filehandle + for the requested pathname. + + If the server returns an RPC PROG_MISMATCH error then + assume that NFS version 3 is not supported. Retry + the LOOKUP with an NFS version 2 public filehandle. + + Note: The first call may not necessarily be a LOOKUP + if the operation is directed at the public filehandle + itself, e.g. a READDIR or READDIRPLUS of the directory + that is associated with the public filehandle. + + If the server returns an NFS3ERR_STALE, NFS3ERR_INVAL, or + NFS3ERR_BADHANDLE error, then assume that the server does + not support WebNFS since it does not recognize the public + filehandle. The client must use the server's portmap + service to locate and use the MOUNT protocol to obtain an + initial filehandle for the requested path. + + WebNFS clients can benefit by caching information about the server: + whether the server supports TCP connections (if TCP is supported then + the client should cache the TCP connection as well), which protocol + the server supports and whether the server supports public + filehandles. If the server does not support public filehandles, the + client may choose to cache the port assignment of the MOUNT service + + + +Callaghan Informational [Page 10] + +RFC 2054 WebNFS Client Specification October 1996 + + + as well as previously used pathnames and their filehandles. + +8. Mount Protocol + + If the server returns an error to the client that indicates no + support for public filehandles, the client must use the MOUNT + protocol to convert the given pathname to a filehandle. Version 1 of + the MOUNT protocol is described in Appendix A of RFC 1094 and version + 3 in Appendix I of RFC 1813. Version 2 of the MOUNT protocol is + identical to version 1 except for the addition of a procedure + MOUNTPROC_PATHCONF which returns POSIX pathconf information from the + server. + + At this point the client must already have some indication as to + which version of the NFS protocol is supported on the server. Since + the filehandle format differs between NFS versions 2 and 3, the + client must select the appropriate version of the MOUNT protocol. + MOUNT versions 1 and 2 return only NFS version 2 filehandles, whereas + MOUNT version 3 returns NFS version 3 filehandles. + + Unlike the NFS service, the MOUNT service is not registered on a + well-known port. The client must use the PORTMAP service to locate + the server's MOUNT port before it can transmit a MOUNTPROC_MNT + request to retrieve the filehandle corresponding to the requested + path. + + Client Server + ------ ------ + + -------------- MOUNT port ? --------------> Portmapper + <-------------- Port=984 ------------------ + + ------- Filehandle for /export/foo ? ----> Mountd @ port 984 + <--------- Filehandle=0xf82455ce0.. ------ + + NFS servers commonly use a client's successful MOUNTPROC_MNT request + request as an indication that the client has "mounted" the filesystem + and may maintain this information in a file that lists the + filesystems that clients currently have mounted. This information is + removed from the file when the client transmits an MOUNTPROC_UMNT + request. Upon receiving a successful reply to a MOUNTPROC_MNT + request, a WebNFS client should send a MOUNTPROC_UMNT request to + prevent an accumulation of "mounted" records on the server. + + Note that the additional overhead of the PORTMAP and MOUNT protocols + will have an effect on the client's binding time to the server and + the dynamic port assignment of the MOUNT protocol may preclude easy + firewall or proxy server transit. + + + +Callaghan Informational [Page 11] + +RFC 2054 WebNFS Client Specification October 1996 + + + The client may regain some performance improvement by utilizing a + pathname prefix cache. For instance, if the client already has a + filehandle for the pathname "a/b" then there is a good chance that + the filehandle for "a/b/c" can be recovered by by a lookup of "c" + relative to the filehandle for "a/b", eliminating the need to have + the MOUNT protocol translate the pathname. However, there are risks + in doing this. Since the LOOKUP response provides no indication of + filesystem mountpoint crossing on the server, the relative LOOKUP may + fail, since NFS requests do not normally cross mountpoints on the + server. The MOUNT service can be relied upon to evaluate the + pathname correctly - including the crossing of mountpoints where + necessary. + +9. Exploiting Concurrency + + NFS servers are known for their high capacity and their + responsiveness to clients transmitting multiple concurrent requests. + For best performance, a WebNFS client should take advantage of server + concurrency. The RPC protocol on which the NFS protocol is based, + provides transport-independent support for this concurrency via a + unique transaction ID (XID) in every NFS request. + + There is no need for a client to open multiple TCP connections to + transmit concurrent requests. The RPC record marking protocol allows + the client to transmit and receive a stream of NFS requests and + replies over a single connection. + +9.1 Read-ahead + + To keep the number of READ requests to a minimum, a WebNFS client + should use the maximum transfer size that it and the server can + support. The client can often optimize utilization of the link + bandwidth by transmitting concurrent READ requests. The optimum + number of READ requests needs to be determined dynamically taking + into account the available bandwidth, link latency, and I/O bandwidth + of the client and server, e.g. the following series of READ requests + show a client using a single read-ahead to transfer a 128k file from + the server with 32k READ requests: + + READ XID=77 offset=0 for 32k --> + READ XID=78 offset=32k for 32k --> + <-- Data for XID 77 + READ XID=79 offset=64k for 32k --> + <-- Data for XID 78 + READ XID=80 offset=96k for 32k --> + <-- Data for XID 79 + <-- Data for XID 80 + + + + +Callaghan Informational [Page 12] + +RFC 2054 WebNFS Client Specification October 1996 + + + The client must be able to handle the return of data out of order. + For instance, in the above example the data for XID 78 may be + received before the data for XID 77. + + The client should be careful not to use read-ahead beyond the + capacity of the server, network, or client, to handle the data. This + might be determined by a heuristic that measures throughput as the + download proceeds. + +9.2 Concurrent File Download + + A client may combine read-ahead with concurrent download of multiple + files. A practical example is that of Web pages that contain + multiple images, or a Java Applet that imports multiple class files + from the server. + + Omitting read-ahead for clarity, the download of multiple files, + "file1", "file2", and "file3" might look something like this: + + LOOKUP XID=77 0x0 "file1" --> + LOOKUP XID=78 0x0 "file2" --> + LOOKUP XID=79 0x0 "file3" --> + <-- FH=0x01 for XID 77 + READ XID=80 0x01 offset=0 for 32k --> + <-- FH=0x02 for XID 78 + READ XID=81 0x02 offset=0 for 32k --> + <-- FH=0x03 for XID 79 + READ XID=82 0x03 offset=0 for 32k --> + <-- Data for XID 80 + <-- Data for XID 81 + <-- Data for XID 82 + + Note that the replies may be received in a different order from the + order in which the requests were transmitted. This is not a problem, + since RPC uses the XID to match requests with replies. A benefit of + the request/reply multiplexing provided by the RPC protocol is that + the download of a large file that requires many READ requests will + not delay the concurrent download of smaller files. + + Again, the client must be careful not to drown the server with + download requests. + +10.0 Timeout and Retransmission + + A WebNFS client should follow the example of conventional NFS clients + and handle server or network outages gracefully. If a reply is not + received within a given timeout, the client should retransmit the + request with its original XID (described in Section 8 of RFC 1831). + + + +Callaghan Informational [Page 13] + +RFC 2054 WebNFS Client Specification October 1996 + + + The XID can be used by the server to detect duplicate requests and + avoid unnecessary work. + + While it would seem that retransmission over a TCP connection is + unnecessary (since TCP is responsible for detecting and + retransmitting lost data), at the RPC layer retransmission is still + required for recovery from a lost TCP connection, perhaps due to a + server crash or, because of resource limitations, the server has + closed the connection. When the TCP connection is lost, the client + must re-establish the connection and retransmit pending requests. + + The client should set the request timeout according to the following + guidelines: + + - A timeout that is too small may result in the + wasteful transmission of duplicate requests. + The server may be just slow to respond, either because + it is heavily loaded, or because the link latency is high. + + - A timeout that is too large may harm throughput if + the request is lost and the connection is idle waiting + for the retransmission to occur. + + - The optimum timeout may vary with the server's + responsiveness over time, and with the congestion + and latency of the network. + + - The optimum timeout will vary with the type of NFS + request. For instance, the response to a LOOKUP + request will be received more quickly than the response + to a READ request. + + - The timeout should be increased according to an + exponential backoff until a limit is reached. + For instance, if the timeout is 1 second, the + first retransmitted request should have a timeout of + two seconds, the second retransmission 4 seconds, and + so on until the timeout reaches a limit, say 30 seconds. + This avoids flooding the network with retransmission + requests when the server is down, or overloaded. + + As a general rule of thumb, the client should start with a long + timeout until the server's responsiveness is determined. The timeout + can then be set to a value that reflects the server's responsiveness + to previous requests. + + + + + + +Callaghan Informational [Page 14] + +RFC 2054 WebNFS Client Specification October 1996 + + +11.0 Bibliography + + [RFC1808] Fielding, R., + "Relative Uniform Resource Locators", RFC 1808, + June 1995. + http://www.internic.net/rfc/rfc1808.txt + + [RFC1831] Srinivasan, R., "RPC: Remote Procedure Call + Protocol Specification Version 2", RFC 1831, + August 1995. + http://www.internic.net/rfc/rfc1831.txt + + [RFC1832] Srinivasan, R, "XDR: External Data Representation + Standard", RFC 1832, August 1995. + http://www.internic.net/rfc/rfc1832.txt + + [RFC1833] Srinivasan, R., "Binding Protocols for ONC RPC + Version 2", RFC 1833, August 1995. + http://www.internic.net/rfc/rfc1833.txt + + [RFC1094] Sun Microsystems, Inc., "Network Filesystem + Specification", RFC 1094, March 1989. NFS + version 2 protocol specification. + http://www.internic.net/rfc/rfc1094.txt + + [RFC1813] Sun Microsystems, Inc., "NFS Version 3 Protocol + Specification," RFC 1813, June 1995. NFS version + 3 protocol specification. + http://www.internic.net/rfc/rfc1813.txt + + [RFC2055] Callaghan, B., "WebNFS Server Specification", + RFC 2055, October 1996. + http://www.internic.net/rfc/rfc2055.txt + + [Sandberg] Sandberg, R., D. Goldberg, S. Kleiman, D. Walsh, + B. Lyon, "Design and Implementation of the Sun + Network Filesystem," USENIX Conference + Proceedings, USENIX Association, Berkeley, CA, + Summer 1985. The basic paper describing the + SunOS implementation of the NFS version 2 + protocol, and discusses the goals, protocol + specification and trade-offs. + + [X/OpenNFS] X/Open Company, Ltd., X/Open CAE Specification: + Protocols for X/Open Internetworking: XNFS, + X/Open Company, Ltd., Apex Plaza, Forbury Road, + Reading Berkshire, RG1 1AX, United Kingdom, + 1991. This is an indispensable reference for + + + +Callaghan Informational [Page 15] + +RFC 2054 WebNFS Client Specification October 1996 + + + NFS version 2 protocol and accompanying + protocols, including the Lock Manager and the + Portmapper. + + [X/OpenPCNFS] X/Open Company, Ltd., X/Open CAE Specification: + Protocols for X/Open Internetworking: (PC)NFS, + Developer's Specification, X/Open Company, Ltd., + Apex Plaza, Forbury Road, Reading Berkshire, RG1 + 1AX, United Kingdom, 1991. This is an + indispensable reference for NFS version 2 + protocol and accompanying protocols, including + the Lock Manager and the Portmapper. + +12. Security Considerations + + Since the WebNFS server features are based on NFS protocol versions 2 + and 3, the RPC based security considerations described in RFC 1094, + RFC 1831, and RFC 1832 apply here also. + + Clients and servers may separately negotiate secure connection + schemes for authentication, data integrity, and privacy. + +13. Acknowledgements + + This specification was extensively reviewed by the NFS group at + SunSoft and brainstormed by Michael Eisler. + +14. Author's Address + + Address comments related to this document to: + + nfs@eng.sun.com + + + Brent Callaghan + Sun Microsystems, Inc. + 2550 Garcia Avenue + Mailstop Mpk17-201 + Mountain View, CA 94043-1100 + + Phone: 1-415-786-5067 + Fax: 1-415-786-5896 + EMail: brent.callaghan@eng.sun.com + + + + + + + + +Callaghan Informational [Page 16] + |