Network Working Group T. Bova
INTERNET-DRAFT T. Krivoruchka
Cisco Systems
Expires in six months 25 Feburary 1999
RELIABLE UDP PROTOCOL
<draft-ietf-sigtran-reliable-udp-00.txt>
Status of This Memo
This document is an Internet-Draft and is in full conformance
with all provisions of Section 10 of RFC 2026. Internet-Drafts are working
documents of the Internet Engineering Task Force (IETF), its areas,
and its working groups. Note that other groups may also distribute
working documents as Internet-Drafts.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
To learn the current status of any Internet-Draft, please check the
"1id-abstracts.txt" listing contained in the Internet- Drafts Shadow
Directories on ftp.is.co.za (Africa), nic.nordu.net (Europe),
munnari.oz.au (Pacific Rim), ftp.ietf.org (US East Coast), or
ftp.isi.edu (US West Coast).
Abstract
This Internet Draft discusses Reliable UDP (RUDP). RUDP is a simple
packet based transport protocol. RUDP is based on RFCs 1151 and 908 -
Reliable Data Protocol. RUDP is layered on the UDP/IP Protocols and
provides reliable in-order delivery (up to a maximum number of
retransmissions) for virtual connections. RUDP has a very flexible
design that would make it suitable for a variety of transport uses.
One such use would be to transport telecommunication signaling
protocols.
Bova & Krivoruchka [Page 1]
Internet Draft Reliable UDP Protocol Feb 1999
TABLE OF CONTENTS
1. Introduction...............................................3
1.1 System Overview.......................................3
1.2 Background............................................5
1.3 Data Structure Format.................................5
1.4 Feature Negotiation..................................16
2. Future Potential Enhancements.............................16
3. References................................................17
4. Author's Addresses........................................17
Bova & Krivoruchka [Page 2]
Internet Draft Reliable UDP Protocol Feb 1999
1. Introduction
This Internet Draft discusses a simple packet based transport
protocol designed to support applications that require a
reliable, sequenced packet based transport protocol. RUDP is based
on RFCs 1151 and 908 - Reliable Data Protocol. RUDP is layered on
the UDP/IP Protocols and provides reliable in-order delivery (up to
a maximum number of retransmissions) for virtual connections.
1.1 Background
A reliable transport protocol is needed to transport of telephony signaling
across IP networks. This reliable transport must be able to provide an
architecture for a variety of applications (i.e. signaling protocols)
requiring transport over IP.
Existing IP protocols have been scrutinized and it has been concluded that
a new reliable transport mechanism for telecommunication signaling
protocols is needed. This protocol should meet the following criteria:
* transport should provide reliable delivery up to a maximum number of
retransmissions (i.e. avoid stale signaling messages).
* transport should provide in-order delivery.
* transport should be a message based.
* transport should provide flow control mechanism.
* transport should have low overhead, high performance.
* characteristics of each virtual connection should be configurable
(i.e. timers).
* transport should provide a keep-alive mechanism.
* transport should provide error detection.
* transport should provide for secure transmission.
RUDP is designed to allow characteristics of each connection to be
individually configured so that many protocols with different transport
requirements can be implemented simultaneously on the same platform.
1.3 Data Structure Format
1. Six octet minimum RUDP header for data transmissions
Each UDP packet sent by RUDP must start with at least a six octet header.
The first octet contains a series of single bit flags. The next three
fields are each one octet in size. They are: Header length, Sequence
Bova & Krivoruchka [Page 3]
Internet Draft Reliable UDP Protocol Feb 1999
number, and Acknowledgment number. These three octets are followed by a
two octet checksum.
0 1 2 3 4 5 6 7 8 15
+-+-+-+-+-+-+-+-+---------------+
|S|A|E|R|N|C|T| | Header |
|Y|C|A|S|U|H|C|0| Length |
|N|K|K|T|L|K|S| | |
+-+-+-+-+-+-+-+-+---------------+
| Sequence # + Ack Number |
+---------------+---------------+
| Checksum |
+---------------+---------------+
Figure 1, RUDP Header
Control bits
The control bits indicate what is present in the packet. The SYN bit
indicate a synchronization segment is present. The ACK bit indicates the
acknowledgment number in the header is valid. The EACK bit indicates an
extended acknowledge segment is present. The RST bit indicates the packet
is a reset segment. The NUL bit indicates the packet is a null segment.
The TCS bit indicates the packet is a transfer connection state segment.
The SYN, EACK, RST, and TCS bits are mutually exclusive. The ACK bit is
always set when the NUL bit is set. The CHK bit indicates whether the
Checksum field contains the checksum of just the header or the header
and the body (data). If the CHK bit is zero, the Checksum field only
contains the checksum of the header. If the CHK bit is one, the
Checksum field contains the checksum of the header and data.
Header length.
The Header length field indicates where user data begins in the packet.
If total length of the packet is greater than the value of the header
length field, user data exists in the packet. User data cannot be present
in packets with the EACK, NULL, or RST bits set. A packet with user data
in it always has the ACK bit set and is called a data segment.
Sequence number.
Each packet contains a sequence number. When a connection is first opened,
each peer randomly picks an initial sequence number. This sequence number
is used in the SYN segments to open the connection. Each transmitter
increments the sequence number before sending a data, null, or reset
segment.
Bova & Krivoruchka [Page 4]
Internet Draft Reliable UDP Protocol Feb 1999
Acknowledgment Number.
The acknowledgment number field indicates to a transmitter the last in-
sequence packet the receiver has received.
Checksum.
A checksum is always calculated on the RUDP header to ensure integrity.
In addition, the checksum can be calculated on the header and body
if the CHK bit is set to one. The checksum algorithm used in RUDP is
the same algorithm used in UDP and TCP headers which is the 16-bit
one's complement of the one's complement sum of bytes being checksumed.
2. SYN Segment
The SYN is used to establish a connection and synchronize sequence numbers
between two hosts. The SYN segment also contains the negotiable parameters
of the connection. All configurable parameters that the peer must know
about are contained in this segment. This includes the maximum number of
segments the local RUDP is willing to accept and option flags that indicate
the features of the connection being established. A SYN segment must not
be combined with user data. A SYN segment is also used to perform an auto
reset on a connection. Auto reset is described later.
Figure 2 shows a SYN segment.
Bova & Krivoruchka [Page 5]
Internet Draft Reliable UDP Protocol Feb 1999
0 7 8 15
+-+-+-+-+-+-+-+-+---------------+
| |A| | | | | | | |
|1|C|0|0|0|0|0|0| 28 |
| |K| | | | | | | |
+-+-+-+-+-+-+-+-+---------------+
+ Sequence # + Ack Number |
+---------------+---------------+
| Vers | Spare | Max # of Out |
| | | standing Segs |
+---------------+---------------+
| Option Flags | Spare |
+---------------+---------------+
| Maximum Segment Size |
+---------------+---------------+
| Retransmission Timeout Value |
+---------------+---------------+
| Cumulative Ack Timeout Value |
+---------------+---------------+
| Null Segment Timeout Value |
+---------------+---------------+
| Transfer State Timeout Value |
+---------------+---------------+
| Max Retrans | Max Cum Ack |
+---------------+---------------+
| Max Out of Seq| Max Auto Reset|
+---------------+---------------+
| Connection Identifier |
+ +
| (32 bits in length) |
+---------------+---------------+
| Checksum |
+---------------+---------------+
Figure 2, SYN segment
Sequence Number
The sequence number field contains the initial sequence number selected for
this connection.
Acknowledgment 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 RUDP.
Version
The version field contains the version of RUDP. The initial version is
one (1).
Bova & Krivoruchka [Page 6]
Internet Draft Reliable UDP Protocol Feb 1999
Maximum Number of Outstanding Segments
The maximum number of segments that should be sent without getting an
acknowledgment. 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. This is not a negotiable
parameter. Each side must use the value provided by its peer when
sending data.
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.
A preliminary subset of flags are defined as follows:
Bit # Bit Name Description
0 not used not used, must always be set to 1.
1 CHK Data Checksum enable. If this bit is set
then the checksum field will contain a
checksum of the entire RUDP packet (header
and data). This is a negotiable
parameter.
2 REUSE This bit must be set during an auto reset to
indicate the previous negotiable parameters
should be used. When this bit is set the
following fields of the SYN should be set to
zero by the sender and must be ignored by the
receiver: Maximum Segment Size,
Retransmission Timeout Value, Cumulative Ack
Timeout Value, Max Retransmissions, Max
Cumulative Ack, Max Out of Sequence, and Max
Auto Reset.
3-7 Spare
Maximum Segment Size
The maximum number of octets that can be received by the peer sending the
SYN segment. Each peer may specify a different value. Each peer must not
send packets greater than the value of this field received from its peer
during connection negotiation. This number includes the size of the RUDP
header. This is not a negotiable parameter.
Retransmission Timeout Value
The timeout value for retransmission of unacknowledged packets. This value
is specified in milliseconds. The valid range is 100 to 65536. This is a
negotiable parameter, both peers must agree on the same value for this
parameter.
Bova & Krivoruchka [Page 7]
Internet Draft Reliable UDP Protocol Feb 1999
Cumulative Ack Timeout Value
The timeout value for sending an acknowledgment segment if another segment
is not sent. This value is specified in milliseconds. The valid range is
100 to 65536. This is a negotiable parameter, both peers must agree on the
same value for this parameter. In addition, this parameter should be
smaller than the Retransmission Timeout Value.
Null Segment Timeout Value
The timeout value for sending a null segment if a data segment has not
been sent. Thus, the null segment acts as a keep-alive mechanism.
This value is specified in milliseconds. The valid range is 0 to 65536.
A value of 0 disables null segments. This is a negotiable parameter, both
peers must agree on the same value for this parameter.
Transfer State Timeout Value
This timeout value indicate the amount of time the state information will
be saved for a connection before an auto reset occurs. This value is
specified in milliseconds. The valid range is 0 to 65536. This is a
negotiable parameter, both peers must agree on the same value for this
parameter. A value of 0 indicates the connection will be auto-reset
immediately.
Max Retrans
The maximum number of times consecutive retransmission(s) will be attempted
before the connection is considered broken. The valid range for this value
is 0 to 255. A value of 0 indicates retransmission should be attempted
forever. This is a negotiable parameter, both peers must agree on the same
value for this parameter.
Max Cum Ack
The maximum number of acknowledgments that will be accumulated before
sending an acknowledgment if another segment is not sent. The valid range
for this value is 0 to 255. A value of 0 indicates an acknowledgment
segment will be send immediately when a data, null, or reset segment is
received. This is a negotiable parameter, both peers must agree on the
same value for this parameter.
Max Out of Seq
The maximum number of out of sequence packets that will be accumulated
before an EACK (Extended Acknowledgement) segment is sent. The valid range
for this value is 0 to 255. A value of 0 indicates an EACK will be sent
immediately if an out of order segment is received. This is a negotiable
parameter, both peers must agree on the same value for this parameter.
Bova & Krivoruchka [Page 8]
Internet Draft Reliable UDP Protocol Feb 1999
Max Auto Reset
The maximum number of consecutive auto reset that will performed before
a connection is reset. The valid range for this value is 0 to 255. A
value of 0 indicates that an auto reset will not be attempted, the
connection will be reset immediately if an auto reset condition occurs.
This is a negotiable parameter, both peers must agree on the same value
for this parameter. The consecutive auto reset counter is cleared once
a connection is opened.
Connection Identifier
When opening a new connection each peer transmits a connection identifier
that is unique among all RUDP current connections. Each side then saves
the connection ID received. When an auto reset is performed, the peer
shall send the saved connection ID originally received to indicate that
an auto reset is being performed on the connection.
3. ACK Segment
The ACK Segment is used to acknowledge in-sequence segments. It contains
both the next send sequence number and the acknowledgment sequence number
in the RUDP header. The ACK segment may be sent as a separate segment, but
it should be combined with data whenever possible. Data and Null segments
must always include the ACK bit and Acknowledgment Number field. The size
of a stand-alone ACK segment is six octets. Figure 3 shows a stand-alone
ACK segment.
0 1 2 3 4 5 6 7 8 15
+-+-+-+-+-+-+-+-+---------------+
|0|1|0|0|0|0|0|0| 6 |
+-+-+-+-+-+-+-+-+---------------+
| Sequence # | Ack Number |
+---------------+---------------+
| Checksum |
+---------------+---------------+
Figure 3, Stand-alone ACK segment
4. EACK segment
The EACK segment is used to acknowledge segments received out of sequence.
It contains the sequence numbers of one or more segments received 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 header
length is variable for the EACK segment. Its minimum value is seven and
its maximum value depends on the maximum receive queue length. Figure 4
shows a stand-alone EACK segment.
Bova & Krivoruchka [Page 9]
Internet Draft Reliable UDP Protocol Feb 1999
0 1 2 3 4 5 6 7 8 15
+-+-+-+-+-+-+-+-+---------------+
|0|1|1|0|0|0|0|0| N + 6 |
+-+-+-+-+-+-+-+-+---------------+
| Sequence # | Ack Number |
+---------------+---------------+
|1st out of seq |2nd out of seq |
| ack number | ack number |
+---------------+---------------+
| . . . |Nth out of seq |
| | ack number |
+---------------+---------------+
| Checksum |
+---------------+---------------+
Figure 4, EACK segment
5. RST segment
The RST segment is used to close or reset a connection. Upon receipt of an
RST segment, the sender must stop sending new packets, but must continue
to attempt delivery of packets already accepted from the API. The RST is
sent as a separate segment and does not include any data. Figure 5 shows
a RST segment.
0 1 2 3 4 5 6 7 8 15
+-+-+-+-+-+-+-+-+---------------+
| |A| | | | | | | |
|0|C|0|1|0|0|0|0| 6 |
| |K| | | | | | | |
+-+-+-+-+-+-+-+-+---------------+
| Sequence # | Ack Number |
+---------------+---------------+
| Header Checksum |
+---------------+---------------+
Figure 5, RST segment
6. NUL segment
The NUL segment is used to determine if the other side of a connection
is still active. Thus, the NUL segment performs a keep-alive function.
When a NUL segment is received, an RUDP implementation must immediately
acknowledge the segment if a valid connection exists and the segment
sequence number is the next one in sequence. The segment is then
discarded. The NUL must be combined with an ACK in a segment but never
combined with user data. Figure 6 shows a NUL segment.
Bova & Krivoruchka [Page 10]
Internet Draft Reliable UDP Protocol Feb 1999
0 1 2 3 4 5 6 7 8 15
+-+-+-+-+-+-+-+-+---------------+
|0|1|0|0|1|0|0|0| 6 |
+-+-+-+-+-+-+-+-+---------------+
| Sequence # | Ack Number |
+---------------+---------------+
| Checksum |
+---------------+---------------+
Figure 6, NUL segment
7. TCS Segment
The TCS is used to transfer the state of connection. Figure 7 shows a TCS
segment.
0 1 2 3 4 5 6 7 8 15
+-+-+-+-+-+-+-+-+---------------+
| |A| | | | | | | |
|0|C|0|0|0|0|1|0| 12 |
| |K| | | | | | | |
+-+-+-+-+-+-+-+-+---------------+
| Sequence # | Ack Number |
+---------------+---------------+
| Seq Adj Factor| Spare |
+---------------+---------------+
| Connection Identifier |
+ + +
| (32 bits in length) |
+---------------+---------------+
| Checksum |
+---------------+---------------+
Figure 7, TCS segment
Sequence Number
The sequence number field contains the initial sequence number selected for
this connection.
Acknowledgment Number
The acknowledgment number field indicates to a transmitted that last in-
sequence packet the receiver has received.
Seq Adj Factor
This field is used during transfer of state to adjust sequence numbers
between the old and current connections.
Bova & Krivoruchka [Page 11]
Internet Draft Reliable UDP Protocol Feb 1999
Connection Identifier
When opening a new connection each peer transmits a connection identifier
that is unique among all current RUDP connections. Each side then saves
the connection ID received. This field is used to inform the peer connection
of the connection record that is being transferred to this connection.
1.3.1 Detailed Design
A separate internet draft is being prepared which details in connections
state transitions in Specification and Description Language (SDL) format.
It also contains more details on the internal design of RUDP.
1.3.2 Feature Description
The following features are supported by RUDP. In the following description,
transmitter and receiver refer to either clients or servers that are sending
or receiving a data segment respectively on a connection. Client refers to
the peer that initiates the connection and Server refers to the peer that
listened for a connection. A connection is defined as an interface that
serves a unique peer IP address/UDP port pair. A server or a client can
have multiple connections on a particular IP address/UDP port, each
connection will be with a unique peer IP address/UDP port pair.
1. Retransmission timer.
The transmitter has a retransmission timer with a configurable time-
out value. This timer is initialized every time a data, null, or
reset segment is sent and there is not a segment currently being timed.
If an acknowledgment for this data segment is not received by the time
the timer expires, all segments that have been sent but not acknowledged
are retransmitted. The Retransmission timer is re-started when the
timed segment is received, if there is still one or more packets that
have been sent but not acknowledged. The recommended value of the
retransmission timer is 600 milliseconds.
2. Retransmission Counter.
The transmitter maintains a counter of the number of times a segment
has been retransmitted. The maximum value of this counter is configurable
with a recommended value is 2. If this counter exceeds its maximum, the
connection will be considered broken. Refer to paragraph item 14 below,
Broken Connection Handling, for a description of how RUDP handles a
broken connection.
3. Stand-alone acknowledgments.
A stand-alone acknowledgment segment is a segment that contains only
acknowledgment information. Its sequence number field contains the
sequence number of the next data, null, or reset segment to be sent.
Bova & Krivoruchka [Page 12]
Internet Draft Reliable UDP Protocol Feb 1999
4. Piggyback acknowledgments.
Whenever a receiver sends a data, null, or reset segment to the transmitter,
the receiver includes the sequence number of the last in-sequence data,
null, or reset segment received from the transmitter in the acknowledgment
number field of the header of the segment being sent by the receiver.
5. Cumulative acknowledge counter.
The receiver maintains a counter of unacknowledged segments received
without an acknowledgment being sent to the transmitter. The maximum
value of this counter is configurable. If this counter's maximum is
exceeded, the receiver sends either a stand-alone acknowledgment, or an
extended acknowledgment if there are currently any out-of-sequence
segments. The recommended value for the cumulative acknowledge counter
is 3.
6. Out-of-sequence acknowledgments counter.
The receiver maintains a counter of the number of segments that have arrived
out-of-sequence. Each time this counter exceeds its configurable maximum,
an extended acknowledgment segment containing the sequence numbers of all
current out-of-sequence segments that have been received is sent to
the transmitter. The counter is then reset to zero. The recommended
value for the out-of-sequence acknowledgements counter is 3.
When a transmitter receives an Extended Acknowledgment, it retransmits
the missing data segments to the receiver.
7. Cumulative acknowledge timer.
When a receiver has any segments that it has not acknowledged or if it has
segments on its out-of-sequence queue, it waits a maximum amount of
time before sending a stand-alone acknowledgment or an extended acknowledg-
ment, respectively. When this timer expires, if there are segments on the
out-of-sequence queue, an extended acknowledgment is sent. Otherwise,
if there are any segments currently unacknowledged, a stand-alone
acknowledgment is sent. The recommended value of the cumulative
acknowledgement timer is 300 milliseconds.
The cumulative acknowledge timer is restarted whenever an acknowledgment is
sent in a data, null, or reset segment, provided that there are no segments
currently on the out-of-sequence queue. If there are segments on the out-
of-sequence queue, the timer is not restarted, so that another extended
acknowledgment will be sent when it expires again.
8. Null segment timer
The client maintains a timer which is started when the connection is opened
and is reset every time a data segment is sent. If the client's null
segment timer expires, the client sends a null segment to the server.
Bova & Krivoruchka [Page 13]
Internet Draft Reliable UDP Protocol Feb 1999
The null segment is acknowledged by the server if its sequence number
is valid. The server maintains a null segment timer with a time-out
value of twice the client's time-out value. The server's timer is reset
whenever a data or null segment is received from the client. If the
server's null segment timer expires, the connection is considered broken.
Refer to paragraph item 14 below, Broken Connection Handling, for a
description of how RUDP handles a broken connection. The recommended
value of the Null segment timer is 2 seconds.
9. Auto Reset
Either side of a connection can initiate an auto reset. An auto reset
can be caused by the retransmission count exceeding its maximum, the
the expiration of the server's Null segment timer, or the expiration
of the transfer state timer. An auto reset will cause both peers to
reset their current states including flushing retransmission and
out-of-sequence queues and then reset their initial sequence number
and re-negotiate the connection. Each peer will notify its Upper Layer
Protocol (ULP) of the auto reset. There is a consecutive reset counter
that sets the maximum number of auto-reset that can occur without the
connection opening. If this counter exceeds its maximum the connection
is reset. The recommended value for the consecutive reset counter is 3.
10. Receiver Input Queue Size
The size of the receiver's input queue is a configurable parameter.
The recommended value of the receiver input queue size is 32 packets. The
input queue size acts as a flow control mechanism.
11. Congestion control and slow start
RUDP does not provide any congestion control or slow start algorithms.
12. UDP port numbers
RUDP doesn't place any restrictions on which UDP port numbers are used.
Valid port numbers are ports not defined in RFC 1700.
13. Support for redundant connections
If an RUDP connection fails, the Upper Layer Protocol will be signaled
and the transfer state timer will be started. The ULP can initiate the
transfer of this state to another RUDP connection via an API call and
RUDP will transfer the state information to the new connection ensuring
that packets are not duplicated or lost. If the ULP does not transfer
the state to another connection before the Transfer State Timer expires,
the connection state is lost and buffers of the queues of the
connection are freed. The time-out value for the Transfer State
timer is configurable. The recommended value for the Transfer State
timer is 1 second.
Bova & Krivoruchka [Page 14]
Internet Draft Reliable UDP Protocol Feb 1999
14. Broken connection handling
An RUDP connection is considered broken if either of the following
situations occur:
- The Retransmission Timer expires and the Retransmission Count has
been exceeded its maximum.
- A server's Null Segment Timer expires.
If either of the above two situations occur and the Transfer State
timeout value is non-zero, the ULP will be notified of the connection
failure via the Connection failure signal of the API and the Transfer
State Timer will be started. If the Transfer State Timer expires, an
Auto Reset is performed and the ULP is notified via the Connection auto
reset signal of the API.
If the transfer state timeout value is zero, then an auto reset will be
performed immediately when either of the above two situlations occur.
The ULP will be notified of a connection failure via the Connection
auto reset signal of the API.
15. Retransmission Algorithm
Retransmission occurs as a result of receiving an EACK segment or the
time-out of the Retransmission timer.
When an EACK segment is received. The segments specified in the message
are removed from the unacknowledged sent queue. The segments to be
retransmitted are determined by examining the Ack Number and the last out
of seq ack number in the EACK segment. All segments between but not
including these two sequence numbers that are on the unacknowledged sent
queue are retransmitted.
When a retransmission time-out occurs, all messages on the unacknowledged
sent queue are retransmitted.
16. Signals to Upper Layer Protocol (ULP)
The following signals are sent to the ULP via the API. These are used to
signal asynchronous events to the ULP:
Connection open - This signal is generated when the state of the
connection transitions to Open.
Connection refused - This signal is generated when the state of a
connection transitions to the Closed state from other
than the Close Wait state.
Connection closed - This signal is generated when the state of a
connection transitions from the Close Wait state to
the Closed state.
Bova & Krivoruchka [Page 15]
Internet Draft Reliable UDP Protocol Feb 1999
Connection failure - This signal is generated when a connection is
declared broken, as described in section 1.3.2,
item 15 (Retransmission Algorithm) above.
Connection auto reset - This signal is generated when a connection auto
resets. This is an indication to the ULP that data
may have been lost and RUDP is attempting to return
the connection to the Open state.
17. Checksum Algorithm
The checksum algorithm used in RUDP is the same algorithm used in UDP and
TCP headers which is the 16-bit one's complement of the one's complement
sum of data being checksumed. The checksum is calculated over the entire
RUDP packet if negotiated at the time the connection was opened. The
negotiation is based on setting the CHK bit of the options field in the
SYN segment used to open the connection. Otherwise, the checksum is
calculated over the RUDP header only. Refer to RFC 1071 for implementation
information for this algorithm.
18. FEC
RUDP does not define a procedure for generate Forward Error Correction
(FEC). It is compatible with FEC algorithms that generate duplicate
packets because it will throw away any duplicate packets it receives.
19. Security
RUDP will be compatible with the IPsec standard for secure IP
communications.
1.4 Feature Negotiation
When client initiates a connection its sends a SYN segment which contains
the negotiable parameters defined by the ULP via the API. The server can
accept these parameters by echoing them back in its SYN with ACK response
or propose different parameters in its SYN with ACK response. The client
can then choose to accept the parameters sent by the server by sending an
ACK to establish the connection or it can refuse the connection by sending
send a RST. Features cannot be re-negotiated during an auto reset.
2.0 Future Potential Enhancements
RUDP should support a symmetrical mode of operation in addition to the
current client/server mode of operation. This would allow both sides to
actively start the connection.
RUDP should support the ability to expand the sequence and acknowledge
fields from their current one octet length to two octets. This will allow
transmission windows of greater than 255 buffer to be used.
Investigate use of the Nagle algorithm to improve network efficiency.
Bova & Krivoruchka [Page 16]
Internet Draft Reliable UDP Protocol Feb 1999
3.0 References
[1] Postel, J. (ed.), "Internet Protocol - DARPA Internet Program
Protocol Specification", RFC 791, USC/Information Sciences Institute,
September 1981.
[2] Postel, J., "User Datagram Protocol", RFC 768, USC/Information
Sciences Institute, August 1980.
[3] Postel, J. (ed.), "Transmission Control Protocol", RFC 793,
USC/Information Sciences Institute, September 1981.
[4] Velten, D., Hinden, R. and Sax, J., "Reliable Data Protocol", RFC
908, BBN Communications Corporation, July 1984.
[5] Partridge, C. and Hinden, R., "Version 2 of the Reliable Data
Protocol", RFC 1151, BBN Corporation, April 1990.
[6] Braden, R., "Computing the Internet Checksum", RFC 1071, ISI,
September 1988
[7] V. Jacobson, "Congestion Avoidance and Control," Computer
Communication Review, Val. 18, no. 4, pp. 314-329, Aug. 1988.
[8] W. Stevens, RFC 2001 TCP Slow Start, Congestion Avoidance, Fast
Retransmit, and Fast Recovery Algorithms, January 1997
[9] V. Jacobson, "Modified TCP Congestion Avoidance Algorithm", April
30, 1990.
[10] Z. Wang, J. Crowcroft, A Dual-Window Model for Flow and Congestion
Control, The Distributed Computing Engineering Journal, Institute
of Physics/British Computer Society/IEEE, Vol 1, No 3, page 162-172,
May 1994.
[11] Romanow, Allyn, "TCP over ATM: Some Performance Results",
ATM Forum/93-784
4.0 Author's Addresses
Tom Bova Tel: +1-703-484-3331
Cisco Systems Email: tbova@cisco.com
13615 Dulles Technology Drive
Herndon, VA 20171
USA
Ted Krivoruchka Tel: +1-703-484-3325
Cisco Systems Email: tedk@cisco.com
13615 Dulles Technology Drive
Herndon, VA 20171
USA