📄 rfc2054.txt
字号:
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]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -