rfc908.txt
来自「RFC 的详细文档!」· 文本 代码 · 共 2,193 行 · 第 1/5 页
TXT
2,193 行
The sequence number of the oldest unacknowledged segment.
SND.MAX
The maximum number of outstanding (unacknowledged) segments
that can be sent. The sender should not send more than this
number of segments without getting an acknowledgement.
SND.ISS
The initial send sequence number. This is the sequence
number that was sent in the SYN segment.
Receive Sequence Number Variables:
RCV.CUR
The sequence number of the last segment received correctly
and in sequence.
RCV.MAX
The maximum number of segments that can be buffered for this
connection.
RCV.IRS
The initial receive sequence number. This is the sequence
number of the SYN segment that established this connection.
RCVDSEQNO[n]
The array of sequence numbers of segments that have been
received and acknowledged out of sequence.
Other Variables:
CLOSEWAIT
A timer used to time out the CLOSE-WAIT state.
SBUF.MAX
The largest possible segment (in octets) that can legally be
sent. This variable is specified by the foreign host in the
Page 12
RDP Specification Protocol Operation
SYN segment during connection establishment.
RBUF.MAX
The largest possible segment (in octets) that can be
received. This variable is specified by the user when the
connection is opened. The variable is sent to the foreign
host in the SYN segment.
Variables from Current Segment:
SEG.SEQ
The sequence number of the segment currently being
processed.
SEG.ACK
The acknowledgement sequence number in the segment currently
being processed.
SEG.MAX
The maximum number of outstanding segments the receiver is
willing to hold, as specified in the SYN segment that
established the connection.
SEG.BMAX
The maximum segment size (in octets) accepted by the foreign
host on a connection, as specified in the SYN segment that
established the connection.
3.2.5 Closing a Connection
The closing of a connection can be initiated by a Close
request from the user process or by receipt of an RST segment
from the other end of the connection. In the case of the Close
request, RDP will send an RST segment to the other side of the
connection and then enter the CLOSE-WAIT state for a period of
time. While in the CLOSE-WAIT state, RDP will discard segments
received from the other side of the connection. When the time-
out period expires, the connection record is deallocated and the
connection ceases to exist. This simple connection closing
facility requires that users determine that all data has been
Page 13
RFC-908 July 1984
reliably delivered before requesting a close of the connection.
3.2.6 Detecting an Half-Open Connection
If one side of a connection crashes, the connection may be
left with the other side still active. This situation is termed
to be an half-open connection. For many cases, the active RDP
will eventually detect the half-open connection and reset. Two
examples of recovery from half-open connections are provided in
sections 5.7 and 5.8. Recovery is usually achieved by user
activity or by the crashed host's attempts to re-establish the
connection.
However, there are cases where recovery is not possible
without action by the RDP itself. For example, if all connection
blocks are in use, attempts to re-establish a broken connection
will be rejected. In this case, the RDP may attempt to free
resources by verifying that connections are fully open. It does
this by sending a NUL segment to each of the other RDPs. An
acknowledgement indicates the connection is still open and valid.
To minimize network overhead, verification of connections
should only be done when necessary to prevent a deadlock
situation. Only inactive connections should be verified. An
inactive connection is defined to be a connection that has no
outstanding unacknowledged segments, has no segments in the user
input or output queues, and that has not had any traffic for some
period of time.
3.3 Data Communication
Data flows through an RDP connection in the form of
segments. Each user message submitted with a Send request is
packaged for transport as a single RDP segment. Each RDP segment
is packaged as an RDP header and one or more octets of data. RDP
will not attempt to fragment a large user message into smaller
segments and re-assemble the message on the receiving end. This
differs from a byte-stream protocol such as TCP which supports
the transfer of an indeterminate length stream of data between
ports, buffering data until it is requested by the receiver.
Page 14
RDP Specification Protocol Operation
At the RDP level, outgoing segments, as they are created,
are queued as input to the IP layer. Each segment is held by the
sending RDP until it is acknowledged by the foreign host.
Incoming segments are queued as input to the user process through
the user interface. Segments are acknowledged when they have
been accepted by the receiving RDP.
The receiving end of each connection specifies the maximum
segment size it will accept. Any attempt by the sender to
transmit a larger segment is an error. If RDP determines that a
buffer submitted with a Send request exceeds the maximum size
segment permitted on the connection, RDP will return an error to
the user. In addition, RDP will abort a connection with an RST
segment if an incoming segment contains more data than the
maximum acceptable segment size. No attempt will be made to
recover from or otherwise overcome this error condition.
If sequenced delivery of segments is necessary for a
connection, the requirement must be stated when the connection is
established. Sequenced delivery is specified when the Open
request is made. Sequenced delivery of segments will then be the
mode of delivery for the life of the connection.
3.4 Reliable Communication
RDP implements a reliable message service through a number
of mechanisms. These include the insertion of sequence numbers
and checksums into segments, the positive acknowledgement of
segment receipt, and timeout and retransmission of missing
segments.
3.4.1 Segment Sequence Numbers
Each segment transporting data has a sequence number that
uniquely identifies it among all other segments in the same
connection. The initial sequence number is chosen when the
connection is opened and is selected by reading a value from a
monotonically increasing clock. Each time a segment containing
data is transmitted, the sequence number is incremented.
Segments containing no data do not increment the sequence number.
However, the SYN and NUL segments, which cannot contain data, are
exceptions. The SYN segment is always sent with a unique
sequence number, the initial sequence number. The NUL segment is
Page 15
RFC-908 July 1984
sent with the next valid sequence number.
3.4.2 Checksums
Each RDP segment contains a checksum to allow the receiver
to detect damaged segments. RDP uses a non-linear checksum
algorithm to compute a checksum that is 32-bits wide and operates
on data in units of four octets (32 bits). The area that is
covered by the checksum includes both the RDP header and the RDP
data area.
If a segment contains a number of header and data octets
that is not an integral multiple of 4 octets, the last octet is
padded on the right with zeros to form a 32-bit quantity for
computation purposes. The padding zeros are not transmitted as
part of the segment. While computing the checksum, the checksum
field itself is replaced with zeros. The actual algorithm is
described in Section 4.2.1.
3.4.3 Positive Acknowledgement of Segments
RDP assumes it has only an unreliable datagram service to
deliver segments. To guarantee delivery of segments in this
environment, RDP uses positive acknowledgement and retransmission
of segments. Each segment containing data and the SYN and NUL
segments are acknowledged when they are correctly received and
accepted by the destination host. Segments containing only an
acknowledgement are not acknowledged. Damaged segments are
discarded and are not acknowledged. Segments are retransmitted
when there is no timely acknowledgement of the segment by the
destination host.
RDP allows two types of acknowledgement. A cumulative
acknowledgement is used to acknowledge all segments up to a
specified sequence number. This type of acknowledgement can be
sent using fixed length fields within the RDP header.
Specifically, the ACK control flag is set and the last
acknowledged sequence number is placed in the Acknowledgement
Number field.
The extended or non-cumulative acknowledgement allows the
receiver to acknowledge segments out of sequence. This type of
acknowledgement is sent using the EACK control flag and the
Page 16
RDP Specification Protocol Operation
variable length fields in the RDP segment header. The variable
length header fields are used to hold the sequence numbers of the
acknowledged out-of-sequence segments.
The type of acknowledgement used is simply a function of the
order in which segments arrive. Whenever possible, segments are
acknowledged using the cumulative acknowledgement segment. Only
out-of-sequence segments are acknowledged using the extended
acknowledgement option.
The user process, when initiating the connection, cannot
restrict the type of acknowledgement used on the connection. The
receiver may choose not to implement out-of-sequence
acknowledgements. On the other hand, the sender may choose to
ignore out-of-sequence acknowledgements.
3.4.4 Retransmission Timeout
Segments may be lost in transmission for two reasons: they
may be lost or damaged due to the effects of the lossy
transmission media; or they may be discarded by the receiving
RDP. The positive acknowledgement policy requires the receiver
to acknowledge a segment only when the segment has been correctly
received and accepted.
To detect missing segments, the sending RDP must use a
retransmission timer for each segment transmitted. The timer is
set to a value approximating the transmission time of the segment
in the network. When an acknowledgement is received for a
segment, the timer is cancelled for that segment. If the timer
expires before an acknowledgement is received for a segment, that
segment is retransmitted and the timer is restarted.
3.5 Flow Control and Window Management
RDP employs a simple flow control mechanism that is based on
the number of unacknowledged segments sent and the maximum
allowed number of outstanding (unacknowledged) segments. Each
RDP connection has an associated set of flow control parameters
that include the maximum number of outstanding segments for each
side of a connection. These parameters are specified when the
connection is opened with the Open request, with each side of the
connection specifying its own parameters. The parameters are
Page 17
RFC-908 July 1984
passed from one host to another in the initial connection
segments.
The values specified for these parameters should be based on
the amount and size of buffers that the RDP is willing to
allocate to a connection. The particular RDP implementation can
set the parameters to values that are optimal for its buffering
scheme. Once these parameters are set they remain unchanged
throughout the life of the connection.
RDP employs the concept of a sequence number window for
acceptable segment sequence numbers. The left edge of the window
is the number of the last in-sequence acknowledged sequence
number plus one. The right edge of the window is equal to the
left edge plus twice the allowed maximum number of outstanding
segments. The allowed maximum number of outstanding segments is
the number of segments the transmitting RDP software is allowed
to send without receiving any acknowledgement.
The flow control and window management parameters are used
as follows. The RDP module in the transmitting host sends
segments until it reaches the connection's segment limit
specified by the receiving process. Once this limit is reached,
the transmitting RDP module may only send a new segment for each
acknowledged segment.
When a received segment has a sequence number that falls
within the acceptance window, it is acknowledged. If the
sequence number is equal to the left-hand edge (i.e., it is the
next sequence number expected), the segment is acknowledged with
a cumulative acknowledgement (ACK). The acceptance window is
adjusted by adding one to the value of the edges. If the
sequence number is within the acceptance window but is out of
sequence, it is acknowledged with a non-cumulative
acknowledgement (EACK). The window is not adjusted, but the
receipt of the out-of-sequence segment is recorded.
When segments are acknowledged out of order, the
transmitting RDP module must not transmit beyond the acceptance
window. This could occur if one segment is not acknowledged but
all subsequent segments are received and acknowledged. This
condition will fix the left edge of the window at the sequence
number of the unacknowledged segment. As additional segments are
transmitted, the next segment to be sent will approach and
eventually overtake the right window edge. At this point all
transmission of new segments will cease until the unacknowledged
segment is acknowledged.
Page 18
RDP Specification Protocol Operation
3.6 User Interface
The user interface to RDP is implementation dependent and
may use system calls, function calls or some other mechanism.
The list of requests that follows is not intended to suggest a
particular implementation.
OPEN Request
Opens a connection. Parameters include type (active or
passive), local port, remote port, remote host address,
maximum segment size, maximum number of unacknowledged
segments, delivery mode (sequenced or non-sequenced). The
connection id, including any allocated port number, is
returned to the user.
SEND Request
Sends a user message. Parameters include connection
identifier, buffer address and data count.
RECEIVE Request
Receives a user message. Parameters include connection
identifier, buffer address and data count.
CLOSE Request
Closes a specified connection. The single parameter is the
connection identifier.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?