One document matched: draft-ietf-sigtran-reliable-udp-00.txt




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


PAFTECH AB 2003-20262026-04-24 11:11:16