分享
 
 
 

RFC908 - Reliable Data Protocol

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

Reliable Data Protocol

RFC-908

David Velten

Robert Hinden

Jack Sax

BBN Communications Corporation

July 1984

Status of This Memo

This RFCspecifies a proposed protocol for the ARPA Internet

community, and requests discussion and suggestions for

improvements. Distribution of this memo is unlimited.

RDP Specification

Table of Contents

1 IntrodUCtion.......................................... 1

2 General Description................................... 3

2.1 Motivation.......................................... 3

2.2 Relation to Other Protocols......................... 5

3 Protocol Operation.................................... 7

3.1 Protocol Service Objectives......................... 7

3.2 RDP Connection Management........................... 7

3.2.1 Opening a Connection.............................. 8

3.2.2 Ports............................................. 8

3.2.3 Connection States................................. 8

3.2.4 Connection Record................................ 11

3.2.5 Closing a Connection............................. 13

3.2.6 Detecting an Half-Open Connection................ 14

3.3 Data Communication................................. 14

3.4 Reliable Communication............................. 15

3.4.1 Segment Sequence Numbers......................... 15

3.4.2 Checksums........................................ 16

3.4.3 Positive Acknowledgement of Segments............. 16

3.4.4 Retransmission Timeout........................... 17

3.5 Flow Control and Window Management................. 17

3.6 User Interface..................................... 19

3.7 Event Processing................................... 20

3.7.1 User Request Events.............................. 21

3.7.2 Segment Arrival Events........................... 24

3.7.3 Timeout Events................................... 29

4 RDP Segments and Formats............................. 31

4.1 IP Header Format................................... 31

4.2 RDP Header Format.................................. 32

4.2.1 RDP Header Fields................................ 33

4.3 SYN Segment........................................ 36

4.3.1 SYN Segment Format............................... 36

4.3.2 SYN Segment Fields............................... 37

4.4 ACK Segment........................................ 38

4.4.1 ACK Segment Format............................... 38

4.4.2 ACK Segment Fields............................... 39

4.5 Extended ACK Segment............................... 40

4.5.1 EACK Segment Format.............................. 40

4.5.2 EACK Segment Fields.............................. 40

Page i

RFC-908 July 1984

4.6 RST Segment........................................ 42

4.6.1 RST Segment Format............................... 42

4.7 NUL Segment........................................ 43

4.7.1 NUL segment format............................... 43

5 Examples of Operation................................ 45

5.1 Connection Establishment........................... 45

5.2 Simultaneous Connection Establishment.............. 46

5.3 Lost Segments...................................... 47

5.4 Segments Received Out of Order..................... 48

5.5 Communication Over Long Delay Path................. 49

5.6 Communication Over Long Delay Path With Lost

Segments

.................................................... 50

5.7 Detecting a Half-Open Connection on Crash

Recovery

.................................................... 51

5.8 Detecting a Half-Open Connection from the

Active Side

.................................................... 52

A Implementing a Minimal RDP........................... 53

Page ii

RDP Specification

FIGURES

1 Relation to Other Protocols............................ 5

2 Form of Data Exchange Between Layers................... 6

3 RDP Connection State Diagram.......................... 10

4 Segment Format........................................ 31

5 RDP Header Format..................................... 32

6 SYN Segment Format.................................... 37

7 ACK Segment Format.................................... 38

8 EACK Segment Format................................... 41

9 RST Segment Format.................................... 42

10 NUL Segment Format................................... 43

Page iii

CHAPTER 1

Introduction

The Reliable Data Protocol (RDP) is designed to provide a

reliable data transport service for packet-based applications

such as remote loading and debugging. The protocol is intended

to be simple to implement but still be efficient in environments

where there may be long transmission delays and loss or non-

sequential delivery of message segments.

Although this protocol was designed with applications such

as remote loading and debugging in mind, it may be suitable for

other applications that require reliable message services, such

as computer mail, file transfer, transaction processing, etc.

Some of the concepts used come from a variety of sources.

The authors wish credit to be given to Eric Rosen, Rob Gurwitz,

Jack Haverty, and to acknowledge material adapted from "RFC-793,

The Transmission Control Protocol", edited by Jon Postel. Thanks

to John Linn for the checksum algorithm.

Page 1

RFC-908 July 1984

Page 2

RDP Specification General Description

CHAPTER 2

General Description

2.1 Motivation

RDP is a transport protocol designed to efficiently support

the bulk transfer of data for such host monitoring and control

applications as loading/dumping and remote debugging. It

attempts to provide only those services necessary, in order to be

efficient in operation and small in size. Before designing the

protocol, it was necessary to consider what minimum set of

transport functions would satisfy the requirements of the

intended applications.

The following is a list of requirements for such a transport

protocol:

o Reliable delivery of packets is required. When loading

or dumping a memory image, it is necessary that all

memory segments be delivered. A 'hole' left in the

memory image is not acceptable. However, the internet

environment is a lossy one in which packets can get

damaged or lost. So a positive acknowledgement and

retransmission mechanism is a necessary component of the

protocol.

o Since loading and dumping of memory images over the

internet involves the bulk transfer of large amounts of

data over a lossy network with potentially long delays,

it is necessary that the protocol move data efficiently.

In particular, unnecessary retransmission of segments

should be avoided. If a single segment has been lost but

succeeding segments correctly received, the protocol

should not require the retransmission of all of the

segments.

o Loading and dumping are applications that do not

necessarily require sequenced delivery of segments, as

long as all segments eventually are delivered. So the

protocol need not force sequenced delivery. For these

types of applications, segments may be delivered in the

order in which they arrive.

Page 3

RFC-908 July 1984

o However, some applications may need to know that a

particular piece of data has been delivered before

sending the next. For example, a debugger will want to

know that a command inserting a breakpoint into a host

memory image has been delivered before sending a

"proceed" command. If those segments arrived out of

sequence, the intended results would not be achieved.

The protocol should allow a user to optionally specify

that a connection must deliver segments in sequence-

number order.

o The loading/dumping and debugging applications are well-

defined and lend themselves to easy packetization of the

transferred data. They do not require a complex byte-

stream transfer mechanism.

In order to combine the requirements for bulk transfers of

data and reliable delivery, it is necessary to design a

connection-oriented protocol using a three-way handshake to

synchronize sequence numbers. The protocol seems to be

approaching TCP in complexity, so why was TCP not, in fact,

chosen? The answer is that TCP has some disadvantages for these

applications. In particular:

o TCP is oriented toward a more general environment,

supporting the transfer of a stream of bytes between two

communicating parties. TCP is best suited to an

environment where there is no obvious demarcation of data

in a communications exchange. Much of the difficulty in

developing a TCP implementation stems from the complexity

of supporting this general byte-stream transfer, and thus

a significant amount of complexity can be avoided by

using another protocol. This is not just an

implementation consideration, but also one of efficiency.

o Since TCP does not allow a byte to be acknowledged until

all prior bytes have been acknowledged, it often forces

unnecessary retransmission of data. Therefore, it does

not meet another of the requirements stated above.

o TCP provides sequenced delivery of data to the

application. If the application does not require such

sequenced delivery, a large amount of resources are

wasted in providing it. For example, buffers may be tied

up buffering data until a segment with an earlier

sequence number arrives. The protocol should not force

its segment-sequencing desires on the application.

Page 4

RDP Specification General Description

RDP supports a much simpler set of functions than TCP. The

flow control, buffering, and connection management schemes of RDP

are considerably simpler and less complex. The goal is a

protocol that can be easily and efficiently implemented and that

will serve a range of applications.

RDP functions can also be subset to further reduce the size

of a particular implementation. For example, a target processor

requiring down-loading from another host might implement an RDP

module supporting only the passive Open function and a single

connection. The module might also choose not to implement out-

of-sequence acknowledgements.

2.2 Relation to Other Protocols

RDP is a transport protocol that fits into the layered

internet protocol environment. Figure 1 illustrates the place of

RDP in the protocol hierarchy:

+------+ +-----+ +-----+ +------+

TELNET FTP Debug ... Loader Application Layer

+------+ +-----+ +-----+ +------+

+-----+----+ +------+------+

+------+ +-------+

TCP RDP Transport Layer

+------+ +-------+

+--------------------------------+

Internet Protocol & ICMP Internetwork Layer

+--------------------------------+

+-------------------------+

Network Access Protocol Network Layer

+-------------------------+

Relation to Other Protocols

Figure 1

Page 5

RFC-908 July 1984

RDP provides the application layer with a reliable message

transport service. The interface between users and RDP transfers

data in units of messages. When implemented in the internet

environment, RDP is layered on the Internet Protocol (IP), which

provides an unreliable datagram service to RDP. Data is passed

across the RDP/IP interface in the form of segments. RDP uses

the standard IP interface primitives to send and receive RDP

segments as IP datagrams. At the internet level, IP exchanges

datagrams with the network layer. An internet packet may contain

an entire datagram or a fragment of a datagram.

# %

? * !

@ )

+------+ +-----+ +----+ $ = ^ +

Messages Segments Datagrams *

User <-------> RDP <-------> IP <-------> Internet

, ?

+------+ +-----+ +----+ ! )

* % $

@ ^ !

Form of Data Exchange Between Layers

Figure 2

If internetwork services are not required, it should be

possible to use the RDP without the IP layer. As long as the

encapsulating protocol provides the RDP with such necessary

information as addressing and protocol demultiplexing, it should

be possible to run RDP layered on a variety of different

protocols.

Page 6

RDP Specification Protocol Operation

CHAPTER 3

Protocol Operation

3.1 Protocol Service Objectives

The RDP protocol has the following goals:

o RDP will provide a full-duplex communications channel

between the two ports of each transport connection.

o RDP will attempt to reliably deliver all user messages

and will report a failure to the user if it cannot

deliver a message. RDP extends the datagram service of

IP to include reliable delivery.

o RDP will attempt to detect and discard all damaged and

duplicate segments. It will use a checksum and sequence

number in each segment header to achieve this goal.

o RDP will optionally provide sequenced delivery of

segments. Sequenced delivery of segments must be

specified when the connection is established.

o RDP will acknowledge segments received out of sequence,

as they arrive. This will free up resources on the

sending side.

3.2 RDP Connection Management

RDP is a connection-oriented protocol in which each

connection acts as a full-duplex communication channel between

two processes. Segments from a sender are directed to a port on

the destination host. The two 8-bit source and destination port

identifiers in the RDP header are used in conjunction with the

network source and destination addresses to uniquely identify

each connection.

Page 7

RFC-908 July 1984

3.2.1 Opening a Connection

Connections are opened by issuing the Open request, which

can be either active or passive. A passive Open request puts RDP

into the Listen state, during which it passively listens for a

request to open a connection from a remote site. The active Open

request attempts to establish a connection with a specified port

at a remote site.

The active Open request requires that a specific remote port

and host address be specified with the request. The passive Open

may optionally specify a specific remote port and network

address, or it may specify that an open be accepted from anyone.

If a specific remote port and host address were specified, an

arriving request to open a connection must exactly match the

specified remote port and address.

3.2.2 Ports

Valid port numbers range from 1 to 255 (decimal). There are

two types of ports: "well known" ports and "allocable" ports.

Well-known ports have numbers in the range 1 to 63 (decimal) and

allocable ports are given numbers in the range 64 to 255.

The user, when issuing an active Open request, must specify

both the remote host and port and may optionally specify the

local port. If the local port was not specified, RDP will select

an unused port from the range of allocable ports. When issuing a

passive Open request, the user must specify the local port

number. Generally, in this case the local port will be a well-

known port.

3.2.3 Connection States

An RDP connection will progress through a series of states

during its lifetime. The states are shown in Figure 3 and are

individually described below. In Figure 3, the boxes represent

the states of the RDP FSM and the arcs represent changes in

state. Each arc is annotated with the event causing the state

change and the resulting output.

Page 8

RDP Specification Protocol Operation

CLOSED

The CLOSED state exists when no connection exists and there

is no connection record allocated.

LISTEN

The LISTEN state is entered after a passive Open request is

processed. A connection record is allocated and RDP waits

for an active request to establish a connection from a

remote site.

SYN-SENT

The SYN-SENT state is entered after processing an active

Open request. A connection record is allocated, an initial

sequence number is generated, and a SYN segment is sent to

the remote site. RDP then waits in the SYN-SENT state for

acknowledgement of its Open request.

SYN-RCVD

The SYN-RCVD state may be reached from either the LISTEN

state or from the SYN-SENT state. SYN-RCVD is reached from

the LISTEN state when a SYN segment requesting a connection

is received from a remote host. In reply, the local RDP

generates an initial sequence number for its side of the

connection, and then sends the sequence number and an

acknowledgement of the SYN segment to the remote site. It

then waits for an acknowledgement.

The SYN-RCVD state is reached from the SYN-SENT state when a

SYN segment is received from the remote host without an

accompanying acknowledgement of the SYN segment sent to that

remote host by the local RDP. This situation is caused by

simultaneous attempts to open a connection, with the SYN

segments passing each other in transit. The action is to

repeat the SYN segment with the same sequence number, but

now including an ACK of the remote host's SYN segment to

indicate acceptance of the Open request.

Page 9

RFC-908 July 1984

+------------+

Passive Open <-------------------------+

+---------------- CLOSED

Request ---------------+

V +------------+

+------------+

LISTEN

+------------+

Active

rcv SYN Open Request

----------- ------------

snd SYN,ACK snd SYN

V rcv SYN V

+------------+ ----------- +------------+

snd SYN,ACK

SYN-RCVD <------------------------------- SYN-SENT

+------------+ +------------+

rcv ACK rcv SYN,ACK

---------- -------------

xxx +------------+ snd ACK

+---------------> OPEN <--------------+

+------------+

rcv RST Close request

----------- ---------------

xxx snd RST

V

+------------+

CLOSE-WAIT --------------------------+

After a Delay

+------------+

RDP Connection State Diagram

Figure 3

Page 10

RDP Specification Protocol Operation

OPEN

The OPEN state exists when a connection has been established

by the successful exchange of state information between the

two sides of the connection. Each side has exchanged and

received such data as initial sequence number, maximum

segment size, and maximum number of unacknowledged segments

that may be outstanding. In the Open state data may be sent

between the two parties of the connection.

CLOSE-WAIT

The CLOSE-WAIT state is entered from either a Close request

or from the receipt of an RST segment from the remote site.

RDP has sent an RST segment and is waiting a delay period

for activity on the connection to complete.

3.2.4 Connection Record

The variables that define the state of a connection are

stored in a connection record maintained for each connection.

The following describes some of the variables that would be

stored in a typical RDP connection record. It is not intended to

be an implementation specification nor is it a complete

description. The purpose of naming and describing some of the

connection record fields is to simplify the description of RDP

protocol operation, particularly event processing.

The connection record fields and their descriptions follow:

STATE

The current state of the connection. Legal values are OPEN,

LISTEN, CLOSED, SYN-SENT, SYN-RCVD, and CLOSE-WAIT.

Send Sequence Number Variables:

SND.NXT

The sequence number of the next segment that is to be sent.

Page 11

RFC-908 July 1984

SND.UNA

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.

STATUS Request

Returns the status of a connection. The parameters include

the connection identifier and the address of the status

buffer.

Page 19

RFC-908 July 1984

3.7 Event Processing

This section describes one possible sequence for processing

events. It is not intended to suggest a particular

implementation, but any actual implementation should vary from

this description only in detail and not significantly in

substance. The following are the kinds of events that may occur:

USER REQUESTS

Open

Send

Receive

Close

Status

ARRIVING SEGMENT

Segment Arrives

TIMEOUTS

Retransmission Timeout

Close-Wait Timeout

User request processing always terminates with a return to

the caller, with a possible error indication. Error responses

are given as a character string. A delayed response is also

possible in some situations and is returned to the user by

whatever event or pseudo interrupt mechanism is available. The

term "signal" is used to refer to delayed responses.

Processing of arriving segments usually follows this general

sequence: the sequence number is checked for validity and, if

valid, the segment is queued and processed in sequence-number

order. For all events, unless a state change is specified, RDP

remains in the same state.

Page 20

RDP Specification Protocol Operation

3.7.1 User Request Events

The following scenarios demonstrate the processing of events

caused by the issuance of user requests:

Open Request

CLOSED STATE

Create a connection record

If none available

Return "Error - insufficient resources"

Endif

If passive Open

If local port not specified

Return "Error - local port not specified"

Endif

Generate SND.ISS

Set SND.NXT = SND.ISS + 1

SND.UNA = SND.ISS

Fill in SND.MAX, RMAX.BUF from Open parameters

Set State = LISTEN

Return

Endif

If active Open

If remote port not specified

Return "Error - remote port not specified"

Endif

Generate SND.ISS

Set SND.NXT = SND.ISS + 1

SND.UNA = SND.ISS

Fill in SND.MAX, RMAX.BUF from Open parameters

If local port not specified

Allocate a local port

Endif

Send <SEQ=SND.ISS><MAX=SND.MAX><MAXBUF=RMAX.BUF><SYN>

Set State = SYN-SENT

Return (local port, connection identifier)

Endif

Page 21

RFC-908 July 1984

LISTEN STATE

SYN-SENT STATE

SYN-RCVD STATE

OPEN STATE

CLOSE-WAIT STATE

Return "Error - connection already open"

Close Request

OPEN STATE

Send <SEQ=SND.NXT><RST>

Set State = CLOSE-WAIT

Start TIMWAIT Timer

Return

LISTEN STATE

Set State = CLOSED

Deallocate connection record

Return

SYN-RCVD STATE

SYN-SENT STATE

Send <SEQ=SND.NXT><RST>

Set State = CLOSED

Return

CLOSE-WAIT STATE

Return "Error - connection closing"

CLOSE STATE

Return "Error - connection not open"

Page 22

RDP Specification Protocol Operation

Receive Request

OPEN STATE

If Data is pending

Return with data

else

Return with "no data" indication

Endif

LISTEN STATE

SYN-RCVD STATE

SYN-SENT STATE

Return with "no data" indication

CLOSE STATE

CLOSE-WAIT STATE

Return "Error - connection not open"

Send Request

OPEN STATE

If SND.NXT < SND.UNA + SND.MAX

Send <SEQ=SND.NXT><ACK=RCV.CUR><ACK><Data>

Set SND.NXT = SND.NXT + 1

Return

else

Return "Error - insufficient resources to send data"

Endif

LISTEN STATE

SYN-RCVD STATE

SYN-SENT STATE

CLOSE STATE

CLOSE-WAIT STATE

Return "Error - connection not open"

Status Request

Return with:

Page 23

RFC-908 July 1984

State of connection (OPEN, LISTEN, etc.)

Number of segments unacknowledged

Number of segments received not given to user

Maximum segment size for the send side of the connection

Maximum segment size for the receive side of the connection

3.7.2 Segment Arrival Events

The following scenarios describe the processing of the event

caused by the arrival of a RDP segment from a remote host. The

assumption is made that the segment was addressed to the local

port associated with the connection record.

If State = CLOSED

If RST set

Discard segment

Return

Endif

If ACK or NUL set

Send <SEQ=SEG.ACK + 1><RST>

Discard segment

Return

else

Send <SEQ=0><RST><ACK=RCV.CUR><ACK>

Discard segment

Return

Endif

Endif

If State = CLOSE-WAIT

If RST set

Set State = CLOSED

Discard segment

Cancel TIMWAIT timer

Deallocate connection record

else

Discard segment

Endif

Return

Endif

Page 24

RDP Specification Protocol Operation

If State = LISTEN

If RST set

Discard the segment

Return

Endif

If ACK or NUL set

Send <SEQ=SEG.ACK + 1><RST>

Return

Endif

If SYN set

Set RCV.CUR = SEG.SEQ

RCV.IRS = SEG.SEQ

SND.MAX = SEG.MAX

SBUF.MAX = SEG.BMAX

Send <SEQ=SND.ISS><ACK=RCV.CUR><MAX=RCV.MAX><BUFMAX=RBUF.MAX>

<ACK><SYN>

Set State = SYN-RCVD

Return

Endif

If anything else (should never get here)

Discard segment

Return

Endif

Endif

If State = SYN-SENT

If ACK set

If RST clear and SEG.ACK != SND.ISS

Send <SEQ=SEG.ACK + 1><RST>

Endif

Discard segment; Return

Endif

If RST set

If ACK set

Signal "Connection Refused"

Set State = CLOSED

Deallocate connection record

Endif

Discard segment

Return

Endif

Page 25

RFC-908 July 1984

If SYN set

Set RCV.CUR = SEG.SEQ

RCV.IRS = SEG.SEQ

SND.MAX = SEG.MAX

RBUF.MAX = SEG.BMAX

If ACK set

Set SND.UNA = SEG.ACK

State = OPEN

Send <SEQ=SND.NXT><ACK=RCV.CUR><ACK>

else

Set State = SYN-RCVD

Send <SEQ=SND.ISS><ACK=RCV.CUR><MAX=RCV.MAX><BUFMAX=RBUF.MAX>

<SYN><ACK>

Endif

Return

Endif

If anything else

Discard segment

Return

Endif

Endif

If State = SYN-RCVD

If RCV.IRS < SEG.SEQ =< RCV.CUR + (RCV.MAX * 2)

Segment sequence number acceptable

else

Send <SEQ=SND.NXT><ACK=RCV.CUR><ACK>

Discard segment

Return

Endif

If RST set

If passive Open

Set State = LISTEN

else

Set State = CLOSED

Signal "Connection Refused"

Discard segment

Deallocate connection record

Endif

Return

Endif

Page 26

RDP Specification Protocol Operation

If SYN set

Send <SEQ=SEG.ACK + 1><RST>

Set State = CLOSED

Signal "Connection Reset"

Discard segment

Deallocate connection record

Return

Endif

If EACK set

Send <SEQ=SEG.ACK + 1><RST>

Discard segment

Return

Endif

If ACK set

If SEG.ACK = SND.ISS

Set State = OPEN

else

Send <SEQ=SEG.ACK + 1><RST>

Discard segment

Return

Endif

else

Discard segment

Return

Endif

If Data in segment or NUL set

If the received segment is in sequence

Copy the data (if any) to user buffers

Set RCV.CUR=SEG.SEQ

Send <SEQ=SND.NXT><ACK=RCV.CUR><ACK>

else

If out-of-sequence delivery permitted

Copy the data (if any) to user buffers

Endif

Send <SEQ=SND.NXT><ACK=RCV.CUR><ACK><EACK><RCVDSEQNO1>

...<RCVDSEQNOn>

Endif

Endif

Endif

Page 27

RFC-908 July 1984

If State = OPEN

If RCV.CUR < SEG.SEQ =< RCV.CUR + (RCV.MAX * 2)

Segment sequence number acceptable

else

Send <SEQ=SND.NXT><ACK=RCV.CUR><ACK>

Discard segment and return

Endif

If RST set

Set State = CLOSE-WAIT

Signal "Connection Reset"

Return

Endif

If NUL set

Set RCV.CUR=SEG.SEQ

Send <SEQ=SND.NXT><ACK=RCV.CUR><ACK>

Discard segment

Return

Endif

If SYN set

Send <SEQ=SEG.ACK + 1><RST>

Set State = CLOSED

Signal "Connection Reset"

Discard segment

Deallocate connection record

Return

Endif

If ACK set

If SND.UNA =< SEG.ACK < SND.NXT

Set SND.UNA = SEG.ACK

Flush acknowledged segments

Endif

Endif

If EACK set

Flush acknowledged segments

Endif

Page 28

RDP Specification Protocol Operation

If Data in segment

If the received segment is in sequence

Copy the data to user buffers

Set RCV.CUR=SEG.SEQ

Send <SEQ=SND.NXT><ACK=RCV.CUR><ACK>

else

If out-of-sequence delivery permitted

Copy the data to user buffers

Endif

Send <SEQ=SND.NXT><ACK=RCV.CUR><ACK><EACK><RCVDSEQNO1>

...<RCVDSEQNOn>

Endif

Endif

Endif

3.7.3 Timeout Events

Timeout events occur when a timer expires and signals the

RDP. Two types of timeout events can occur, as described below:

RETRANSMISSION TIMEOUTS

If timeout on segment at head of retransmission queue

Resend the segment at head of queue

Restart the retransmission timer for the segment

Requeue the segment on retransmission queue

Return

Endif

CLOSE-WAIT TIMEOUTS

Set State = CLOSED

Deallocate connection record

Return

Page 29

RFC-908 July 1984

Page 30

RDP Specification RDP Segments and Formats

CHAPTER 4

RDP Segments and Formats

The segments sent by the application layer are encapsulated

in headers by the transport, internet and network layers, as

follows:

+----------------+

Network Access

Header

+----------------+

IP Header

+----------------+

RDP Header

+----------------+

D

A

T

A

+----------------+

Segment Format

Figure 4

4.1 IP Header Format

When used in the internet environment, RDP segments are sent

using the version 4 IP header as described in RFC791, "Internet

Protocol." The RDP protocol number is ??? (decimal). The time-

to-live field should be set to a reasonable value for the

network.

All other fields should be set as specified in RFC-791.

Page 31

RFC-908 July 1984

4.2 RDP Header Format

Every RDP segment is prefaced with an RDP header. The

format of the header is shown in Figure 5 below. The RDP header

is variable in length and its size is indicated by a field in a

fixed location within the header.

0 0 0 1 1

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5

+-+-+-+-+-+-+---+---------------+

SAERN Ver Header

0 YCASU0No. Length

NKKTL

+-+-+-+-+-+-+---+---------------+

1 Source Port Dest. Port

+---------------+---------------+

2 Data Length

+---------------+---------------+

3

+--- Sequence Number ---+

4

+---------------+---------------+

5

+--- Acknowledgement Number ---+

6

+---------------+---------------+

7

+--- Checksum ---+

8

+---------------+---------------+

9 Variable Header Area

. .

. .

+---------------+---------------+

RDP Header Format

Figure 5

Page 32

RDP Specification RDP Segments and Formats

4.2.1 RDP Header Fields

Control Flags

This 8-bit field occupies the first octet of Word one in the

header. It is bit encoded with the following bits currently

defined:

Bit # Bit Name Description

0 SYN Establish connection and

synchronize sequence numbers.

1 ACK Acknowledge field significant.

2 EACK Non-cumulative (Extended) acknowledgement.

3 RST Reset the connection.

4 NUL This is a null (zero data length) segment.

5 Unused.

Note that the SYN and RST are sent as separate segments and

may not contain any data. The ACK may accompany any

message. The NUL segment must have a zero data length, but

may be accompanied by ACK and EACK information. The other

control bit is currently unused and is defined to be zero.

Version Number

This field occupies bits 6-7 of the first octet. It

contains the version number of the protocol described by

this document. Current value is one (1).

Header Length

The length of the RDP header in units of two (2) octets,

including this field. This field allows RDP to find the

start of the Data field, given a pointer to the head of the

segment. This field is 8 bits in length. For a segment

with no variable header section, the header length field

will have the value 9.

Source and Destination Ports

The Source and Destination Ports are used to identify the

processes in the two hosts that are communicating with each

other. The combination of the port identifiers with the

source and destination addresses in the network access

Page 33

RFC-908 July 1984

protocol header serves to fully qualify the connection and

constitutes the connection identifier. This permits RDP to

distinguish multiple connections between two hosts. Each

field is 8 bits in length, allowing port numbers from 0 to

255 (decimal).

Data Length

The length in octets of the data in this segment. The data

length does not include the RDP header. This field is 16

bits in length.

Sequence Number

The sequence number of this segment. This field is 32 bits

in length.

Acknowledgement Number

If the ACK bit is set in the header, this is the sequence

number of the segment that the sender of this segment last

received correctly and in sequence. Once a connection is

established this should always be sent. This field is 32

bits in length.

Checksum

This field is a 32-bit checksum of the segment header and

data. The algorithm description below includes two

variables, the checksum accumulator and the checksum

pointer. The checksum accumulator is an actual 32-bit

register in which the checksum is formed. The checksum

pointer is included for purposes of description, to

represent the operation of advancing through the data four

octets (32-bits) at a time. It need not be maintained in a

register by an implementation.

1) The checksum pointer is set to zero, to correspond to the

beginning of the area to be checksummed. The checksum

accumulator is also initialized to zero before beginning the

computation of the checksum.

2) The 32-bit memory word located at the address referenced

by the checksum pointer is added arithmetically to the

checksum accumulator. Any carry propagated out of the

checksum accumulator is ignored. The checksum field itself

is replaced with zeros when being added to the checksum

Page 34

RDP Specification RDP Segments and Formats

accumulator.

3) The checksum accumulator is rotated left one bit

position. The checksum pointer is advanced to correspond to

the address of the next 32-bit word in the segment.

4) Steps 2 and 3 are repeated until the entire segment has

been summed. 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.

Variable Header Area

This area is used to transmit parameters for the SYN and

EACK segments.

Page 35

RFC-908 July 1984

4.3 SYN Segment

The SYN is used to establish a connection and synchronize

sequence numbers between two hosts. The SYN segment also

contains information to inform the remote host of the maximum

number of segments the local RDP is willing to accept and the

maximum segment size it can accept. The SYN may be combined with

an ACK in a segment but is never combined with user data.

4.3.1 SYN Segment Format

0 0 0 1 1

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5

+-+-+-+-+-+-+---+---------------+

0 1000000 1 Header Length

+-+-+-+-+-+-+---+---------------+

1 Source Port Dest. Port

+---------------+---------------+

2 Data Length = 0

+---------------+---------------+

3

+--- Sequence Number ---+

4

+---------------+---------------+

5

+--- Acknowledgement Number ---+

6

+---------------+---------------+

7

+--- Checksum ---+

8

+---------------+---------------+

9 Max. # of Outstanding Segments

+---------------+---------------+

10 Max. Segment Size

+-------------------------------+

11 Options Flag Field

+---------------+---------------+

SYN Segment Format

Figure 6

Page 36

RDP Specification RDP Segments and Formats

4.3.2 SYN Segment Fields

Sequence Number

Contains the initial sequence number selected for this

connection.

Acknowledgement Number

This field is valid only if the ACK flag is set. In that

case, this field will contain the sequence number of the SYN

segment received from the other RDP.

Maximum Number of Outstanding Segments

The maximum number of segments that should be sent without

getting an acknowledgement. This is used by the receiver as

a means of flow control. The number is selected during

connection initiation and may not be changed later in the

life of the connection.

Maximum Segment Size

The maximum size segment in octets that the sender should

send. It informs the sender how big the receiver's buffers

are. The specified size includes the length of the IP

header, RDP header, and data. It does not include the

network access layer's header length.

Options Flag Field

This field of two octets contains a set of options flags

that specify the set of optional functions that are desired

for this connection. The flags are defined as follows:

Bit # Bit Name Description

0 SDM Sequenced delivery mode.

The sequenced delivery mode flag specifies whether delivery

of segments to the user is sequenced (delivered in

sequence-number order) or non-sequenced (delivered in

arrival order, regardless of sequence number). A value of 0

specifies non-sequenced delivery of segments, and a value of

1 specifies sequenced delivery.

Page 37

RFC-908 July 1984

4.4 ACK Segment

The ACK segment is used to acknowledge in-sequence segments.

It contains both the next send sequence number and the

acknowledgement sequence number in the RDP header. The ACK

segment may be sent as a separate segment, but it should be

combined with data whenever possible. Data segments must always

include the ACK bit and Acknowledgement Number field.

4.4.1 ACK Segment Format

0 0 0 1 1

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5

+-+-+-+-+-+-+---+---------------+

0 0100000 1 Header Length

+-+-+-+-+-+-+---+---------------+

1 Source Port Dest. Port

+---------------+---------------+

2 Data Length

+---------------+---------------+

3

+--- Sequence Number ---+

4

+---------------+---------------+

5

+--- Acknowledgement Number ---+

6

+---------------+---------------+

7

+--- Checksum ---+

8

+---------------+---------------+

Data

. .

. .

+---------------+---------------+

ACK Segment Format

Figure 7

Page 38

RDP Specification RDP Segments and Formats

4.4.2 ACK Segment Fields

Data Length

A non-zero Data Length field indicates that there is data

present in the segment.

Sequence Number

The value of the Sequence Number field is advanced to the

next sequence number only if there is data present in the

segment. An ACK segment without data does not use sequence

number space.

Acknowledgement Number

The Acknowledgement Number field contains the sequence

number of the last segment received in sequential order.

Page 39

RFC-908 July 1984

4.5 Extended ACK Segment

The EACK segment is used to acknowledge segments received

out of sequence. It contains the sequence numbers of one or more

segments received with a correct checksum, but out of sequence.

The EACK is always combined with an ACK in the segment, giving

the sequence number of the last segment received in sequence.

The EACK segment may also include user data.

4.5.1 EACK Segment Format

The EACK segment has the format shown in Figure 8.

4.5.2 EACK Segment Fields

Data Length

A non-zero Data Length field indicates that there is data

present in the segment.

Sequence Number

The value of the Sequence Number field is advanced to the

next sequence number only if there is data present in the

segment. An EACK segment without data does not use sequence

number space.

Acknowledgement Number

The Acknowledgement Number field contains the sequence

number of the last segment received in sequential order.

Sequence # Received OK

Each entry is the sequence number of a segment that was

received with a correct checksum, but out of sequence.

Page 40

RDP Specification RDP Segments and Formats

0 0 0 1 1

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5

+-+-+-+-+-+-+---+---------------+

0 0110000 1 Header Length

+-+-+-+-+-+-+---+---------------+

1 Source Port Dest. Port

+---------------+---------------+

2 Data Length

+---------------+---------------+

3

+--- Sequence Number ---

4

+---------------+---------------+

5

+--- Acknowledgement Number ---+

6

+---------------+---------------+

7

+--- Checksum ---+

8

+---------------+---------------+

9

+--- Sequence # Received OK ---+

10

+---------------+---------------+

11

+--- Sequence # Received OK ---+

12

+---------------+---------------+

: . :

: . :

: . :

+---------------+---------------+

Data

+---------------+---------------+

EACK Segment Format

Figure 8

Page 41

RFC-908 July 1984

4.6 RST Segment

The RST segment is used to close or reset a connection.

Upon receipt of an RST segment, the sender must stop sending and

must abort any unserviced requests. The RST is sent as a

separate segment and does not include any data.

4.6.1 RST Segment Format

0 0 0 1 1

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5

+-+-+-+-+-+-+---+---------------+

0 0001000 1 Header Length

+-+-+-+-+-+-+---+---------------+

1 Source Port Dest. Port

+---------------+---------------+

2 Data Length = 0

+---------------+---------------+

3

+--- Sequence Number ---+

4

+---------------+---------------+

5

+--- Acknowledgement Number ---+

6

+---------------+---------------+

7

+--- Checksum ---+

8

+-------------------------------+

RST Segment Format

Figure 9

Page 42

RDP Specification RDP Segments and Formats

4.7 NUL Segment

The NUL segment is used to determine if the other side of a

connection is still active. When a NUL segment is received, an

RDP implementation must acknowledge the segment if a valid

connection exists and the segment sequence number falls within

the acceptance window. The segment is then discarded. The NUL

may be combined with an ACK in a segment but is never combined

with user data.

4.7.1 NUL segment format

0 0 0 1 1

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5

+-+-+-+-+-+-+---+---------------+

0 0000100 1 Header Length

+-+-+-+-+-+-+---+---------------+

1 Source Port Dest. Port

+---------------+---------------+

2 Data Length = 0

+---------------+---------------+

3

+--- Sequence Number ---+

4

+---------------+---------------+

5

+--- Acknowledgement Number ---+

6

+---------------+---------------+

7

+--- Checksum ---+

8

+-------------------------------+

NUL Segment Format

Figure 10

Page 43

RFC-908 July 1984

Page 44

RDP Specification Examples of Operation

CHAPTER 5

Examples of Operation

5.1 Connection Establishment

This is an example of a connection being established between

Host A and Host B. Host B has done a passive Open and is in

LISTEN state. Host A does an active Open to establish the

connection.

Host A Host B

Time State State

1. CLOSED LISTEN

2. SYN-SENT <SEQ=100><SYN> --->

3. <--- <SEQ=200><ACK=100><SYN,ACK>

SYN-RCVD

4. OPEN <SEQ=101><ACK=200> ---> OPEN

5. <SEQ=101><ACK=200><Data> --->

6. <--- <SEQ=201><ACK=101>

Page 45

RFC-908 July 1984

5.2 Simultaneous Connection Establishment

This is an example of two hosts trying to establishing

connections to each other at the same time. Host A sends a SYN

request to Host B at the same time Host B sends a SYN request to

Host A.

Host A Host B

Time State State

1. CLOSED CLOSED

2. SYN-SENT <SEQ=100><SYN> --->

<--- <SEQ=200><SYN> SYN-SENT

3. SYN-RCVD SYN-RCVD

<SEQ=100><ACK=200><SYN,ACK> --->

<--- <SEQ=200><ACK=100><SYN,ACK>

4. OPEN OPEN

Page 46

RDP Specification Examples of Operation

5.3 Lost Segments

This is an example of what happens when a segment is lost.

It shows how segments can be acknowledged out of sequence and

that only the missing segment need be retransmitted. Note that

in this and the following examples "EA" stands for "Out of

Sequence Acknowledgement."

Time Host A Host B

1. <SEQ=100><ACK=200><Data> --->

2. <--- <SEQ=201><ACK=100>

3. <SEQ=101><ACK=200><Data> (segment lost)

4.

5. <SEQ=102><ACK=200><Data> --->

6. <-- <SEQ=201><ACK=100><EA=102>

7. <SEQ=103><ACK=200><Data> --->

8. <--- <SEQ=201><ACK=100>

<EA=102,103>

9. <SEQ=101><ACK=200><Data> --->

10. <--- <SEQ=201><ACK=103>

11. <SEQ=104><ACK=200><Data> --->

12. <--- <SEQ=201><ACK=104>

Page 47

RFC-908 July 1984

5.4 Segments Received Out of Order

This an example of segments received out of order. It

further illustrates the use of acknowledging segments out of

order to prevent needless retransmissions.

Time Host A Host B

1. <SEQ=100><ACK=200><Data> --->

2. <--- <SEQ=201><ACK=100>

3. <SEQ=101><ACK=200><Data> (delayed)

4.

5. <SEQ=102><ACK=200><Data> --->

6. <--- <SEQ=201><ACK=100><EA=102>

7. <SEQ=103><ACK=200><Data> --->

---> (delayed segment 101 arrives)

8. <--- <SEQ=201><ACK=103>

9. <SEQ=104><ACK=200><Data> --->

10. <--- <SEQ=201><ACK=104>

Page 48

RDP Specification Examples of Operation

5.5 Communication Over Long Delay Path

This is an example of a data transfer over a long delay

path. In this example, Host A is permitted to have as many as

five unacknowledged segments. The example shows that it is not

necessary to wait for an acknowledgement in order to send

additional data.

Time Host A Host B

1. <SEQ=100><ACK=200><Data> -1->

2. <SEQ=101><ACK=200><Data> -2->

3. <SEQ=102><ACK=200><Data> -3->

-1-> (received)

4. <-4- <SEQ=201><ACK=100>

5. <SEQ=103><ACK=200><Data> -5->

-2-> (received)

6. <-6- <SEQ=201><ACK=101>

7. <SEQ=104><ACK=200><Data> -7->

-3-> (received)

8. <-8- <SEQ=201><ACK=102>

(received) <-4-

9. <SEQ=105><ACK=200><Data> -9->

-5-> (received)

10. <-10- <SEQ=201><ACK=103>

(received) <-6-

11. <SEQ=106><ACK=200><Data> -11->

-7-> (received)

12. <-12- <SEQ=201><ACK=104>

(received) <-8-

13. -9-> (received)

14. <-13- <SEQ=201><ACK=105>

(received) <-10-

15. -11-> (received)

16. <-14- <SEQ=201><ACK=106>

(received) <-12-

17. (received) <-13-

18. (received) <-14-

Page 49

RFC-908 July 1984

5.6 Communication Over Long Delay Path With Lost Segments

This is an example of communication over a long delay path

with a lost segment. It shows that by acknowledging segments out

of sequence, only the lost segment need be retransmitted.

Time Host A Host B

1. <SEQ=100><ACK=200><Data> -1->

2. <SEQ=101><ACK=200><Data> -2->

3. <SEQ=102><ACK=200><Data> -3->

-1-> (received)

4. <-4- <SEQ=201><ACK=100>

5. <SEQ=103><ACK=200><Data> (segment lost)

-2-> (received)

6. <-5- <SEQ=201><ACK=101>

7. <SEQ=104><ACK=200><Data> -6->

-3-> (received)

8. <-7- <SEQ=201><ACK=102>

(received) <-4-

9. <SEQ=105><ACK=200><Data> -8->

10.

(received) <-5-

11. <SEQ=106><ACK=200><Data> -10->

-6-> (received)

12. <-11- <SEQ=201><ACK=102><EA=104>

(received) <-7-

-8-> (received)

13. <-12- <SEQ=201><ACK=102><EA=104,105>

-10-> (received)

14. <-13- <SEQ=201><ACK=102><EA=104-106>

(received) <-11-

15. <SEQ=103><ACK=200><Data> -14->

(received) <-12-

16. (received) <-13-

-14-> (received)

17. <-15- <SEQ=201><ACK=106>

18.

19. (received) <-15-

Page 50

RDP Specification Examples of Operation

5.7 Detecting a Half-Open Connection on Crash Recovery

This is an example of a host detecting a half-open

connection due to the crash and subsequent restart of the host.

In this example, Host A crashes during a communication session,

then recovers and tries to reopen the connection. During the

reopen attempt, it discovers that a half-open connection still

exists and it then resets the other side. Both sides were in the

OPEN state prior to the crash.

Host A Host B

Time

1. OPEN OPEN

(crash!) <--- <SEQ=200><ACK=100><ACK>

2. CLOSED OPEN

(recover)

3. SYN-SENT OPEN

<SEQ=400><SYN> ---> (?)

4. SYN-SENT OPEN

(!) <--- <SEQ=200><ACK=100><ACK>

5. SYN-SENT OPEN

<SEQ=101><RST> ---> (abort)

6. SYN-SENT CLOSED

7. SYN-SENT <SEQ=400><SYN> --->

Page 51

RFC-908 July 1984

5.8 Detecting a Half-Open Connection from the Active Side

This is another example of detecting a half-open connection

due to the crash and restart of a host involved in a connection.

In this example, host A again crashes and restarts. Host B is

still active and tries to send data to host A. Since host A has

no knowledge of the connection, it rejects the data with an RST

segment, causing host B to reset the connection.

Host A Host B

Time

1. (crash!) OPEN

2. CLOSED <--- <SEQ=200><ACK=100><Data> OPEN

3. CLOSED <SEQ=101><RST> ---> (abort)

4. CLOSED CLOSED

Page 52

RDP Specification Examples of Operation

APPENDIX A

Implementing a Minimal RDP

It is not necessary to implement the entire RDP

specification to be able to use RDP. For simple applications

such as a loader, where size of the protocol module may be

important, a subset of RDP may be used. For example, an

implementation of RDP for loading may employ the following

restrictions:

o Only one connection and connection record is supported.

This is the connection used to load the device.

o A single, well-known port is used as the loader port.

Allocable ports are not implemented.

o Only the passive Open request is implemented. Active Opens

are not supported.

o The sequenced delivery option is not supported. Messages

arriving out of order are delivered in the order they

arrive.

o If efficiency is less important than protocol size, the

extended acknowledgement feature need not be supported.

Page 53

RFC-908 July 1984

INDEX

ACK.......................................... 16, 33, 34, 38

ACK segment format....................................... 38

acknowledgement number field......... 16, 34, 37, 38, 39, 40

byte-stream protocols................................. 4, 14

checksum................................................. 16

checksum field........................................... 34

Close request............................................ 13

Closed state.......................................... 9, 10

CLOSEWAIT................................................ 12

Close-Wait state................................. 10, 11, 13

CLOSE-WAIT timeouts...................................... 29

connection, closing of............................... 13, 42

connection, establishment of...................... 8, 11, 45

connection identifier................................. 7, 33

connection management..................................... 7

connection record..................................... 9, 11

connection state diagram................................. 10

connection states......................................... 8

control flags field...................................... 33

cumulative acknowledgement............................... 16

data communication....................................... 14

data length field................................ 34, 39, 40

datagrams................................................. 6

debugging.............................................. 1, 3

dumping................................................... 3

EACK......................................... 16, 33, 35, 40

EACK segment format...................................... 40

event processing......................................... 20

extended acknowledgement................................. 16

flow control............................................. 17

half-open connection, detection of............... 14, 51, 52

initial sequence number....................... 9, 11, 12, 15

internet protocols........................................ 5

IP................................................ 6, 15, 31

IP header............................................ 31, 37

Listen state................................... 8, 9, 10, 45

loading................................................ 1, 3

maximum segment size..................... 11, 12, 13, 15, 37

maximum unacknowledged segments.............. 11, 12, 17, 37

message fragmentation.................................... 14

non-cumulative acknowledgement........................... 16

Page 54

RDP Specification Examples of Operation

NUL.................................................. 33, 43

NUL segment format....................................... 43

Open request.......................................... 8, 17

Open request, active................................... 8, 9

Open request, passive.................................. 8, 9

Open state....................................... 10, 11, 45

options flag field....................................... 37

out-of-sequence acknowledgement.................. 12, 16, 18

ports................................................. 7, 33

ports, well-known......................................... 8

positive acknowledgement............................. 15, 16

RBUF.MAX................................................. 13

RCV.CUR.................................................. 12

RCVDSEQNO................................................ 12

RCV.IRS.................................................. 12

RCV.MAX.................................................. 12

RDP connection........................................... 14

RDP header................................... 14, 16, 32, 37

RDP header length........................................ 33

RDP segment format....................................... 31

reliable communication................................... 15

retransmission of segments....................... 15, 16, 17

retransmission timeout............................... 17, 29

RST.................................................. 33, 42

RST segment.......................................... 13, 52

RST segment format....................................... 42

SBUF.MAX................................................. 12

SDM...................................................... 37

SEG.ACK.................................................. 13

SEG.BMAX................................................. 13

SEG.MAX.................................................. 13

segment arrival events............................... 20, 24

segments................................................. 14

SEG.SEQ.................................................. 13

Send request......................................... 14, 15

sequence number...................................... 12, 15

sequence number acceptance window........................ 18

sequence number field........................ 34, 37, 39, 40

sequenced delivery................................. 3, 4, 37

sequential acknowledgement................................ 4

SND.ISS.................................................. 12

SND.MAX.................................................. 12

SND.NXT.................................................. 11

SND.UNA.................................................. 12

STATE.................................................... 11

SYN.................................. 12, 13, 15, 33, 35, 36

SYN segment........................................... 9, 36

Page 55

RFC-908 July 1984

Syn-Rcvd state........................................ 9, 10

Syn-Sent state........................................ 9, 10

TCP................................................... 4, 14

three-way handshake....................................... 4

user request events.................................. 20, 21

version number field..................................... 33

Page 56

RDP Specification Examples of Operation

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有