5783 lines
234 KiB
Plaintext
5783 lines
234 KiB
Plaintext
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Network Working Group Internet Engineering Task Force
|
|||
|
Request for Comments: 1123 R. Braden, Editor
|
|||
|
October 1989
|
|||
|
|
|||
|
|
|||
|
Requirements for Internet Hosts -- Application and Support
|
|||
|
|
|||
|
Status of This Memo
|
|||
|
|
|||
|
This RFC is an official specification for the Internet community. It
|
|||
|
incorporates by reference, amends, corrects, and supplements the
|
|||
|
primary protocol standards documents relating to hosts. Distribution
|
|||
|
of this document is unlimited.
|
|||
|
|
|||
|
Summary
|
|||
|
|
|||
|
This RFC is one of a pair that defines and discusses the requirements
|
|||
|
for Internet host software. This RFC covers the application and
|
|||
|
support protocols; its companion RFC-1122 covers the communication
|
|||
|
protocol layers: link layer, IP layer, and transport layer.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Table of Contents
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
1. INTRODUCTION ............................................... 5
|
|||
|
1.1 The Internet Architecture .............................. 6
|
|||
|
1.2 General Considerations ................................. 6
|
|||
|
1.2.1 Continuing Internet Evolution ..................... 6
|
|||
|
1.2.2 Robustness Principle .............................. 7
|
|||
|
1.2.3 Error Logging ..................................... 8
|
|||
|
1.2.4 Configuration ..................................... 8
|
|||
|
1.3 Reading this Document .................................. 10
|
|||
|
1.3.1 Organization ...................................... 10
|
|||
|
1.3.2 Requirements ...................................... 10
|
|||
|
1.3.3 Terminology ....................................... 11
|
|||
|
1.4 Acknowledgments ........................................ 12
|
|||
|
|
|||
|
2. GENERAL ISSUES ............................................. 13
|
|||
|
2.1 Host Names and Numbers ................................. 13
|
|||
|
2.2 Using Domain Name Service .............................. 13
|
|||
|
2.3 Applications on Multihomed hosts ....................... 14
|
|||
|
2.4 Type-of-Service ........................................ 14
|
|||
|
2.5 GENERAL APPLICATION REQUIREMENTS SUMMARY ............... 15
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 1]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 INTRODUCTION October 1989
|
|||
|
|
|||
|
|
|||
|
3. REMOTE LOGIN -- TELNET PROTOCOL ............................ 16
|
|||
|
3.1 INTRODUCTION ........................................... 16
|
|||
|
3.2 PROTOCOL WALK-THROUGH .................................. 16
|
|||
|
3.2.1 Option Negotiation ................................ 16
|
|||
|
3.2.2 Telnet Go-Ahead Function .......................... 16
|
|||
|
3.2.3 Control Functions ................................. 17
|
|||
|
3.2.4 Telnet "Synch" Signal ............................. 18
|
|||
|
3.2.5 NVT Printer and Keyboard .......................... 19
|
|||
|
3.2.6 Telnet Command Structure .......................... 20
|
|||
|
3.2.7 Telnet Binary Option .............................. 20
|
|||
|
3.2.8 Telnet Terminal-Type Option ....................... 20
|
|||
|
3.3 SPECIFIC ISSUES ........................................ 21
|
|||
|
3.3.1 Telnet End-of-Line Convention ..................... 21
|
|||
|
3.3.2 Data Entry Terminals .............................. 23
|
|||
|
3.3.3 Option Requirements ............................... 24
|
|||
|
3.3.4 Option Initiation ................................. 24
|
|||
|
3.3.5 Telnet Linemode Option ............................ 25
|
|||
|
3.4 TELNET/USER INTERFACE .................................. 25
|
|||
|
3.4.1 Character Set Transparency ........................ 25
|
|||
|
3.4.2 Telnet Commands ................................... 26
|
|||
|
3.4.3 TCP Connection Errors ............................. 26
|
|||
|
3.4.4 Non-Default Telnet Contact Port ................... 26
|
|||
|
3.4.5 Flushing Output ................................... 26
|
|||
|
3.5. TELNET REQUIREMENTS SUMMARY ........................... 27
|
|||
|
|
|||
|
4. FILE TRANSFER .............................................. 29
|
|||
|
4.1 FILE TRANSFER PROTOCOL -- FTP .......................... 29
|
|||
|
4.1.1 INTRODUCTION ...................................... 29
|
|||
|
4.1.2. PROTOCOL WALK-THROUGH ............................ 29
|
|||
|
4.1.2.1 LOCAL Type ................................... 29
|
|||
|
4.1.2.2 Telnet Format Control ........................ 30
|
|||
|
4.1.2.3 Page Structure ............................... 30
|
|||
|
4.1.2.4 Data Structure Transformations ............... 30
|
|||
|
4.1.2.5 Data Connection Management ................... 31
|
|||
|
4.1.2.6 PASV Command ................................. 31
|
|||
|
4.1.2.7 LIST and NLST Commands ....................... 31
|
|||
|
4.1.2.8 SITE Command ................................. 32
|
|||
|
4.1.2.9 STOU Command ................................. 32
|
|||
|
4.1.2.10 Telnet End-of-line Code ..................... 32
|
|||
|
4.1.2.11 FTP Replies ................................. 33
|
|||
|
4.1.2.12 Connections ................................. 34
|
|||
|
4.1.2.13 Minimum Implementation; RFC-959 Section ..... 34
|
|||
|
4.1.3 SPECIFIC ISSUES ................................... 35
|
|||
|
4.1.3.1 Non-standard Command Verbs ................... 35
|
|||
|
4.1.3.2 Idle Timeout ................................. 36
|
|||
|
4.1.3.3 Concurrency of Data and Control .............. 36
|
|||
|
4.1.3.4 FTP Restart Mechanism ........................ 36
|
|||
|
4.1.4 FTP/USER INTERFACE ................................ 39
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 2]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 INTRODUCTION October 1989
|
|||
|
|
|||
|
|
|||
|
4.1.4.1 Pathname Specification ....................... 39
|
|||
|
4.1.4.2 "QUOTE" Command .............................. 40
|
|||
|
4.1.4.3 Displaying Replies to User ................... 40
|
|||
|
4.1.4.4 Maintaining Synchronization .................. 40
|
|||
|
4.1.5 FTP REQUIREMENTS SUMMARY ......................... 41
|
|||
|
4.2 TRIVIAL FILE TRANSFER PROTOCOL -- TFTP ................. 44
|
|||
|
4.2.1 INTRODUCTION ...................................... 44
|
|||
|
4.2.2 PROTOCOL WALK-THROUGH ............................. 44
|
|||
|
4.2.2.1 Transfer Modes ............................... 44
|
|||
|
4.2.2.2 UDP Header ................................... 44
|
|||
|
4.2.3 SPECIFIC ISSUES ................................... 44
|
|||
|
4.2.3.1 Sorcerer's Apprentice Syndrome ............... 44
|
|||
|
4.2.3.2 Timeout Algorithms ........................... 46
|
|||
|
4.2.3.3 Extensions ................................... 46
|
|||
|
4.2.3.4 Access Control ............................... 46
|
|||
|
4.2.3.5 Broadcast Request ............................ 46
|
|||
|
4.2.4 TFTP REQUIREMENTS SUMMARY ......................... 47
|
|||
|
|
|||
|
5. ELECTRONIC MAIL -- SMTP and RFC-822 ........................ 48
|
|||
|
5.1 INTRODUCTION ........................................... 48
|
|||
|
5.2 PROTOCOL WALK-THROUGH .................................. 48
|
|||
|
5.2.1 The SMTP Model .................................... 48
|
|||
|
5.2.2 Canonicalization .................................. 49
|
|||
|
5.2.3 VRFY and EXPN Commands ............................ 50
|
|||
|
5.2.4 SEND, SOML, and SAML Commands ..................... 50
|
|||
|
5.2.5 HELO Command ...................................... 50
|
|||
|
5.2.6 Mail Relay ........................................ 51
|
|||
|
5.2.7 RCPT Command ...................................... 52
|
|||
|
5.2.8 DATA Command ...................................... 53
|
|||
|
5.2.9 Command Syntax .................................... 54
|
|||
|
5.2.10 SMTP Replies ..................................... 54
|
|||
|
5.2.11 Transparency ..................................... 55
|
|||
|
5.2.12 WKS Use in MX Processing ......................... 55
|
|||
|
5.2.13 RFC-822 Message Specification .................... 55
|
|||
|
5.2.14 RFC-822 Date and Time Specification .............. 55
|
|||
|
5.2.15 RFC-822 Syntax Change ............................ 56
|
|||
|
5.2.16 RFC-822 Local-part .............................. 56
|
|||
|
5.2.17 Domain Literals .................................. 57
|
|||
|
5.2.18 Common Address Formatting Errors ................. 58
|
|||
|
5.2.19 Explicit Source Routes ........................... 58
|
|||
|
5.3 SPECIFIC ISSUES ........................................ 59
|
|||
|
5.3.1 SMTP Queueing Strategies .......................... 59
|
|||
|
5.3.1.1 Sending Strategy .............................. 59
|
|||
|
5.3.1.2 Receiving strategy ........................... 61
|
|||
|
5.3.2 Timeouts in SMTP .................................. 61
|
|||
|
5.3.3 Reliable Mail Receipt ............................. 63
|
|||
|
5.3.4 Reliable Mail Transmission ........................ 63
|
|||
|
5.3.5 Domain Name Support ............................... 65
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 3]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 INTRODUCTION October 1989
|
|||
|
|
|||
|
|
|||
|
5.3.6 Mailing Lists and Aliases ......................... 65
|
|||
|
5.3.7 Mail Gatewaying ................................... 66
|
|||
|
5.3.8 Maximum Message Size .............................. 68
|
|||
|
5.4 SMTP REQUIREMENTS SUMMARY .............................. 69
|
|||
|
|
|||
|
6. SUPPORT SERVICES ............................................ 72
|
|||
|
6.1 DOMAIN NAME TRANSLATION ................................. 72
|
|||
|
6.1.1 INTRODUCTION ....................................... 72
|
|||
|
6.1.2 PROTOCOL WALK-THROUGH ............................. 72
|
|||
|
6.1.2.1 Resource Records with Zero TTL ............... 73
|
|||
|
6.1.2.2 QCLASS Values ................................ 73
|
|||
|
6.1.2.3 Unused Fields ................................ 73
|
|||
|
6.1.2.4 Compression .................................. 73
|
|||
|
6.1.2.5 Misusing Configuration Info .................. 73
|
|||
|
6.1.3 SPECIFIC ISSUES ................................... 74
|
|||
|
6.1.3.1 Resolver Implementation ...................... 74
|
|||
|
6.1.3.2 Transport Protocols .......................... 75
|
|||
|
6.1.3.3 Efficient Resource Usage ..................... 77
|
|||
|
6.1.3.4 Multihomed Hosts ............................. 78
|
|||
|
6.1.3.5 Extensibility ................................ 79
|
|||
|
6.1.3.6 Status of RR Types ........................... 79
|
|||
|
6.1.3.7 Robustness ................................... 80
|
|||
|
6.1.3.8 Local Host Table ............................. 80
|
|||
|
6.1.4 DNS USER INTERFACE ................................ 81
|
|||
|
6.1.4.1 DNS Administration ........................... 81
|
|||
|
6.1.4.2 DNS User Interface ........................... 81
|
|||
|
6.1.4.3 Interface Abbreviation Facilities ............. 82
|
|||
|
6.1.5 DOMAIN NAME SYSTEM REQUIREMENTS SUMMARY ........... 84
|
|||
|
6.2 HOST INITIALIZATION .................................... 87
|
|||
|
6.2.1 INTRODUCTION ...................................... 87
|
|||
|
6.2.2 REQUIREMENTS ...................................... 87
|
|||
|
6.2.2.1 Dynamic Configuration ........................ 87
|
|||
|
6.2.2.2 Loading Phase ................................ 89
|
|||
|
6.3 REMOTE MANAGEMENT ...................................... 90
|
|||
|
6.3.1 INTRODUCTION ...................................... 90
|
|||
|
6.3.2 PROTOCOL WALK-THROUGH ............................. 90
|
|||
|
6.3.3 MANAGEMENT REQUIREMENTS SUMMARY ................... 92
|
|||
|
|
|||
|
7. REFERENCES ................................................. 93
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 4]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 INTRODUCTION October 1989
|
|||
|
|
|||
|
|
|||
|
1. INTRODUCTION
|
|||
|
|
|||
|
This document is one of a pair that defines and discusses the
|
|||
|
requirements for host system implementations of the Internet protocol
|
|||
|
suite. This RFC covers the applications layer and support protocols.
|
|||
|
Its companion RFC, "Requirements for Internet Hosts -- Communications
|
|||
|
Layers" [INTRO:1] covers the lower layer protocols: transport layer,
|
|||
|
IP layer, and link layer.
|
|||
|
|
|||
|
These documents are intended to provide guidance for vendors,
|
|||
|
implementors, and users of Internet communication software. They
|
|||
|
represent the consensus of a large body of technical experience and
|
|||
|
wisdom, contributed by members of the Internet research and vendor
|
|||
|
communities.
|
|||
|
|
|||
|
This RFC enumerates standard protocols that a host connected to the
|
|||
|
Internet must use, and it incorporates by reference the RFCs and
|
|||
|
other documents describing the current specifications for these
|
|||
|
protocols. It corrects errors in the referenced documents and adds
|
|||
|
additional discussion and guidance for an implementor.
|
|||
|
|
|||
|
For each protocol, this document also contains an explicit set of
|
|||
|
requirements, recommendations, and options. The reader must
|
|||
|
understand that the list of requirements in this document is
|
|||
|
incomplete by itself; the complete set of requirements for an
|
|||
|
Internet host is primarily defined in the standard protocol
|
|||
|
specification documents, with the corrections, amendments, and
|
|||
|
supplements contained in this RFC.
|
|||
|
|
|||
|
A good-faith implementation of the protocols that was produced after
|
|||
|
careful reading of the RFC's and with some interaction with the
|
|||
|
Internet technical community, and that followed good communications
|
|||
|
software engineering practices, should differ from the requirements
|
|||
|
of this document in only minor ways. Thus, in many cases, the
|
|||
|
"requirements" in this RFC are already stated or implied in the
|
|||
|
standard protocol documents, so that their inclusion here is, in a
|
|||
|
sense, redundant. However, they were included because some past
|
|||
|
implementation has made the wrong choice, causing problems of
|
|||
|
interoperability, performance, and/or robustness.
|
|||
|
|
|||
|
This document includes discussion and explanation of many of the
|
|||
|
requirements and recommendations. A simple list of requirements
|
|||
|
would be dangerous, because:
|
|||
|
|
|||
|
o Some required features are more important than others, and some
|
|||
|
features are optional.
|
|||
|
|
|||
|
o There may be valid reasons why particular vendor products that
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 5]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 INTRODUCTION October 1989
|
|||
|
|
|||
|
|
|||
|
are designed for restricted contexts might choose to use
|
|||
|
different specifications.
|
|||
|
|
|||
|
However, the specifications of this document must be followed to meet
|
|||
|
the general goal of arbitrary host interoperation across the
|
|||
|
diversity and complexity of the Internet system. Although most
|
|||
|
current implementations fail to meet these requirements in various
|
|||
|
ways, some minor and some major, this specification is the ideal
|
|||
|
towards which we need to move.
|
|||
|
|
|||
|
These requirements are based on the current level of Internet
|
|||
|
architecture. This document will be updated as required to provide
|
|||
|
additional clarifications or to include additional information in
|
|||
|
those areas in which specifications are still evolving.
|
|||
|
|
|||
|
This introductory section begins with general advice to host software
|
|||
|
vendors, and then gives some guidance on reading the rest of the
|
|||
|
document. Section 2 contains general requirements that may be
|
|||
|
applicable to all application and support protocols. Sections 3, 4,
|
|||
|
and 5 contain the requirements on protocols for the three major
|
|||
|
applications: Telnet, file transfer, and electronic mail,
|
|||
|
respectively. Section 6 covers the support applications: the domain
|
|||
|
name system, system initialization, and management. Finally, all
|
|||
|
references will be found in Section 7.
|
|||
|
|
|||
|
1.1 The Internet Architecture
|
|||
|
|
|||
|
For a brief introduction to the Internet architecture from a host
|
|||
|
viewpoint, see Section 1.1 of [INTRO:1]. That section also
|
|||
|
contains recommended references for general background on the
|
|||
|
Internet architecture.
|
|||
|
|
|||
|
1.2 General Considerations
|
|||
|
|
|||
|
There are two important lessons that vendors of Internet host
|
|||
|
software have learned and which a new vendor should consider
|
|||
|
seriously.
|
|||
|
|
|||
|
1.2.1 Continuing Internet Evolution
|
|||
|
|
|||
|
The enormous growth of the Internet has revealed problems of
|
|||
|
management and scaling in a large datagram-based packet
|
|||
|
communication system. These problems are being addressed, and
|
|||
|
as a result there will be continuing evolution of the
|
|||
|
specifications described in this document. These changes will
|
|||
|
be carefully planned and controlled, since there is extensive
|
|||
|
participation in this planning by the vendors and by the
|
|||
|
organizations responsible for operations of the networks.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 6]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 INTRODUCTION October 1989
|
|||
|
|
|||
|
|
|||
|
Development, evolution, and revision are characteristic of
|
|||
|
computer network protocols today, and this situation will
|
|||
|
persist for some years. A vendor who develops computer
|
|||
|
communication software for the Internet protocol suite (or any
|
|||
|
other protocol suite!) and then fails to maintain and update
|
|||
|
that software for changing specifications is going to leave a
|
|||
|
trail of unhappy customers. The Internet is a large
|
|||
|
communication network, and the users are in constant contact
|
|||
|
through it. Experience has shown that knowledge of
|
|||
|
deficiencies in vendor software propagates quickly through the
|
|||
|
Internet technical community.
|
|||
|
|
|||
|
1.2.2 Robustness Principle
|
|||
|
|
|||
|
At every layer of the protocols, there is a general rule whose
|
|||
|
application can lead to enormous benefits in robustness and
|
|||
|
interoperability:
|
|||
|
|
|||
|
"Be liberal in what you accept, and
|
|||
|
conservative in what you send"
|
|||
|
|
|||
|
Software should be written to deal with every conceivable
|
|||
|
error, no matter how unlikely; sooner or later a packet will
|
|||
|
come in with that particular combination of errors and
|
|||
|
attributes, and unless the software is prepared, chaos can
|
|||
|
ensue. In general, it is best to assume that the network is
|
|||
|
filled with malevolent entities that will send in packets
|
|||
|
designed to have the worst possible effect. This assumption
|
|||
|
will lead to suitable protective design, although the most
|
|||
|
serious problems in the Internet have been caused by
|
|||
|
unenvisaged mechanisms triggered by low-probability events;
|
|||
|
mere human malice would never have taken so devious a course!
|
|||
|
|
|||
|
Adaptability to change must be designed into all levels of
|
|||
|
Internet host software. As a simple example, consider a
|
|||
|
protocol specification that contains an enumeration of values
|
|||
|
for a particular header field -- e.g., a type field, a port
|
|||
|
number, or an error code; this enumeration must be assumed to
|
|||
|
be incomplete. Thus, if a protocol specification defines four
|
|||
|
possible error codes, the software must not break when a fifth
|
|||
|
code shows up. An undefined code might be logged (see below),
|
|||
|
but it must not cause a failure.
|
|||
|
|
|||
|
The second part of the principle is almost as important:
|
|||
|
software on other hosts may contain deficiencies that make it
|
|||
|
unwise to exploit legal but obscure protocol features. It is
|
|||
|
unwise to stray far from the obvious and simple, lest untoward
|
|||
|
effects result elsewhere. A corollary of this is "watch out
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 7]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 INTRODUCTION October 1989
|
|||
|
|
|||
|
|
|||
|
for misbehaving hosts"; host software should be prepared, not
|
|||
|
just to survive other misbehaving hosts, but also to cooperate
|
|||
|
to limit the amount of disruption such hosts can cause to the
|
|||
|
shared communication facility.
|
|||
|
|
|||
|
1.2.3 Error Logging
|
|||
|
|
|||
|
The Internet includes a great variety of host and gateway
|
|||
|
systems, each implementing many protocols and protocol layers,
|
|||
|
and some of these contain bugs and mis-features in their
|
|||
|
Internet protocol software. As a result of complexity,
|
|||
|
diversity, and distribution of function, the diagnosis of user
|
|||
|
problems is often very difficult.
|
|||
|
|
|||
|
Problem diagnosis will be aided if host implementations include
|
|||
|
a carefully designed facility for logging erroneous or
|
|||
|
"strange" protocol events. It is important to include as much
|
|||
|
diagnostic information as possible when an error is logged. In
|
|||
|
particular, it is often useful to record the header(s) of a
|
|||
|
packet that caused an error. However, care must be taken to
|
|||
|
ensure that error logging does not consume prohibitive amounts
|
|||
|
of resources or otherwise interfere with the operation of the
|
|||
|
host.
|
|||
|
|
|||
|
There is a tendency for abnormal but harmless protocol events
|
|||
|
to overflow error logging files; this can be avoided by using a
|
|||
|
"circular" log, or by enabling logging only while diagnosing a
|
|||
|
known failure. It may be useful to filter and count duplicate
|
|||
|
successive messages. One strategy that seems to work well is:
|
|||
|
(1) always count abnormalities and make such counts accessible
|
|||
|
through the management protocol (see Section 6.3); and (2)
|
|||
|
allow the logging of a great variety of events to be
|
|||
|
selectively enabled. For example, it might useful to be able
|
|||
|
to "log everything" or to "log everything for host X".
|
|||
|
|
|||
|
Note that different managements may have differing policies
|
|||
|
about the amount of error logging that they want normally
|
|||
|
enabled in a host. Some will say, "if it doesn't hurt me, I
|
|||
|
don't want to know about it", while others will want to take a
|
|||
|
more watchful and aggressive attitude about detecting and
|
|||
|
removing protocol abnormalities.
|
|||
|
|
|||
|
1.2.4 Configuration
|
|||
|
|
|||
|
It would be ideal if a host implementation of the Internet
|
|||
|
protocol suite could be entirely self-configuring. This would
|
|||
|
allow the whole suite to be implemented in ROM or cast into
|
|||
|
silicon, it would simplify diskless workstations, and it would
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 8]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 INTRODUCTION October 1989
|
|||
|
|
|||
|
|
|||
|
be an immense boon to harried LAN administrators as well as
|
|||
|
system vendors. We have not reached this ideal; in fact, we
|
|||
|
are not even close.
|
|||
|
|
|||
|
At many points in this document, you will find a requirement
|
|||
|
that a parameter be a configurable option. There are several
|
|||
|
different reasons behind such requirements. In a few cases,
|
|||
|
there is current uncertainty or disagreement about the best
|
|||
|
value, and it may be necessary to update the recommended value
|
|||
|
in the future. In other cases, the value really depends on
|
|||
|
external factors -- e.g., the size of the host and the
|
|||
|
distribution of its communication load, or the speeds and
|
|||
|
topology of nearby networks -- and self-tuning algorithms are
|
|||
|
unavailable and may be insufficient. In some cases,
|
|||
|
configurability is needed because of administrative
|
|||
|
requirements.
|
|||
|
|
|||
|
Finally, some configuration options are required to communicate
|
|||
|
with obsolete or incorrect implementations of the protocols,
|
|||
|
distributed without sources, that unfortunately persist in many
|
|||
|
parts of the Internet. To make correct systems coexist with
|
|||
|
these faulty systems, administrators often have to "mis-
|
|||
|
configure" the correct systems. This problem will correct
|
|||
|
itself gradually as the faulty systems are retired, but it
|
|||
|
cannot be ignored by vendors.
|
|||
|
|
|||
|
When we say that a parameter must be configurable, we do not
|
|||
|
intend to require that its value be explicitly read from a
|
|||
|
configuration file at every boot time. We recommend that
|
|||
|
implementors set up a default for each parameter, so a
|
|||
|
configuration file is only necessary to override those defaults
|
|||
|
that are inappropriate in a particular installation. Thus, the
|
|||
|
configurability requirement is an assurance that it will be
|
|||
|
POSSIBLE to override the default when necessary, even in a
|
|||
|
binary-only or ROM-based product.
|
|||
|
|
|||
|
This document requires a particular value for such defaults in
|
|||
|
some cases. The choice of default is a sensitive issue when
|
|||
|
the configuration item controls the accommodation to existing
|
|||
|
faulty systems. If the Internet is to converge successfully to
|
|||
|
complete interoperability, the default values built into
|
|||
|
implementations must implement the official protocol, not
|
|||
|
"mis-configurations" to accommodate faulty implementations.
|
|||
|
Although marketing considerations have led some vendors to
|
|||
|
choose mis-configuration defaults, we urge vendors to choose
|
|||
|
defaults that will conform to the standard.
|
|||
|
|
|||
|
Finally, we note that a vendor needs to provide adequate
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 9]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 INTRODUCTION October 1989
|
|||
|
|
|||
|
|
|||
|
documentation on all configuration parameters, their limits and
|
|||
|
effects.
|
|||
|
|
|||
|
|
|||
|
1.3 Reading this Document
|
|||
|
|
|||
|
1.3.1 Organization
|
|||
|
|
|||
|
In general, each major section is organized into the following
|
|||
|
subsections:
|
|||
|
|
|||
|
(1) Introduction
|
|||
|
|
|||
|
(2) Protocol Walk-Through -- considers the protocol
|
|||
|
specification documents section-by-section, correcting
|
|||
|
errors, stating requirements that may be ambiguous or
|
|||
|
ill-defined, and providing further clarification or
|
|||
|
explanation.
|
|||
|
|
|||
|
(3) Specific Issues -- discusses protocol design and
|
|||
|
implementation issues that were not included in the walk-
|
|||
|
through.
|
|||
|
|
|||
|
(4) Interfaces -- discusses the service interface to the next
|
|||
|
higher layer.
|
|||
|
|
|||
|
(5) Summary -- contains a summary of the requirements of the
|
|||
|
section.
|
|||
|
|
|||
|
Under many of the individual topics in this document, there is
|
|||
|
parenthetical material labeled "DISCUSSION" or
|
|||
|
"IMPLEMENTATION". This material is intended to give
|
|||
|
clarification and explanation of the preceding requirements
|
|||
|
text. It also includes some suggestions on possible future
|
|||
|
directions or developments. The implementation material
|
|||
|
contains suggested approaches that an implementor may want to
|
|||
|
consider.
|
|||
|
|
|||
|
The summary sections are intended to be guides and indexes to
|
|||
|
the text, but are necessarily cryptic and incomplete. The
|
|||
|
summaries should never be used or referenced separately from
|
|||
|
the complete RFC.
|
|||
|
|
|||
|
1.3.2 Requirements
|
|||
|
|
|||
|
In this document, the words that are used to define the
|
|||
|
significance of each particular requirement are capitalized.
|
|||
|
These words are:
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 10]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 INTRODUCTION October 1989
|
|||
|
|
|||
|
|
|||
|
* "MUST"
|
|||
|
|
|||
|
This word or the adjective "REQUIRED" means that the item
|
|||
|
is an absolute requirement of the specification.
|
|||
|
|
|||
|
* "SHOULD"
|
|||
|
|
|||
|
This word or the adjective "RECOMMENDED" means that there
|
|||
|
may exist valid reasons in particular circumstances to
|
|||
|
ignore this item, but the full implications should be
|
|||
|
understood and the case carefully weighed before choosing
|
|||
|
a different course.
|
|||
|
|
|||
|
* "MAY"
|
|||
|
|
|||
|
This word or the adjective "OPTIONAL" means that this item
|
|||
|
is truly optional. One vendor may choose to include the
|
|||
|
item because a particular marketplace requires it or
|
|||
|
because it enhances the product, for example; another
|
|||
|
vendor may omit the same item.
|
|||
|
|
|||
|
|
|||
|
An implementation is not compliant if it fails to satisfy one
|
|||
|
or more of the MUST requirements for the protocols it
|
|||
|
implements. An implementation that satisfies all the MUST and
|
|||
|
all the SHOULD requirements for its protocols is said to be
|
|||
|
"unconditionally compliant"; one that satisfies all the MUST
|
|||
|
requirements but not all the SHOULD requirements for its
|
|||
|
protocols is said to be "conditionally compliant".
|
|||
|
|
|||
|
1.3.3 Terminology
|
|||
|
|
|||
|
This document uses the following technical terms:
|
|||
|
|
|||
|
Segment
|
|||
|
A segment is the unit of end-to-end transmission in the
|
|||
|
TCP protocol. A segment consists of a TCP header followed
|
|||
|
by application data. A segment is transmitted by
|
|||
|
encapsulation in an IP datagram.
|
|||
|
|
|||
|
Message
|
|||
|
This term is used by some application layer protocols
|
|||
|
(particularly SMTP) for an application data unit.
|
|||
|
|
|||
|
Datagram
|
|||
|
A [UDP] datagram is the unit of end-to-end transmission in
|
|||
|
the UDP protocol.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 11]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 INTRODUCTION October 1989
|
|||
|
|
|||
|
|
|||
|
Multihomed
|
|||
|
A host is said to be multihomed if it has multiple IP
|
|||
|
addresses to connected networks.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
1.4 Acknowledgments
|
|||
|
|
|||
|
This document incorporates contributions and comments from a large
|
|||
|
group of Internet protocol experts, including representatives of
|
|||
|
university and research labs, vendors, and government agencies.
|
|||
|
It was assembled primarily by the Host Requirements Working Group
|
|||
|
of the Internet Engineering Task Force (IETF).
|
|||
|
|
|||
|
The Editor would especially like to acknowledge the tireless
|
|||
|
dedication of the following people, who attended many long
|
|||
|
meetings and generated 3 million bytes of electronic mail over the
|
|||
|
past 18 months in pursuit of this document: Philip Almquist, Dave
|
|||
|
Borman (Cray Research), Noel Chiappa, Dave Crocker (DEC), Steve
|
|||
|
Deering (Stanford), Mike Karels (Berkeley), Phil Karn (Bellcore),
|
|||
|
John Lekashman (NASA), Charles Lynn (BBN), Keith McCloghrie (TWG),
|
|||
|
Paul Mockapetris (ISI), Thomas Narten (Purdue), Craig Partridge
|
|||
|
(BBN), Drew Perkins (CMU), and James Van Bokkelen (FTP Software).
|
|||
|
|
|||
|
In addition, the following people made major contributions to the
|
|||
|
effort: Bill Barns (Mitre), Steve Bellovin (AT&T), Mike Brescia
|
|||
|
(BBN), Ed Cain (DCA), Annette DeSchon (ISI), Martin Gross (DCA),
|
|||
|
Phill Gross (NRI), Charles Hedrick (Rutgers), Van Jacobson (LBL),
|
|||
|
John Klensin (MIT), Mark Lottor (SRI), Milo Medin (NASA), Bill
|
|||
|
Melohn (Sun Microsystems), Greg Minshall (Kinetics), Jeff Mogul
|
|||
|
(DEC), John Mullen (CMC), Jon Postel (ISI), John Romkey (Epilogue
|
|||
|
Technology), and Mike StJohns (DCA). The following also made
|
|||
|
significant contributions to particular areas: Eric Allman
|
|||
|
(Berkeley), Rob Austein (MIT), Art Berggreen (ACC), Keith Bostic
|
|||
|
(Berkeley), Vint Cerf (NRI), Wayne Hathaway (NASA), Matt Korn
|
|||
|
(IBM), Erik Naggum (Naggum Software, Norway), Robert Ullmann
|
|||
|
(Prime Computer), David Waitzman (BBN), Frank Wancho (USA), Arun
|
|||
|
Welch (Ohio State), Bill Westfield (Cisco), and Rayan Zachariassen
|
|||
|
(Toronto).
|
|||
|
|
|||
|
We are grateful to all, including any contributors who may have
|
|||
|
been inadvertently omitted from this list.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 12]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 APPLICATIONS LAYER -- GENERAL October 1989
|
|||
|
|
|||
|
|
|||
|
2. GENERAL ISSUES
|
|||
|
|
|||
|
This section contains general requirements that may be applicable to
|
|||
|
all application-layer protocols.
|
|||
|
|
|||
|
2.1 Host Names and Numbers
|
|||
|
|
|||
|
The syntax of a legal Internet host name was specified in RFC-952
|
|||
|
[DNS:4]. One aspect of host name syntax is hereby changed: the
|
|||
|
restriction on the first character is relaxed to allow either a
|
|||
|
letter or a digit. Host software MUST support this more liberal
|
|||
|
syntax.
|
|||
|
|
|||
|
Host software MUST handle host names of up to 63 characters and
|
|||
|
SHOULD handle host names of up to 255 characters.
|
|||
|
|
|||
|
Whenever a user inputs the identity of an Internet host, it SHOULD
|
|||
|
be possible to enter either (1) a host domain name or (2) an IP
|
|||
|
address in dotted-decimal ("#.#.#.#") form. The host SHOULD check
|
|||
|
the string syntactically for a dotted-decimal number before
|
|||
|
looking it up in the Domain Name System.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
This last requirement is not intended to specify the complete
|
|||
|
syntactic form for entering a dotted-decimal host number;
|
|||
|
that is considered to be a user-interface issue. For
|
|||
|
example, a dotted-decimal number must be enclosed within
|
|||
|
"[ ]" brackets for SMTP mail (see Section 5.2.17). This
|
|||
|
notation could be made universal within a host system,
|
|||
|
simplifying the syntactic checking for a dotted-decimal
|
|||
|
number.
|
|||
|
|
|||
|
If a dotted-decimal number can be entered without such
|
|||
|
identifying delimiters, then a full syntactic check must be
|
|||
|
made, because a segment of a host domain name is now allowed
|
|||
|
to begin with a digit and could legally be entirely numeric
|
|||
|
(see Section 6.1.2.4). However, a valid host name can never
|
|||
|
have the dotted-decimal form #.#.#.#, since at least the
|
|||
|
highest-level component label will be alphabetic.
|
|||
|
|
|||
|
2.2 Using Domain Name Service
|
|||
|
|
|||
|
Host domain names MUST be translated to IP addresses as described
|
|||
|
in Section 6.1.
|
|||
|
|
|||
|
Applications using domain name services MUST be able to cope with
|
|||
|
soft error conditions. Applications MUST wait a reasonable
|
|||
|
interval between successive retries due to a soft error, and MUST
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 13]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 APPLICATIONS LAYER -- GENERAL October 1989
|
|||
|
|
|||
|
|
|||
|
allow for the possibility that network problems may deny service
|
|||
|
for hours or even days.
|
|||
|
|
|||
|
An application SHOULD NOT rely on the ability to locate a WKS
|
|||
|
record containing an accurate listing of all services at a
|
|||
|
particular host address, since the WKS RR type is not often used
|
|||
|
by Internet sites. To confirm that a service is present, simply
|
|||
|
attempt to use it.
|
|||
|
|
|||
|
2.3 Applications on Multihomed hosts
|
|||
|
|
|||
|
When the remote host is multihomed, the name-to-address
|
|||
|
translation will return a list of alternative IP addresses. As
|
|||
|
specified in Section 6.1.3.4, this list should be in order of
|
|||
|
decreasing preference. Application protocol implementations
|
|||
|
SHOULD be prepared to try multiple addresses from the list until
|
|||
|
success is obtained. More specific requirements for SMTP are
|
|||
|
given in Section 5.3.4.
|
|||
|
|
|||
|
When the local host is multihomed, a UDP-based request/response
|
|||
|
application SHOULD send the response with an IP source address
|
|||
|
that is the same as the specific destination address of the UDP
|
|||
|
request datagram. The "specific destination address" is defined
|
|||
|
in the "IP Addressing" section of the companion RFC [INTRO:1].
|
|||
|
|
|||
|
Similarly, a server application that opens multiple TCP
|
|||
|
connections to the same client SHOULD use the same local IP
|
|||
|
address for all.
|
|||
|
|
|||
|
2.4 Type-of-Service
|
|||
|
|
|||
|
Applications MUST select appropriate TOS values when they invoke
|
|||
|
transport layer services, and these values MUST be configurable.
|
|||
|
Note that a TOS value contains 5 bits, of which only the most-
|
|||
|
significant 3 bits are currently defined; the other two bits MUST
|
|||
|
be zero.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
As gateway algorithms are developed to implement Type-of-
|
|||
|
Service, the recommended values for various application
|
|||
|
protocols may change. In addition, it is likely that
|
|||
|
particular combinations of users and Internet paths will want
|
|||
|
non-standard TOS values. For these reasons, the TOS values
|
|||
|
must be configurable.
|
|||
|
|
|||
|
See the latest version of the "Assigned Numbers" RFC
|
|||
|
[INTRO:5] for the recommended TOS values for the major
|
|||
|
application protocols.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 14]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 APPLICATIONS LAYER -- GENERAL October 1989
|
|||
|
|
|||
|
|
|||
|
2.5 GENERAL APPLICATION REQUIREMENTS SUMMARY
|
|||
|
|
|||
|
| | | | |S| |
|
|||
|
| | | | |H| |F
|
|||
|
| | | | |O|M|o
|
|||
|
| | |S| |U|U|o
|
|||
|
| | |H| |L|S|t
|
|||
|
| |M|O| |D|T|n
|
|||
|
| |U|U|M| | |o
|
|||
|
| |S|L|A|N|N|t
|
|||
|
| |T|D|Y|O|O|t
|
|||
|
FEATURE |SECTION | | | |T|T|e
|
|||
|
-----------------------------------------------|----------|-|-|-|-|-|--
|
|||
|
| | | | | | |
|
|||
|
User interfaces: | | | | | | |
|
|||
|
Allow host name to begin with digit |2.1 |x| | | | |
|
|||
|
Host names of up to 635 characters |2.1 |x| | | | |
|
|||
|
Host names of up to 255 characters |2.1 | |x| | | |
|
|||
|
Support dotted-decimal host numbers |2.1 | |x| | | |
|
|||
|
Check syntactically for dotted-dec first |2.1 | |x| | | |
|
|||
|
| | | | | | |
|
|||
|
Map domain names per Section 6.1 |2.2 |x| | | | |
|
|||
|
Cope with soft DNS errors |2.2 |x| | | | |
|
|||
|
Reasonable interval between retries |2.2 |x| | | | |
|
|||
|
Allow for long outages |2.2 |x| | | | |
|
|||
|
Expect WKS records to be available |2.2 | | | |x| |
|
|||
|
| | | | | | |
|
|||
|
Try multiple addr's for remote multihomed host |2.3 | |x| | | |
|
|||
|
UDP reply src addr is specific dest of request |2.3 | |x| | | |
|
|||
|
Use same IP addr for related TCP connections |2.3 | |x| | | |
|
|||
|
Specify appropriate TOS values |2.4 |x| | | | |
|
|||
|
TOS values configurable |2.4 |x| | | | |
|
|||
|
Unused TOS bits zero |2.4 |x| | | | |
|
|||
|
| | | | | | |
|
|||
|
| | | | | | |
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 15]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 REMOTE LOGIN -- TELNET October 1989
|
|||
|
|
|||
|
|
|||
|
3. REMOTE LOGIN -- TELNET PROTOCOL
|
|||
|
|
|||
|
3.1 INTRODUCTION
|
|||
|
|
|||
|
Telnet is the standard Internet application protocol for remote
|
|||
|
login. It provides the encoding rules to link a user's
|
|||
|
keyboard/display on a client ("user") system with a command
|
|||
|
interpreter on a remote server system. A subset of the Telnet
|
|||
|
protocol is also incorporated within other application protocols,
|
|||
|
e.g., FTP and SMTP.
|
|||
|
|
|||
|
Telnet uses a single TCP connection, and its normal data stream
|
|||
|
("Network Virtual Terminal" or "NVT" mode) is 7-bit ASCII with
|
|||
|
escape sequences to embed control functions. Telnet also allows
|
|||
|
the negotiation of many optional modes and functions.
|
|||
|
|
|||
|
The primary Telnet specification is to be found in RFC-854
|
|||
|
[TELNET:1], while the options are defined in many other RFCs; see
|
|||
|
Section 7 for references.
|
|||
|
|
|||
|
3.2 PROTOCOL WALK-THROUGH
|
|||
|
|
|||
|
3.2.1 Option Negotiation: RFC-854, pp. 2-3
|
|||
|
|
|||
|
Every Telnet implementation MUST include option negotiation and
|
|||
|
subnegotiation machinery [TELNET:2].
|
|||
|
|
|||
|
A host MUST carefully follow the rules of RFC-854 to avoid
|
|||
|
option-negotiation loops. A host MUST refuse (i.e, reply
|
|||
|
WONT/DONT to a DO/WILL) an unsupported option. Option
|
|||
|
negotiation SHOULD continue to function (even if all requests
|
|||
|
are refused) throughout the lifetime of a Telnet connection.
|
|||
|
|
|||
|
If all option negotiations fail, a Telnet implementation MUST
|
|||
|
default to, and support, an NVT.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
Even though more sophisticated "terminals" and supporting
|
|||
|
option negotiations are becoming the norm, all
|
|||
|
implementations must be prepared to support an NVT for any
|
|||
|
user-server communication.
|
|||
|
|
|||
|
3.2.2 Telnet Go-Ahead Function: RFC-854, p. 5, and RFC-858
|
|||
|
|
|||
|
On a host that never sends the Telnet command Go Ahead (GA),
|
|||
|
the Telnet Server MUST attempt to negotiate the Suppress Go
|
|||
|
Ahead option (i.e., send "WILL Suppress Go Ahead"). A User or
|
|||
|
Server Telnet MUST always accept negotiation of the Suppress Go
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 16]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 REMOTE LOGIN -- TELNET October 1989
|
|||
|
|
|||
|
|
|||
|
Ahead option.
|
|||
|
|
|||
|
When it is driving a full-duplex terminal for which GA has no
|
|||
|
meaning, a User Telnet implementation MAY ignore GA commands.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
Half-duplex ("locked-keyboard") line-at-a-time terminals
|
|||
|
for which the Go-Ahead mechanism was designed have largely
|
|||
|
disappeared from the scene. It turned out to be difficult
|
|||
|
to implement sending the Go-Ahead signal in many operating
|
|||
|
systems, even some systems that support native half-duplex
|
|||
|
terminals. The difficulty is typically that the Telnet
|
|||
|
server code does not have access to information about
|
|||
|
whether the user process is blocked awaiting input from
|
|||
|
the Telnet connection, i.e., it cannot reliably determine
|
|||
|
when to send a GA command. Therefore, most Telnet Server
|
|||
|
hosts do not send GA commands.
|
|||
|
|
|||
|
The effect of the rules in this section is to allow either
|
|||
|
end of a Telnet connection to veto the use of GA commands.
|
|||
|
|
|||
|
There is a class of half-duplex terminals that is still
|
|||
|
commercially important: "data entry terminals," which
|
|||
|
interact in a full-screen manner. However, supporting
|
|||
|
data entry terminals using the Telnet protocol does not
|
|||
|
require the Go Ahead signal; see Section 3.3.2.
|
|||
|
|
|||
|
3.2.3 Control Functions: RFC-854, pp. 7-8
|
|||
|
|
|||
|
The list of Telnet commands has been extended to include EOR
|
|||
|
(End-of-Record), with code 239 [TELNET:9].
|
|||
|
|
|||
|
Both User and Server Telnets MAY support the control functions
|
|||
|
EOR, EC, EL, and Break, and MUST support AO, AYT, DM, IP, NOP,
|
|||
|
SB, and SE.
|
|||
|
|
|||
|
A host MUST be able to receive and ignore any Telnet control
|
|||
|
functions that it does not support.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
Note that a Server Telnet is required to support the
|
|||
|
Telnet IP (Interrupt Process) function, even if the server
|
|||
|
host has an equivalent in-stream function (e.g., Control-C
|
|||
|
in many systems). The Telnet IP function may be stronger
|
|||
|
than an in-stream interrupt command, because of the out-
|
|||
|
of-band effect of TCP urgent data.
|
|||
|
|
|||
|
The EOR control function may be used to delimit the
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 17]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 REMOTE LOGIN -- TELNET October 1989
|
|||
|
|
|||
|
|
|||
|
stream. An important application is data entry terminal
|
|||
|
support (see Section 3.3.2). There was concern that since
|
|||
|
EOR had not been defined in RFC-854, a host that was not
|
|||
|
prepared to correctly ignore unknown Telnet commands might
|
|||
|
crash if it received an EOR. To protect such hosts, the
|
|||
|
End-of-Record option [TELNET:9] was introduced; however, a
|
|||
|
properly implemented Telnet program will not require this
|
|||
|
protection.
|
|||
|
|
|||
|
3.2.4 Telnet "Synch" Signal: RFC-854, pp. 8-10
|
|||
|
|
|||
|
When it receives "urgent" TCP data, a User or Server Telnet
|
|||
|
MUST discard all data except Telnet commands until the DM (and
|
|||
|
end of urgent) is reached.
|
|||
|
|
|||
|
When it sends Telnet IP (Interrupt Process), a User Telnet
|
|||
|
SHOULD follow it by the Telnet "Synch" sequence, i.e., send as
|
|||
|
TCP urgent data the sequence "IAC IP IAC DM". The TCP urgent
|
|||
|
pointer points to the DM octet.
|
|||
|
|
|||
|
When it receives a Telnet IP command, a Server Telnet MAY send
|
|||
|
a Telnet "Synch" sequence back to the user, to flush the output
|
|||
|
stream. The choice ought to be consistent with the way the
|
|||
|
server operating system behaves when a local user interrupts a
|
|||
|
process.
|
|||
|
|
|||
|
When it receives a Telnet AO command, a Server Telnet MUST send
|
|||
|
a Telnet "Synch" sequence back to the user, to flush the output
|
|||
|
stream.
|
|||
|
|
|||
|
A User Telnet SHOULD have the capability of flushing output
|
|||
|
when it sends a Telnet IP; see also Section 3.4.5.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
There are three possible ways for a User Telnet to flush
|
|||
|
the stream of server output data:
|
|||
|
|
|||
|
(1) Send AO after IP.
|
|||
|
|
|||
|
This will cause the server host to send a "flush-
|
|||
|
buffered-output" signal to its operating system.
|
|||
|
However, the AO may not take effect locally, i.e.,
|
|||
|
stop terminal output at the User Telnet end, until
|
|||
|
the Server Telnet has received and processed the AO
|
|||
|
and has sent back a "Synch".
|
|||
|
|
|||
|
(2) Send DO TIMING-MARK [TELNET:7] after IP, and discard
|
|||
|
all output locally until a WILL/WONT TIMING-MARK is
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 18]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 REMOTE LOGIN -- TELNET October 1989
|
|||
|
|
|||
|
|
|||
|
received from the Server Telnet.
|
|||
|
|
|||
|
Since the DO TIMING-MARK will be processed after the
|
|||
|
IP at the server, the reply to it should be in the
|
|||
|
right place in the output data stream. However, the
|
|||
|
TIMING-MARK will not send a "flush buffered output"
|
|||
|
signal to the server operating system. Whether or
|
|||
|
not this is needed is dependent upon the server
|
|||
|
system.
|
|||
|
|
|||
|
(3) Do both.
|
|||
|
|
|||
|
The best method is not entirely clear, since it must
|
|||
|
accommodate a number of existing server hosts that do not
|
|||
|
follow the Telnet standards in various ways. The safest
|
|||
|
approach is probably to provide a user-controllable option
|
|||
|
to select (1), (2), or (3).
|
|||
|
|
|||
|
3.2.5 NVT Printer and Keyboard: RFC-854, p. 11
|
|||
|
|
|||
|
In NVT mode, a Telnet SHOULD NOT send characters with the
|
|||
|
high-order bit 1, and MUST NOT send it as a parity bit.
|
|||
|
Implementations that pass the high-order bit to applications
|
|||
|
SHOULD negotiate binary mode (see Section 3.2.6).
|
|||
|
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
Implementors should be aware that a strict reading of
|
|||
|
RFC-854 allows a client or server expecting NVT ASCII to
|
|||
|
ignore characters with the high-order bit set. In
|
|||
|
general, binary mode is expected to be used for
|
|||
|
transmission of an extended (beyond 7-bit) character set
|
|||
|
with Telnet.
|
|||
|
|
|||
|
However, there exist applications that really need an 8-
|
|||
|
bit NVT mode, which is currently not defined, and these
|
|||
|
existing applications do set the high-order bit during
|
|||
|
part or all of the life of a Telnet connection. Note that
|
|||
|
binary mode is not the same as 8-bit NVT mode, since
|
|||
|
binary mode turns off end-of-line processing. For this
|
|||
|
reason, the requirements on the high-order bit are stated
|
|||
|
as SHOULD, not MUST.
|
|||
|
|
|||
|
RFC-854 defines a minimal set of properties of a "network
|
|||
|
virtual terminal" or NVT; this is not meant to preclude
|
|||
|
additional features in a real terminal. A Telnet
|
|||
|
connection is fully transparent to all 7-bit ASCII
|
|||
|
characters, including arbitrary ASCII control characters.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 19]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 REMOTE LOGIN -- TELNET October 1989
|
|||
|
|
|||
|
|
|||
|
For example, a terminal might support full-screen commands
|
|||
|
coded as ASCII escape sequences; a Telnet implementation
|
|||
|
would pass these sequences as uninterpreted data. Thus,
|
|||
|
an NVT should not be conceived as a terminal type of a
|
|||
|
highly-restricted device.
|
|||
|
|
|||
|
3.2.6 Telnet Command Structure: RFC-854, p. 13
|
|||
|
|
|||
|
Since options may appear at any point in the data stream, a
|
|||
|
Telnet escape character (known as IAC, with the value 255) to
|
|||
|
be sent as data MUST be doubled.
|
|||
|
|
|||
|
3.2.7 Telnet Binary Option: RFC-856
|
|||
|
|
|||
|
When the Binary option has been successfully negotiated,
|
|||
|
arbitrary 8-bit characters are allowed. However, the data
|
|||
|
stream MUST still be scanned for IAC characters, any embedded
|
|||
|
Telnet commands MUST be obeyed, and data bytes equal to IAC
|
|||
|
MUST be doubled. Other character processing (e.g., replacing
|
|||
|
CR by CR NUL or by CR LF) MUST NOT be done. In particular,
|
|||
|
there is no end-of-line convention (see Section 3.3.1) in
|
|||
|
binary mode.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
The Binary option is normally negotiated in both
|
|||
|
directions, to change the Telnet connection from NVT mode
|
|||
|
to "binary mode".
|
|||
|
|
|||
|
The sequence IAC EOR can be used to delimit blocks of data
|
|||
|
within a binary-mode Telnet stream.
|
|||
|
|
|||
|
3.2.8 Telnet Terminal-Type Option: RFC-1091
|
|||
|
|
|||
|
The Terminal-Type option MUST use the terminal type names
|
|||
|
officially defined in the Assigned Numbers RFC [INTRO:5], when
|
|||
|
they are available for the particular terminal. However, the
|
|||
|
receiver of a Terminal-Type option MUST accept any name.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
RFC-1091 [TELNET:10] updates an earlier version of the
|
|||
|
Terminal-Type option defined in RFC-930. The earlier
|
|||
|
version allowed a server host capable of supporting
|
|||
|
multiple terminal types to learn the type of a particular
|
|||
|
client's terminal, assuming that each physical terminal
|
|||
|
had an intrinsic type. However, today a "terminal" is
|
|||
|
often really a terminal emulator program running in a PC,
|
|||
|
perhaps capable of emulating a range of terminal types.
|
|||
|
Therefore, RFC-1091 extends the specification to allow a
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 20]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 REMOTE LOGIN -- TELNET October 1989
|
|||
|
|
|||
|
|
|||
|
more general terminal-type negotiation between User and
|
|||
|
Server Telnets.
|
|||
|
|
|||
|
3.3 SPECIFIC ISSUES
|
|||
|
|
|||
|
3.3.1 Telnet End-of-Line Convention
|
|||
|
|
|||
|
The Telnet protocol defines the sequence CR LF to mean "end-
|
|||
|
of-line". For terminal input, this corresponds to a command-
|
|||
|
completion or "end-of-line" key being pressed on a user
|
|||
|
terminal; on an ASCII terminal, this is the CR key, but it may
|
|||
|
also be labelled "Return" or "Enter".
|
|||
|
|
|||
|
When a Server Telnet receives the Telnet end-of-line sequence
|
|||
|
CR LF as input from a remote terminal, the effect MUST be the
|
|||
|
same as if the user had pressed the "end-of-line" key on a
|
|||
|
local terminal. On server hosts that use ASCII, in particular,
|
|||
|
receipt of the Telnet sequence CR LF must cause the same effect
|
|||
|
as a local user pressing the CR key on a local terminal. Thus,
|
|||
|
CR LF and CR NUL MUST have the same effect on an ASCII server
|
|||
|
host when received as input over a Telnet connection.
|
|||
|
|
|||
|
A User Telnet MUST be able to send any of the forms: CR LF, CR
|
|||
|
NUL, and LF. A User Telnet on an ASCII host SHOULD have a
|
|||
|
user-controllable mode to send either CR LF or CR NUL when the
|
|||
|
user presses the "end-of-line" key, and CR LF SHOULD be the
|
|||
|
default.
|
|||
|
|
|||
|
The Telnet end-of-line sequence CR LF MUST be used to send
|
|||
|
Telnet data that is not terminal-to-computer (e.g., for Server
|
|||
|
Telnet sending output, or the Telnet protocol incorporated
|
|||
|
another application protocol).
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
To allow interoperability between arbitrary Telnet clients
|
|||
|
and servers, the Telnet protocol defined a standard
|
|||
|
representation for a line terminator. Since the ASCII
|
|||
|
character set includes no explicit end-of-line character,
|
|||
|
systems have chosen various representations, e.g., CR, LF,
|
|||
|
and the sequence CR LF. The Telnet protocol chose the CR
|
|||
|
LF sequence as the standard for network transmission.
|
|||
|
|
|||
|
Unfortunately, the Telnet protocol specification in RFC-
|
|||
|
854 [TELNET:1] has turned out to be somewhat ambiguous on
|
|||
|
what character(s) should be sent from client to server for
|
|||
|
the "end-of-line" key. The result has been a massive and
|
|||
|
continuing interoperability headache, made worse by
|
|||
|
various faulty implementations of both User and Server
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 21]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 REMOTE LOGIN -- TELNET October 1989
|
|||
|
|
|||
|
|
|||
|
Telnets.
|
|||
|
|
|||
|
Although the Telnet protocol is based on a perfectly
|
|||
|
symmetric model, in a remote login session the role of the
|
|||
|
user at a terminal differs from the role of the server
|
|||
|
host. For example, RFC-854 defines the meaning of CR, LF,
|
|||
|
and CR LF as output from the server, but does not specify
|
|||
|
what the User Telnet should send when the user presses the
|
|||
|
"end-of-line" key on the terminal; this turns out to be
|
|||
|
the point at issue.
|
|||
|
|
|||
|
When a user presses the "end-of-line" key, some User
|
|||
|
Telnet implementations send CR LF, while others send CR
|
|||
|
NUL (based on a different interpretation of the same
|
|||
|
sentence in RFC-854). These will be equivalent for a
|
|||
|
correctly-implemented ASCII server host, as discussed
|
|||
|
above. For other servers, a mode in the User Telnet is
|
|||
|
needed.
|
|||
|
|
|||
|
The existence of User Telnets that send only CR NUL when
|
|||
|
CR is pressed creates a dilemma for non-ASCII hosts: they
|
|||
|
can either treat CR NUL as equivalent to CR LF in input,
|
|||
|
thus precluding the possibility of entering a "bare" CR,
|
|||
|
or else lose complete interworking.
|
|||
|
|
|||
|
Suppose a user on host A uses Telnet to log into a server
|
|||
|
host B, and then execute B's User Telnet program to log
|
|||
|
into server host C. It is desirable for the Server/User
|
|||
|
Telnet combination on B to be as transparent as possible,
|
|||
|
i.e., to appear as if A were connected directly to C. In
|
|||
|
particular, correct implementation will make B transparent
|
|||
|
to Telnet end-of-line sequences, except that CR LF may be
|
|||
|
translated to CR NUL or vice versa.
|
|||
|
|
|||
|
IMPLEMENTATION:
|
|||
|
To understand Telnet end-of-line issues, one must have at
|
|||
|
least a general model of the relationship of Telnet to the
|
|||
|
local operating system. The Server Telnet process is
|
|||
|
typically coupled into the terminal driver software of the
|
|||
|
operating system as a pseudo-terminal. A Telnet end-of-
|
|||
|
line sequence received by the Server Telnet must have the
|
|||
|
same effect as pressing the end-of-line key on a real
|
|||
|
locally-connected terminal.
|
|||
|
|
|||
|
Operating systems that support interactive character-at-
|
|||
|
a-time applications (e.g., editors) typically have two
|
|||
|
internal modes for their terminal I/O: a formatted mode,
|
|||
|
in which local conventions for end-of-line and other
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 22]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 REMOTE LOGIN -- TELNET October 1989
|
|||
|
|
|||
|
|
|||
|
formatting rules have been applied to the data stream, and
|
|||
|
a "raw" mode, in which the application has direct access
|
|||
|
to every character as it was entered. A Server Telnet
|
|||
|
must be implemented in such a way that these modes have
|
|||
|
the same effect for remote as for local terminals. For
|
|||
|
example, suppose a CR LF or CR NUL is received by the
|
|||
|
Server Telnet on an ASCII host. In raw mode, a CR
|
|||
|
character is passed to the application; in formatted mode,
|
|||
|
the local system's end-of-line convention is used.
|
|||
|
|
|||
|
3.3.2 Data Entry Terminals
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
In addition to the line-oriented and character-oriented
|
|||
|
ASCII terminals for which Telnet was designed, there are
|
|||
|
several families of video display terminals that are
|
|||
|
sometimes known as "data entry terminals" or DETs. The
|
|||
|
IBM 3270 family is a well-known example.
|
|||
|
|
|||
|
Two Internet protocols have been designed to support
|
|||
|
generic DETs: SUPDUP [TELNET:16, TELNET:17], and the DET
|
|||
|
option [TELNET:18, TELNET:19]. The DET option drives a
|
|||
|
data entry terminal over a Telnet connection using (sub-)
|
|||
|
negotiation. SUPDUP is a completely separate terminal
|
|||
|
protocol, which can be entered from Telnet by negotiation.
|
|||
|
Although both SUPDUP and the DET option have been used
|
|||
|
successfully in particular environments, neither has
|
|||
|
gained general acceptance or wide implementation.
|
|||
|
|
|||
|
A different approach to DET interaction has been developed
|
|||
|
for supporting the IBM 3270 family through Telnet,
|
|||
|
although the same approach would be applicable to any DET.
|
|||
|
The idea is to enter a "native DET" mode, in which the
|
|||
|
native DET input/output stream is sent as binary data.
|
|||
|
The Telnet EOR command is used to delimit logical records
|
|||
|
(e.g., "screens") within this binary stream.
|
|||
|
|
|||
|
IMPLEMENTATION:
|
|||
|
The rules for entering and leaving native DET mode are as
|
|||
|
follows:
|
|||
|
|
|||
|
o The Server uses the Terminal-Type option [TELNET:10]
|
|||
|
to learn that the client is a DET.
|
|||
|
|
|||
|
o It is conventional, but not required, that both ends
|
|||
|
negotiate the EOR option [TELNET:9].
|
|||
|
|
|||
|
o Both ends negotiate the Binary option [TELNET:3] to
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 23]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 REMOTE LOGIN -- TELNET October 1989
|
|||
|
|
|||
|
|
|||
|
enter native DET mode.
|
|||
|
|
|||
|
o When either end negotiates out of binary mode, the
|
|||
|
other end does too, and the mode then reverts to
|
|||
|
normal NVT.
|
|||
|
|
|||
|
|
|||
|
3.3.3 Option Requirements
|
|||
|
|
|||
|
Every Telnet implementation MUST support the Binary option
|
|||
|
[TELNET:3] and the Suppress Go Ahead option [TELNET:5], and
|
|||
|
SHOULD support the Echo [TELNET:4], Status [TELNET:6], End-of-
|
|||
|
Record [TELNET:9], and Extended Options List [TELNET:8]
|
|||
|
options.
|
|||
|
|
|||
|
A User or Server Telnet SHOULD support the Window Size Option
|
|||
|
[TELNET:12] if the local operating system provides the
|
|||
|
corresponding capability.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
Note that the End-of-Record option only signifies that a
|
|||
|
Telnet can receive a Telnet EOR without crashing;
|
|||
|
therefore, every Telnet ought to be willing to accept
|
|||
|
negotiation of the End-of-Record option. See also the
|
|||
|
discussion in Section 3.2.3.
|
|||
|
|
|||
|
3.3.4 Option Initiation
|
|||
|
|
|||
|
When the Telnet protocol is used in a client/server situation,
|
|||
|
the server SHOULD initiate negotiation of the terminal
|
|||
|
interaction mode it expects.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
The Telnet protocol was defined to be perfectly
|
|||
|
symmetrical, but its application is generally asymmetric.
|
|||
|
Remote login has been known to fail because NEITHER side
|
|||
|
initiated negotiation of the required non-default terminal
|
|||
|
modes. It is generally the server that determines the
|
|||
|
preferred mode, so the server needs to initiate the
|
|||
|
negotiation; since the negotiation is symmetric, the user
|
|||
|
can also initiate it.
|
|||
|
|
|||
|
A client (User Telnet) SHOULD provide a means for users to
|
|||
|
enable and disable the initiation of option negotiation.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
A user sometimes needs to connect to an application
|
|||
|
service (e.g., FTP or SMTP) that uses Telnet for its
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 24]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 REMOTE LOGIN -- TELNET October 1989
|
|||
|
|
|||
|
|
|||
|
control stream but does not support Telnet options. User
|
|||
|
Telnet may be used for this purpose if initiation of
|
|||
|
option negotiation is disabled.
|
|||
|
|
|||
|
3.3.5 Telnet Linemode Option
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
An important new Telnet option, LINEMODE [TELNET:12], has
|
|||
|
been proposed. The LINEMODE option provides a standard
|
|||
|
way for a User Telnet and a Server Telnet to agree that
|
|||
|
the client rather than the server will perform terminal
|
|||
|
character processing. When the client has prepared a
|
|||
|
complete line of text, it will send it to the server in
|
|||
|
(usually) one TCP packet. This option will greatly
|
|||
|
decrease the packet cost of Telnet sessions and will also
|
|||
|
give much better user response over congested or long-
|
|||
|
delay networks.
|
|||
|
|
|||
|
The LINEMODE option allows dynamic switching between local
|
|||
|
and remote character processing. For example, the Telnet
|
|||
|
connection will automatically negotiate into single-
|
|||
|
character mode while a full screen editor is running, and
|
|||
|
then return to linemode when the editor is finished.
|
|||
|
|
|||
|
We expect that when this RFC is released, hosts should
|
|||
|
implement the client side of this option, and may
|
|||
|
implement the server side of this option. To properly
|
|||
|
implement the server side, the server needs to be able to
|
|||
|
tell the local system not to do any input character
|
|||
|
processing, but to remember its current terminal state and
|
|||
|
notify the Server Telnet process whenever the state
|
|||
|
changes. This will allow password echoing and full screen
|
|||
|
editors to be handled properly, for example.
|
|||
|
|
|||
|
3.4 TELNET/USER INTERFACE
|
|||
|
|
|||
|
3.4.1 Character Set Transparency
|
|||
|
|
|||
|
User Telnet implementations SHOULD be able to send or receive
|
|||
|
any 7-bit ASCII character. Where possible, any special
|
|||
|
character interpretations by the user host's operating system
|
|||
|
SHOULD be bypassed so that these characters can conveniently be
|
|||
|
sent and received on the connection.
|
|||
|
|
|||
|
Some character value MUST be reserved as "escape to command
|
|||
|
mode"; conventionally, doubling this character allows it to be
|
|||
|
entered as data. The specific character used SHOULD be user
|
|||
|
selectable.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 25]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 REMOTE LOGIN -- TELNET October 1989
|
|||
|
|
|||
|
|
|||
|
On binary-mode connections, a User Telnet program MAY provide
|
|||
|
an escape mechanism for entering arbitrary 8-bit values, if the
|
|||
|
host operating system doesn't allow them to be entered directly
|
|||
|
from the keyboard.
|
|||
|
|
|||
|
IMPLEMENTATION:
|
|||
|
The transparency issues are less pressing on servers, but
|
|||
|
implementors should take care in dealing with issues like:
|
|||
|
masking off parity bits (sent by an older, non-conforming
|
|||
|
client) before they reach programs that expect only NVT
|
|||
|
ASCII, and properly handling programs that request 8-bit
|
|||
|
data streams.
|
|||
|
|
|||
|
3.4.2 Telnet Commands
|
|||
|
|
|||
|
A User Telnet program MUST provide a user the capability of
|
|||
|
entering any of the Telnet control functions IP, AO, or AYT,
|
|||
|
and SHOULD provide the capability of entering EC, EL, and
|
|||
|
Break.
|
|||
|
|
|||
|
3.4.3 TCP Connection Errors
|
|||
|
|
|||
|
A User Telnet program SHOULD report to the user any TCP errors
|
|||
|
that are reported by the transport layer (see "TCP/Application
|
|||
|
Layer Interface" section in [INTRO:1]).
|
|||
|
|
|||
|
3.4.4 Non-Default Telnet Contact Port
|
|||
|
|
|||
|
A User Telnet program SHOULD allow the user to optionally
|
|||
|
specify a non-standard contact port number at the Server Telnet
|
|||
|
host.
|
|||
|
|
|||
|
3.4.5 Flushing Output
|
|||
|
|
|||
|
A User Telnet program SHOULD provide the user the ability to
|
|||
|
specify whether or not output should be flushed when an IP is
|
|||
|
sent; see Section 3.2.4.
|
|||
|
|
|||
|
For any output flushing scheme that causes the User Telnet to
|
|||
|
flush output locally until a Telnet signal is received from the
|
|||
|
Server, there SHOULD be a way for the user to manually restore
|
|||
|
normal output, in case the Server fails to send the expected
|
|||
|
signal.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 26]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 REMOTE LOGIN -- TELNET October 1989
|
|||
|
|
|||
|
|
|||
|
3.5. TELNET REQUIREMENTS SUMMARY
|
|||
|
|
|||
|
|
|||
|
| | | | |S| |
|
|||
|
| | | | |H| |F
|
|||
|
| | | | |O|M|o
|
|||
|
| | |S| |U|U|o
|
|||
|
| | |H| |L|S|t
|
|||
|
| |M|O| |D|T|n
|
|||
|
| |U|U|M| | |o
|
|||
|
| |S|L|A|N|N|t
|
|||
|
| |T|D|Y|O|O|t
|
|||
|
FEATURE |SECTION | | | |T|T|e
|
|||
|
-------------------------------------------------|--------|-|-|-|-|-|--
|
|||
|
| | | | | | |
|
|||
|
Option Negotiation |3.2.1 |x| | | | |
|
|||
|
Avoid negotiation loops |3.2.1 |x| | | | |
|
|||
|
Refuse unsupported options |3.2.1 |x| | | | |
|
|||
|
Negotiation OK anytime on connection |3.2.1 | |x| | | |
|
|||
|
Default to NVT |3.2.1 |x| | | | |
|
|||
|
Send official name in Term-Type option |3.2.8 |x| | | | |
|
|||
|
Accept any name in Term-Type option |3.2.8 |x| | | | |
|
|||
|
Implement Binary, Suppress-GA options |3.3.3 |x| | | | |
|
|||
|
Echo, Status, EOL, Ext-Opt-List options |3.3.3 | |x| | | |
|
|||
|
Implement Window-Size option if appropriate |3.3.3 | |x| | | |
|
|||
|
Server initiate mode negotiations |3.3.4 | |x| | | |
|
|||
|
User can enable/disable init negotiations |3.3.4 | |x| | | |
|
|||
|
| | | | | | |
|
|||
|
Go-Aheads | | | | | | |
|
|||
|
Non-GA server negotiate SUPPRESS-GA option |3.2.2 |x| | | | |
|
|||
|
User or Server accept SUPPRESS-GA option |3.2.2 |x| | | | |
|
|||
|
User Telnet ignore GA's |3.2.2 | | |x| | |
|
|||
|
| | | | | | |
|
|||
|
Control Functions | | | | | | |
|
|||
|
Support SE NOP DM IP AO AYT SB |3.2.3 |x| | | | |
|
|||
|
Support EOR EC EL Break |3.2.3 | | |x| | |
|
|||
|
Ignore unsupported control functions |3.2.3 |x| | | | |
|
|||
|
User, Server discard urgent data up to DM |3.2.4 |x| | | | |
|
|||
|
User Telnet send "Synch" after IP, AO, AYT |3.2.4 | |x| | | |
|
|||
|
Server Telnet reply Synch to IP |3.2.4 | | |x| | |
|
|||
|
Server Telnet reply Synch to AO |3.2.4 |x| | | | |
|
|||
|
User Telnet can flush output when send IP |3.2.4 | |x| | | |
|
|||
|
| | | | | | |
|
|||
|
Encoding | | | | | | |
|
|||
|
Send high-order bit in NVT mode |3.2.5 | | | |x| |
|
|||
|
Send high-order bit as parity bit |3.2.5 | | | | |x|
|
|||
|
Negot. BINARY if pass high-ord. bit to applic |3.2.5 | |x| | | |
|
|||
|
Always double IAC data byte |3.2.6 |x| | | | |
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 27]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 REMOTE LOGIN -- TELNET October 1989
|
|||
|
|
|||
|
|
|||
|
Double IAC data byte in binary mode |3.2.7 |x| | | | |
|
|||
|
Obey Telnet cmds in binary mode |3.2.7 |x| | | | |
|
|||
|
End-of-line, CR NUL in binary mode |3.2.7 | | | | |x|
|
|||
|
| | | | | | |
|
|||
|
End-of-Line | | | | | | |
|
|||
|
EOL at Server same as local end-of-line |3.3.1 |x| | | | |
|
|||
|
ASCII Server accept CR LF or CR NUL for EOL |3.3.1 |x| | | | |
|
|||
|
User Telnet able to send CR LF, CR NUL, or LF |3.3.1 |x| | | | |
|
|||
|
ASCII user able to select CR LF/CR NUL |3.3.1 | |x| | | |
|
|||
|
User Telnet default mode is CR LF |3.3.1 | |x| | | |
|
|||
|
Non-interactive uses CR LF for EOL |3.3.1 |x| | | | |
|
|||
|
| | | | | | |
|
|||
|
User Telnet interface | | | | | | |
|
|||
|
Input & output all 7-bit characters |3.4.1 | |x| | | |
|
|||
|
Bypass local op sys interpretation |3.4.1 | |x| | | |
|
|||
|
Escape character |3.4.1 |x| | | | |
|
|||
|
User-settable escape character |3.4.1 | |x| | | |
|
|||
|
Escape to enter 8-bit values |3.4.1 | | |x| | |
|
|||
|
Can input IP, AO, AYT |3.4.2 |x| | | | |
|
|||
|
Can input EC, EL, Break |3.4.2 | |x| | | |
|
|||
|
Report TCP connection errors to user |3.4.3 | |x| | | |
|
|||
|
Optional non-default contact port |3.4.4 | |x| | | |
|
|||
|
Can spec: output flushed when IP sent |3.4.5 | |x| | | |
|
|||
|
Can manually restore output mode |3.4.5 | |x| | | |
|
|||
|
| | | | | | |
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 28]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 FILE TRANSFER -- FTP October 1989
|
|||
|
|
|||
|
|
|||
|
4. FILE TRANSFER
|
|||
|
|
|||
|
4.1 FILE TRANSFER PROTOCOL -- FTP
|
|||
|
|
|||
|
4.1.1 INTRODUCTION
|
|||
|
|
|||
|
The File Transfer Protocol FTP is the primary Internet standard
|
|||
|
for file transfer. The current specification is contained in
|
|||
|
RFC-959 [FTP:1].
|
|||
|
|
|||
|
FTP uses separate simultaneous TCP connections for control and
|
|||
|
for data transfer. The FTP protocol includes many features,
|
|||
|
some of which are not commonly implemented. However, for every
|
|||
|
feature in FTP, there exists at least one implementation. The
|
|||
|
minimum implementation defined in RFC-959 was too small, so a
|
|||
|
somewhat larger minimum implementation is defined here.
|
|||
|
|
|||
|
Internet users have been unnecessarily burdened for years by
|
|||
|
deficient FTP implementations. Protocol implementors have
|
|||
|
suffered from the erroneous opinion that implementing FTP ought
|
|||
|
to be a small and trivial task. This is wrong, because FTP has
|
|||
|
a user interface, because it has to deal (correctly) with the
|
|||
|
whole variety of communication and operating system errors that
|
|||
|
may occur, and because it has to handle the great diversity of
|
|||
|
real file systems in the world.
|
|||
|
|
|||
|
4.1.2. PROTOCOL WALK-THROUGH
|
|||
|
|
|||
|
4.1.2.1 LOCAL Type: RFC-959 Section 3.1.1.4
|
|||
|
|
|||
|
An FTP program MUST support TYPE I ("IMAGE" or binary type)
|
|||
|
as well as TYPE L 8 ("LOCAL" type with logical byte size 8).
|
|||
|
A machine whose memory is organized into m-bit words, where
|
|||
|
m is not a multiple of 8, MAY also support TYPE L m.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
The command "TYPE L 8" is often required to transfer
|
|||
|
binary data between a machine whose memory is organized
|
|||
|
into (e.g.) 36-bit words and a machine with an 8-bit
|
|||
|
byte organization. For an 8-bit byte machine, TYPE L 8
|
|||
|
is equivalent to IMAGE.
|
|||
|
|
|||
|
"TYPE L m" is sometimes specified to the FTP programs
|
|||
|
on two m-bit word machines to ensure the correct
|
|||
|
transfer of a native-mode binary file from one machine
|
|||
|
to the other. However, this command should have the
|
|||
|
same effect on these machines as "TYPE I".
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 29]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 FILE TRANSFER -- FTP October 1989
|
|||
|
|
|||
|
|
|||
|
4.1.2.2 Telnet Format Control: RFC-959 Section 3.1.1.5.2
|
|||
|
|
|||
|
A host that makes no distinction between TYPE N and TYPE T
|
|||
|
SHOULD implement TYPE T to be identical to TYPE N.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
This provision should ease interoperation with hosts
|
|||
|
that do make this distinction.
|
|||
|
|
|||
|
Many hosts represent text files internally as strings
|
|||
|
of ASCII characters, using the embedded ASCII format
|
|||
|
effector characters (LF, BS, FF, ...) to control the
|
|||
|
format when a file is printed. For such hosts, there
|
|||
|
is no distinction between "print" files and other
|
|||
|
files. However, systems that use record structured
|
|||
|
files typically need a special format for printable
|
|||
|
files (e.g., ASA carriage control). For the latter
|
|||
|
hosts, FTP allows a choice of TYPE N or TYPE T.
|
|||
|
|
|||
|
4.1.2.3 Page Structure: RFC-959 Section 3.1.2.3 and Appendix I
|
|||
|
|
|||
|
Implementation of page structure is NOT RECOMMENDED in
|
|||
|
general. However, if a host system does need to implement
|
|||
|
FTP for "random access" or "holey" files, it MUST use the
|
|||
|
defined page structure format rather than define a new
|
|||
|
private FTP format.
|
|||
|
|
|||
|
4.1.2.4 Data Structure Transformations: RFC-959 Section 3.1.2
|
|||
|
|
|||
|
An FTP transformation between record-structure and file-
|
|||
|
structure SHOULD be invertible, to the extent possible while
|
|||
|
making the result useful on the target host.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
RFC-959 required strict invertibility between record-
|
|||
|
structure and file-structure, but in practice,
|
|||
|
efficiency and convenience often preclude it.
|
|||
|
Therefore, the requirement is being relaxed. There are
|
|||
|
two different objectives for transferring a file:
|
|||
|
processing it on the target host, or just storage. For
|
|||
|
storage, strict invertibility is important. For
|
|||
|
processing, the file created on the target host needs
|
|||
|
to be in the format expected by application programs on
|
|||
|
that host.
|
|||
|
|
|||
|
As an example of the conflict, imagine a record-
|
|||
|
oriented operating system that requires some data files
|
|||
|
to have exactly 80 bytes in each record. While STORing
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 30]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 FILE TRANSFER -- FTP October 1989
|
|||
|
|
|||
|
|
|||
|
a file on such a host, an FTP Server must be able to
|
|||
|
pad each line or record to 80 bytes; a later retrieval
|
|||
|
of such a file cannot be strictly invertible.
|
|||
|
|
|||
|
4.1.2.5 Data Connection Management: RFC-959 Section 3.3
|
|||
|
|
|||
|
A User-FTP that uses STREAM mode SHOULD send a PORT command
|
|||
|
to assign a non-default data port before each transfer
|
|||
|
command is issued.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
This is required because of the long delay after a TCP
|
|||
|
connection is closed until its socket pair can be
|
|||
|
reused, to allow multiple transfers during a single FTP
|
|||
|
session. Sending a port command can avoided if a
|
|||
|
transfer mode other than stream is used, by leaving the
|
|||
|
data transfer connection open between transfers.
|
|||
|
|
|||
|
4.1.2.6 PASV Command: RFC-959 Section 4.1.2
|
|||
|
|
|||
|
A server-FTP MUST implement the PASV command.
|
|||
|
|
|||
|
If multiple third-party transfers are to be executed during
|
|||
|
the same session, a new PASV command MUST be issued before
|
|||
|
each transfer command, to obtain a unique port pair.
|
|||
|
|
|||
|
IMPLEMENTATION:
|
|||
|
The format of the 227 reply to a PASV command is not
|
|||
|
well standardized. In particular, an FTP client cannot
|
|||
|
assume that the parentheses shown on page 40 of RFC-959
|
|||
|
will be present (and in fact, Figure 3 on page 43 omits
|
|||
|
them). Therefore, a User-FTP program that interprets
|
|||
|
the PASV reply must scan the reply for the first digit
|
|||
|
of the host and port numbers.
|
|||
|
|
|||
|
Note that the host number h1,h2,h3,h4 is the IP address
|
|||
|
of the server host that is sending the reply, and that
|
|||
|
p1,p2 is a non-default data transfer port that PASV has
|
|||
|
assigned.
|
|||
|
|
|||
|
4.1.2.7 LIST and NLST Commands: RFC-959 Section 4.1.3
|
|||
|
|
|||
|
The data returned by an NLST command MUST contain only a
|
|||
|
simple list of legal pathnames, such that the server can use
|
|||
|
them directly as the arguments of subsequent data transfer
|
|||
|
commands for the individual files.
|
|||
|
|
|||
|
The data returned by a LIST or NLST command SHOULD use an
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 31]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 FILE TRANSFER -- FTP October 1989
|
|||
|
|
|||
|
|
|||
|
implied TYPE AN, unless the current type is EBCDIC, in which
|
|||
|
case an implied TYPE EN SHOULD be used.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
Many FTP clients support macro-commands that will get
|
|||
|
or put files matching a wildcard specification, using
|
|||
|
NLST to obtain a list of pathnames. The expansion of
|
|||
|
"multiple-put" is local to the client, but "multiple-
|
|||
|
get" requires cooperation by the server.
|
|||
|
|
|||
|
The implied type for LIST and NLST is designed to
|
|||
|
provide compatibility with existing User-FTPs, and in
|
|||
|
particular with multiple-get commands.
|
|||
|
|
|||
|
4.1.2.8 SITE Command: RFC-959 Section 4.1.3
|
|||
|
|
|||
|
A Server-FTP SHOULD use the SITE command for non-standard
|
|||
|
features, rather than invent new private commands or
|
|||
|
unstandardized extensions to existing commands.
|
|||
|
|
|||
|
4.1.2.9 STOU Command: RFC-959 Section 4.1.3
|
|||
|
|
|||
|
The STOU command stores into a uniquely named file. When it
|
|||
|
receives an STOU command, a Server-FTP MUST return the
|
|||
|
actual file name in the "125 Transfer Starting" or the "150
|
|||
|
Opening Data Connection" message that precedes the transfer
|
|||
|
(the 250 reply code mentioned in RFC-959 is incorrect). The
|
|||
|
exact format of these messages is hereby defined to be as
|
|||
|
follows:
|
|||
|
|
|||
|
125 FILE: pppp
|
|||
|
150 FILE: pppp
|
|||
|
|
|||
|
where pppp represents the unique pathname of the file that
|
|||
|
will be written.
|
|||
|
|
|||
|
4.1.2.10 Telnet End-of-line Code: RFC-959, Page 34
|
|||
|
|
|||
|
Implementors MUST NOT assume any correspondence between READ
|
|||
|
boundaries on the control connection and the Telnet EOL
|
|||
|
sequences (CR LF).
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
Thus, a server-FTP (or User-FTP) must continue reading
|
|||
|
characters from the control connection until a complete
|
|||
|
Telnet EOL sequence is encountered, before processing
|
|||
|
the command (or response, respectively). Conversely, a
|
|||
|
single READ from the control connection may include
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 32]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 FILE TRANSFER -- FTP October 1989
|
|||
|
|
|||
|
|
|||
|
more than one FTP command.
|
|||
|
|
|||
|
4.1.2.11 FTP Replies: RFC-959 Section 4.2, Page 35
|
|||
|
|
|||
|
A Server-FTP MUST send only correctly formatted replies on
|
|||
|
the control connection. Note that RFC-959 (unlike earlier
|
|||
|
versions of the FTP spec) contains no provision for a
|
|||
|
"spontaneous" reply message.
|
|||
|
|
|||
|
A Server-FTP SHOULD use the reply codes defined in RFC-959
|
|||
|
whenever they apply. However, a server-FTP MAY use a
|
|||
|
different reply code when needed, as long as the general
|
|||
|
rules of Section 4.2 are followed. When the implementor has
|
|||
|
a choice between a 4xx and 5xx reply code, a Server-FTP
|
|||
|
SHOULD send a 4xx (temporary failure) code when there is any
|
|||
|
reasonable possibility that a failed FTP will succeed a few
|
|||
|
hours later.
|
|||
|
|
|||
|
A User-FTP SHOULD generally use only the highest-order digit
|
|||
|
of a 3-digit reply code for making a procedural decision, to
|
|||
|
prevent difficulties when a Server-FTP uses non-standard
|
|||
|
reply codes.
|
|||
|
|
|||
|
A User-FTP MUST be able to handle multi-line replies. If
|
|||
|
the implementation imposes a limit on the number of lines
|
|||
|
and if this limit is exceeded, the User-FTP MUST recover,
|
|||
|
e.g., by ignoring the excess lines until the end of the
|
|||
|
multi-line reply is reached.
|
|||
|
|
|||
|
A User-FTP SHOULD NOT interpret a 421 reply code ("Service
|
|||
|
not available, closing control connection") specially, but
|
|||
|
SHOULD detect closing of the control connection by the
|
|||
|
server.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
Server implementations that fail to strictly follow the
|
|||
|
reply rules often cause FTP user programs to hang.
|
|||
|
Note that RFC-959 resolved ambiguities in the reply
|
|||
|
rules found in earlier FTP specifications and must be
|
|||
|
followed.
|
|||
|
|
|||
|
It is important to choose FTP reply codes that properly
|
|||
|
distinguish between temporary and permanent failures,
|
|||
|
to allow the successful use of file transfer client
|
|||
|
daemons. These programs depend on the reply codes to
|
|||
|
decide whether or not to retry a failed transfer; using
|
|||
|
a permanent failure code (5xx) for a temporary error
|
|||
|
will cause these programs to give up unnecessarily.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 33]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 FILE TRANSFER -- FTP October 1989
|
|||
|
|
|||
|
|
|||
|
When the meaning of a reply matches exactly the text
|
|||
|
shown in RFC-959, uniformity will be enhanced by using
|
|||
|
the RFC-959 text verbatim. However, a Server-FTP
|
|||
|
implementor is encouraged to choose reply text that
|
|||
|
conveys specific system-dependent information, when
|
|||
|
appropriate.
|
|||
|
|
|||
|
4.1.2.12 Connections: RFC-959 Section 5.2
|
|||
|
|
|||
|
The words "and the port used" in the second paragraph of
|
|||
|
this section of RFC-959 are erroneous (historical), and they
|
|||
|
should be ignored.
|
|||
|
|
|||
|
On a multihomed server host, the default data transfer port
|
|||
|
(L-1) MUST be associated with the same local IP address as
|
|||
|
the corresponding control connection to port L.
|
|||
|
|
|||
|
A user-FTP MUST NOT send any Telnet controls other than
|
|||
|
SYNCH and IP on an FTP control connection. In particular, it
|
|||
|
MUST NOT attempt to negotiate Telnet options on the control
|
|||
|
connection. However, a server-FTP MUST be capable of
|
|||
|
accepting and refusing Telnet negotiations (i.e., sending
|
|||
|
DONT/WONT).
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
Although the RFC says: "Server- and User- processes
|
|||
|
should follow the conventions for the Telnet
|
|||
|
protocol...[on the control connection]", it is not the
|
|||
|
intent that Telnet option negotiation is to be
|
|||
|
employed.
|
|||
|
|
|||
|
4.1.2.13 Minimum Implementation; RFC-959 Section 5.1
|
|||
|
|
|||
|
The following commands and options MUST be supported by
|
|||
|
every server-FTP and user-FTP, except in cases where the
|
|||
|
underlying file system or operating system does not allow or
|
|||
|
support a particular command.
|
|||
|
|
|||
|
Type: ASCII Non-print, IMAGE, LOCAL 8
|
|||
|
Mode: Stream
|
|||
|
Structure: File, Record*
|
|||
|
Commands:
|
|||
|
USER, PASS, ACCT,
|
|||
|
PORT, PASV,
|
|||
|
TYPE, MODE, STRU,
|
|||
|
RETR, STOR, APPE,
|
|||
|
RNFR, RNTO, DELE,
|
|||
|
CWD, CDUP, RMD, MKD, PWD,
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 34]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 FILE TRANSFER -- FTP October 1989
|
|||
|
|
|||
|
|
|||
|
LIST, NLST,
|
|||
|
SYST, STAT,
|
|||
|
HELP, NOOP, QUIT.
|
|||
|
|
|||
|
*Record structure is REQUIRED only for hosts whose file
|
|||
|
systems support record structure.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
Vendors are encouraged to implement a larger subset of
|
|||
|
the protocol. For example, there are important
|
|||
|
robustness features in the protocol (e.g., Restart,
|
|||
|
ABOR, block mode) that would be an aid to some Internet
|
|||
|
users but are not widely implemented.
|
|||
|
|
|||
|
A host that does not have record structures in its file
|
|||
|
system may still accept files with STRU R, recording
|
|||
|
the byte stream literally.
|
|||
|
|
|||
|
4.1.3 SPECIFIC ISSUES
|
|||
|
|
|||
|
4.1.3.1 Non-standard Command Verbs
|
|||
|
|
|||
|
FTP allows "experimental" commands, whose names begin with
|
|||
|
"X". If these commands are subsequently adopted as
|
|||
|
standards, there may still be existing implementations using
|
|||
|
the "X" form. At present, this is true for the directory
|
|||
|
commands:
|
|||
|
|
|||
|
RFC-959 "Experimental"
|
|||
|
|
|||
|
MKD XMKD
|
|||
|
RMD XRMD
|
|||
|
PWD XPWD
|
|||
|
CDUP XCUP
|
|||
|
CWD XCWD
|
|||
|
|
|||
|
All FTP implementations SHOULD recognize both forms of these
|
|||
|
commands, by simply equating them with extra entries in the
|
|||
|
command lookup table.
|
|||
|
|
|||
|
IMPLEMENTATION:
|
|||
|
A User-FTP can access a server that supports only the
|
|||
|
"X" forms by implementing a mode switch, or
|
|||
|
automatically using the following procedure: if the
|
|||
|
RFC-959 form of one of the above commands is rejected
|
|||
|
with a 500 or 502 response code, then try the
|
|||
|
experimental form; any other response would be passed
|
|||
|
to the user.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 35]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 FILE TRANSFER -- FTP October 1989
|
|||
|
|
|||
|
|
|||
|
4.1.3.2 Idle Timeout
|
|||
|
|
|||
|
A Server-FTP process SHOULD have an idle timeout, which will
|
|||
|
terminate the process and close the control connection if
|
|||
|
the server is inactive (i.e., no command or data transfer in
|
|||
|
progress) for a long period of time. The idle timeout time
|
|||
|
SHOULD be configurable, and the default should be at least 5
|
|||
|
minutes.
|
|||
|
|
|||
|
A client FTP process ("User-PI" in RFC-959) will need
|
|||
|
timeouts on responses only if it is invoked from a program.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
Without a timeout, a Server-FTP process may be left
|
|||
|
pending indefinitely if the corresponding client
|
|||
|
crashes without closing the control connection.
|
|||
|
|
|||
|
4.1.3.3 Concurrency of Data and Control
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
The intent of the designers of FTP was that a user
|
|||
|
should be able to send a STAT command at any time while
|
|||
|
data transfer was in progress and that the server-FTP
|
|||
|
would reply immediately with status -- e.g., the number
|
|||
|
of bytes transferred so far. Similarly, an ABOR
|
|||
|
command should be possible at any time during a data
|
|||
|
transfer.
|
|||
|
|
|||
|
Unfortunately, some small-machine operating systems
|
|||
|
make such concurrent programming difficult, and some
|
|||
|
other implementers seek minimal solutions, so some FTP
|
|||
|
implementations do not allow concurrent use of the data
|
|||
|
and control connections. Even such a minimal server
|
|||
|
must be prepared to accept and defer a STAT or ABOR
|
|||
|
command that arrives during data transfer.
|
|||
|
|
|||
|
4.1.3.4 FTP Restart Mechanism
|
|||
|
|
|||
|
The description of the 110 reply on pp. 40-41 of RFC-959 is
|
|||
|
incorrect; the correct description is as follows. A restart
|
|||
|
reply message, sent over the control connection from the
|
|||
|
receiving FTP to the User-FTP, has the format:
|
|||
|
|
|||
|
110 MARK ssss = rrrr
|
|||
|
|
|||
|
Here:
|
|||
|
|
|||
|
* ssss is a text string that appeared in a Restart Marker
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 36]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 FILE TRANSFER -- FTP October 1989
|
|||
|
|
|||
|
|
|||
|
in the data stream and encodes a position in the
|
|||
|
sender's file system;
|
|||
|
|
|||
|
* rrrr encodes the corresponding position in the
|
|||
|
receiver's file system.
|
|||
|
|
|||
|
The encoding, which is specific to a particular file system
|
|||
|
and network implementation, is always generated and
|
|||
|
interpreted by the same system, either sender or receiver.
|
|||
|
|
|||
|
When an FTP that implements restart receives a Restart
|
|||
|
Marker in the data stream, it SHOULD force the data to that
|
|||
|
point to be written to stable storage before encoding the
|
|||
|
corresponding position rrrr. An FTP sending Restart Markers
|
|||
|
MUST NOT assume that 110 replies will be returned
|
|||
|
synchronously with the data, i.e., it must not await a 110
|
|||
|
reply before sending more data.
|
|||
|
|
|||
|
Two new reply codes are hereby defined for errors
|
|||
|
encountered in restarting a transfer:
|
|||
|
|
|||
|
554 Requested action not taken: invalid REST parameter.
|
|||
|
|
|||
|
A 554 reply may result from a FTP service command that
|
|||
|
follows a REST command. The reply indicates that the
|
|||
|
existing file at the Server-FTP cannot be repositioned
|
|||
|
as specified in the REST.
|
|||
|
|
|||
|
555 Requested action not taken: type or stru mismatch.
|
|||
|
|
|||
|
A 555 reply may result from an APPE command or from any
|
|||
|
FTP service command following a REST command. The
|
|||
|
reply indicates that there is some mismatch between the
|
|||
|
current transfer parameters (type and stru) and the
|
|||
|
attributes of the existing file.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
Note that the FTP Restart mechanism requires that Block
|
|||
|
or Compressed mode be used for data transfer, to allow
|
|||
|
the Restart Markers to be included within the data
|
|||
|
stream. The frequency of Restart Markers can be low.
|
|||
|
|
|||
|
Restart Markers mark a place in the data stream, but
|
|||
|
the receiver may be performing some transformation on
|
|||
|
the data as it is stored into stable storage. In
|
|||
|
general, the receiver's encoding must include any state
|
|||
|
information necessary to restart this transformation at
|
|||
|
any point of the FTP data stream. For example, in TYPE
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 37]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 FILE TRANSFER -- FTP October 1989
|
|||
|
|
|||
|
|
|||
|
A transfers, some receiver hosts transform CR LF
|
|||
|
sequences into a single LF character on disk. If a
|
|||
|
Restart Marker happens to fall between CR and LF, the
|
|||
|
receiver must encode in rrrr that the transfer must be
|
|||
|
restarted in a "CR has been seen and discarded" state.
|
|||
|
|
|||
|
Note that the Restart Marker is required to be encoded
|
|||
|
as a string of printable ASCII characters, regardless
|
|||
|
of the type of the data.
|
|||
|
|
|||
|
RFC-959 says that restart information is to be returned
|
|||
|
"to the user". This should not be taken literally. In
|
|||
|
general, the User-FTP should save the restart
|
|||
|
information (ssss,rrrr) in stable storage, e.g., append
|
|||
|
it to a restart control file. An empty restart control
|
|||
|
file should be created when the transfer first starts
|
|||
|
and deleted automatically when the transfer completes
|
|||
|
successfully. It is suggested that this file have a
|
|||
|
name derived in an easily-identifiable manner from the
|
|||
|
name of the file being transferred and the remote host
|
|||
|
name; this is analogous to the means used by many text
|
|||
|
editors for naming "backup" files.
|
|||
|
|
|||
|
There are three cases for FTP restart.
|
|||
|
|
|||
|
(1) User-to-Server Transfer
|
|||
|
|
|||
|
The User-FTP puts Restart Markers <ssss> at
|
|||
|
convenient places in the data stream. When the
|
|||
|
Server-FTP receives a Marker, it writes all prior
|
|||
|
data to disk, encodes its file system position and
|
|||
|
transformation state as rrrr, and returns a "110
|
|||
|
MARK ssss = rrrr" reply over the control
|
|||
|
connection. The User-FTP appends the pair
|
|||
|
(ssss,rrrr) to its restart control file.
|
|||
|
|
|||
|
To restart the transfer, the User-FTP fetches the
|
|||
|
last (ssss,rrrr) pair from the restart control
|
|||
|
file, repositions its local file system and
|
|||
|
transformation state using ssss, and sends the
|
|||
|
command "REST rrrr" to the Server-FTP.
|
|||
|
|
|||
|
(2) Server-to-User Transfer
|
|||
|
|
|||
|
The Server-FTP puts Restart Markers <ssss> at
|
|||
|
convenient places in the data stream. When the
|
|||
|
User-FTP receives a Marker, it writes all prior
|
|||
|
data to disk, encodes its file system position and
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 38]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 FILE TRANSFER -- FTP October 1989
|
|||
|
|
|||
|
|
|||
|
transformation state as rrrr, and appends the pair
|
|||
|
(rrrr,ssss) to its restart control file.
|
|||
|
|
|||
|
To restart the transfer, the User-FTP fetches the
|
|||
|
last (rrrr,ssss) pair from the restart control
|
|||
|
file, repositions its local file system and
|
|||
|
transformation state using rrrr, and sends the
|
|||
|
command "REST ssss" to the Server-FTP.
|
|||
|
|
|||
|
(3) Server-to-Server ("Third-Party") Transfer
|
|||
|
|
|||
|
The sending Server-FTP puts Restart Markers <ssss>
|
|||
|
at convenient places in the data stream. When it
|
|||
|
receives a Marker, the receiving Server-FTP writes
|
|||
|
all prior data to disk, encodes its file system
|
|||
|
position and transformation state as rrrr, and
|
|||
|
sends a "110 MARK ssss = rrrr" reply over the
|
|||
|
control connection to the User. The User-FTP
|
|||
|
appends the pair (ssss,rrrr) to its restart
|
|||
|
control file.
|
|||
|
|
|||
|
To restart the transfer, the User-FTP fetches the
|
|||
|
last (ssss,rrrr) pair from the restart control
|
|||
|
file, sends "REST ssss" to the sending Server-FTP,
|
|||
|
and sends "REST rrrr" to the receiving Server-FTP.
|
|||
|
|
|||
|
|
|||
|
4.1.4 FTP/USER INTERFACE
|
|||
|
|
|||
|
This section discusses the user interface for a User-FTP
|
|||
|
program.
|
|||
|
|
|||
|
4.1.4.1 Pathname Specification
|
|||
|
|
|||
|
Since FTP is intended for use in a heterogeneous
|
|||
|
environment, User-FTP implementations MUST support remote
|
|||
|
pathnames as arbitrary character strings, so that their form
|
|||
|
and content are not limited by the conventions of the local
|
|||
|
operating system.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
In particular, remote pathnames can be of arbitrary
|
|||
|
length, and all the printing ASCII characters as well
|
|||
|
as space (0x20) must be allowed. RFC-959 allows a
|
|||
|
pathname to contain any 7-bit ASCII character except CR
|
|||
|
or LF.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 39]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 FILE TRANSFER -- FTP October 1989
|
|||
|
|
|||
|
|
|||
|
4.1.4.2 "QUOTE" Command
|
|||
|
|
|||
|
A User-FTP program MUST implement a "QUOTE" command that
|
|||
|
will pass an arbitrary character string to the server and
|
|||
|
display all resulting response messages to the user.
|
|||
|
|
|||
|
To make the "QUOTE" command useful, a User-FTP SHOULD send
|
|||
|
transfer control commands to the server as the user enters
|
|||
|
them, rather than saving all the commands and sending them
|
|||
|
to the server only when a data transfer is started.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
The "QUOTE" command is essential to allow the user to
|
|||
|
access servers that require system-specific commands
|
|||
|
(e.g., SITE or ALLO), or to invoke new or optional
|
|||
|
features that are not implemented by the User-FTP. For
|
|||
|
example, "QUOTE" may be used to specify "TYPE A T" to
|
|||
|
send a print file to hosts that require the
|
|||
|
distinction, even if the User-FTP does not recognize
|
|||
|
that TYPE.
|
|||
|
|
|||
|
4.1.4.3 Displaying Replies to User
|
|||
|
|
|||
|
A User-FTP SHOULD display to the user the full text of all
|
|||
|
error reply messages it receives. It SHOULD have a
|
|||
|
"verbose" mode in which all commands it sends and the full
|
|||
|
text and reply codes it receives are displayed, for
|
|||
|
diagnosis of problems.
|
|||
|
|
|||
|
4.1.4.4 Maintaining Synchronization
|
|||
|
|
|||
|
The state machine in a User-FTP SHOULD be forgiving of
|
|||
|
missing and unexpected reply messages, in order to maintain
|
|||
|
command synchronization with the server.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 40]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 FILE TRANSFER -- FTP October 1989
|
|||
|
|
|||
|
|
|||
|
4.1.5 FTP REQUIREMENTS SUMMARY
|
|||
|
|
|||
|
| | | | |S| |
|
|||
|
| | | | |H| |F
|
|||
|
| | | | |O|M|o
|
|||
|
| | |S| |U|U|o
|
|||
|
| | |H| |L|S|t
|
|||
|
| |M|O| |D|T|n
|
|||
|
| |U|U|M| | |o
|
|||
|
| |S|L|A|N|N|t
|
|||
|
| |T|D|Y|O|O|t
|
|||
|
FEATURE |SECTION | | | |T|T|e
|
|||
|
-------------------------------------------|---------------|-|-|-|-|-|--
|
|||
|
Implement TYPE T if same as TYPE N |4.1.2.2 | |x| | | |
|
|||
|
File/Record transform invertible if poss. |4.1.2.4 | |x| | | |
|
|||
|
User-FTP send PORT cmd for stream mode |4.1.2.5 | |x| | | |
|
|||
|
Server-FTP implement PASV |4.1.2.6 |x| | | | |
|
|||
|
PASV is per-transfer |4.1.2.6 |x| | | | |
|
|||
|
NLST reply usable in RETR cmds |4.1.2.7 |x| | | | |
|
|||
|
Implied type for LIST and NLST |4.1.2.7 | |x| | | |
|
|||
|
SITE cmd for non-standard features |4.1.2.8 | |x| | | |
|
|||
|
STOU cmd return pathname as specified |4.1.2.9 |x| | | | |
|
|||
|
Use TCP READ boundaries on control conn. |4.1.2.10 | | | | |x|
|
|||
|
| | | | | | |
|
|||
|
Server-FTP send only correct reply format |4.1.2.11 |x| | | | |
|
|||
|
Server-FTP use defined reply code if poss. |4.1.2.11 | |x| | | |
|
|||
|
New reply code following Section 4.2 |4.1.2.11 | | |x| | |
|
|||
|
User-FTP use only high digit of reply |4.1.2.11 | |x| | | |
|
|||
|
User-FTP handle multi-line reply lines |4.1.2.11 |x| | | | |
|
|||
|
User-FTP handle 421 reply specially |4.1.2.11 | | | |x| |
|
|||
|
| | | | | | |
|
|||
|
Default data port same IP addr as ctl conn |4.1.2.12 |x| | | | |
|
|||
|
User-FTP send Telnet cmds exc. SYNCH, IP |4.1.2.12 | | | | |x|
|
|||
|
User-FTP negotiate Telnet options |4.1.2.12 | | | | |x|
|
|||
|
Server-FTP handle Telnet options |4.1.2.12 |x| | | | |
|
|||
|
Handle "Experimental" directory cmds |4.1.3.1 | |x| | | |
|
|||
|
Idle timeout in server-FTP |4.1.3.2 | |x| | | |
|
|||
|
Configurable idle timeout |4.1.3.2 | |x| | | |
|
|||
|
Receiver checkpoint data at Restart Marker |4.1.3.4 | |x| | | |
|
|||
|
Sender assume 110 replies are synchronous |4.1.3.4 | | | | |x|
|
|||
|
| | | | | | |
|
|||
|
Support TYPE: | | | | | | |
|
|||
|
ASCII - Non-Print (AN) |4.1.2.13 |x| | | | |
|
|||
|
ASCII - Telnet (AT) -- if same as AN |4.1.2.2 | |x| | | |
|
|||
|
ASCII - Carriage Control (AC) |959 3.1.1.5.2 | | |x| | |
|
|||
|
EBCDIC - (any form) |959 3.1.1.2 | | |x| | |
|
|||
|
IMAGE |4.1.2.1 |x| | | | |
|
|||
|
LOCAL 8 |4.1.2.1 |x| | | | |
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 41]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 FILE TRANSFER -- FTP October 1989
|
|||
|
|
|||
|
|
|||
|
LOCAL m |4.1.2.1 | | |x| | |2
|
|||
|
| | | | | | |
|
|||
|
Support MODE: | | | | | | |
|
|||
|
Stream |4.1.2.13 |x| | | | |
|
|||
|
Block |959 3.4.2 | | |x| | |
|
|||
|
| | | | | | |
|
|||
|
Support STRUCTURE: | | | | | | |
|
|||
|
File |4.1.2.13 |x| | | | |
|
|||
|
Record |4.1.2.13 |x| | | | |3
|
|||
|
Page |4.1.2.3 | | | |x| |
|
|||
|
| | | | | | |
|
|||
|
Support commands: | | | | | | |
|
|||
|
USER |4.1.2.13 |x| | | | |
|
|||
|
PASS |4.1.2.13 |x| | | | |
|
|||
|
ACCT |4.1.2.13 |x| | | | |
|
|||
|
CWD |4.1.2.13 |x| | | | |
|
|||
|
CDUP |4.1.2.13 |x| | | | |
|
|||
|
SMNT |959 5.3.1 | | |x| | |
|
|||
|
REIN |959 5.3.1 | | |x| | |
|
|||
|
QUIT |4.1.2.13 |x| | | | |
|
|||
|
| | | | | | |
|
|||
|
PORT |4.1.2.13 |x| | | | |
|
|||
|
PASV |4.1.2.6 |x| | | | |
|
|||
|
TYPE |4.1.2.13 |x| | | | |1
|
|||
|
STRU |4.1.2.13 |x| | | | |1
|
|||
|
MODE |4.1.2.13 |x| | | | |1
|
|||
|
| | | | | | |
|
|||
|
RETR |4.1.2.13 |x| | | | |
|
|||
|
STOR |4.1.2.13 |x| | | | |
|
|||
|
STOU |959 5.3.1 | | |x| | |
|
|||
|
APPE |4.1.2.13 |x| | | | |
|
|||
|
ALLO |959 5.3.1 | | |x| | |
|
|||
|
REST |959 5.3.1 | | |x| | |
|
|||
|
RNFR |4.1.2.13 |x| | | | |
|
|||
|
RNTO |4.1.2.13 |x| | | | |
|
|||
|
ABOR |959 5.3.1 | | |x| | |
|
|||
|
DELE |4.1.2.13 |x| | | | |
|
|||
|
RMD |4.1.2.13 |x| | | | |
|
|||
|
MKD |4.1.2.13 |x| | | | |
|
|||
|
PWD |4.1.2.13 |x| | | | |
|
|||
|
LIST |4.1.2.13 |x| | | | |
|
|||
|
NLST |4.1.2.13 |x| | | | |
|
|||
|
SITE |4.1.2.8 | | |x| | |
|
|||
|
STAT |4.1.2.13 |x| | | | |
|
|||
|
SYST |4.1.2.13 |x| | | | |
|
|||
|
HELP |4.1.2.13 |x| | | | |
|
|||
|
NOOP |4.1.2.13 |x| | | | |
|
|||
|
| | | | | | |
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 42]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 FILE TRANSFER -- FTP October 1989
|
|||
|
|
|||
|
|
|||
|
User Interface: | | | | | | |
|
|||
|
Arbitrary pathnames |4.1.4.1 |x| | | | |
|
|||
|
Implement "QUOTE" command |4.1.4.2 |x| | | | |
|
|||
|
Transfer control commands immediately |4.1.4.2 | |x| | | |
|
|||
|
Display error messages to user |4.1.4.3 | |x| | | |
|
|||
|
Verbose mode |4.1.4.3 | |x| | | |
|
|||
|
Maintain synchronization with server |4.1.4.4 | |x| | | |
|
|||
|
|
|||
|
Footnotes:
|
|||
|
|
|||
|
(1) For the values shown earlier.
|
|||
|
|
|||
|
(2) Here m is number of bits in a memory word.
|
|||
|
|
|||
|
(3) Required for host with record-structured file system, optional
|
|||
|
otherwise.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 43]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 FILE TRANSFER -- TFTP October 1989
|
|||
|
|
|||
|
|
|||
|
4.2 TRIVIAL FILE TRANSFER PROTOCOL -- TFTP
|
|||
|
|
|||
|
4.2.1 INTRODUCTION
|
|||
|
|
|||
|
The Trivial File Transfer Protocol TFTP is defined in RFC-783
|
|||
|
[TFTP:1].
|
|||
|
|
|||
|
TFTP provides its own reliable delivery with UDP as its
|
|||
|
transport protocol, using a simple stop-and-wait acknowledgment
|
|||
|
system. Since TFTP has an effective window of only one 512
|
|||
|
octet segment, it can provide good performance only over paths
|
|||
|
that have a small delay*bandwidth product. The TFTP file
|
|||
|
interface is very simple, providing no access control or
|
|||
|
security.
|
|||
|
|
|||
|
TFTP's most important application is bootstrapping a host over
|
|||
|
a local network, since it is simple and small enough to be
|
|||
|
easily implemented in EPROM [BOOT:1, BOOT:2]. Vendors are
|
|||
|
urged to support TFTP for booting.
|
|||
|
|
|||
|
4.2.2 PROTOCOL WALK-THROUGH
|
|||
|
|
|||
|
The TFTP specification [TFTP:1] is written in an open style,
|
|||
|
and does not fully specify many parts of the protocol.
|
|||
|
|
|||
|
4.2.2.1 Transfer Modes: RFC-783, Page 3
|
|||
|
|
|||
|
The transfer mode "mail" SHOULD NOT be supported.
|
|||
|
|
|||
|
4.2.2.2 UDP Header: RFC-783, Page 17
|
|||
|
|
|||
|
The Length field of a UDP header is incorrectly defined; it
|
|||
|
includes the UDP header length (8).
|
|||
|
|
|||
|
4.2.3 SPECIFIC ISSUES
|
|||
|
|
|||
|
4.2.3.1 Sorcerer's Apprentice Syndrome
|
|||
|
|
|||
|
There is a serious bug, known as the "Sorcerer's Apprentice
|
|||
|
Syndrome," in the protocol specification. While it does not
|
|||
|
cause incorrect operation of the transfer (the file will
|
|||
|
always be transferred correctly if the transfer completes),
|
|||
|
this bug may cause excessive retransmission, which may cause
|
|||
|
the transfer to time out.
|
|||
|
|
|||
|
Implementations MUST contain the fix for this problem: the
|
|||
|
sender (i.e., the side originating the DATA packets) must
|
|||
|
never resend the current DATA packet on receipt of a
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 44]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 FILE TRANSFER -- TFTP October 1989
|
|||
|
|
|||
|
|
|||
|
duplicate ACK.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
The bug is caused by the protocol rule that either
|
|||
|
side, on receiving an old duplicate datagram, may
|
|||
|
resend the current datagram. If a packet is delayed in
|
|||
|
the network but later successfully delivered after
|
|||
|
either side has timed out and retransmitted a packet, a
|
|||
|
duplicate copy of the response may be generated. If
|
|||
|
the other side responds to this duplicate with a
|
|||
|
duplicate of its own, then every datagram will be sent
|
|||
|
in duplicate for the remainder of the transfer (unless
|
|||
|
a datagram is lost, breaking the repetition). Worse
|
|||
|
yet, since the delay is often caused by congestion,
|
|||
|
this duplicate transmission will usually causes more
|
|||
|
congestion, leading to more delayed packets, etc.
|
|||
|
|
|||
|
The following example may help to clarify this problem.
|
|||
|
|
|||
|
TFTP A TFTP B
|
|||
|
|
|||
|
(1) Receive ACK X-1
|
|||
|
Send DATA X
|
|||
|
(2) Receive DATA X
|
|||
|
Send ACK X
|
|||
|
(ACK X is delayed in network,
|
|||
|
and A times out):
|
|||
|
(3) Retransmit DATA X
|
|||
|
|
|||
|
(4) Receive DATA X again
|
|||
|
Send ACK X again
|
|||
|
(5) Receive (delayed) ACK X
|
|||
|
Send DATA X+1
|
|||
|
(6) Receive DATA X+1
|
|||
|
Send ACK X+1
|
|||
|
(7) Receive ACK X again
|
|||
|
Send DATA X+1 again
|
|||
|
(8) Receive DATA X+1 again
|
|||
|
Send ACK X+1 again
|
|||
|
(9) Receive ACK X+1
|
|||
|
Send DATA X+2
|
|||
|
(10) Receive DATA X+2
|
|||
|
Send ACK X+3
|
|||
|
(11) Receive ACK X+1 again
|
|||
|
Send DATA X+2 again
|
|||
|
(12) Receive DATA X+2 again
|
|||
|
Send ACK X+3 again
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 45]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 FILE TRANSFER -- TFTP October 1989
|
|||
|
|
|||
|
|
|||
|
Notice that once the delayed ACK arrives, the protocol
|
|||
|
settles down to duplicate all further packets
|
|||
|
(sequences 5-8 and 9-12). The problem is caused not by
|
|||
|
either side timing out, but by both sides
|
|||
|
retransmitting the current packet when they receive a
|
|||
|
duplicate.
|
|||
|
|
|||
|
The fix is to break the retransmission loop, as
|
|||
|
indicated above. This is analogous to the behavior of
|
|||
|
TCP. It is then possible to remove the retransmission
|
|||
|
timer on the receiver, since the resent ACK will never
|
|||
|
cause any action; this is a useful simplification where
|
|||
|
TFTP is used in a bootstrap program. It is OK to allow
|
|||
|
the timer to remain, and it may be helpful if the
|
|||
|
retransmitted ACK replaces one that was genuinely lost
|
|||
|
in the network. The sender still requires a retransmit
|
|||
|
timer, of course.
|
|||
|
|
|||
|
4.2.3.2 Timeout Algorithms
|
|||
|
|
|||
|
A TFTP implementation MUST use an adaptive timeout.
|
|||
|
|
|||
|
IMPLEMENTATION:
|
|||
|
TCP retransmission algorithms provide a useful base to
|
|||
|
work from. At least an exponential backoff of
|
|||
|
retransmission timeout is necessary.
|
|||
|
|
|||
|
4.2.3.3 Extensions
|
|||
|
|
|||
|
A variety of non-standard extensions have been made to TFTP,
|
|||
|
including additional transfer modes and a secure operation
|
|||
|
mode (with passwords). None of these have been
|
|||
|
standardized.
|
|||
|
|
|||
|
4.2.3.4 Access Control
|
|||
|
|
|||
|
A server TFTP implementation SHOULD include some
|
|||
|
configurable access control over what pathnames are allowed
|
|||
|
in TFTP operations.
|
|||
|
|
|||
|
4.2.3.5 Broadcast Request
|
|||
|
|
|||
|
A TFTP request directed to a broadcast address SHOULD be
|
|||
|
silently ignored.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
Due to the weak access control capability of TFTP,
|
|||
|
directed broadcasts of TFTP requests to random networks
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 46]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 FILE TRANSFER -- TFTP October 1989
|
|||
|
|
|||
|
|
|||
|
could create a significant security hole.
|
|||
|
|
|||
|
4.2.4 TFTP REQUIREMENTS SUMMARY
|
|||
|
|
|||
|
| | | | |S| |
|
|||
|
| | | | |H| |F
|
|||
|
| | | | |O|M|o
|
|||
|
| | |S| |U|U|o
|
|||
|
| | |H| |L|S|t
|
|||
|
| |M|O| |D|T|n
|
|||
|
| |U|U|M| | |o
|
|||
|
| |S|L|A|N|N|t
|
|||
|
| |T|D|Y|O|O|t
|
|||
|
FEATURE |SECTION | | | |T|T|e
|
|||
|
-------------------------------------------------|--------|-|-|-|-|-|--
|
|||
|
Fix Sorcerer's Apprentice Syndrome |4.2.3.1 |x| | | | |
|
|||
|
Transfer modes: | | | | | | |
|
|||
|
netascii |RFC-783 |x| | | | |
|
|||
|
octet |RFC-783 |x| | | | |
|
|||
|
mail |4.2.2.1 | | | |x| |
|
|||
|
extensions |4.2.3.3 | | |x| | |
|
|||
|
Use adaptive timeout |4.2.3.2 |x| | | | |
|
|||
|
Configurable access control |4.2.3.4 | |x| | | |
|
|||
|
Silently ignore broadcast request |4.2.3.5 | |x| | | |
|
|||
|
-------------------------------------------------|--------|-|-|-|-|-|--
|
|||
|
-------------------------------------------------|--------|-|-|-|-|-|--
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 47]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 MAIL -- SMTP & RFC-822 October 1989
|
|||
|
|
|||
|
|
|||
|
5. ELECTRONIC MAIL -- SMTP and RFC-822
|
|||
|
|
|||
|
5.1 INTRODUCTION
|
|||
|
|
|||
|
In the TCP/IP protocol suite, electronic mail in a format
|
|||
|
specified in RFC-822 [SMTP:2] is transmitted using the Simple Mail
|
|||
|
Transfer Protocol (SMTP) defined in RFC-821 [SMTP:1].
|
|||
|
|
|||
|
While SMTP has remained unchanged over the years, the Internet
|
|||
|
community has made several changes in the way SMTP is used. In
|
|||
|
particular, the conversion to the Domain Name System (DNS) has
|
|||
|
caused changes in address formats and in mail routing. In this
|
|||
|
section, we assume familiarity with the concepts and terminology
|
|||
|
of the DNS, whose requirements are given in Section 6.1.
|
|||
|
|
|||
|
RFC-822 specifies the Internet standard format for electronic mail
|
|||
|
messages. RFC-822 supercedes an older standard, RFC-733, that may
|
|||
|
still be in use in a few places, although it is obsolete. The two
|
|||
|
formats are sometimes referred to simply by number ("822" and
|
|||
|
"733").
|
|||
|
|
|||
|
RFC-822 is used in some non-Internet mail environments with
|
|||
|
different mail transfer protocols than SMTP, and SMTP has also
|
|||
|
been adapted for use in some non-Internet environments. Note that
|
|||
|
this document presents the rules for the use of SMTP and RFC-822
|
|||
|
for the Internet environment only; other mail environments that
|
|||
|
use these protocols may be expected to have their own rules.
|
|||
|
|
|||
|
5.2 PROTOCOL WALK-THROUGH
|
|||
|
|
|||
|
This section covers both RFC-821 and RFC-822.
|
|||
|
|
|||
|
The SMTP specification in RFC-821 is clear and contains numerous
|
|||
|
examples, so implementors should not find it difficult to
|
|||
|
understand. This section simply updates or annotates portions of
|
|||
|
RFC-821 to conform with current usage.
|
|||
|
|
|||
|
RFC-822 is a long and dense document, defining a rich syntax.
|
|||
|
Unfortunately, incomplete or defective implementations of RFC-822
|
|||
|
are common. In fact, nearly all of the many formats of RFC-822
|
|||
|
are actually used, so an implementation generally needs to
|
|||
|
recognize and correctly interpret all of the RFC-822 syntax.
|
|||
|
|
|||
|
5.2.1 The SMTP Model: RFC-821 Section 2
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
Mail is sent by a series of request/response transactions
|
|||
|
between a client, the "sender-SMTP," and a server, the
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 48]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 MAIL -- SMTP & RFC-822 October 1989
|
|||
|
|
|||
|
|
|||
|
"receiver-SMTP". These transactions pass (1) the message
|
|||
|
proper, which is composed of header and body, and (2) SMTP
|
|||
|
source and destination addresses, referred to as the
|
|||
|
"envelope".
|
|||
|
|
|||
|
The SMTP programs are analogous to Message Transfer Agents
|
|||
|
(MTAs) of X.400. There will be another level of protocol
|
|||
|
software, closer to the end user, that is responsible for
|
|||
|
composing and analyzing RFC-822 message headers; this
|
|||
|
component is known as the "User Agent" in X.400, and we
|
|||
|
use that term in this document. There is a clear logical
|
|||
|
distinction between the User Agent and the SMTP
|
|||
|
implementation, since they operate on different levels of
|
|||
|
protocol. Note, however, that this distinction is may not
|
|||
|
be exactly reflected the structure of typical
|
|||
|
implementations of Internet mail. Often there is a
|
|||
|
program known as the "mailer" that implements SMTP and
|
|||
|
also some of the User Agent functions; the rest of the
|
|||
|
User Agent functions are included in a user interface used
|
|||
|
for entering and reading mail.
|
|||
|
|
|||
|
The SMTP envelope is constructed at the originating site,
|
|||
|
typically by the User Agent when the message is first
|
|||
|
queued for the Sender-SMTP program. The envelope
|
|||
|
addresses may be derived from information in the message
|
|||
|
header, supplied by the user interface (e.g., to implement
|
|||
|
a bcc: request), or derived from local configuration
|
|||
|
information (e.g., expansion of a mailing list). The SMTP
|
|||
|
envelope cannot in general be re-derived from the header
|
|||
|
at a later stage in message delivery, so the envelope is
|
|||
|
transmitted separately from the message itself using the
|
|||
|
MAIL and RCPT commands of SMTP.
|
|||
|
|
|||
|
The text of RFC-821 suggests that mail is to be delivered
|
|||
|
to an individual user at a host. With the advent of the
|
|||
|
domain system and of mail routing using mail-exchange (MX)
|
|||
|
resource records, implementors should now think of
|
|||
|
delivering mail to a user at a domain, which may or may
|
|||
|
not be a particular host. This DOES NOT change the fact
|
|||
|
that SMTP is a host-to-host mail exchange protocol.
|
|||
|
|
|||
|
5.2.2 Canonicalization: RFC-821 Section 3.1
|
|||
|
|
|||
|
The domain names that a Sender-SMTP sends in MAIL and RCPT
|
|||
|
commands MUST have been "canonicalized," i.e., they must be
|
|||
|
fully-qualified principal names or domain literals, not
|
|||
|
nicknames or domain abbreviations. A canonicalized name either
|
|||
|
identifies a host directly or is an MX name; it cannot be a
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 49]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 MAIL -- SMTP & RFC-822 October 1989
|
|||
|
|
|||
|
|
|||
|
CNAME.
|
|||
|
|
|||
|
5.2.3 VRFY and EXPN Commands: RFC-821 Section 3.3
|
|||
|
|
|||
|
A receiver-SMTP MUST implement VRFY and SHOULD implement EXPN
|
|||
|
(this requirement overrides RFC-821). However, there MAY be
|
|||
|
configuration information to disable VRFY and EXPN in a
|
|||
|
particular installation; this might even allow EXPN to be
|
|||
|
disabled for selected lists.
|
|||
|
|
|||
|
A new reply code is defined for the VRFY command:
|
|||
|
|
|||
|
252 Cannot VRFY user (e.g., info is not local), but will
|
|||
|
take message for this user and attempt delivery.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
SMTP users and administrators make regular use of these
|
|||
|
commands for diagnosing mail delivery problems. With the
|
|||
|
increasing use of multi-level mailing list expansion
|
|||
|
(sometimes more than two levels), EXPN has been
|
|||
|
increasingly important for diagnosing inadvertent mail
|
|||
|
loops. On the other hand, some feel that EXPN represents
|
|||
|
a significant privacy, and perhaps even a security,
|
|||
|
exposure.
|
|||
|
|
|||
|
5.2.4 SEND, SOML, and SAML Commands: RFC-821 Section 3.4
|
|||
|
|
|||
|
An SMTP MAY implement the commands to send a message to a
|
|||
|
user's terminal: SEND, SOML, and SAML.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
It has been suggested that the use of mail relaying
|
|||
|
through an MX record is inconsistent with the intent of
|
|||
|
SEND to deliver a message immediately and directly to a
|
|||
|
user's terminal. However, an SMTP receiver that is unable
|
|||
|
to write directly to the user terminal can return a "251
|
|||
|
User Not Local" reply to the RCPT following a SEND, to
|
|||
|
inform the originator of possibly deferred delivery.
|
|||
|
|
|||
|
5.2.5 HELO Command: RFC-821 Section 3.5
|
|||
|
|
|||
|
The sender-SMTP MUST ensure that the <domain> parameter in a
|
|||
|
HELO command is a valid principal host domain name for the
|
|||
|
client host. As a result, the receiver-SMTP will not have to
|
|||
|
perform MX resolution on this name in order to validate the
|
|||
|
HELO parameter.
|
|||
|
|
|||
|
The HELO receiver MAY verify that the HELO parameter really
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 50]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 MAIL -- SMTP & RFC-822 October 1989
|
|||
|
|
|||
|
|
|||
|
corresponds to the IP address of the sender. However, the
|
|||
|
receiver MUST NOT refuse to accept a message, even if the
|
|||
|
sender's HELO command fails verification.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
Verifying the HELO parameter requires a domain name lookup
|
|||
|
and may therefore take considerable time. An alternative
|
|||
|
tool for tracking bogus mail sources is suggested below
|
|||
|
(see "DATA Command").
|
|||
|
|
|||
|
Note also that the HELO argument is still required to have
|
|||
|
valid <domain> syntax, since it will appear in a Received:
|
|||
|
line; otherwise, a 501 error is to be sent.
|
|||
|
|
|||
|
IMPLEMENTATION:
|
|||
|
When HELO parameter validation fails, a suggested
|
|||
|
procedure is to insert a note about the unknown
|
|||
|
authenticity of the sender into the message header (e.g.,
|
|||
|
in the "Received:" line).
|
|||
|
|
|||
|
5.2.6 Mail Relay: RFC-821 Section 3.6
|
|||
|
|
|||
|
We distinguish three types of mail (store-and-) forwarding:
|
|||
|
|
|||
|
(1) A simple forwarder or "mail exchanger" forwards a message
|
|||
|
using private knowledge about the recipient; see section
|
|||
|
3.2 of RFC-821.
|
|||
|
|
|||
|
(2) An SMTP mail "relay" forwards a message within an SMTP
|
|||
|
mail environment as the result of an explicit source route
|
|||
|
(as defined in section 3.6 of RFC-821). The SMTP relay
|
|||
|
function uses the "@...:" form of source route from RFC-
|
|||
|
822 (see Section 5.2.19 below).
|
|||
|
|
|||
|
(3) A mail "gateway" passes a message between different
|
|||
|
environments. The rules for mail gateways are discussed
|
|||
|
below in Section 5.3.7.
|
|||
|
|
|||
|
An Internet host that is forwarding a message but is not a
|
|||
|
gateway to a different mail environment (i.e., it falls under
|
|||
|
(1) or (2)) SHOULD NOT alter any existing header fields,
|
|||
|
although the host will add an appropriate Received: line as
|
|||
|
required in Section 5.2.8.
|
|||
|
|
|||
|
A Sender-SMTP SHOULD NOT send a RCPT TO: command containing an
|
|||
|
explicit source route using the "@...:" address form. Thus,
|
|||
|
the relay function defined in section 3.6 of RFC-821 should
|
|||
|
not be used.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 51]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 MAIL -- SMTP & RFC-822 October 1989
|
|||
|
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
The intent is to discourage all source routing and to
|
|||
|
abolish explicit source routing for mail delivery within
|
|||
|
the Internet environment. Source-routing is unnecessary;
|
|||
|
the simple target address "user@domain" should always
|
|||
|
suffice. This is the result of an explicit architectural
|
|||
|
decision to use universal naming rather than source
|
|||
|
routing for mail. Thus, SMTP provides end-to-end
|
|||
|
connectivity, and the DNS provides globally-unique,
|
|||
|
location-independent names. MX records handle the major
|
|||
|
case where source routing might otherwise be needed.
|
|||
|
|
|||
|
A receiver-SMTP MUST accept the explicit source route syntax in
|
|||
|
the envelope, but it MAY implement the relay function as
|
|||
|
defined in section 3.6 of RFC-821. If it does not implement
|
|||
|
the relay function, it SHOULD attempt to deliver the message
|
|||
|
directly to the host to the right of the right-most "@" sign.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
For example, suppose a host that does not implement the
|
|||
|
relay function receives a message with the SMTP command:
|
|||
|
"RCPT TO:<@ALPHA,@BETA:joe@GAMMA>", where ALPHA, BETA, and
|
|||
|
GAMMA represent domain names. Rather than immediately
|
|||
|
refusing the message with a 550 error reply as suggested
|
|||
|
on page 20 of RFC-821, the host should try to forward the
|
|||
|
message to GAMMA directly, using: "RCPT TO:<joe@GAMMA>".
|
|||
|
Since this host does not support relaying, it is not
|
|||
|
required to update the reverse path.
|
|||
|
|
|||
|
Some have suggested that source routing may be needed
|
|||
|
occasionally for manually routing mail around failures;
|
|||
|
however, the reality and importance of this need is
|
|||
|
controversial. The use of explicit SMTP mail relaying for
|
|||
|
this purpose is discouraged, and in fact it may not be
|
|||
|
successful, as many host systems do not support it. Some
|
|||
|
have used the "%-hack" (see Section 5.2.16) for this
|
|||
|
purpose.
|
|||
|
|
|||
|
5.2.7 RCPT Command: RFC-821 Section 4.1.1
|
|||
|
|
|||
|
A host that supports a receiver-SMTP MUST support the reserved
|
|||
|
mailbox "Postmaster".
|
|||
|
|
|||
|
The receiver-SMTP MAY verify RCPT parameters as they arrive;
|
|||
|
however, RCPT responses MUST NOT be delayed beyond a reasonable
|
|||
|
time (see Section 5.3.2).
|
|||
|
|
|||
|
Therefore, a "250 OK" response to a RCPT does not necessarily
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 52]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 MAIL -- SMTP & RFC-822 October 1989
|
|||
|
|
|||
|
|
|||
|
imply that the delivery address(es) are valid. Errors found
|
|||
|
after message acceptance will be reported by mailing a
|
|||
|
notification message to an appropriate address (see Section
|
|||
|
5.3.3).
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
The set of conditions under which a RCPT parameter can be
|
|||
|
validated immediately is an engineering design choice.
|
|||
|
Reporting destination mailbox errors to the Sender-SMTP
|
|||
|
before mail is transferred is generally desirable to save
|
|||
|
time and network bandwidth, but this advantage is lost if
|
|||
|
RCPT verification is lengthy.
|
|||
|
|
|||
|
For example, the receiver can verify immediately any
|
|||
|
simple local reference, such as a single locally-
|
|||
|
registered mailbox. On the other hand, the "reasonable
|
|||
|
time" limitation generally implies deferring verification
|
|||
|
of a mailing list until after the message has been
|
|||
|
transferred and accepted, since verifying a large mailing
|
|||
|
list can take a very long time. An implementation might
|
|||
|
or might not choose to defer validation of addresses that
|
|||
|
are non-local and therefore require a DNS lookup. If a
|
|||
|
DNS lookup is performed but a soft domain system error
|
|||
|
(e.g., timeout) occurs, validity must be assumed.
|
|||
|
|
|||
|
5.2.8 DATA Command: RFC-821 Section 4.1.1
|
|||
|
|
|||
|
Every receiver-SMTP (not just one that "accepts a message for
|
|||
|
relaying or for final delivery" [SMTP:1]) MUST insert a
|
|||
|
"Received:" line at the beginning of a message. In this line,
|
|||
|
called a "time stamp line" in RFC-821:
|
|||
|
|
|||
|
* The FROM field SHOULD contain both (1) the name of the
|
|||
|
source host as presented in the HELO command and (2) a
|
|||
|
domain literal containing the IP address of the source,
|
|||
|
determined from the TCP connection.
|
|||
|
|
|||
|
* The ID field MAY contain an "@" as suggested in RFC-822,
|
|||
|
but this is not required.
|
|||
|
|
|||
|
* The FOR field MAY contain a list of <path> entries when
|
|||
|
multiple RCPT commands have been given.
|
|||
|
|
|||
|
|
|||
|
An Internet mail program MUST NOT change a Received: line that
|
|||
|
was previously added to the message header.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 53]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 MAIL -- SMTP & RFC-822 October 1989
|
|||
|
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
Including both the source host and the IP source address
|
|||
|
in the Received: line may provide enough information for
|
|||
|
tracking illicit mail sources and eliminate a need to
|
|||
|
explicitly verify the HELO parameter.
|
|||
|
|
|||
|
Received: lines are primarily intended for humans tracing
|
|||
|
mail routes, primarily of diagnosis of faults. See also
|
|||
|
the discussion under 5.3.7.
|
|||
|
|
|||
|
When the receiver-SMTP makes "final delivery" of a message,
|
|||
|
then it MUST pass the MAIL FROM: address from the SMTP envelope
|
|||
|
with the message, for use if an error notification message must
|
|||
|
be sent later (see Section 5.3.3). There is an analogous
|
|||
|
requirement when gatewaying from the Internet into a different
|
|||
|
mail environment; see Section 5.3.7.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
Note that the final reply to the DATA command depends only
|
|||
|
upon the successful transfer and storage of the message.
|
|||
|
Any problem with the destination address(es) must either
|
|||
|
(1) have been reported in an SMTP error reply to the RCPT
|
|||
|
command(s), or (2) be reported in a later error message
|
|||
|
mailed to the originator.
|
|||
|
|
|||
|
IMPLEMENTATION:
|
|||
|
The MAIL FROM: information may be passed as a parameter or
|
|||
|
in a Return-Path: line inserted at the beginning of the
|
|||
|
message.
|
|||
|
|
|||
|
5.2.9 Command Syntax: RFC-821 Section 4.1.2
|
|||
|
|
|||
|
The syntax shown in RFC-821 for the MAIL FROM: command omits
|
|||
|
the case of an empty path: "MAIL FROM: <>" (see RFC-821 Page
|
|||
|
15). An empty reverse path MUST be supported.
|
|||
|
|
|||
|
5.2.10 SMTP Replies: RFC-821 Section 4.2
|
|||
|
|
|||
|
A receiver-SMTP SHOULD send only the reply codes listed in
|
|||
|
section 4.2.2 of RFC-821 or in this document. A receiver-SMTP
|
|||
|
SHOULD use the text shown in examples in RFC-821 whenever
|
|||
|
appropriate.
|
|||
|
|
|||
|
A sender-SMTP MUST determine its actions only by the reply
|
|||
|
code, not by the text (except for 251 and 551 replies); any
|
|||
|
text, including no text at all, must be acceptable. The space
|
|||
|
(blank) following the reply code is considered part of the
|
|||
|
text. Whenever possible, a sender-SMTP SHOULD test only the
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 54]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 MAIL -- SMTP & RFC-822 October 1989
|
|||
|
|
|||
|
|
|||
|
first digit of the reply code, as specified in Appendix E of
|
|||
|
RFC-821.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
Interoperability problems have arisen with SMTP systems
|
|||
|
using reply codes that are not listed explicitly in RFC-
|
|||
|
821 Section 4.3 but are legal according to the theory of
|
|||
|
reply codes explained in Appendix E.
|
|||
|
|
|||
|
5.2.11 Transparency: RFC-821 Section 4.5.2
|
|||
|
|
|||
|
Implementors MUST be sure that their mail systems always add
|
|||
|
and delete periods to ensure message transparency.
|
|||
|
|
|||
|
5.2.12 WKS Use in MX Processing: RFC-974, p. 5
|
|||
|
|
|||
|
RFC-974 [SMTP:3] recommended that the domain system be queried
|
|||
|
for WKS ("Well-Known Service") records, to verify that each
|
|||
|
proposed mail target does support SMTP. Later experience has
|
|||
|
shown that WKS is not widely supported, so the WKS step in MX
|
|||
|
processing SHOULD NOT be used.
|
|||
|
|
|||
|
The following are notes on RFC-822, organized by section of that
|
|||
|
document.
|
|||
|
|
|||
|
5.2.13 RFC-822 Message Specification: RFC-822 Section 4
|
|||
|
|
|||
|
The syntax shown for the Return-path line omits the possibility
|
|||
|
of a null return path, which is used to prevent looping of
|
|||
|
error notifications (see Section 5.3.3). The complete syntax
|
|||
|
is:
|
|||
|
|
|||
|
return = "Return-path" ":" route-addr
|
|||
|
/ "Return-path" ":" "<" ">"
|
|||
|
|
|||
|
The set of optional header fields is hereby expanded to include
|
|||
|
the Content-Type field defined in RFC-1049 [SMTP:7]. This
|
|||
|
field "allows mail reading systems to automatically identify
|
|||
|
the type of a structured message body and to process it for
|
|||
|
display accordingly". [SMTP:7] A User Agent MAY support this
|
|||
|
field.
|
|||
|
|
|||
|
5.2.14 RFC-822 Date and Time Specification: RFC-822 Section 5
|
|||
|
|
|||
|
The syntax for the date is hereby changed to:
|
|||
|
|
|||
|
date = 1*2DIGIT month 2*4DIGIT
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 55]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 MAIL -- SMTP & RFC-822 October 1989
|
|||
|
|
|||
|
|
|||
|
All mail software SHOULD use 4-digit years in dates, to ease
|
|||
|
the transition to the next century.
|
|||
|
|
|||
|
There is a strong trend towards the use of numeric timezone
|
|||
|
indicators, and implementations SHOULD use numeric timezones
|
|||
|
instead of timezone names. However, all implementations MUST
|
|||
|
accept either notation. If timezone names are used, they MUST
|
|||
|
be exactly as defined in RFC-822.
|
|||
|
|
|||
|
The military time zones are specified incorrectly in RFC-822:
|
|||
|
they count the wrong way from UT (the signs are reversed). As
|
|||
|
a result, military time zones in RFC-822 headers carry no
|
|||
|
information.
|
|||
|
|
|||
|
Finally, note that there is a typo in the definition of "zone"
|
|||
|
in the syntax summary of appendix D; the correct definition
|
|||
|
occurs in Section 3 of RFC-822.
|
|||
|
|
|||
|
5.2.15 RFC-822 Syntax Change: RFC-822 Section 6.1
|
|||
|
|
|||
|
The syntactic definition of "mailbox" in RFC-822 is hereby
|
|||
|
changed to:
|
|||
|
|
|||
|
mailbox = addr-spec ; simple address
|
|||
|
/ [phrase] route-addr ; name & addr-spec
|
|||
|
|
|||
|
That is, the phrase preceding a route address is now OPTIONAL.
|
|||
|
This change makes the following header field legal, for
|
|||
|
example:
|
|||
|
|
|||
|
From: <craig@nnsc.nsf.net>
|
|||
|
|
|||
|
5.2.16 RFC-822 Local-part: RFC-822 Section 6.2
|
|||
|
|
|||
|
The basic mailbox address specification has the form: "local-
|
|||
|
part@domain". Here "local-part", sometimes called the "left-
|
|||
|
hand side" of the address, is domain-dependent.
|
|||
|
|
|||
|
A host that is forwarding the message but is not the
|
|||
|
destination host implied by the right-hand side "domain" MUST
|
|||
|
NOT interpret or modify the "local-part" of the address.
|
|||
|
|
|||
|
When mail is to be gatewayed from the Internet mail environment
|
|||
|
into a foreign mail environment (see Section 5.3.7), routing
|
|||
|
information for that foreign environment MAY be embedded within
|
|||
|
the "local-part" of the address. The gateway will then
|
|||
|
interpret this local part appropriately for the foreign mail
|
|||
|
environment.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 56]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 MAIL -- SMTP & RFC-822 October 1989
|
|||
|
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
Although source routes are discouraged within the Internet
|
|||
|
(see Section 5.2.6), there are non-Internet mail
|
|||
|
environments whose delivery mechanisms do depend upon
|
|||
|
source routes. Source routes for extra-Internet
|
|||
|
environments can generally be buried in the "local-part"
|
|||
|
of the address (see Section 5.2.16) while mail traverses
|
|||
|
the Internet. When the mail reaches the appropriate
|
|||
|
Internet mail gateway, the gateway will interpret the
|
|||
|
local-part and build the necessary address or route for
|
|||
|
the target mail environment.
|
|||
|
|
|||
|
For example, an Internet host might send mail to:
|
|||
|
"a!b!c!user@gateway-domain". The complex local part
|
|||
|
"a!b!c!user" would be uninterpreted within the Internet
|
|||
|
domain, but could be parsed and understood by the
|
|||
|
specified mail gateway.
|
|||
|
|
|||
|
An embedded source route is sometimes encoded in the
|
|||
|
"local-part" using "%" as a right-binding routing
|
|||
|
operator. For example, in:
|
|||
|
|
|||
|
user%domain%relay3%relay2@relay1
|
|||
|
|
|||
|
the "%" convention implies that the mail is to be routed
|
|||
|
from "relay1" through "relay2", "relay3", and finally to
|
|||
|
"user" at "domain". This is commonly known as the "%-
|
|||
|
hack". It is suggested that "%" have lower precedence
|
|||
|
than any other routing operator (e.g., "!") hidden in the
|
|||
|
local-part; for example, "a!b%c" would be interpreted as
|
|||
|
"(a!b)%c".
|
|||
|
|
|||
|
Only the target host (in this case, "relay1") is permitted
|
|||
|
to analyze the local-part "user%domain%relay3%relay2".
|
|||
|
|
|||
|
5.2.17 Domain Literals: RFC-822 Section 6.2.3
|
|||
|
|
|||
|
A mailer MUST be able to accept and parse an Internet domain
|
|||
|
literal whose content ("dtext"; see RFC-822) is a dotted-
|
|||
|
decimal host address. This satisfies the requirement of
|
|||
|
Section 2.1 for the case of mail.
|
|||
|
|
|||
|
An SMTP MUST accept and recognize a domain literal for any of
|
|||
|
its own IP addresses.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 57]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 MAIL -- SMTP & RFC-822 October 1989
|
|||
|
|
|||
|
|
|||
|
5.2.18 Common Address Formatting Errors: RFC-822 Section 6.1
|
|||
|
|
|||
|
Errors in formatting or parsing 822 addresses are unfortunately
|
|||
|
common. This section mentions only the most common errors. A
|
|||
|
User Agent MUST accept all valid RFC-822 address formats, and
|
|||
|
MUST NOT generate illegal address syntax.
|
|||
|
|
|||
|
o A common error is to leave out the semicolon after a group
|
|||
|
identifier.
|
|||
|
|
|||
|
o Some systems fail to fully-qualify domain names in
|
|||
|
messages they generate. The right-hand side of an "@"
|
|||
|
sign in a header address field MUST be a fully-qualified
|
|||
|
domain name.
|
|||
|
|
|||
|
For example, some systems fail to fully-qualify the From:
|
|||
|
address; this prevents a "reply" command in the user
|
|||
|
interface from automatically constructing a return
|
|||
|
address.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
Although RFC-822 allows the local use of abbreviated
|
|||
|
domain names within a domain, the application of
|
|||
|
RFC-822 in Internet mail does not allow this. The
|
|||
|
intent is that an Internet host must not send an SMTP
|
|||
|
message header containing an abbreviated domain name
|
|||
|
in an address field. This allows the address fields
|
|||
|
of the header to be passed without alteration across
|
|||
|
the Internet, as required in Section 5.2.6.
|
|||
|
|
|||
|
o Some systems mis-parse multiple-hop explicit source routes
|
|||
|
such as:
|
|||
|
|
|||
|
@relay1,@relay2,@relay3:user@domain.
|
|||
|
|
|||
|
|
|||
|
o Some systems over-qualify domain names by adding a
|
|||
|
trailing dot to some or all domain names in addresses or
|
|||
|
message-ids. This violates RFC-822 syntax.
|
|||
|
|
|||
|
|
|||
|
5.2.19 Explicit Source Routes: RFC-822 Section 6.2.7
|
|||
|
|
|||
|
Internet host software SHOULD NOT create an RFC-822 header
|
|||
|
containing an address with an explicit source route, but MUST
|
|||
|
accept such headers for compatibility with earlier systems.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 58]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 MAIL -- SMTP & RFC-822 October 1989
|
|||
|
|
|||
|
|
|||
|
In an understatement, RFC-822 says "The use of explicit
|
|||
|
source routing is discouraged". Many hosts implemented
|
|||
|
RFC-822 source routes incorrectly, so the syntax cannot be
|
|||
|
used unambiguously in practice. Many users feel the
|
|||
|
syntax is ugly. Explicit source routes are not needed in
|
|||
|
the mail envelope for delivery; see Section 5.2.6. For
|
|||
|
all these reasons, explicit source routes using the RFC-
|
|||
|
822 notations are not to be used in Internet mail headers.
|
|||
|
|
|||
|
As stated in Section 5.2.16, it is necessary to allow an
|
|||
|
explicit source route to be buried in the local-part of an
|
|||
|
address, e.g., using the "%-hack", in order to allow mail
|
|||
|
to be gatewayed into another environment in which explicit
|
|||
|
source routing is necessary. The vigilant will observe
|
|||
|
that there is no way for a User Agent to detect and
|
|||
|
prevent the use of such implicit source routing when the
|
|||
|
destination is within the Internet. We can only
|
|||
|
discourage source routing of any kind within the Internet,
|
|||
|
as unnecessary and undesirable.
|
|||
|
|
|||
|
5.3 SPECIFIC ISSUES
|
|||
|
|
|||
|
5.3.1 SMTP Queueing Strategies
|
|||
|
|
|||
|
The common structure of a host SMTP implementation includes
|
|||
|
user mailboxes, one or more areas for queueing messages in
|
|||
|
transit, and one or more daemon processes for sending and
|
|||
|
receiving mail. The exact structure will vary depending on the
|
|||
|
needs of the users on the host and the number and size of
|
|||
|
mailing lists supported by the host. We describe several
|
|||
|
optimizations that have proved helpful, particularly for
|
|||
|
mailers supporting high traffic levels.
|
|||
|
|
|||
|
Any queueing strategy MUST include:
|
|||
|
|
|||
|
o Timeouts on all activities. See Section 5.3.2.
|
|||
|
|
|||
|
o Never sending error messages in response to error
|
|||
|
messages.
|
|||
|
|
|||
|
|
|||
|
5.3.1.1 Sending Strategy
|
|||
|
|
|||
|
The general model of a sender-SMTP is one or more processes
|
|||
|
that periodically attempt to transmit outgoing mail. In a
|
|||
|
typical system, the program that composes a message has some
|
|||
|
method for requesting immediate attention for a new piece of
|
|||
|
outgoing mail, while mail that cannot be transmitted
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 59]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 MAIL -- SMTP & RFC-822 October 1989
|
|||
|
|
|||
|
|
|||
|
immediately MUST be queued and periodically retried by the
|
|||
|
sender. A mail queue entry will include not only the
|
|||
|
message itself but also the envelope information.
|
|||
|
|
|||
|
The sender MUST delay retrying a particular destination
|
|||
|
after one attempt has failed. In general, the retry
|
|||
|
interval SHOULD be at least 30 minutes; however, more
|
|||
|
sophisticated and variable strategies will be beneficial
|
|||
|
when the sender-SMTP can determine the reason for non-
|
|||
|
delivery.
|
|||
|
|
|||
|
Retries continue until the message is transmitted or the
|
|||
|
sender gives up; the give-up time generally needs to be at
|
|||
|
least 4-5 days. The parameters to the retry algorithm MUST
|
|||
|
be configurable.
|
|||
|
|
|||
|
A sender SHOULD keep a list of hosts it cannot reach and
|
|||
|
corresponding timeouts, rather than just retrying queued
|
|||
|
mail items.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
Experience suggests that failures are typically
|
|||
|
transient (the target system has crashed), favoring a
|
|||
|
policy of two connection attempts in the first hour the
|
|||
|
message is in the queue, and then backing off to once
|
|||
|
every two or three hours.
|
|||
|
|
|||
|
The sender-SMTP can shorten the queueing delay by
|
|||
|
cooperation with the receiver-SMTP. In particular, if
|
|||
|
mail is received from a particular address, it is good
|
|||
|
evidence that any mail queued for that host can now be
|
|||
|
sent.
|
|||
|
|
|||
|
The strategy may be further modified as a result of
|
|||
|
multiple addresses per host (see Section 5.3.4), to
|
|||
|
optimize delivery time vs. resource usage.
|
|||
|
|
|||
|
A sender-SMTP may have a large queue of messages for
|
|||
|
each unavailable destination host, and if it retried
|
|||
|
all these messages in every retry cycle, there would be
|
|||
|
excessive Internet overhead and the daemon would be
|
|||
|
blocked for a long period. Note that an SMTP can
|
|||
|
generally determine that a delivery attempt has failed
|
|||
|
only after a timeout of a minute or more; a one minute
|
|||
|
timeout per connection will result in a very large
|
|||
|
delay if it is repeated for dozens or even hundreds of
|
|||
|
queued messages.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 60]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 MAIL -- SMTP & RFC-822 October 1989
|
|||
|
|
|||
|
|
|||
|
When the same message is to be delivered to several users on
|
|||
|
the same host, only one copy of the message SHOULD be
|
|||
|
transmitted. That is, the sender-SMTP should use the
|
|||
|
command sequence: RCPT, RCPT,... RCPT, DATA instead of the
|
|||
|
sequence: RCPT, DATA, RCPT, DATA,... RCPT, DATA.
|
|||
|
Implementation of this efficiency feature is strongly urged.
|
|||
|
|
|||
|
Similarly, the sender-SMTP MAY support multiple concurrent
|
|||
|
outgoing mail transactions to achieve timely delivery.
|
|||
|
However, some limit SHOULD be imposed to protect the host
|
|||
|
from devoting all its resources to mail.
|
|||
|
|
|||
|
The use of the different addresses of a multihomed host is
|
|||
|
discussed below.
|
|||
|
|
|||
|
5.3.1.2 Receiving strategy
|
|||
|
|
|||
|
The receiver-SMTP SHOULD attempt to keep a pending listen on
|
|||
|
the SMTP port at all times. This will require the support
|
|||
|
of multiple incoming TCP connections for SMTP. Some limit
|
|||
|
MAY be imposed.
|
|||
|
|
|||
|
IMPLEMENTATION:
|
|||
|
When the receiver-SMTP receives mail from a particular
|
|||
|
host address, it could notify the sender-SMTP to retry
|
|||
|
any mail pending for that host address.
|
|||
|
|
|||
|
5.3.2 Timeouts in SMTP
|
|||
|
|
|||
|
There are two approaches to timeouts in the sender-SMTP: (a)
|
|||
|
limit the time for each SMTP command separately, or (b) limit
|
|||
|
the time for the entire SMTP dialogue for a single mail
|
|||
|
message. A sender-SMTP SHOULD use option (a), per-command
|
|||
|
timeouts. Timeouts SHOULD be easily reconfigurable, preferably
|
|||
|
without recompiling the SMTP code.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
Timeouts are an essential feature of an SMTP
|
|||
|
implementation. If the timeouts are too long (or worse,
|
|||
|
there are no timeouts), Internet communication failures or
|
|||
|
software bugs in receiver-SMTP programs can tie up SMTP
|
|||
|
processes indefinitely. If the timeouts are too short,
|
|||
|
resources will be wasted with attempts that time out part
|
|||
|
way through message delivery.
|
|||
|
|
|||
|
If option (b) is used, the timeout has to be very large,
|
|||
|
e.g., an hour, to allow time to expand very large mailing
|
|||
|
lists. The timeout may also need to increase linearly
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 61]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 MAIL -- SMTP & RFC-822 October 1989
|
|||
|
|
|||
|
|
|||
|
with the size of the message, to account for the time to
|
|||
|
transmit a very large message. A large fixed timeout
|
|||
|
leads to two problems: a failure can still tie up the
|
|||
|
sender for a very long time, and very large messages may
|
|||
|
still spuriously time out (which is a wasteful failure!).
|
|||
|
|
|||
|
Using the recommended option (a), a timer is set for each
|
|||
|
SMTP command and for each buffer of the data transfer.
|
|||
|
The latter means that the overall timeout is inherently
|
|||
|
proportional to the size of the message.
|
|||
|
|
|||
|
Based on extensive experience with busy mail-relay hosts, the
|
|||
|
minimum per-command timeout values SHOULD be as follows:
|
|||
|
|
|||
|
o Initial 220 Message: 5 minutes
|
|||
|
|
|||
|
A Sender-SMTP process needs to distinguish between a
|
|||
|
failed TCP connection and a delay in receiving the initial
|
|||
|
220 greeting message. Many receiver-SMTPs will accept a
|
|||
|
TCP connection but delay delivery of the 220 message until
|
|||
|
their system load will permit more mail to be processed.
|
|||
|
|
|||
|
o MAIL Command: 5 minutes
|
|||
|
|
|||
|
|
|||
|
o RCPT Command: 5 minutes
|
|||
|
|
|||
|
A longer timeout would be required if processing of
|
|||
|
mailing lists and aliases were not deferred until after
|
|||
|
the message was accepted.
|
|||
|
|
|||
|
o DATA Initiation: 2 minutes
|
|||
|
|
|||
|
This is while awaiting the "354 Start Input" reply to a
|
|||
|
DATA command.
|
|||
|
|
|||
|
o Data Block: 3 minutes
|
|||
|
|
|||
|
This is while awaiting the completion of each TCP SEND
|
|||
|
call transmitting a chunk of data.
|
|||
|
|
|||
|
o DATA Termination: 10 minutes.
|
|||
|
|
|||
|
This is while awaiting the "250 OK" reply. When the
|
|||
|
receiver gets the final period terminating the message
|
|||
|
data, it typically performs processing to deliver the
|
|||
|
message to a user mailbox. A spurious timeout at this
|
|||
|
point would be very wasteful, since the message has been
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 62]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 MAIL -- SMTP & RFC-822 October 1989
|
|||
|
|
|||
|
|
|||
|
successfully sent.
|
|||
|
|
|||
|
A receiver-SMTP SHOULD have a timeout of at least 5 minutes
|
|||
|
while it is awaiting the next command from the sender.
|
|||
|
|
|||
|
5.3.3 Reliable Mail Receipt
|
|||
|
|
|||
|
When the receiver-SMTP accepts a piece of mail (by sending a
|
|||
|
"250 OK" message in response to DATA), it is accepting
|
|||
|
responsibility for delivering or relaying the message. It must
|
|||
|
take this responsibility seriously, i.e., it MUST NOT lose the
|
|||
|
message for frivolous reasons, e.g., because the host later
|
|||
|
crashes or because of a predictable resource shortage.
|
|||
|
|
|||
|
If there is a delivery failure after acceptance of a message,
|
|||
|
the receiver-SMTP MUST formulate and mail a notification
|
|||
|
message. This notification MUST be sent using a null ("<>")
|
|||
|
reverse path in the envelope; see Section 3.6 of RFC-821. The
|
|||
|
recipient of this notification SHOULD be the address from the
|
|||
|
envelope return path (or the Return-Path: line). However, if
|
|||
|
this address is null ("<>"), the receiver-SMTP MUST NOT send a
|
|||
|
notification. If the address is an explicit source route, it
|
|||
|
SHOULD be stripped down to its final hop.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
For example, suppose that an error notification must be
|
|||
|
sent for a message that arrived with:
|
|||
|
"MAIL FROM:<@a,@b:user@d>". The notification message
|
|||
|
should be sent to: "RCPT TO:<user@d>".
|
|||
|
|
|||
|
Some delivery failures after the message is accepted by
|
|||
|
SMTP will be unavoidable. For example, it may be
|
|||
|
impossible for the receiver-SMTP to validate all the
|
|||
|
delivery addresses in RCPT command(s) due to a "soft"
|
|||
|
domain system error or because the target is a mailing
|
|||
|
list (see earlier discussion of RCPT).
|
|||
|
|
|||
|
To avoid receiving duplicate messages as the result of
|
|||
|
timeouts, a receiver-SMTP MUST seek to minimize the time
|
|||
|
required to respond to the final "." that ends a message
|
|||
|
transfer. See RFC-1047 [SMTP:4] for a discussion of this
|
|||
|
problem.
|
|||
|
|
|||
|
5.3.4 Reliable Mail Transmission
|
|||
|
|
|||
|
To transmit a message, a sender-SMTP determines the IP address
|
|||
|
of the target host from the destination address in the
|
|||
|
envelope. Specifically, it maps the string to the right of the
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 63]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 MAIL -- SMTP & RFC-822 October 1989
|
|||
|
|
|||
|
|
|||
|
"@" sign into an IP address. This mapping or the transfer
|
|||
|
itself may fail with a soft error, in which case the sender-
|
|||
|
SMTP will requeue the outgoing mail for a later retry, as
|
|||
|
required in Section 5.3.1.1.
|
|||
|
|
|||
|
When it succeeds, the mapping can result in a list of
|
|||
|
alternative delivery addresses rather than a single address,
|
|||
|
because of (a) multiple MX records, (b) multihoming, or both.
|
|||
|
To provide reliable mail transmission, the sender-SMTP MUST be
|
|||
|
able to try (and retry) each of the addresses in this list in
|
|||
|
order, until a delivery attempt succeeds. However, there MAY
|
|||
|
also be a configurable limit on the number of alternate
|
|||
|
addresses that can be tried. In any case, a host SHOULD try at
|
|||
|
least two addresses.
|
|||
|
|
|||
|
The following information is to be used to rank the host
|
|||
|
addresses:
|
|||
|
|
|||
|
(1) Multiple MX Records -- these contain a preference
|
|||
|
indication that should be used in sorting. If there are
|
|||
|
multiple destinations with the same preference and there
|
|||
|
is no clear reason to favor one (e.g., by address
|
|||
|
preference), then the sender-SMTP SHOULD pick one at
|
|||
|
random to spread the load across multiple mail exchanges
|
|||
|
for a specific organization; note that this is a
|
|||
|
refinement of the procedure in [DNS:3].
|
|||
|
|
|||
|
(2) Multihomed host -- The destination host (perhaps taken
|
|||
|
from the preferred MX record) may be multihomed, in which
|
|||
|
case the domain name resolver will return a list of
|
|||
|
alternative IP addresses. It is the responsibility of the
|
|||
|
domain name resolver interface (see Section 6.1.3.4 below)
|
|||
|
to have ordered this list by decreasing preference, and
|
|||
|
SMTP MUST try them in the order presented.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
Although the capability to try multiple alternative
|
|||
|
addresses is required, there may be circumstances where
|
|||
|
specific installations want to limit or disable the use of
|
|||
|
alternative addresses. The question of whether a sender
|
|||
|
should attempt retries using the different addresses of a
|
|||
|
multihomed host has been controversial. The main argument
|
|||
|
for using the multiple addresses is that it maximizes the
|
|||
|
probability of timely delivery, and indeed sometimes the
|
|||
|
probability of any delivery; the counter argument is that
|
|||
|
it may result in unnecessary resource use.
|
|||
|
|
|||
|
Note that resource use is also strongly determined by the
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 64]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 MAIL -- SMTP & RFC-822 October 1989
|
|||
|
|
|||
|
|
|||
|
sending strategy discussed in Section 5.3.1.
|
|||
|
|
|||
|
5.3.5 Domain Name Support
|
|||
|
|
|||
|
SMTP implementations MUST use the mechanism defined in Section
|
|||
|
6.1 for mapping between domain names and IP addresses. This
|
|||
|
means that every Internet SMTP MUST include support for the
|
|||
|
Internet DNS.
|
|||
|
|
|||
|
In particular, a sender-SMTP MUST support the MX record scheme
|
|||
|
[SMTP:3]. See also Section 7.4 of [DNS:2] for information on
|
|||
|
domain name support for SMTP.
|
|||
|
|
|||
|
5.3.6 Mailing Lists and Aliases
|
|||
|
|
|||
|
An SMTP-capable host SHOULD support both the alias and the list
|
|||
|
form of address expansion for multiple delivery. When a
|
|||
|
message is delivered or forwarded to each address of an
|
|||
|
expanded list form, the return address in the envelope
|
|||
|
("MAIL FROM:") MUST be changed to be the address of a person
|
|||
|
who administers the list, but the message header MUST be left
|
|||
|
unchanged; in particular, the "From" field of the message is
|
|||
|
unaffected.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
An important mail facility is a mechanism for multi-
|
|||
|
destination delivery of a single message, by transforming
|
|||
|
or "expanding" a pseudo-mailbox address into a list of
|
|||
|
destination mailbox addresses. When a message is sent to
|
|||
|
such a pseudo-mailbox (sometimes called an "exploder"),
|
|||
|
copies are forwarded or redistributed to each mailbox in
|
|||
|
the expanded list. We classify such a pseudo-mailbox as
|
|||
|
an "alias" or a "list", depending upon the expansion
|
|||
|
rules:
|
|||
|
|
|||
|
(a) Alias
|
|||
|
|
|||
|
To expand an alias, the recipient mailer simply
|
|||
|
replaces the pseudo-mailbox address in the envelope
|
|||
|
with each of the expanded addresses in turn; the rest
|
|||
|
of the envelope and the message body are left
|
|||
|
unchanged. The message is then delivered or
|
|||
|
forwarded to each expanded address.
|
|||
|
|
|||
|
(b) List
|
|||
|
|
|||
|
A mailing list may be said to operate by
|
|||
|
"redistribution" rather than by "forwarding". To
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 65]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 MAIL -- SMTP & RFC-822 October 1989
|
|||
|
|
|||
|
|
|||
|
expand a list, the recipient mailer replaces the
|
|||
|
pseudo-mailbox address in the envelope with each of
|
|||
|
the expanded addresses in turn. The return address in
|
|||
|
the envelope is changed so that all error messages
|
|||
|
generated by the final deliveries will be returned to
|
|||
|
a list administrator, not to the message originator,
|
|||
|
who generally has no control over the contents of the
|
|||
|
list and will typically find error messages annoying.
|
|||
|
|
|||
|
|
|||
|
5.3.7 Mail Gatewaying
|
|||
|
|
|||
|
Gatewaying mail between different mail environments, i.e.,
|
|||
|
different mail formats and protocols, is complex and does not
|
|||
|
easily yield to standardization. See for example [SMTP:5a],
|
|||
|
[SMTP:5b]. However, some general requirements may be given for
|
|||
|
a gateway between the Internet and another mail environment.
|
|||
|
|
|||
|
(A) Header fields MAY be rewritten when necessary as messages
|
|||
|
are gatewayed across mail environment boundaries.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
This may involve interpreting the local-part of the
|
|||
|
destination address, as suggested in Section 5.2.16.
|
|||
|
|
|||
|
The other mail systems gatewayed to the Internet
|
|||
|
generally use a subset of RFC-822 headers, but some
|
|||
|
of them do not have an equivalent to the SMTP
|
|||
|
envelope. Therefore, when a message leaves the
|
|||
|
Internet environment, it may be necessary to fold the
|
|||
|
SMTP envelope information into the message header. A
|
|||
|
possible solution would be to create new header
|
|||
|
fields to carry the envelope information (e.g., "X-
|
|||
|
SMTP-MAIL:" and "X-SMTP-RCPT:"); however, this would
|
|||
|
require changes in mail programs in the foreign
|
|||
|
environment.
|
|||
|
|
|||
|
(B) When forwarding a message into or out of the Internet
|
|||
|
environment, a gateway MUST prepend a Received: line, but
|
|||
|
it MUST NOT alter in any way a Received: line that is
|
|||
|
already in the header.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
This requirement is a subset of the general
|
|||
|
"Received:" line requirement of Section 5.2.8; it is
|
|||
|
restated here for emphasis.
|
|||
|
|
|||
|
Received: fields of messages originating from other
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 66]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 MAIL -- SMTP & RFC-822 October 1989
|
|||
|
|
|||
|
|
|||
|
environments may not conform exactly to RFC822.
|
|||
|
However, the most important use of Received: lines is
|
|||
|
for debugging mail faults, and this debugging can be
|
|||
|
severely hampered by well-meaning gateways that try
|
|||
|
to "fix" a Received: line.
|
|||
|
|
|||
|
The gateway is strongly encouraged to indicate the
|
|||
|
environment and protocol in the "via" clauses of
|
|||
|
Received field(s) that it supplies.
|
|||
|
|
|||
|
(C) From the Internet side, the gateway SHOULD accept all
|
|||
|
valid address formats in SMTP commands and in RFC-822
|
|||
|
headers, and all valid RFC-822 messages. Although a
|
|||
|
gateway must accept an RFC-822 explicit source route
|
|||
|
("@...:" format) in either the RFC-822 header or in the
|
|||
|
envelope, it MAY or may not act on the source route; see
|
|||
|
Sections 5.2.6 and 5.2.19.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
It is often tempting to restrict the range of
|
|||
|
addresses accepted at the mail gateway to simplify
|
|||
|
the translation into addresses for the remote
|
|||
|
environment. This practice is based on the
|
|||
|
assumption that mail users have control over the
|
|||
|
addresses their mailers send to the mail gateway. In
|
|||
|
practice, however, users have little control over the
|
|||
|
addresses that are finally sent; their mailers are
|
|||
|
free to change addresses into any legal RFC-822
|
|||
|
format.
|
|||
|
|
|||
|
(D) The gateway MUST ensure that all header fields of a
|
|||
|
message that it forwards into the Internet meet the
|
|||
|
requirements for Internet mail. In particular, all
|
|||
|
addresses in "From:", "To:", "Cc:", etc., fields must be
|
|||
|
transformed (if necessary) to satisfy RFC-822 syntax, and
|
|||
|
they must be effective and useful for sending replies.
|
|||
|
|
|||
|
|
|||
|
(E) The translation algorithm used to convert mail from the
|
|||
|
Internet protocols to another environment's protocol
|
|||
|
SHOULD try to ensure that error messages from the foreign
|
|||
|
mail environment are delivered to the return path from the
|
|||
|
SMTP envelope, not to the sender listed in the "From:"
|
|||
|
field of the RFC-822 message.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
Internet mail lists usually place the address of the
|
|||
|
mail list maintainer in the envelope but leave the
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 67]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 MAIL -- SMTP & RFC-822 October 1989
|
|||
|
|
|||
|
|
|||
|
original message header intact (with the "From:"
|
|||
|
field containing the original sender). This yields
|
|||
|
the behavior the average recipient expects: a reply
|
|||
|
to the header gets sent to the original sender, not
|
|||
|
to a mail list maintainer; however, errors get sent
|
|||
|
to the maintainer (who can fix the problem) and not
|
|||
|
the sender (who probably cannot).
|
|||
|
|
|||
|
(F) Similarly, when forwarding a message from another
|
|||
|
environment into the Internet, the gateway SHOULD set the
|
|||
|
envelope return path in accordance with an error message
|
|||
|
return address, if any, supplied by the foreign
|
|||
|
environment.
|
|||
|
|
|||
|
|
|||
|
5.3.8 Maximum Message Size
|
|||
|
|
|||
|
Mailer software MUST be able to send and receive messages of at
|
|||
|
least 64K bytes in length (including header), and a much larger
|
|||
|
maximum size is highly desirable.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
Although SMTP does not define the maximum size of a
|
|||
|
message, many systems impose implementation limits.
|
|||
|
|
|||
|
The current de facto minimum limit in the Internet is 64K
|
|||
|
bytes. However, electronic mail is used for a variety of
|
|||
|
purposes that create much larger messages. For example,
|
|||
|
mail is often used instead of FTP for transmitting ASCII
|
|||
|
files, and in particular to transmit entire documents. As
|
|||
|
a result, messages can be 1 megabyte or even larger. We
|
|||
|
note that the present document together with its lower-
|
|||
|
layer companion contains 0.5 megabytes.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 68]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 MAIL -- SMTP & RFC-822 October 1989
|
|||
|
|
|||
|
|
|||
|
5.4 SMTP REQUIREMENTS SUMMARY
|
|||
|
|
|||
|
| | | | |S| |
|
|||
|
| | | | |H| |F
|
|||
|
| | | | |O|M|o
|
|||
|
| | |S| |U|U|o
|
|||
|
| | |H| |L|S|t
|
|||
|
| |M|O| |D|T|n
|
|||
|
| |U|U|M| | |o
|
|||
|
| |S|L|A|N|N|t
|
|||
|
| |T|D|Y|O|O|t
|
|||
|
FEATURE |SECTION | | | |T|T|e
|
|||
|
-----------------------------------------------|----------|-|-|-|-|-|--
|
|||
|
| | | | | | |
|
|||
|
RECEIVER-SMTP: | | | | | | |
|
|||
|
Implement VRFY |5.2.3 |x| | | | |
|
|||
|
Implement EXPN |5.2.3 | |x| | | |
|
|||
|
EXPN, VRFY configurable |5.2.3 | | |x| | |
|
|||
|
Implement SEND, SOML, SAML |5.2.4 | | |x| | |
|
|||
|
Verify HELO parameter |5.2.5 | | |x| | |
|
|||
|
Refuse message with bad HELO |5.2.5 | | | | |x|
|
|||
|
Accept explicit src-route syntax in env. |5.2.6 |x| | | | |
|
|||
|
Support "postmaster" |5.2.7 |x| | | | |
|
|||
|
Process RCPT when received (except lists) |5.2.7 | | |x| | |
|
|||
|
Long delay of RCPT responses |5.2.7 | | | | |x|
|
|||
|
| | | | | | |
|
|||
|
Add Received: line |5.2.8 |x| | | | |
|
|||
|
Received: line include domain literal |5.2.8 | |x| | | |
|
|||
|
Change previous Received: line |5.2.8 | | | | |x|
|
|||
|
Pass Return-Path info (final deliv/gwy) |5.2.8 |x| | | | |
|
|||
|
Support empty reverse path |5.2.9 |x| | | | |
|
|||
|
Send only official reply codes |5.2.10 | |x| | | |
|
|||
|
Send text from RFC-821 when appropriate |5.2.10 | |x| | | |
|
|||
|
Delete "." for transparency |5.2.11 |x| | | | |
|
|||
|
Accept and recognize self domain literal(s) |5.2.17 |x| | | | |
|
|||
|
| | | | | | |
|
|||
|
Error message about error message |5.3.1 | | | | |x|
|
|||
|
Keep pending listen on SMTP port |5.3.1.2 | |x| | | |
|
|||
|
Provide limit on recv concurrency |5.3.1.2 | | |x| | |
|
|||
|
Wait at least 5 mins for next sender cmd |5.3.2 | |x| | | |
|
|||
|
Avoidable delivery failure after "250 OK" |5.3.3 | | | | |x|
|
|||
|
Send error notification msg after accept |5.3.3 |x| | | | |
|
|||
|
Send using null return path |5.3.3 |x| | | | |
|
|||
|
Send to envelope return path |5.3.3 | |x| | | |
|
|||
|
Send to null address |5.3.3 | | | | |x|
|
|||
|
Strip off explicit src route |5.3.3 | |x| | | |
|
|||
|
Minimize acceptance delay (RFC-1047) |5.3.3 |x| | | | |
|
|||
|
-----------------------------------------------|----------|-|-|-|-|-|--
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 69]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 MAIL -- SMTP & RFC-822 October 1989
|
|||
|
|
|||
|
|
|||
|
| | | | | | |
|
|||
|
SENDER-SMTP: | | | | | | |
|
|||
|
Canonicalized domain names in MAIL, RCPT |5.2.2 |x| | | | |
|
|||
|
Implement SEND, SOML, SAML |5.2.4 | | |x| | |
|
|||
|
Send valid principal host name in HELO |5.2.5 |x| | | | |
|
|||
|
Send explicit source route in RCPT TO: |5.2.6 | | | |x| |
|
|||
|
Use only reply code to determine action |5.2.10 |x| | | | |
|
|||
|
Use only high digit of reply code when poss. |5.2.10 | |x| | | |
|
|||
|
Add "." for transparency |5.2.11 |x| | | | |
|
|||
|
| | | | | | |
|
|||
|
Retry messages after soft failure |5.3.1.1 |x| | | | |
|
|||
|
Delay before retry |5.3.1.1 |x| | | | |
|
|||
|
Configurable retry parameters |5.3.1.1 |x| | | | |
|
|||
|
Retry once per each queued dest host |5.3.1.1 | |x| | | |
|
|||
|
Multiple RCPT's for same DATA |5.3.1.1 | |x| | | |
|
|||
|
Support multiple concurrent transactions |5.3.1.1 | | |x| | |
|
|||
|
Provide limit on concurrency |5.3.1.1 | |x| | | |
|
|||
|
| | | | | | |
|
|||
|
Timeouts on all activities |5.3.1 |x| | | | |
|
|||
|
Per-command timeouts |5.3.2 | |x| | | |
|
|||
|
Timeouts easily reconfigurable |5.3.2 | |x| | | |
|
|||
|
Recommended times |5.3.2 | |x| | | |
|
|||
|
Try alternate addr's in order |5.3.4 |x| | | | |
|
|||
|
Configurable limit on alternate tries |5.3.4 | | |x| | |
|
|||
|
Try at least two alternates |5.3.4 | |x| | | |
|
|||
|
Load-split across equal MX alternates |5.3.4 | |x| | | |
|
|||
|
Use the Domain Name System |5.3.5 |x| | | | |
|
|||
|
Support MX records |5.3.5 |x| | | | |
|
|||
|
Use WKS records in MX processing |5.2.12 | | | |x| |
|
|||
|
-----------------------------------------------|----------|-|-|-|-|-|--
|
|||
|
| | | | | | |
|
|||
|
MAIL FORWARDING: | | | | | | |
|
|||
|
Alter existing header field(s) |5.2.6 | | | |x| |
|
|||
|
Implement relay function: 821/section 3.6 |5.2.6 | | |x| | |
|
|||
|
If not, deliver to RHS domain |5.2.6 | |x| | | |
|
|||
|
Interpret 'local-part' of addr |5.2.16 | | | | |x|
|
|||
|
| | | | | | |
|
|||
|
MAILING LISTS AND ALIASES | | | | | | |
|
|||
|
Support both |5.3.6 | |x| | | |
|
|||
|
Report mail list error to local admin. |5.3.6 |x| | | | |
|
|||
|
| | | | | | |
|
|||
|
MAIL GATEWAYS: | | | | | | |
|
|||
|
Embed foreign mail route in local-part |5.2.16 | | |x| | |
|
|||
|
Rewrite header fields when necessary |5.3.7 | | |x| | |
|
|||
|
Prepend Received: line |5.3.7 |x| | | | |
|
|||
|
Change existing Received: line |5.3.7 | | | | |x|
|
|||
|
Accept full RFC-822 on Internet side |5.3.7 | |x| | | |
|
|||
|
Act on RFC-822 explicit source route |5.3.7 | | |x| | |
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 70]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 MAIL -- SMTP & RFC-822 October 1989
|
|||
|
|
|||
|
|
|||
|
Send only valid RFC-822 on Internet side |5.3.7 |x| | | | |
|
|||
|
Deliver error msgs to envelope addr |5.3.7 | |x| | | |
|
|||
|
Set env return path from err return addr |5.3.7 | |x| | | |
|
|||
|
| | | | | | |
|
|||
|
USER AGENT -- RFC-822 | | | | | | |
|
|||
|
Allow user to enter <route> address |5.2.6 | | | |x| |
|
|||
|
Support RFC-1049 Content Type field |5.2.13 | | |x| | |
|
|||
|
Use 4-digit years |5.2.14 | |x| | | |
|
|||
|
Generate numeric timezones |5.2.14 | |x| | | |
|
|||
|
Accept all timezones |5.2.14 |x| | | | |
|
|||
|
Use non-num timezones from RFC-822 |5.2.14 |x| | | | |
|
|||
|
Omit phrase before route-addr |5.2.15 | | |x| | |
|
|||
|
Accept and parse dot.dec. domain literals |5.2.17 |x| | | | |
|
|||
|
Accept all RFC-822 address formats |5.2.18 |x| | | | |
|
|||
|
Generate invalid RFC-822 address format |5.2.18 | | | | |x|
|
|||
|
Fully-qualified domain names in header |5.2.18 |x| | | | |
|
|||
|
Create explicit src route in header |5.2.19 | | | |x| |
|
|||
|
Accept explicit src route in header |5.2.19 |x| | | | |
|
|||
|
| | | | | | |
|
|||
|
Send/recv at least 64KB messages |5.3.8 |x| | | | |
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 71]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 SUPPORT SERVICES -- DOMAINS October 1989
|
|||
|
|
|||
|
|
|||
|
6. SUPPORT SERVICES
|
|||
|
|
|||
|
6.1 DOMAIN NAME TRANSLATION
|
|||
|
|
|||
|
6.1.1 INTRODUCTION
|
|||
|
|
|||
|
Every host MUST implement a resolver for the Domain Name System
|
|||
|
(DNS), and it MUST implement a mechanism using this DNS
|
|||
|
resolver to convert host names to IP addresses and vice-versa
|
|||
|
[DNS:1, DNS:2].
|
|||
|
|
|||
|
In addition to the DNS, a host MAY also implement a host name
|
|||
|
translation mechanism that searches a local Internet host
|
|||
|
table. See Section 6.1.3.8 for more information on this
|
|||
|
option.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
Internet host name translation was originally performed by
|
|||
|
searching local copies of a table of all hosts. This
|
|||
|
table became too large to update and distribute in a
|
|||
|
timely manner and too large to fit into many hosts, so the
|
|||
|
DNS was invented.
|
|||
|
|
|||
|
The DNS creates a distributed database used primarily for
|
|||
|
the translation between host names and host addresses.
|
|||
|
Implementation of DNS software is required. The DNS
|
|||
|
consists of two logically distinct parts: name servers and
|
|||
|
resolvers (although implementations often combine these
|
|||
|
two logical parts in the interest of efficiency) [DNS:2].
|
|||
|
|
|||
|
Domain name servers store authoritative data about certain
|
|||
|
sections of the database and answer queries about the
|
|||
|
data. Domain resolvers query domain name servers for data
|
|||
|
on behalf of user processes. Every host therefore needs a
|
|||
|
DNS resolver; some host machines will also need to run
|
|||
|
domain name servers. Since no name server has complete
|
|||
|
information, in general it is necessary to obtain
|
|||
|
information from more than one name server to resolve a
|
|||
|
query.
|
|||
|
|
|||
|
6.1.2 PROTOCOL WALK-THROUGH
|
|||
|
|
|||
|
An implementor must study references [DNS:1] and [DNS:2]
|
|||
|
carefully. They provide a thorough description of the theory,
|
|||
|
protocol, and implementation of the domain name system, and
|
|||
|
reflect several years of experience.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 72]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 SUPPORT SERVICES -- DOMAINS October 1989
|
|||
|
|
|||
|
|
|||
|
6.1.2.1 Resource Records with Zero TTL: RFC-1035 Section 3.2.1
|
|||
|
|
|||
|
All DNS name servers and resolvers MUST properly handle RRs
|
|||
|
with a zero TTL: return the RR to the client but do not
|
|||
|
cache it.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
Zero TTL values are interpreted to mean that the RR can
|
|||
|
only be used for the transaction in progress, and
|
|||
|
should not be cached; they are useful for extremely
|
|||
|
volatile data.
|
|||
|
|
|||
|
6.1.2.2 QCLASS Values: RFC-1035 Section 3.2.5
|
|||
|
|
|||
|
A query with "QCLASS=*" SHOULD NOT be used unless the
|
|||
|
requestor is seeking data from more than one class. In
|
|||
|
particular, if the requestor is only interested in Internet
|
|||
|
data types, QCLASS=IN MUST be used.
|
|||
|
|
|||
|
6.1.2.3 Unused Fields: RFC-1035 Section 4.1.1
|
|||
|
|
|||
|
Unused fields in a query or response message MUST be zero.
|
|||
|
|
|||
|
6.1.2.4 Compression: RFC-1035 Section 4.1.4
|
|||
|
|
|||
|
Name servers MUST use compression in responses.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
Compression is essential to avoid overflowing UDP
|
|||
|
datagrams; see Section 6.1.3.2.
|
|||
|
|
|||
|
6.1.2.5 Misusing Configuration Info: RFC-1035 Section 6.1.2
|
|||
|
|
|||
|
Recursive name servers and full-service resolvers generally
|
|||
|
have some configuration information containing hints about
|
|||
|
the location of root or local name servers. An
|
|||
|
implementation MUST NOT include any of these hints in a
|
|||
|
response.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
Many implementors have found it convenient to store
|
|||
|
these hints as if they were cached data, but some
|
|||
|
neglected to ensure that this "cached data" was not
|
|||
|
included in responses. This has caused serious
|
|||
|
problems in the Internet when the hints were obsolete
|
|||
|
or incorrect.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 73]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 SUPPORT SERVICES -- DOMAINS October 1989
|
|||
|
|
|||
|
|
|||
|
6.1.3 SPECIFIC ISSUES
|
|||
|
|
|||
|
6.1.3.1 Resolver Implementation
|
|||
|
|
|||
|
A name resolver SHOULD be able to multiplex concurrent
|
|||
|
requests if the host supports concurrent processes.
|
|||
|
|
|||
|
In implementing a DNS resolver, one of two different models
|
|||
|
MAY optionally be chosen: a full-service resolver, or a stub
|
|||
|
resolver.
|
|||
|
|
|||
|
|
|||
|
(A) Full-Service Resolver
|
|||
|
|
|||
|
A full-service resolver is a complete implementation of
|
|||
|
the resolver service, and is capable of dealing with
|
|||
|
communication failures, failure of individual name
|
|||
|
servers, location of the proper name server for a given
|
|||
|
name, etc. It must satisfy the following requirements:
|
|||
|
|
|||
|
o The resolver MUST implement a local caching
|
|||
|
function to avoid repeated remote access for
|
|||
|
identical requests, and MUST time out information
|
|||
|
in the cache.
|
|||
|
|
|||
|
o The resolver SHOULD be configurable with start-up
|
|||
|
information pointing to multiple root name servers
|
|||
|
and multiple name servers for the local domain.
|
|||
|
This insures that the resolver will be able to
|
|||
|
access the whole name space in normal cases, and
|
|||
|
will be able to access local domain information
|
|||
|
should the local network become disconnected from
|
|||
|
the rest of the Internet.
|
|||
|
|
|||
|
|
|||
|
(B) Stub Resolver
|
|||
|
|
|||
|
A "stub resolver" relies on the services of a recursive
|
|||
|
name server on the connected network or a "nearby"
|
|||
|
network. This scheme allows the host to pass on the
|
|||
|
burden of the resolver function to a name server on
|
|||
|
another host. This model is often essential for less
|
|||
|
capable hosts, such as PCs, and is also recommended
|
|||
|
when the host is one of several workstations on a local
|
|||
|
network, because it allows all of the workstations to
|
|||
|
share the cache of the recursive name server and hence
|
|||
|
reduce the number of domain requests exported by the
|
|||
|
local network.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 74]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 SUPPORT SERVICES -- DOMAINS October 1989
|
|||
|
|
|||
|
|
|||
|
At a minimum, the stub resolver MUST be capable of
|
|||
|
directing its requests to redundant recursive name
|
|||
|
servers. Note that recursive name servers are allowed
|
|||
|
to restrict the sources of requests that they will
|
|||
|
honor, so the host administrator must verify that the
|
|||
|
service will be provided. Stub resolvers MAY implement
|
|||
|
caching if they choose, but if so, MUST timeout cached
|
|||
|
information.
|
|||
|
|
|||
|
|
|||
|
6.1.3.2 Transport Protocols
|
|||
|
|
|||
|
DNS resolvers and recursive servers MUST support UDP, and
|
|||
|
SHOULD support TCP, for sending (non-zone-transfer) queries.
|
|||
|
Specifically, a DNS resolver or server that is sending a
|
|||
|
non-zone-transfer query MUST send a UDP query first. If the
|
|||
|
Answer section of the response is truncated and if the
|
|||
|
requester supports TCP, it SHOULD try the query again using
|
|||
|
TCP.
|
|||
|
|
|||
|
DNS servers MUST be able to service UDP queries and SHOULD
|
|||
|
be able to service TCP queries. A name server MAY limit the
|
|||
|
resources it devotes to TCP queries, but it SHOULD NOT
|
|||
|
refuse to service a TCP query just because it would have
|
|||
|
succeeded with UDP.
|
|||
|
|
|||
|
Truncated responses MUST NOT be saved (cached) and later
|
|||
|
used in such a way that the fact that they are truncated is
|
|||
|
lost.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
UDP is preferred over TCP for queries because UDP
|
|||
|
queries have much lower overhead, both in packet count
|
|||
|
and in connection state. The use of UDP is essential
|
|||
|
for heavily-loaded servers, especially the root
|
|||
|
servers. UDP also offers additional robustness, since
|
|||
|
a resolver can attempt several UDP queries to different
|
|||
|
servers for the cost of a single TCP query.
|
|||
|
|
|||
|
It is possible for a DNS response to be truncated,
|
|||
|
although this is a very rare occurrence in the present
|
|||
|
Internet DNS. Practically speaking, truncation cannot
|
|||
|
be predicted, since it is data-dependent. The
|
|||
|
dependencies include the number of RRs in the answer,
|
|||
|
the size of each RR, and the savings in space realized
|
|||
|
by the name compression algorithm. As a rule of thumb,
|
|||
|
truncation in NS and MX lists should not occur for
|
|||
|
answers containing 15 or fewer RRs.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 75]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 SUPPORT SERVICES -- DOMAINS October 1989
|
|||
|
|
|||
|
|
|||
|
Whether it is possible to use a truncated answer
|
|||
|
depends on the application. A mailer must not use a
|
|||
|
truncated MX response, since this could lead to mail
|
|||
|
loops.
|
|||
|
|
|||
|
Responsible practices can make UDP suffice in the vast
|
|||
|
majority of cases. Name servers must use compression
|
|||
|
in responses. Resolvers must differentiate truncation
|
|||
|
of the Additional section of a response (which only
|
|||
|
loses extra information) from truncation of the Answer
|
|||
|
section (which for MX records renders the response
|
|||
|
unusable by mailers). Database administrators should
|
|||
|
list only a reasonable number of primary names in lists
|
|||
|
of name servers, MX alternatives, etc.
|
|||
|
|
|||
|
However, it is also clear that some new DNS record
|
|||
|
types defined in the future will contain information
|
|||
|
exceeding the 512 byte limit that applies to UDP, and
|
|||
|
hence will require TCP. Thus, resolvers and name
|
|||
|
servers should implement TCP services as a backup to
|
|||
|
UDP today, with the knowledge that they will require
|
|||
|
the TCP service in the future.
|
|||
|
|
|||
|
By private agreement, name servers and resolvers MAY arrange
|
|||
|
to use TCP for all traffic between themselves. TCP MUST be
|
|||
|
used for zone transfers.
|
|||
|
|
|||
|
A DNS server MUST have sufficient internal concurrency that
|
|||
|
it can continue to process UDP queries while awaiting a
|
|||
|
response or performing a zone transfer on an open TCP
|
|||
|
connection [DNS:2].
|
|||
|
|
|||
|
A server MAY support a UDP query that is delivered using an
|
|||
|
IP broadcast or multicast address. However, the Recursion
|
|||
|
Desired bit MUST NOT be set in a query that is multicast,
|
|||
|
and MUST be ignored by name servers receiving queries via a
|
|||
|
broadcast or multicast address. A host that sends broadcast
|
|||
|
or multicast DNS queries SHOULD send them only as occasional
|
|||
|
probes, caching the IP address(es) it obtains from the
|
|||
|
response(s) so it can normally send unicast queries.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
Broadcast or (especially) IP multicast can provide a
|
|||
|
way to locate nearby name servers without knowing their
|
|||
|
IP addresses in advance. However, general broadcasting
|
|||
|
of recursive queries can result in excessive and
|
|||
|
unnecessary load on both network and servers.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 76]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 SUPPORT SERVICES -- DOMAINS October 1989
|
|||
|
|
|||
|
|
|||
|
6.1.3.3 Efficient Resource Usage
|
|||
|
|
|||
|
The following requirements on servers and resolvers are very
|
|||
|
important to the health of the Internet as a whole,
|
|||
|
particularly when DNS services are invoked repeatedly by
|
|||
|
higher level automatic servers, such as mailers.
|
|||
|
|
|||
|
(1) The resolver MUST implement retransmission controls to
|
|||
|
insure that it does not waste communication bandwidth,
|
|||
|
and MUST impose finite bounds on the resources consumed
|
|||
|
to respond to a single request. See [DNS:2] pages 43-
|
|||
|
44 for specific recommendations.
|
|||
|
|
|||
|
(2) After a query has been retransmitted several times
|
|||
|
without a response, an implementation MUST give up and
|
|||
|
return a soft error to the application.
|
|||
|
|
|||
|
(3) All DNS name servers and resolvers SHOULD cache
|
|||
|
temporary failures, with a timeout period of the order
|
|||
|
of minutes.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
This will prevent applications that immediately
|
|||
|
retry soft failures (in violation of Section 2.2
|
|||
|
of this document) from generating excessive DNS
|
|||
|
traffic.
|
|||
|
|
|||
|
(4) All DNS name servers and resolvers SHOULD cache
|
|||
|
negative responses that indicate the specified name, or
|
|||
|
data of the specified type, does not exist, as
|
|||
|
described in [DNS:2].
|
|||
|
|
|||
|
(5) When a DNS server or resolver retries a UDP query, the
|
|||
|
retry interval SHOULD be constrained by an exponential
|
|||
|
backoff algorithm, and SHOULD also have upper and lower
|
|||
|
bounds.
|
|||
|
|
|||
|
IMPLEMENTATION:
|
|||
|
A measured RTT and variance (if available) should
|
|||
|
be used to calculate an initial retransmission
|
|||
|
interval. If this information is not available, a
|
|||
|
default of no less than 5 seconds should be used.
|
|||
|
Implementations may limit the retransmission
|
|||
|
interval, but this limit must exceed twice the
|
|||
|
Internet maximum segment lifetime plus service
|
|||
|
delay at the name server.
|
|||
|
|
|||
|
(6) When a resolver or server receives a Source Quench for
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 77]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 SUPPORT SERVICES -- DOMAINS October 1989
|
|||
|
|
|||
|
|
|||
|
a query it has issued, it SHOULD take steps to reduce
|
|||
|
the rate of querying that server in the near future. A
|
|||
|
server MAY ignore a Source Quench that it receives as
|
|||
|
the result of sending a response datagram.
|
|||
|
|
|||
|
IMPLEMENTATION:
|
|||
|
One recommended action to reduce the rate is to
|
|||
|
send the next query attempt to an alternate
|
|||
|
server, if there is one available. Another is to
|
|||
|
backoff the retry interval for the same server.
|
|||
|
|
|||
|
|
|||
|
6.1.3.4 Multihomed Hosts
|
|||
|
|
|||
|
When the host name-to-address function encounters a host
|
|||
|
with multiple addresses, it SHOULD rank or sort the
|
|||
|
addresses using knowledge of the immediately connected
|
|||
|
network number(s) and any other applicable performance or
|
|||
|
history information.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
The different addresses of a multihomed host generally
|
|||
|
imply different Internet paths, and some paths may be
|
|||
|
preferable to others in performance, reliability, or
|
|||
|
administrative restrictions. There is no general way
|
|||
|
for the domain system to determine the best path. A
|
|||
|
recommended approach is to base this decision on local
|
|||
|
configuration information set by the system
|
|||
|
administrator.
|
|||
|
|
|||
|
IMPLEMENTATION:
|
|||
|
The following scheme has been used successfully:
|
|||
|
|
|||
|
(a) Incorporate into the host configuration data a
|
|||
|
Network-Preference List, that is simply a list of
|
|||
|
networks in preferred order. This list may be
|
|||
|
empty if there is no preference.
|
|||
|
|
|||
|
(b) When a host name is mapped into a list of IP
|
|||
|
addresses, these addresses should be sorted by
|
|||
|
network number, into the same order as the
|
|||
|
corresponding networks in the Network-Preference
|
|||
|
List. IP addresses whose networks do not appear
|
|||
|
in the Network-Preference List should be placed at
|
|||
|
the end of the list.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 78]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 SUPPORT SERVICES -- DOMAINS October 1989
|
|||
|
|
|||
|
|
|||
|
6.1.3.5 Extensibility
|
|||
|
|
|||
|
DNS software MUST support all well-known, class-independent
|
|||
|
formats [DNS:2], and SHOULD be written to minimize the
|
|||
|
trauma associated with the introduction of new well-known
|
|||
|
types and local experimentation with non-standard types.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
The data types and classes used by the DNS are
|
|||
|
extensible, and thus new types will be added and old
|
|||
|
types deleted or redefined. Introduction of new data
|
|||
|
types ought to be dependent only upon the rules for
|
|||
|
compression of domain names inside DNS messages, and
|
|||
|
the translation between printable (i.e., master file)
|
|||
|
and internal formats for Resource Records (RRs).
|
|||
|
|
|||
|
Compression relies on knowledge of the format of data
|
|||
|
inside a particular RR. Hence compression must only be
|
|||
|
used for the contents of well-known, class-independent
|
|||
|
RRs, and must never be used for class-specific RRs or
|
|||
|
RR types that are not well-known. The owner name of an
|
|||
|
RR is always eligible for compression.
|
|||
|
|
|||
|
A name server may acquire, via zone transfer, RRs that
|
|||
|
the server doesn't know how to convert to printable
|
|||
|
format. A resolver can receive similar information as
|
|||
|
the result of queries. For proper operation, this data
|
|||
|
must be preserved, and hence the implication is that
|
|||
|
DNS software cannot use textual formats for internal
|
|||
|
storage.
|
|||
|
|
|||
|
The DNS defines domain name syntax very generally -- a
|
|||
|
string of labels each containing up to 63 8-bit octets,
|
|||
|
separated by dots, and with a maximum total of 255
|
|||
|
octets. Particular applications of the DNS are
|
|||
|
permitted to further constrain the syntax of the domain
|
|||
|
names they use, although the DNS deployment has led to
|
|||
|
some applications allowing more general names. In
|
|||
|
particular, Section 2.1 of this document liberalizes
|
|||
|
slightly the syntax of a legal Internet host name that
|
|||
|
was defined in RFC-952 [DNS:4].
|
|||
|
|
|||
|
6.1.3.6 Status of RR Types
|
|||
|
|
|||
|
Name servers MUST be able to load all RR types except MD and
|
|||
|
MF from configuration files. The MD and MF types are
|
|||
|
obsolete and MUST NOT be implemented; in particular, name
|
|||
|
servers MUST NOT load these types from configuration files.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 79]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 SUPPORT SERVICES -- DOMAINS October 1989
|
|||
|
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
The RR types MB, MG, MR, NULL, MINFO and RP are
|
|||
|
considered experimental, and applications that use the
|
|||
|
DNS cannot expect these RR types to be supported by
|
|||
|
most domains. Furthermore these types are subject to
|
|||
|
redefinition.
|
|||
|
|
|||
|
The TXT and WKS RR types have not been widely used by
|
|||
|
Internet sites; as a result, an application cannot rely
|
|||
|
on the the existence of a TXT or WKS RR in most
|
|||
|
domains.
|
|||
|
|
|||
|
6.1.3.7 Robustness
|
|||
|
|
|||
|
DNS software may need to operate in environments where the
|
|||
|
root servers or other servers are unavailable due to network
|
|||
|
connectivity or other problems. In this situation, DNS name
|
|||
|
servers and resolvers MUST continue to provide service for
|
|||
|
the reachable part of the name space, while giving temporary
|
|||
|
failures for the rest.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
Although the DNS is meant to be used primarily in the
|
|||
|
connected Internet, it should be possible to use the
|
|||
|
system in networks which are unconnected to the
|
|||
|
Internet. Hence implementations must not depend on
|
|||
|
access to root servers before providing service for
|
|||
|
local names.
|
|||
|
|
|||
|
6.1.3.8 Local Host Table
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
A host may use a local host table as a backup or
|
|||
|
supplement to the DNS. This raises the question of
|
|||
|
which takes precedence, the DNS or the host table; the
|
|||
|
most flexible approach would make this a configuration
|
|||
|
option.
|
|||
|
|
|||
|
Typically, the contents of such a supplementary host
|
|||
|
table will be determined locally by the site. However,
|
|||
|
a publically-available table of Internet hosts is
|
|||
|
maintained by the DDN Network Information Center (DDN
|
|||
|
NIC), with a format documented in [DNS:4]. This table
|
|||
|
can be retrieved from the DDN NIC using a protocol
|
|||
|
described in [DNS:5]. It must be noted that this table
|
|||
|
contains only a small fraction of all Internet hosts.
|
|||
|
Hosts using this protocol to retrieve the DDN NIC host
|
|||
|
table should use the VERSION command to check if the
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 80]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 SUPPORT SERVICES -- DOMAINS October 1989
|
|||
|
|
|||
|
|
|||
|
table has changed before requesting the entire table
|
|||
|
with the ALL command. The VERSION identifier should be
|
|||
|
treated as an arbitrary string and tested only for
|
|||
|
equality; no numerical sequence may be assumed.
|
|||
|
|
|||
|
The DDN NIC host table includes administrative
|
|||
|
information that is not needed for host operation and
|
|||
|
is therefore not currently included in the DNS
|
|||
|
database; examples include network and gateway entries.
|
|||
|
However, much of this additional information will be
|
|||
|
added to the DNS in the future. Conversely, the DNS
|
|||
|
provides essential services (in particular, MX records)
|
|||
|
that are not available from the DDN NIC host table.
|
|||
|
|
|||
|
6.1.4 DNS USER INTERFACE
|
|||
|
|
|||
|
6.1.4.1 DNS Administration
|
|||
|
|
|||
|
This document is concerned with design and implementation
|
|||
|
issues in host software, not with administrative or
|
|||
|
operational issues. However, administrative issues are of
|
|||
|
particular importance in the DNS, since errors in particular
|
|||
|
segments of this large distributed database can cause poor
|
|||
|
or erroneous performance for many sites. These issues are
|
|||
|
discussed in [DNS:6] and [DNS:7].
|
|||
|
|
|||
|
6.1.4.2 DNS User Interface
|
|||
|
|
|||
|
Hosts MUST provide an interface to the DNS for all
|
|||
|
application programs running on the host. This interface
|
|||
|
will typically direct requests to a system process to
|
|||
|
perform the resolver function [DNS:1, 6.1:2].
|
|||
|
|
|||
|
At a minimum, the basic interface MUST support a request for
|
|||
|
all information of a specific type and class associated with
|
|||
|
a specific name, and it MUST return either all of the
|
|||
|
requested information, a hard error code, or a soft error
|
|||
|
indication. When there is no error, the basic interface
|
|||
|
returns the complete response information without
|
|||
|
modification, deletion, or ordering, so that the basic
|
|||
|
interface will not need to be changed to accommodate new
|
|||
|
data types.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
The soft error indication is an essential part of the
|
|||
|
interface, since it may not always be possible to
|
|||
|
access particular information from the DNS; see Section
|
|||
|
6.1.3.3.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 81]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 SUPPORT SERVICES -- DOMAINS October 1989
|
|||
|
|
|||
|
|
|||
|
A host MAY provide other DNS interfaces tailored to
|
|||
|
particular functions, transforming the raw domain data into
|
|||
|
formats more suited to these functions. In particular, a
|
|||
|
host MUST provide a DNS interface to facilitate translation
|
|||
|
between host addresses and host names.
|
|||
|
|
|||
|
6.1.4.3 Interface Abbreviation Facilities
|
|||
|
|
|||
|
User interfaces MAY provide a method for users to enter
|
|||
|
abbreviations for commonly-used names. Although the
|
|||
|
definition of such methods is outside of the scope of the
|
|||
|
DNS specification, certain rules are necessary to insure
|
|||
|
that these methods allow access to the entire DNS name space
|
|||
|
and to prevent excessive use of Internet resources.
|
|||
|
|
|||
|
If an abbreviation method is provided, then:
|
|||
|
|
|||
|
(a) There MUST be some convention for denoting that a name
|
|||
|
is already complete, so that the abbreviation method(s)
|
|||
|
are suppressed. A trailing dot is the usual method.
|
|||
|
|
|||
|
(b) Abbreviation expansion MUST be done exactly once, and
|
|||
|
MUST be done in the context in which the name was
|
|||
|
entered.
|
|||
|
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
For example, if an abbreviation is used in a mail
|
|||
|
program for a destination, the abbreviation should be
|
|||
|
expanded into a full domain name and stored in the
|
|||
|
queued message with an indication that it is already
|
|||
|
complete. Otherwise, the abbreviation might be
|
|||
|
expanded with a mail system search list, not the
|
|||
|
user's, or a name could grow due to repeated
|
|||
|
canonicalizations attempts interacting with wildcards.
|
|||
|
|
|||
|
The two most common abbreviation methods are:
|
|||
|
|
|||
|
(1) Interface-level aliases
|
|||
|
|
|||
|
Interface-level aliases are conceptually implemented as
|
|||
|
a list of alias/domain name pairs. The list can be
|
|||
|
per-user or per-host, and separate lists can be
|
|||
|
associated with different functions, e.g. one list for
|
|||
|
host name-to-address translation, and a different list
|
|||
|
for mail domains. When the user enters a name, the
|
|||
|
interface attempts to match the name to the alias
|
|||
|
component of a list entry, and if a matching entry can
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 82]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 SUPPORT SERVICES -- DOMAINS October 1989
|
|||
|
|
|||
|
|
|||
|
be found, the name is replaced by the domain name found
|
|||
|
in the pair.
|
|||
|
|
|||
|
Note that interface-level aliases and CNAMEs are
|
|||
|
completely separate mechanisms; interface-level aliases
|
|||
|
are a local matter while CNAMEs are an Internet-wide
|
|||
|
aliasing mechanism which is a required part of any DNS
|
|||
|
implementation.
|
|||
|
|
|||
|
(2) Search Lists
|
|||
|
|
|||
|
A search list is conceptually implemented as an ordered
|
|||
|
list of domain names. When the user enters a name, the
|
|||
|
domain names in the search list are used as suffixes to
|
|||
|
the user-supplied name, one by one, until a domain name
|
|||
|
with the desired associated data is found, or the
|
|||
|
search list is exhausted. Search lists often contain
|
|||
|
the name of the local host's parent domain or other
|
|||
|
ancestor domains. Search lists are often per-user or
|
|||
|
per-process.
|
|||
|
|
|||
|
It SHOULD be possible for an administrator to disable a
|
|||
|
DNS search-list facility. Administrative denial may be
|
|||
|
warranted in some cases, to prevent abuse of the DNS.
|
|||
|
|
|||
|
There is danger that a search-list mechanism will
|
|||
|
generate excessive queries to the root servers while
|
|||
|
testing whether user input is a complete domain name,
|
|||
|
lacking a final period to mark it as complete. A
|
|||
|
search-list mechanism MUST have one of, and SHOULD have
|
|||
|
both of, the following two provisions to prevent this:
|
|||
|
|
|||
|
(a) The local resolver/name server can implement
|
|||
|
caching of negative responses (see Section
|
|||
|
6.1.3.3).
|
|||
|
|
|||
|
(b) The search list expander can require two or more
|
|||
|
interior dots in a generated domain name before it
|
|||
|
tries using the name in a query to non-local
|
|||
|
domain servers, such as the root.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
The intent of this requirement is to avoid
|
|||
|
excessive delay for the user as the search list is
|
|||
|
tested, and more importantly to prevent excessive
|
|||
|
traffic to the root and other high-level servers.
|
|||
|
For example, if the user supplied a name "X" and
|
|||
|
the search list contained the root as a component,
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 83]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 SUPPORT SERVICES -- DOMAINS October 1989
|
|||
|
|
|||
|
|
|||
|
a query would have to consult a root server before
|
|||
|
the next search list alternative could be tried.
|
|||
|
The resulting load seen by the root servers and
|
|||
|
gateways near the root would be multiplied by the
|
|||
|
number of hosts in the Internet.
|
|||
|
|
|||
|
The negative caching alternative limits the effect
|
|||
|
to the first time a name is used. The interior
|
|||
|
dot rule is simpler to implement but can prevent
|
|||
|
easy use of some top-level names.
|
|||
|
|
|||
|
|
|||
|
6.1.5 DOMAIN NAME SYSTEM REQUIREMENTS SUMMARY
|
|||
|
|
|||
|
| | | | |S| |
|
|||
|
| | | | |H| |F
|
|||
|
| | | | |O|M|o
|
|||
|
| | |S| |U|U|o
|
|||
|
| | |H| |L|S|t
|
|||
|
| |M|O| |D|T|n
|
|||
|
| |U|U|M| | |o
|
|||
|
| |S|L|A|N|N|t
|
|||
|
| |T|D|Y|O|O|t
|
|||
|
FEATURE |SECTION | | | |T|T|e
|
|||
|
-----------------------------------------------|-----------|-|-|-|-|-|--
|
|||
|
GENERAL ISSUES | | | | | | |
|
|||
|
| | | | | | |
|
|||
|
Implement DNS name-to-address conversion |6.1.1 |x| | | | |
|
|||
|
Implement DNS address-to-name conversion |6.1.1 |x| | | | |
|
|||
|
Support conversions using host table |6.1.1 | | |x| | |
|
|||
|
Properly handle RR with zero TTL |6.1.2.1 |x| | | | |
|
|||
|
Use QCLASS=* unnecessarily |6.1.2.2 | |x| | | |
|
|||
|
Use QCLASS=IN for Internet class |6.1.2.2 |x| | | | |
|
|||
|
Unused fields zero |6.1.2.3 |x| | | | |
|
|||
|
Use compression in responses |6.1.2.4 |x| | | | |
|
|||
|
| | | | | | |
|
|||
|
Include config info in responses |6.1.2.5 | | | | |x|
|
|||
|
Support all well-known, class-indep. types |6.1.3.5 |x| | | | |
|
|||
|
Easily expand type list |6.1.3.5 | |x| | | |
|
|||
|
Load all RR types (except MD and MF) |6.1.3.6 |x| | | | |
|
|||
|
Load MD or MF type |6.1.3.6 | | | | |x|
|
|||
|
Operate when root servers, etc. unavailable |6.1.3.7 |x| | | | |
|
|||
|
-----------------------------------------------|-----------|-|-|-|-|-|--
|
|||
|
RESOLVER ISSUES: | | | | | | |
|
|||
|
| | | | | | |
|
|||
|
Resolver support multiple concurrent requests |6.1.3.1 | |x| | | |
|
|||
|
Full-service resolver: |6.1.3.1 | | |x| | |
|
|||
|
Local caching |6.1.3.1 |x| | | | |
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 84]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 SUPPORT SERVICES -- DOMAINS October 1989
|
|||
|
|
|||
|
|
|||
|
Information in local cache times out |6.1.3.1 |x| | | | |
|
|||
|
Configurable with starting info |6.1.3.1 | |x| | | |
|
|||
|
Stub resolver: |6.1.3.1 | | |x| | |
|
|||
|
Use redundant recursive name servers |6.1.3.1 |x| | | | |
|
|||
|
Local caching |6.1.3.1 | | |x| | |
|
|||
|
Information in local cache times out |6.1.3.1 |x| | | | |
|
|||
|
Support for remote multi-homed hosts: | | | | | | |
|
|||
|
Sort multiple addresses by preference list |6.1.3.4 | |x| | | |
|
|||
|
| | | | | | |
|
|||
|
-----------------------------------------------|-----------|-|-|-|-|-|--
|
|||
|
TRANSPORT PROTOCOLS: | | | | | | |
|
|||
|
| | | | | | |
|
|||
|
Support UDP queries |6.1.3.2 |x| | | | |
|
|||
|
Support TCP queries |6.1.3.2 | |x| | | |
|
|||
|
Send query using UDP first |6.1.3.2 |x| | | | |1
|
|||
|
Try TCP if UDP answers are truncated |6.1.3.2 | |x| | | |
|
|||
|
Name server limit TCP query resources |6.1.3.2 | | |x| | |
|
|||
|
Punish unnecessary TCP query |6.1.3.2 | | | |x| |
|
|||
|
Use truncated data as if it were not |6.1.3.2 | | | | |x|
|
|||
|
Private agreement to use only TCP |6.1.3.2 | | |x| | |
|
|||
|
Use TCP for zone transfers |6.1.3.2 |x| | | | |
|
|||
|
TCP usage not block UDP queries |6.1.3.2 |x| | | | |
|
|||
|
Support broadcast or multicast queries |6.1.3.2 | | |x| | |
|
|||
|
RD bit set in query |6.1.3.2 | | | | |x|
|
|||
|
RD bit ignored by server is b'cast/m'cast |6.1.3.2 |x| | | | |
|
|||
|
Send only as occasional probe for addr's |6.1.3.2 | |x| | | |
|
|||
|
-----------------------------------------------|-----------|-|-|-|-|-|--
|
|||
|
RESOURCE USAGE: | | | | | | |
|
|||
|
| | | | | | |
|
|||
|
Transmission controls, per [DNS:2] |6.1.3.3 |x| | | | |
|
|||
|
Finite bounds per request |6.1.3.3 |x| | | | |
|
|||
|
Failure after retries => soft error |6.1.3.3 |x| | | | |
|
|||
|
Cache temporary failures |6.1.3.3 | |x| | | |
|
|||
|
Cache negative responses |6.1.3.3 | |x| | | |
|
|||
|
Retries use exponential backoff |6.1.3.3 | |x| | | |
|
|||
|
Upper, lower bounds |6.1.3.3 | |x| | | |
|
|||
|
Client handle Source Quench |6.1.3.3 | |x| | | |
|
|||
|
Server ignore Source Quench |6.1.3.3 | | |x| | |
|
|||
|
-----------------------------------------------|-----------|-|-|-|-|-|--
|
|||
|
USER INTERFACE: | | | | | | |
|
|||
|
| | | | | | |
|
|||
|
All programs have access to DNS interface |6.1.4.2 |x| | | | |
|
|||
|
Able to request all info for given name |6.1.4.2 |x| | | | |
|
|||
|
Returns complete info or error |6.1.4.2 |x| | | | |
|
|||
|
Special interfaces |6.1.4.2 | | |x| | |
|
|||
|
Name<->Address translation |6.1.4.2 |x| | | | |
|
|||
|
| | | | | | |
|
|||
|
Abbreviation Facilities: |6.1.4.3 | | |x| | |
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 85]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 SUPPORT SERVICES -- DOMAINS October 1989
|
|||
|
|
|||
|
|
|||
|
Convention for complete names |6.1.4.3 |x| | | | |
|
|||
|
Conversion exactly once |6.1.4.3 |x| | | | |
|
|||
|
Conversion in proper context |6.1.4.3 |x| | | | |
|
|||
|
Search list: |6.1.4.3 | | |x| | |
|
|||
|
Administrator can disable |6.1.4.3 | |x| | | |
|
|||
|
Prevention of excessive root queries |6.1.4.3 |x| | | | |
|
|||
|
Both methods |6.1.4.3 | |x| | | |
|
|||
|
-----------------------------------------------|-----------|-|-|-|-|-|--
|
|||
|
-----------------------------------------------|-----------|-|-|-|-|-|--
|
|||
|
|
|||
|
1. Unless there is private agreement between particular resolver and
|
|||
|
particular server.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 86]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 SUPPORT SERVICES -- INITIALIZATION October 1989
|
|||
|
|
|||
|
|
|||
|
6.2 HOST INITIALIZATION
|
|||
|
|
|||
|
6.2.1 INTRODUCTION
|
|||
|
|
|||
|
This section discusses the initialization of host software
|
|||
|
across a connected network, or more generally across an
|
|||
|
Internet path. This is necessary for a diskless host, and may
|
|||
|
optionally be used for a host with disk drives. For a diskless
|
|||
|
host, the initialization process is called "network booting"
|
|||
|
and is controlled by a bootstrap program located in a boot ROM.
|
|||
|
|
|||
|
To initialize a diskless host across the network, there are two
|
|||
|
distinct phases:
|
|||
|
|
|||
|
(1) Configure the IP layer.
|
|||
|
|
|||
|
Diskless machines often have no permanent storage in which
|
|||
|
to store network configuration information, so that
|
|||
|
sufficient configuration information must be obtained
|
|||
|
dynamically to support the loading phase that follows.
|
|||
|
This information must include at least the IP addresses of
|
|||
|
the host and of the boot server. To support booting
|
|||
|
across a gateway, the address mask and a list of default
|
|||
|
gateways are also required.
|
|||
|
|
|||
|
(2) Load the host system code.
|
|||
|
|
|||
|
During the loading phase, an appropriate file transfer
|
|||
|
protocol is used to copy the system code across the
|
|||
|
network from the boot server.
|
|||
|
|
|||
|
A host with a disk may perform the first step, dynamic
|
|||
|
configuration. This is important for microcomputers, whose
|
|||
|
floppy disks allow network configuration information to be
|
|||
|
mistakenly duplicated on more than one host. Also,
|
|||
|
installation of new hosts is much simpler if they automatically
|
|||
|
obtain their configuration information from a central server,
|
|||
|
saving administrator time and decreasing the probability of
|
|||
|
mistakes.
|
|||
|
|
|||
|
6.2.2 REQUIREMENTS
|
|||
|
|
|||
|
6.2.2.1 Dynamic Configuration
|
|||
|
|
|||
|
A number of protocol provisions have been made for dynamic
|
|||
|
configuration.
|
|||
|
|
|||
|
o ICMP Information Request/Reply messages
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 87]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 SUPPORT SERVICES -- INITIALIZATION October 1989
|
|||
|
|
|||
|
|
|||
|
This obsolete message pair was designed to allow a host
|
|||
|
to find the number of the network it is on.
|
|||
|
Unfortunately, it was useful only if the host already
|
|||
|
knew the host number part of its IP address,
|
|||
|
information that hosts requiring dynamic configuration
|
|||
|
seldom had.
|
|||
|
|
|||
|
o Reverse Address Resolution Protocol (RARP) [BOOT:4]
|
|||
|
|
|||
|
RARP is a link-layer protocol for a broadcast medium
|
|||
|
that allows a host to find its IP address given its
|
|||
|
link layer address. Unfortunately, RARP does not work
|
|||
|
across IP gateways and therefore requires a RARP server
|
|||
|
on every network. In addition, RARP does not provide
|
|||
|
any other configuration information.
|
|||
|
|
|||
|
o ICMP Address Mask Request/Reply messages
|
|||
|
|
|||
|
These ICMP messages allow a host to learn the address
|
|||
|
mask for a particular network interface.
|
|||
|
|
|||
|
o BOOTP Protocol [BOOT:2]
|
|||
|
|
|||
|
This protocol allows a host to determine the IP
|
|||
|
addresses of the local host and the boot server, the
|
|||
|
name of an appropriate boot file, and optionally the
|
|||
|
address mask and list of default gateways. To locate a
|
|||
|
BOOTP server, the host broadcasts a BOOTP request using
|
|||
|
UDP. Ad hoc gateway extensions have been used to
|
|||
|
transmit the BOOTP broadcast through gateways, and in
|
|||
|
the future the IP Multicasting facility will provide a
|
|||
|
standard mechanism for this purpose.
|
|||
|
|
|||
|
|
|||
|
The suggested approach to dynamic configuration is to use
|
|||
|
the BOOTP protocol with the extensions defined in "BOOTP
|
|||
|
Vendor Information Extensions" RFC-1084 [BOOT:3]. RFC-1084
|
|||
|
defines some important general (not vendor-specific)
|
|||
|
extensions. In particular, these extensions allow the
|
|||
|
address mask to be supplied in BOOTP; we RECOMMEND that the
|
|||
|
address mask be supplied in this manner.
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
Historically, subnetting was defined long after IP, and
|
|||
|
so a separate mechanism (ICMP Address Mask messages)
|
|||
|
was designed to supply the address mask to a host.
|
|||
|
However, the IP address mask and the corresponding IP
|
|||
|
address conceptually form a pair, and for operational
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 88]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 SUPPORT SERVICES -- INITIALIZATION October 1989
|
|||
|
|
|||
|
|
|||
|
simplicity they ought to be defined at the same time
|
|||
|
and by the same mechanism, whether a configuration file
|
|||
|
or a dynamic mechanism like BOOTP.
|
|||
|
|
|||
|
Note that BOOTP is not sufficiently general to specify
|
|||
|
the configurations of all interfaces of a multihomed
|
|||
|
host. A multihomed host must either use BOOTP
|
|||
|
separately for each interface, or configure one
|
|||
|
interface using BOOTP to perform the loading, and
|
|||
|
perform the complete initialization from a file later.
|
|||
|
|
|||
|
Application layer configuration information is expected
|
|||
|
to be obtained from files after loading of the system
|
|||
|
code.
|
|||
|
|
|||
|
6.2.2.2 Loading Phase
|
|||
|
|
|||
|
A suggested approach for the loading phase is to use TFTP
|
|||
|
[BOOT:1] between the IP addresses established by BOOTP.
|
|||
|
|
|||
|
TFTP to a broadcast address SHOULD NOT be used, for reasons
|
|||
|
explained in Section 4.2.3.4.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 89]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 SUPPORT SERVICES -- MANAGEMENT October 1989
|
|||
|
|
|||
|
|
|||
|
6.3 REMOTE MANAGEMENT
|
|||
|
|
|||
|
6.3.1 INTRODUCTION
|
|||
|
|
|||
|
The Internet community has recently put considerable effort
|
|||
|
into the development of network management protocols. The
|
|||
|
result has been a two-pronged approach [MGT:1, MGT:6]: the
|
|||
|
Simple Network Management Protocol (SNMP) [MGT:4] and the
|
|||
|
Common Management Information Protocol over TCP (CMOT) [MGT:5].
|
|||
|
|
|||
|
In order to be managed using SNMP or CMOT, a host will need to
|
|||
|
implement an appropriate management agent. An Internet host
|
|||
|
SHOULD include an agent for either SNMP or CMOT.
|
|||
|
|
|||
|
Both SNMP and CMOT operate on a Management Information Base
|
|||
|
(MIB) that defines a collection of management values. By
|
|||
|
reading and setting these values, a remote application may
|
|||
|
query and change the state of the managed system.
|
|||
|
|
|||
|
A standard MIB [MGT:3] has been defined for use by both
|
|||
|
management protocols, using data types defined by the Structure
|
|||
|
of Management Information (SMI) defined in [MGT:2]. Additional
|
|||
|
MIB variables can be introduced under the "enterprises" and
|
|||
|
"experimental" subtrees of the MIB naming space [MGT:2].
|
|||
|
|
|||
|
Every protocol module in the host SHOULD implement the relevant
|
|||
|
MIB variables. A host SHOULD implement the MIB variables as
|
|||
|
defined in the most recent standard MIB, and MAY implement
|
|||
|
other MIB variables when appropriate and useful.
|
|||
|
|
|||
|
6.3.2 PROTOCOL WALK-THROUGH
|
|||
|
|
|||
|
The MIB is intended to cover both hosts and gateways, although
|
|||
|
there may be detailed differences in MIB application to the two
|
|||
|
cases. This section contains the appropriate interpretation of
|
|||
|
the MIB for hosts. It is likely that later versions of the MIB
|
|||
|
will include more entries for host management.
|
|||
|
|
|||
|
A managed host must implement the following groups of MIB
|
|||
|
object definitions: System, Interfaces, Address Translation,
|
|||
|
IP, ICMP, TCP, and UDP.
|
|||
|
|
|||
|
The following specific interpretations apply to hosts:
|
|||
|
|
|||
|
o ipInHdrErrors
|
|||
|
|
|||
|
Note that the error "time-to-live exceeded" can occur in a
|
|||
|
host only when it is forwarding a source-routed datagram.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 90]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 SUPPORT SERVICES -- MANAGEMENT October 1989
|
|||
|
|
|||
|
|
|||
|
o ipOutNoRoutes
|
|||
|
|
|||
|
This object counts datagrams discarded because no route
|
|||
|
can be found. This may happen in a host if all the
|
|||
|
default gateways in the host's configuration are down.
|
|||
|
|
|||
|
o ipFragOKs, ipFragFails, ipFragCreates
|
|||
|
|
|||
|
A host that does not implement intentional fragmentation
|
|||
|
(see "Fragmentation" section of [INTRO:1]) MUST return the
|
|||
|
value zero for these three objects.
|
|||
|
|
|||
|
o icmpOutRedirects
|
|||
|
|
|||
|
For a host, this object MUST always be zero, since hosts
|
|||
|
do not send Redirects.
|
|||
|
|
|||
|
o icmpOutAddrMaskReps
|
|||
|
|
|||
|
For a host, this object MUST always be zero, unless the
|
|||
|
host is an authoritative source of address mask
|
|||
|
information.
|
|||
|
|
|||
|
o ipAddrTable
|
|||
|
|
|||
|
For a host, the "IP Address Table" object is effectively a
|
|||
|
table of logical interfaces.
|
|||
|
|
|||
|
o ipRoutingTable
|
|||
|
|
|||
|
For a host, the "IP Routing Table" object is effectively a
|
|||
|
combination of the host's Routing Cache and the static
|
|||
|
route table described in "Routing Outbound Datagrams"
|
|||
|
section of [INTRO:1].
|
|||
|
|
|||
|
Within each ipRouteEntry, ipRouteMetric1...4 normally will
|
|||
|
have no meaning for a host and SHOULD always be -1, while
|
|||
|
ipRouteType will normally have the value "remote".
|
|||
|
|
|||
|
If destinations on the connected network do not appear in
|
|||
|
the Route Cache (see "Routing Outbound Datagrams section
|
|||
|
of [INTRO:1]), there will be no entries with ipRouteType
|
|||
|
of "direct".
|
|||
|
|
|||
|
|
|||
|
DISCUSSION:
|
|||
|
The current MIB does not include Type-of-Service in an
|
|||
|
ipRouteEntry, but a future revision is expected to make
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 91]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 SUPPORT SERVICES -- MANAGEMENT October 1989
|
|||
|
|
|||
|
|
|||
|
this addition.
|
|||
|
|
|||
|
We also expect the MIB to be expanded to allow the remote
|
|||
|
management of applications (e.g., the ability to partially
|
|||
|
reconfigure mail systems). Network service applications
|
|||
|
such as mail systems should therefore be written with the
|
|||
|
"hooks" for remote management.
|
|||
|
|
|||
|
6.3.3 MANAGEMENT REQUIREMENTS SUMMARY
|
|||
|
|
|||
|
| | | | |S| |
|
|||
|
| | | | |H| |F
|
|||
|
| | | | |O|M|o
|
|||
|
| | |S| |U|U|o
|
|||
|
| | |H| |L|S|t
|
|||
|
| |M|O| |D|T|n
|
|||
|
| |U|U|M| | |o
|
|||
|
| |S|L|A|N|N|t
|
|||
|
| |T|D|Y|O|O|t
|
|||
|
FEATURE |SECTION | | | |T|T|e
|
|||
|
-----------------------------------------------|-----------|-|-|-|-|-|--
|
|||
|
Support SNMP or CMOT agent |6.3.1 | |x| | | |
|
|||
|
Implement specified objects in standard MIB |6.3.1 | |x| | | |
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 92]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 SUPPORT SERVICES -- MANAGEMENT October 1989
|
|||
|
|
|||
|
|
|||
|
7. REFERENCES
|
|||
|
|
|||
|
This section lists the primary references with which every
|
|||
|
implementer must be thoroughly familiar. It also lists some
|
|||
|
secondary references that are suggested additional reading.
|
|||
|
|
|||
|
INTRODUCTORY REFERENCES:
|
|||
|
|
|||
|
|
|||
|
[INTRO:1] "Requirements for Internet Hosts -- Communication Layers,"
|
|||
|
IETF Host Requirements Working Group, R. Braden, Ed., RFC-1122,
|
|||
|
October 1989.
|
|||
|
|
|||
|
[INTRO:2] "DDN Protocol Handbook," NIC-50004, NIC-50005, NIC-50006,
|
|||
|
(three volumes), SRI International, December 1985.
|
|||
|
|
|||
|
[INTRO:3] "Official Internet Protocols," J. Reynolds and J. Postel,
|
|||
|
RFC-1011, May 1987.
|
|||
|
|
|||
|
This document is republished periodically with new RFC numbers;
|
|||
|
the latest version must be used.
|
|||
|
|
|||
|
[INTRO:4] "Protocol Document Order Information," O. Jacobsen and J.
|
|||
|
Postel, RFC-980, March 1986.
|
|||
|
|
|||
|
[INTRO:5] "Assigned Numbers," J. Reynolds and J. Postel, RFC-1010,
|
|||
|
May 1987.
|
|||
|
|
|||
|
This document is republished periodically with new RFC numbers;
|
|||
|
the latest version must be used.
|
|||
|
|
|||
|
|
|||
|
TELNET REFERENCES:
|
|||
|
|
|||
|
|
|||
|
[TELNET:1] "Telnet Protocol Specification," J. Postel and J.
|
|||
|
Reynolds, RFC-854, May 1983.
|
|||
|
|
|||
|
[TELNET:2] "Telnet Option Specification," J. Postel and J. Reynolds,
|
|||
|
RFC-855, May 1983.
|
|||
|
|
|||
|
[TELNET:3] "Telnet Binary Transmission," J. Postel and J. Reynolds,
|
|||
|
RFC-856, May 1983.
|
|||
|
|
|||
|
[TELNET:4] "Telnet Echo Option," J. Postel and J. Reynolds, RFC-857,
|
|||
|
May 1983.
|
|||
|
|
|||
|
[TELNET:5] "Telnet Suppress Go Ahead Option," J. Postel and J.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 93]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 SUPPORT SERVICES -- MANAGEMENT October 1989
|
|||
|
|
|||
|
|
|||
|
Reynolds, RFC-858, May 1983.
|
|||
|
|
|||
|
[TELNET:6] "Telnet Status Option," J. Postel and J. Reynolds, RFC-
|
|||
|
859, May 1983.
|
|||
|
|
|||
|
[TELNET:7] "Telnet Timing Mark Option," J. Postel and J. Reynolds,
|
|||
|
RFC-860, May 1983.
|
|||
|
|
|||
|
[TELNET:8] "Telnet Extended Options List," J. Postel and J.
|
|||
|
Reynolds, RFC-861, May 1983.
|
|||
|
|
|||
|
[TELNET:9] "Telnet End-Of-Record Option," J. Postel, RFC-855,
|
|||
|
December 1983.
|
|||
|
|
|||
|
[TELNET:10] "Telnet Terminal-Type Option," J. VanBokkelen, RFC-1091,
|
|||
|
February 1989.
|
|||
|
|
|||
|
This document supercedes RFC-930.
|
|||
|
|
|||
|
[TELNET:11] "Telnet Window Size Option," D. Waitzman, RFC-1073,
|
|||
|
October 1988.
|
|||
|
|
|||
|
[TELNET:12] "Telnet Linemode Option," D. Borman, RFC-1116, August
|
|||
|
1989.
|
|||
|
|
|||
|
[TELNET:13] "Telnet Terminal Speed Option," C. Hedrick, RFC-1079,
|
|||
|
December 1988.
|
|||
|
|
|||
|
[TELNET:14] "Telnet Remote Flow Control Option," C. Hedrick, RFC-
|
|||
|
1080, November 1988.
|
|||
|
|
|||
|
|
|||
|
SECONDARY TELNET REFERENCES:
|
|||
|
|
|||
|
|
|||
|
[TELNET:15] "Telnet Protocol," MIL-STD-1782, U.S. Department of
|
|||
|
Defense, May 1984.
|
|||
|
|
|||
|
This document is intended to describe the same protocol as RFC-
|
|||
|
854. In case of conflict, RFC-854 takes precedence, and the
|
|||
|
present document takes precedence over both.
|
|||
|
|
|||
|
[TELNET:16] "SUPDUP Protocol," M. Crispin, RFC-734, October 1977.
|
|||
|
|
|||
|
[TELNET:17] "Telnet SUPDUP Option," M. Crispin, RFC-736, October
|
|||
|
1977.
|
|||
|
|
|||
|
[TELNET:18] "Data Entry Terminal Option," J. Day, RFC-732, June 1977.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 94]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 SUPPORT SERVICES -- MANAGEMENT October 1989
|
|||
|
|
|||
|
|
|||
|
[TELNET:19] "TELNET Data Entry Terminal option -- DODIIS
|
|||
|
Implementation," A. Yasuda and T. Thompson, RFC-1043, February
|
|||
|
1988.
|
|||
|
|
|||
|
|
|||
|
FTP REFERENCES:
|
|||
|
|
|||
|
|
|||
|
[FTP:1] "File Transfer Protocol," J. Postel and J. Reynolds, RFC-
|
|||
|
959, October 1985.
|
|||
|
|
|||
|
[FTP:2] "Document File Format Standards," J. Postel, RFC-678,
|
|||
|
December 1974.
|
|||
|
|
|||
|
[FTP:3] "File Transfer Protocol," MIL-STD-1780, U.S. Department of
|
|||
|
Defense, May 1984.
|
|||
|
|
|||
|
This document is based on an earlier version of the FTP
|
|||
|
specification (RFC-765) and is obsolete.
|
|||
|
|
|||
|
|
|||
|
TFTP REFERENCES:
|
|||
|
|
|||
|
|
|||
|
[TFTP:1] "The TFTP Protocol Revision 2," K. Sollins, RFC-783, June
|
|||
|
1981.
|
|||
|
|
|||
|
|
|||
|
MAIL REFERENCES:
|
|||
|
|
|||
|
|
|||
|
[SMTP:1] "Simple Mail Transfer Protocol," J. Postel, RFC-821, August
|
|||
|
1982.
|
|||
|
|
|||
|
[SMTP:2] "Standard For The Format of ARPA Internet Text Messages,"
|
|||
|
D. Crocker, RFC-822, August 1982.
|
|||
|
|
|||
|
This document obsoleted an earlier specification, RFC-733.
|
|||
|
|
|||
|
[SMTP:3] "Mail Routing and the Domain System," C. Partridge, RFC-
|
|||
|
974, January 1986.
|
|||
|
|
|||
|
This RFC describes the use of MX records, a mandatory extension
|
|||
|
to the mail delivery process.
|
|||
|
|
|||
|
[SMTP:4] "Duplicate Messages and SMTP," C. Partridge, RFC-1047,
|
|||
|
February 1988.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 95]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 SUPPORT SERVICES -- MANAGEMENT October 1989
|
|||
|
|
|||
|
|
|||
|
[SMTP:5a] "Mapping between X.400 and RFC 822," S. Kille, RFC-987,
|
|||
|
June 1986.
|
|||
|
|
|||
|
[SMTP:5b] "Addendum to RFC-987," S. Kille, RFC-???, September 1987.
|
|||
|
|
|||
|
The two preceding RFC's define a proposed standard for
|
|||
|
gatewaying mail between the Internet and the X.400 environments.
|
|||
|
|
|||
|
[SMTP:6] "Simple Mail Transfer Protocol," MIL-STD-1781, U.S.
|
|||
|
Department of Defense, May 1984.
|
|||
|
|
|||
|
This specification is intended to describe the same protocol as
|
|||
|
does RFC-821. However, MIL-STD-1781 is incomplete; in
|
|||
|
particular, it does not include MX records [SMTP:3].
|
|||
|
|
|||
|
[SMTP:7] "A Content-Type Field for Internet Messages," M. Sirbu,
|
|||
|
RFC-1049, March 1988.
|
|||
|
|
|||
|
|
|||
|
DOMAIN NAME SYSTEM REFERENCES:
|
|||
|
|
|||
|
|
|||
|
[DNS:1] "Domain Names - Concepts and Facilities," P. Mockapetris,
|
|||
|
RFC-1034, November 1987.
|
|||
|
|
|||
|
This document and the following one obsolete RFC-882, RFC-883,
|
|||
|
and RFC-973.
|
|||
|
|
|||
|
[DNS:2] "Domain Names - Implementation and Specification," RFC-1035,
|
|||
|
P. Mockapetris, November 1987.
|
|||
|
|
|||
|
|
|||
|
[DNS:3] "Mail Routing and the Domain System," C. Partridge, RFC-974,
|
|||
|
January 1986.
|
|||
|
|
|||
|
|
|||
|
[DNS:4] "DoD Internet Host Table Specification," K. Harrenstein,
|
|||
|
RFC-952, M. Stahl, E. Feinler, October 1985.
|
|||
|
|
|||
|
SECONDARY DNS REFERENCES:
|
|||
|
|
|||
|
|
|||
|
[DNS:5] "Hostname Server," K. Harrenstein, M. Stahl, E. Feinler,
|
|||
|
RFC-953, October 1985.
|
|||
|
|
|||
|
[DNS:6] "Domain Administrators Guide," M. Stahl, RFC-1032, November
|
|||
|
1987.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 96]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 SUPPORT SERVICES -- MANAGEMENT October 1989
|
|||
|
|
|||
|
|
|||
|
[DNS:7] "Domain Administrators Operations Guide," M. Lottor, RFC-
|
|||
|
1033, November 1987.
|
|||
|
|
|||
|
[DNS:8] "The Domain Name System Handbook," Vol. 4 of Internet
|
|||
|
Protocol Handbook, NIC 50007, SRI Network Information Center,
|
|||
|
August 1989.
|
|||
|
|
|||
|
|
|||
|
SYSTEM INITIALIZATION REFERENCES:
|
|||
|
|
|||
|
|
|||
|
[BOOT:1] "Bootstrap Loading Using TFTP," R. Finlayson, RFC-906, June
|
|||
|
1984.
|
|||
|
|
|||
|
[BOOT:2] "Bootstrap Protocol (BOOTP)," W. Croft and J. Gilmore, RFC-
|
|||
|
951, September 1985.
|
|||
|
|
|||
|
[BOOT:3] "BOOTP Vendor Information Extensions," J. Reynolds, RFC-
|
|||
|
1084, December 1988.
|
|||
|
|
|||
|
Note: this RFC revised and obsoleted RFC-1048.
|
|||
|
|
|||
|
[BOOT:4] "A Reverse Address Resolution Protocol," R. Finlayson, T.
|
|||
|
Mann, J. Mogul, and M. Theimer, RFC-903, June 1984.
|
|||
|
|
|||
|
|
|||
|
MANAGEMENT REFERENCES:
|
|||
|
|
|||
|
|
|||
|
[MGT:1] "IAB Recommendations for the Development of Internet Network
|
|||
|
Management Standards," V. Cerf, RFC-1052, April 1988.
|
|||
|
|
|||
|
[MGT:2] "Structure and Identification of Management Information for
|
|||
|
TCP/IP-based internets," M. Rose and K. McCloghrie, RFC-1065,
|
|||
|
August 1988.
|
|||
|
|
|||
|
[MGT:3] "Management Information Base for Network Management of
|
|||
|
TCP/IP-based internets," M. Rose and K. McCloghrie, RFC-1066,
|
|||
|
August 1988.
|
|||
|
|
|||
|
[MGT:4] "A Simple Network Management Protocol," J. Case, M. Fedor,
|
|||
|
M. Schoffstall, and C. Davin, RFC-1098, April 1989.
|
|||
|
|
|||
|
[MGT:5] "The Common Management Information Services and Protocol
|
|||
|
over TCP/IP," U. Warrier and L. Besaw, RFC-1095, April 1989.
|
|||
|
|
|||
|
[MGT:6] "Report of the Second Ad Hoc Network Management Review
|
|||
|
Group," V. Cerf, RFC-1109, August 1989.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 97]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RFC1123 SUPPORT SERVICES -- MANAGEMENT October 1989
|
|||
|
|
|||
|
|
|||
|
Security Considerations
|
|||
|
|
|||
|
There are many security issues in the application and support
|
|||
|
programs of host software, but a full discussion is beyond the scope
|
|||
|
of this RFC. Security-related issues are mentioned in sections
|
|||
|
concerning TFTP (Sections 4.2.1, 4.2.3.4, 4.2.3.5), the SMTP VRFY and
|
|||
|
EXPN commands (Section 5.2.3), the SMTP HELO command (5.2.5), and the
|
|||
|
SMTP DATA command (Section 5.2.8).
|
|||
|
|
|||
|
Author's Address
|
|||
|
|
|||
|
Robert Braden
|
|||
|
USC/Information Sciences Institute
|
|||
|
4676 Admiralty Way
|
|||
|
Marina del Rey, CA 90292-6695
|
|||
|
|
|||
|
Phone: (213) 822 1511
|
|||
|
|
|||
|
EMail: Braden@ISI.EDU
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Internet Engineering Task Force [Page 98]
|
|||
|
|