home *** CD-ROM | disk | FTP | other *** search
/ Handbook of Infosec Terms 2.0 / Handbook_of_Infosec_Terms_Version_2.0_ISSO.iso / text / rfcs / rfc0908.txt < prev    next >
Text File  |  1996-05-07  |  101KB  |  2,290 lines

  1.  
  2.  
  3.  
  4.  
  5.                            Reliable Data Protocol 
  6.  
  7.  
  8.  
  9.                                   RFC-908 
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.                                 David Velten 
  24.  
  25.                                Robert Hinden 
  26.  
  27.                                  Jack Sax 
  28.  
  29.  
  30.  
  31.  
  32.  
  33.                        BBN Communications Corporation 
  34.  
  35.  
  36.  
  37.  
  38.  
  39.                                  July 1984 
  40.  
  41.  
  42.  
  43.  
  44.  
  45. Status of This Memo 
  46.  
  47.    This RFC specifies a proposed protocol for the ARPA Internet    community, and requests discussion and suggestions for    improvements.  Distribution of this memo is unlimited. 
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.      RDP Specification                            
  56.  
  57.  
  58.  
  59.                              Table of Contents 
  60.  
  61.  
  62.  
  63.  
  64.  
  65.      1   Introduction.......................................... 1 
  66.  
  67.      2   General Description................................... 3      2.1   Motivation.......................................... 3      2.2   Relation to Other Protocols......................... 5 
  68.  
  69.      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 
  70.  
  71.      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 
  72.  
  73.  
  74.  
  75.                                                                 Page i 
  76.  
  77.  
  78.  
  79.  
  80.      RFC-908                                                 July 1984 
  81.  
  82.  
  83.  
  84.      4.6   RST Segment........................................ 42      4.6.1   RST Segment Format............................... 42      4.7   NUL Segment........................................ 43      4.7.1   NUL segment format............................... 43 
  85.  
  86.      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 
  87.  
  88.      A   Implementing a Minimal RDP........................... 53 
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.       Page ii 
  117.  
  118.  
  119.  
  120.  
  121.      RDP Specification                            
  122.  
  123.  
  124.  
  125.                                   FIGURES 
  126.  
  127.  
  128.  
  129.       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 
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.                                                                Page iii 
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.                                   CHAPTER 1 
  172.  
  173.                                 Introduction 
  174.  
  175.  
  176.  
  177.           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. 
  178.  
  179.           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. 
  180.  
  181.           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. 
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205.  
  206.  
  207.  
  208.  
  209.                                                                 Page 1 
  210.  
  211.  
  212.  
  213.  
  214.      RFC-908                                                 July 1984 
  215.  
  216.  
  217.  
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226.  
  227.  
  228.  
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240.  
  241.  
  242.  
  243.  
  244.  
  245.  
  246.  
  247.  
  248.  
  249.  
  250.  
  251.  
  252.  
  253.  
  254.  
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.      Page 2 
  269.  
  270.  
  271.  
  272.  
  273.      RDP Specification                             General Description 
  274.  
  275.  
  276.  
  277.                                  CHAPTER 2 
  278.  
  279.                              General Description 
  280.  
  281.  
  282.  
  283.      2.1  Motivation 
  284.  
  285.           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. 
  286.  
  287.           The following is a list of requirements for such a transport      protocol: 
  288.  
  289.           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. 
  290.  
  291.          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. 
  292.  
  293.          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. 
  294.  
  295.  
  296.  
  297.                                                                 Page 3 
  298.  
  299.  
  300.  
  301.  
  302.      RFC-908                                                 July 1984 
  303.  
  304.  
  305.  
  306.          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. 
  307.  
  308.          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. 
  309.  
  310.           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: 
  311.  
  312.          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. 
  313.  
  314.          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. 
  315.  
  316.          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. 
  317.  
  318.  
  319.  
  320.      Page 4 
  321.  
  322.  
  323.  
  324.  
  325.      RDP Specification                             General Description 
  326.  
  327.  
  328.  
  329.           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. 
  330.  
  331.           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. 
  332.  
  333.  
  334.  
  335.      2.2  Relation to Other Protocols 
  336.  
  337.           RDP is a transport  protocol  that  fits  into  the  layered      internet protocol environment.  Figure 1 illustrates the place of      RDP in the protocol hierarchy: 
  338.  
  339.        +------+   +-----+     +-----+      +------+       |TELNET|   | FTP |     |Debug|  ... |Loader|  Application Layer       +------+   +-----+     +-----+      +------+          |          |           |             |          +-----+----+           +------+------+                |                       |             +------+               +-------+             |  TCP |               |  RDP  |        Transport Layer             +------+               +-------+                |                     |       +--------------------------------+       | Internet Protocol & ICMP       |            Internetwork Layer       +--------------------------------+                              |                    +-------------------------+                    | Network Access Protocol |      Network Layer                    +-------------------------+ 
  340.  
  341.                          Relation to Other Protocols                                  Figure 1 
  342.  
  343.  
  344.  
  345.  
  346.  
  347.  
  348.  
  349.                                                                 Page 5 
  350.  
  351.  
  352.  
  353.  
  354.      RFC-908                                                 July 1984 
  355.  
  356.  
  357.  
  358.           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. 
  359.  
  360.                                                          #        %                                                           ?  *     !                                                                  @  )        +------+         +-----+         +----+          $  =   ^   +        |      |Messages |     |Segments |    | Datagrams   *        | User |<------->| RDP |<------->| IP |<------->    Internet        |      |         |     |         |    |          ,            ?        +------+         +-----+         +----+               !    )                                                           *   %     $                                                         @    ^   ! 
  361.  
  362.                    Form of Data Exchange Between Layers                                  Figure 2 
  363.  
  364.  
  365.  
  366.           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. 
  367.  
  368.  
  369.  
  370.  
  371.  
  372.  
  373.  
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380.  
  381.  
  382.       Page 6 
  383.  
  384.  
  385.  
  386.  
  387.      RDP Specification                              Protocol Operation 
  388.  
  389.  
  390.  
  391.                                  CHAPTER 3 
  392.  
  393.                              Protocol Operation 
  394.  
  395.  
  396.  
  397.      3.1  Protocol Service Objectives 
  398.  
  399.           The RDP protocol has the following goals: 
  400.  
  401.          o   RDP will provide  a  full-duplex  communications  channel              between the two ports of each transport connection. 
  402.  
  403.          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. 
  404.  
  405.          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. 
  406.  
  407.          o   RDP  will  optionally  provide  sequenced   delivery   of              segments.    Sequenced   delivery  of  segments  must  be              specified when the connection is established. 
  408.  
  409.          o   RDP will acknowledge segments received out  of  sequence,              as  they  arrive.   This  will  free  up resources on the              sending side. 
  410.  
  411.  
  412.  
  413.      3.2  RDP Connection Management 
  414.  
  415.           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. 
  416.  
  417.  
  418.  
  419.  
  420.  
  421.  
  422.  
  423.                                                                  Page 7 
  424.  
  425.  
  426.  
  427.  
  428.      RFC-908                                                 July 1984 
  429.  
  430.  
  431.  
  432.      3.2.1  Opening a Connection 
  433.  
  434.           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. 
  435.  
  436.           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. 
  437.  
  438.  
  439.  
  440.      3.2.2  Ports 
  441.  
  442.           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. 
  443.  
  444.           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. 
  445.  
  446.  
  447.  
  448.      3.2.3  Connection States 
  449.  
  450.           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. 
  451.  
  452.  
  453.  
  454.  
  455.  
  456.       Page 8 
  457.  
  458.  
  459.  
  460.  
  461.      RDP Specification                              Protocol Operation 
  462.  
  463.  
  464.  
  465.      CLOSED 
  466.  
  467.           The CLOSED state exists when no connection exists and  there           is no connection record allocated. 
  468.  
  469.       LISTEN 
  470.  
  471.           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. 
  472.  
  473.       SYN-SENT 
  474.  
  475.           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. 
  476.  
  477.       SYN-RCVD 
  478.  
  479.           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. 
  480.  
  481.           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. 
  482.  
  483.  
  484.  
  485.  
  486.  
  487.  
  488.  
  489.                                                                 Page 9 
  490.  
  491.  
  492.  
  493.  
  494.      RFC-908                                                 July 1984 
  495.  
  496.  
  497.  
  498.  
  499.  
  500.                               +------------+               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                              +------------+ 
  501.  
  502.                         RDP Connection State Diagram                                  Figure 3 
  503.  
  504.  
  505.  
  506.  
  507.  
  508.  
  509.  
  510.      Page 10 
  511.  
  512.  
  513.  
  514.  
  515.      RDP Specification                              Protocol Operation 
  516.  
  517.  
  518.  
  519.      OPEN 
  520.  
  521.           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. 
  522.  
  523.       CLOSE-WAIT 
  524.  
  525.           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. 
  526.  
  527.  
  528.  
  529.  
  530.  
  531.      3.2.4  Connection Record 
  532.  
  533.           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. 
  534.  
  535.           The connection record fields and their descriptions follow: 
  536.  
  537.      STATE 
  538.  
  539.           The current state of the connection.  Legal values are OPEN,           LISTEN, CLOSED, SYN-SENT, SYN-RCVD,  and CLOSE-WAIT. 
  540.  
  541.       Send Sequence Number Variables: 
  542.  
  543.      SND.NXT 
  544.  
  545.           The sequence number of the next segment that is to be sent. 
  546.  
  547.  
  548.  
  549.                                                                 Page 11 
  550.  
  551.  
  552.  
  553.  
  554.      RFC-908                                                 July 1984 
  555.  
  556.  
  557.  
  558.      SND.UNA 
  559.  
  560.           The sequence number of the oldest unacknowledged segment. 
  561.  
  562.      SND.MAX 
  563.  
  564.           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. 
  565.  
  566.      SND.ISS 
  567.  
  568.           The initial send sequence  number.   This  is  the  sequence           number that was sent in the SYN segment. 
  569.  
  570.      Receive Sequence Number Variables: 
  571.  
  572.      RCV.CUR 
  573.  
  574.           The sequence number of the last segment  received  correctly           and in sequence. 
  575.  
  576.      RCV.MAX 
  577.  
  578.           The maximum number of segments that can be buffered for this           connection. 
  579.  
  580.      RCV.IRS 
  581.  
  582.           The initial receive sequence number.  This is  the  sequence           number of the SYN segment that established this connection. 
  583.  
  584.      RCVDSEQNO[n] 
  585.  
  586.           The array of sequence numbers of  segments  that  have  been           received and acknowledged out of sequence. 
  587.  
  588.      Other Variables: 
  589.  
  590.      CLOSEWAIT 
  591.  
  592.           A timer used to time out the CLOSE-WAIT state. 
  593.  
  594.      SBUF.MAX 
  595.  
  596.           The largest possible segment (in octets) that can legally be           sent.  This variable is specified by the foreign host in the 
  597.  
  598.  
  599.  
  600.      Page 12 
  601.  
  602.  
  603.  
  604.  
  605.      RDP Specification                              Protocol Operation 
  606.  
  607.  
  608.  
  609.           SYN segment during connection establishment. 
  610.  
  611.      RBUF.MAX 
  612.  
  613.           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. 
  614.  
  615.      Variables from Current Segment: 
  616.  
  617.      SEG.SEQ 
  618.  
  619.           The  sequence  number  of  the   segment   currently   being           processed. 
  620.  
  621.      SEG.ACK 
  622.  
  623.           The acknowledgement sequence number in the segment currently           being processed. 
  624.  
  625.      SEG.MAX 
  626.  
  627.           The maximum number of outstanding segments the  receiver  is           willing  to  hold,  as  specified  in  the  SYN segment that           established the connection. 
  628.  
  629.      SEG.BMAX 
  630.  
  631.           The maximum segment size (in octets) accepted by the foreign           host  on  a connection, as specified in the SYN segment that           established the connection. 
  632.  
  633.  
  634.  
  635.      3.2.5  Closing a Connection 
  636.  
  637.           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 
  638.  
  639.  
  640.  
  641.                                                                Page 13 
  642.  
  643.  
  644.  
  645.  
  646.      RFC-908                                                 July 1984 
  647.  
  648.  
  649.  
  650.      reliably delivered before requesting a close of the connection. 
  651.  
  652.  
  653.  
  654.      3.2.6  Detecting an Half-Open Connection 
  655.  
  656.           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. 
  657.  
  658.           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. 
  659.  
  660.           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. 
  661.  
  662.  
  663.  
  664.      3.3  Data Communication 
  665.  
  666.           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. 
  667.  
  668.  
  669.  
  670.  
  671.  
  672.       Page 14 
  673.  
  674.  
  675.  
  676.  
  677.      RDP Specification                              Protocol Operation 
  678.  
  679.  
  680.  
  681.           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. 
  682.  
  683.           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. 
  684.  
  685.           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. 
  686.  
  687.  
  688.  
  689.      3.4  Reliable Communication 
  690.  
  691.           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. 
  692.  
  693.  
  694.  
  695.      3.4.1  Segment Sequence Numbers 
  696.  
  697.           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 
  698.  
  699.  
  700.  
  701.                                                                Page 15 
  702.  
  703.  
  704.  
  705.  
  706.      RFC-908                                                 July 1984 
  707.  
  708.  
  709.  
  710.      sent with the next valid sequence number. 
  711.  
  712.  
  713.  
  714.      3.4.2  Checksums 
  715.  
  716.           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. 
  717.  
  718.           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. 
  719.  
  720.  
  721.  
  722.      3.4.3  Positive Acknowledgement of Segments 
  723.  
  724.           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. 
  725.  
  726.           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. 
  727.  
  728.           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 
  729.  
  730.  
  731.  
  732.      Page 16 
  733.  
  734.  
  735.  
  736.  
  737.      RDP Specification                              Protocol Operation 
  738.  
  739.  
  740.  
  741.      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. 
  742.  
  743.           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. 
  744.  
  745.           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. 
  746.  
  747.  
  748.  
  749.      3.4.4  Retransmission Timeout 
  750.  
  751.           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. 
  752.  
  753.           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. 
  754.  
  755.  
  756.  
  757.      3.5  Flow Control and Window Management 
  758.  
  759.           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 
  760.  
  761.  
  762.  
  763.                                                                Page 17 
  764.  
  765.  
  766.  
  767.  
  768.      RFC-908                                                 July 1984 
  769.  
  770.  
  771.  
  772.      passed from  one  host  to  another  in  the  initial  connection      segments. 
  773.  
  774.           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. 
  775.  
  776.           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. 
  777.  
  778.           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. 
  779.  
  780.           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. 
  781.  
  782.           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. 
  783.  
  784.  
  785.  
  786.      Page 18 
  787.  
  788.  
  789.  
  790.  
  791.      RDP Specification                              Protocol Operation 
  792.  
  793.  
  794.  
  795.      3.6  User Interface 
  796.  
  797.           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. 
  798.  
  799.       OPEN Request 
  800.  
  801.           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. 
  802.  
  803.       SEND Request 
  804.  
  805.           Sends  a  user  message.   Parameters   include   connection           identifier, buffer address and data count. 
  806.  
  807.       RECEIVE Request 
  808.  
  809.           Receives a  user  message.   Parameters  include  connection           identifier, buffer address and data count. 
  810.  
  811.       CLOSE Request 
  812.  
  813.           Closes a specified connection.  The single parameter is  the           connection identifier. 
  814.  
  815.       STATUS Request 
  816.  
  817.           Returns the status of a connection.  The parameters  include           the  connection  identifier  and  the  address of the status           buffer. 
  818.  
  819.  
  820.  
  821.  
  822.  
  823.  
  824.  
  825.  
  826.  
  827.                                                                Page 19 
  828.  
  829.  
  830.  
  831.  
  832.      RFC-908                                                 July 1984 
  833.  
  834.  
  835.  
  836.      3.7  Event Processing 
  837.  
  838.           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: 
  839.  
  840.           USER REQUESTS 
  841.  
  842.                 Open                 Send                 Receive                 Close                 Status 
  843.  
  844.            ARRIVING SEGMENT 
  845.  
  846.                 Segment Arrives 
  847.  
  848.            TIMEOUTS 
  849.  
  850.                 Retransmission Timeout                 Close-Wait Timeout 
  851.  
  852.           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. 
  853.  
  854.           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. 
  855.  
  856.  
  857.  
  858.  
  859.  
  860.  
  861.  
  862.  
  863.  
  864.  
  865.  
  866.      Page 20 
  867.  
  868.  
  869.  
  870.  
  871.      RDP Specification                              Protocol Operation 
  872.  
  873.  
  874.  
  875.      3.7.1  User Request Events 
  876.  
  877.           The following scenarios demonstrate the processing of events      caused by the issuance of user requests: 
  878.  
  879.       Open Request 
  880.  
  881.         CLOSED STATE 
  882.  
  883.          Create a connection record          If none available            Return "Error - insufficient resources"          Endif 
  884.  
  885.          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 
  886.  
  887.           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 
  888.  
  889.  
  890.  
  891.  
  892.  
  893.                                                                 Page 21 
  894.  
  895.  
  896.  
  897.  
  898.      RFC-908                                                 July 1984 
  899.  
  900.  
  901.  
  902.        LISTEN STATE        SYN-SENT STATE        SYN-RCVD STATE        OPEN STATE        CLOSE-WAIT STATE 
  903.  
  904.          Return "Error - connection already open" 
  905.  
  906.       Close Request 
  907.  
  908.        OPEN STATE 
  909.  
  910.          Send <SEQ=SND.NXT><RST>          Set State = CLOSE-WAIT          Start TIMWAIT Timer          Return 
  911.  
  912.        LISTEN STATE 
  913.  
  914.          Set State = CLOSED          Deallocate connection record          Return 
  915.  
  916.        SYN-RCVD STATE        SYN-SENT STATE 
  917.  
  918.          Send <SEQ=SND.NXT><RST>          Set State = CLOSED          Return 
  919.  
  920.         CLOSE-WAIT STATE 
  921.  
  922.          Return "Error - connection closing" 
  923.  
  924.        CLOSE STATE 
  925.  
  926.          Return "Error - connection not open" 
  927.  
  928.  
  929.  
  930.  
  931.  
  932.  
  933.  
  934.  
  935.  
  936.  
  937.  
  938.      Page 22 
  939.  
  940.  
  941.  
  942.  
  943.      RDP Specification                              Protocol Operation 
  944.  
  945.  
  946.  
  947.      Receive Request 
  948.  
  949.        OPEN STATE 
  950.  
  951.          If Data is pending            Return with data           else            Return with "no data" indication          Endif 
  952.  
  953.        LISTEN STATE        SYN-RCVD STATE        SYN-SENT STATE 
  954.  
  955.          Return with "no data" indication 
  956.  
  957.        CLOSE STATE        CLOSE-WAIT STATE 
  958.  
  959.          Return "Error - connection not open" 
  960.  
  961.       Send Request 
  962.  
  963.        OPEN STATE 
  964.  
  965.          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 
  966.  
  967.         LISTEN STATE        SYN-RCVD STATE        SYN-SENT STATE        CLOSE STATE        CLOSE-WAIT STATE 
  968.  
  969.          Return "Error - connection not open" 
  970.  
  971.       Status Request 
  972.  
  973.        Return with: 
  974.  
  975.  
  976.  
  977.                                                                Page 23 
  978.  
  979.  
  980.  
  981.  
  982.      RFC-908                                                 July 1984 
  983.  
  984.  
  985.  
  986.          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 
  987.  
  988.  
  989.  
  990.      3.7.2  Segment Arrival Events 
  991.  
  992.           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. 
  993.  
  994.      If State = CLOSED 
  995.  
  996.        If RST set          Discard segment          Return        Endif 
  997.  
  998.        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 
  999.  
  1000.      Endif 
  1001.  
  1002.       If State = CLOSE-WAIT        If RST set           Set State = CLOSED           Discard segment           Cancel TIMWAIT timer           Deallocate connection record         else           Discard segment        Endif        Return      Endif 
  1003.  
  1004.  
  1005.  
  1006.       Page 24 
  1007.  
  1008.  
  1009.  
  1010.  
  1011.      RDP Specification                              Protocol Operation 
  1012.  
  1013.  
  1014.  
  1015.      If State = LISTEN 
  1016.  
  1017.        If RST set          Discard the segment          Return        Endif 
  1018.  
  1019.        If ACK or NUL set          Send <SEQ=SEG.ACK + 1><RST>          Return        Endif 
  1020.  
  1021.        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 
  1022.  
  1023.        If anything else (should never get here)          Discard segment          Return        Endif      Endif 
  1024.  
  1025.      If State = SYN-SENT 
  1026.  
  1027.        If ACK set          If RST clear and SEG.ACK != SND.ISS            Send <SEQ=SEG.ACK + 1><RST>          Endif          Discard segment; Return        Endif 
  1028.  
  1029.        If RST set          If ACK set            Signal "Connection Refused"            Set State =  CLOSED            Deallocate connection record          Endif          Discard segment          Return        Endif 
  1030.  
  1031.  
  1032.  
  1033.                                                                Page 25 
  1034.  
  1035.  
  1036.  
  1037.  
  1038.      RFC-908                                                 July 1984 
  1039.  
  1040.  
  1041.  
  1042.         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 
  1043.  
  1044.        If anything else          Discard segment          Return        Endif      Endif 
  1045.  
  1046.      If State = SYN-RCVD 
  1047.  
  1048.        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 
  1049.  
  1050.         If RST set          If passive Open             Set State = LISTEN          else             Set State = CLOSED             Signal "Connection Refused"             Discard segment             Deallocate connection record          Endif          Return        Endif 
  1051.  
  1052.  
  1053.  
  1054.       Page 26 
  1055.  
  1056.  
  1057.  
  1058.  
  1059.      RDP Specification                              Protocol Operation 
  1060.  
  1061.  
  1062.  
  1063.        If SYN set          Send <SEQ=SEG.ACK + 1><RST>          Set State = CLOSED          Signal "Connection Reset"          Discard segment          Deallocate connection record          Return        Endif 
  1064.  
  1065.        If EACK set           Send <SEQ=SEG.ACK + 1><RST>           Discard segment           Return        Endif 
  1066.  
  1067.        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 
  1068.  
  1069.        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 
  1070.  
  1071.      Endif 
  1072.  
  1073.  
  1074.  
  1075.  
  1076.  
  1077.  
  1078.  
  1079.                                                                Page 27 
  1080.  
  1081.  
  1082.  
  1083.  
  1084.      RFC-908                                                 July 1984 
  1085.  
  1086.  
  1087.  
  1088.      If State = OPEN 
  1089.  
  1090.        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 
  1091.  
  1092.        If RST set          Set State = CLOSE-WAIT          Signal "Connection Reset"          Return        Endif 
  1093.  
  1094.        If NUL set          Set RCV.CUR=SEG.SEQ          Send <SEQ=SND.NXT><ACK=RCV.CUR><ACK>          Discard segment          Return        Endif 
  1095.  
  1096.        If SYN set          Send <SEQ=SEG.ACK + 1><RST>          Set State = CLOSED          Signal "Connection Reset"          Discard segment          Deallocate connection record          Return        Endif 
  1097.  
  1098.        If ACK set          If SND.UNA =< SEG.ACK < SND.NXT            Set SND.UNA = SEG.ACK            Flush acknowledged segments          Endif        Endif 
  1099.  
  1100.        If EACK set          Flush acknowledged segments        Endif 
  1101.  
  1102.  
  1103.  
  1104.  
  1105.  
  1106.  
  1107.  
  1108.  
  1109.  
  1110.      Page 28 
  1111.  
  1112.  
  1113.  
  1114.  
  1115.      RDP Specification                              Protocol Operation 
  1116.  
  1117.  
  1118.  
  1119.        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 
  1120.  
  1121.  
  1122.  
  1123.      3.7.3  Timeout Events 
  1124.  
  1125.           Timeout events occur when a timer expires  and  signals  the      RDP.  Two types of timeout events can occur, as described below: 
  1126.  
  1127.      RETRANSMISSION TIMEOUTS 
  1128.  
  1129.        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 
  1130.  
  1131.       CLOSE-WAIT TIMEOUTS 
  1132.  
  1133.        Set State = CLOSED        Deallocate connection record        Return 
  1134.  
  1135.  
  1136.  
  1137.  
  1138.  
  1139.  
  1140.  
  1141.  
  1142.  
  1143.  
  1144.  
  1145.  
  1146.  
  1147.                                                                Page 29 
  1148.  
  1149.  
  1150.  
  1151.  
  1152.      RFC-908                                                 July 1984 
  1153.  
  1154.  
  1155.  
  1156.  
  1157.  
  1158.  
  1159.  
  1160.  
  1161.  
  1162.  
  1163.  
  1164.  
  1165.  
  1166.  
  1167.  
  1168.  
  1169.  
  1170.  
  1171.  
  1172.  
  1173.  
  1174.  
  1175.  
  1176.  
  1177.  
  1178.  
  1179.  
  1180.  
  1181.  
  1182.  
  1183.  
  1184.  
  1185.  
  1186.  
  1187.  
  1188.  
  1189.  
  1190.  
  1191.  
  1192.  
  1193.  
  1194.  
  1195.  
  1196.  
  1197.  
  1198.  
  1199.  
  1200.  
  1201.  
  1202.  
  1203.  
  1204.  
  1205.  
  1206.      Page 30 
  1207.  
  1208.  
  1209.  
  1210.  
  1211.      RDP Specification                        RDP Segments and Formats 
  1212.  
  1213.  
  1214.  
  1215.                                  CHAPTER 4 
  1216.  
  1217.                           RDP Segments and Formats 
  1218.  
  1219.  
  1220.  
  1221.           The segments sent by the application layer are  encapsulated      in  headers  by  the  transport,  internet and network layers, as      follows: 
  1222.  
  1223.                              +----------------+                             | Network Access |                             |     Header     |                             +----------------+                             |   IP Header    |                             +----------------+                             |   RDP Header   |                             +----------------+                             |     D          |                             |      A         |                             |       T        |                             |        A       |                             +----------------+ 
  1224.  
  1225.                               Segment Format                                  Figure 4 
  1226.  
  1227.  
  1228.  
  1229.  
  1230.  
  1231.      4.1  IP Header Format 
  1232.  
  1233.           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. 
  1234.  
  1235.           All other fields should be set as specified in RFC-791. 
  1236.  
  1237.  
  1238.  
  1239.  
  1240.  
  1241.  
  1242.  
  1243.                                                                 Page 31 
  1244.  
  1245.  
  1246.  
  1247.  
  1248.      RFC-908                                                 July 1984 
  1249.  
  1250.  
  1251.  
  1252.      4.2  RDP Header Format 
  1253.  
  1254.           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. 
  1255.  
  1256.                         0             0 0   1         1                        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5                       +-+-+-+-+-+-+---+---------------+                       |S|A|E|R|N| |Ver|    Header     |                     0 |Y|C|A|S|U|0|No.|    Length     |                       |N|K|K|T|L| |   |               |                       +-+-+-+-+-+-+---+---------------+                     1 | Source Port   |   Dest. Port  |                       +---------------+---------------+                     2 |          Data  Length         |                       +---------------+---------------+                     3 |                               |                       +---    Sequence Number      ---+                     4 |                               |                       +---------------+---------------+                     5 |                               |                       +--- Acknowledgement Number  ---+                     6 |                               |                       +---------------+---------------+                     7 |                               |                       +---        Checksum         ---+                     8 |                               |                       +---------------+---------------+                     9 |     Variable Header Area      |                       .                               .                       .                               .                       |                               |                       +---------------+---------------+ 
  1257.  
  1258.                              RDP Header Format                                  Figure 5 
  1259.  
  1260.  
  1261.  
  1262.  
  1263.  
  1264.  
  1265.  
  1266.  
  1267.  
  1268.  
  1269.  
  1270.      Page 32 
  1271.  
  1272.  
  1273.  
  1274.  
  1275.      RDP Specification                        RDP Segments and Formats 
  1276.  
  1277.  
  1278.  
  1279.      4.2.1  RDP Header Fields 
  1280.  
  1281.      Control Flags 
  1282.  
  1283.           This 8-bit field occupies the first octet of word one in the           header.  It is bit encoded with the following bits currently           defined: 
  1284.  
  1285.           Bit #  Bit Name   Description 
  1286.  
  1287.           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. 
  1288.  
  1289.  
  1290.  
  1291.           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. 
  1292.  
  1293.      Version Number 
  1294.  
  1295.           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). 
  1296.  
  1297.      Header Length 
  1298.  
  1299.           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. 
  1300.  
  1301.      Source and Destination Ports 
  1302.  
  1303.           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 
  1304.  
  1305.  
  1306.  
  1307.                                                                Page 33 
  1308.  
  1309.  
  1310.  
  1311.  
  1312.      RFC-908                                                 July 1984 
  1313.  
  1314.  
  1315.  
  1316.           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). 
  1317.  
  1318.      Data Length 
  1319.  
  1320.           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. 
  1321.  
  1322.      Sequence Number 
  1323.  
  1324.           The sequence number of this segment.  This field is 32  bits           in length. 
  1325.  
  1326.      Acknowledgement Number 
  1327.  
  1328.           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. 
  1329.  
  1330.      Checksum 
  1331.  
  1332.           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. 
  1333.  
  1334.           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. 
  1335.  
  1336.           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 
  1337.  
  1338.  
  1339.  
  1340.      Page 34 
  1341.  
  1342.  
  1343.  
  1344.  
  1345.      RDP Specification                        RDP Segments and Formats 
  1346.  
  1347.  
  1348.  
  1349.           accumulator. 
  1350.  
  1351.           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. 
  1352.  
  1353.           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. 
  1354.  
  1355.      Variable Header Area 
  1356.  
  1357.           This area is used to transmit parameters  for  the  SYN  and           EACK segments. 
  1358.  
  1359.  
  1360.  
  1361.  
  1362.  
  1363.  
  1364.  
  1365.  
  1366.  
  1367.  
  1368.  
  1369.  
  1370.  
  1371.  
  1372.  
  1373.  
  1374.  
  1375.  
  1376.  
  1377.  
  1378.  
  1379.  
  1380.  
  1381.  
  1382.  
  1383.  
  1384.  
  1385.  
  1386.  
  1387.  
  1388.  
  1389.  
  1390.  
  1391.                                                                 Page 35 
  1392.  
  1393.  
  1394.  
  1395.  
  1396.      RFC-908                                                 July 1984 
  1397.  
  1398.  
  1399.  
  1400.      4.3  SYN Segment 
  1401.  
  1402.           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. 
  1403.  
  1404.  
  1405.  
  1406.      4.3.1  SYN Segment Format 
  1407.  
  1408.  
  1409.  
  1410.                         0             0 0   1         1                         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5                        +-+-+-+-+-+-+---+---------------+                      0 |1|0|0|0|0|0|0 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       |                        +---------------+---------------+ 
  1411.  
  1412.                             SYN Segment Format                                  Figure 6 
  1413.  
  1414.  
  1415.  
  1416.  
  1417.  
  1418.      Page 36 
  1419.  
  1420.  
  1421.  
  1422.  
  1423.      RDP Specification                        RDP Segments and Formats 
  1424.  
  1425.  
  1426.  
  1427.      4.3.2  SYN Segment Fields 
  1428.  
  1429.      Sequence Number 
  1430.  
  1431.           Contains the  initial  sequence  number  selected  for  this           connection. 
  1432.  
  1433.      Acknowledgement Number 
  1434.  
  1435.           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. 
  1436.  
  1437.      Maximum Number of Outstanding Segments 
  1438.  
  1439.           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. 
  1440.  
  1441.      Maximum Segment Size 
  1442.  
  1443.           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. 
  1444.  
  1445.      Options Flag Field 
  1446.  
  1447.           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: 
  1448.  
  1449.           Bit #   Bit Name    Description 
  1450.  
  1451.           0       SDM         Sequenced delivery mode. 
  1452.  
  1453.  
  1454.  
  1455.           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. 
  1456.  
  1457.  
  1458.  
  1459.                                                                Page 37 
  1460.  
  1461.  
  1462.  
  1463.  
  1464.      RFC-908                                                 July 1984 
  1465.  
  1466.  
  1467.  
  1468.      4.4  ACK Segment 
  1469.  
  1470.           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. 
  1471.  
  1472.  
  1473.  
  1474.      4.4.1  ACK Segment Format 
  1475.  
  1476.  
  1477.  
  1478.                         0             0 0   1         1                         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5                        +-+-+-+-+-+-+---+---------------+                      0 |0|1|0|0|0|0|0 1| Header Length |                        +-+-+-+-+-+-+---+---------------+                      1 | Source Port   |   Dest. Port  |                        +---------------+---------------+                      2 |          Data  Length         |                        +---------------+---------------+                      3 |                               |                        +---    Sequence Number      ---+                      4 |                               |                        +---------------+---------------+                      5 |                               |                        +--- Acknowledgement Number  ---+                      6 |                               |                        +---------------+---------------+                      7 |                               |                        +---        Checksum         ---+                      8 |                               |                        +---------------+---------------+                        |                               |                        |             Data              |                        .                               .                        .                               .                        +---------------+---------------+ 
  1479.  
  1480.                             ACK Segment Format                                  Figure 7 
  1481.  
  1482.  
  1483.  
  1484.  
  1485.  
  1486.       Page 38 
  1487.  
  1488.  
  1489.  
  1490.  
  1491.      RDP Specification                        RDP Segments and Formats 
  1492.  
  1493.  
  1494.  
  1495.      4.4.2  ACK Segment Fields 
  1496.  
  1497.      Data Length 
  1498.  
  1499.           A non-zero Data Length field indicates that  there  is  data           present in the segment. 
  1500.  
  1501.      Sequence Number 
  1502.  
  1503.           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. 
  1504.  
  1505.      Acknowledgement Number 
  1506.  
  1507.           The  Acknowledgement  Number  field  contains  the  sequence           number of the last segment received in sequential order. 
  1508.  
  1509.  
  1510.  
  1511.  
  1512.  
  1513.  
  1514.  
  1515.  
  1516.  
  1517.  
  1518.  
  1519.  
  1520.  
  1521.  
  1522.  
  1523.  
  1524.  
  1525.  
  1526.  
  1527.  
  1528.  
  1529.  
  1530.  
  1531.  
  1532.  
  1533.  
  1534.  
  1535.  
  1536.  
  1537.  
  1538.  
  1539.                                                                 Page 39 
  1540.  
  1541.  
  1542.  
  1543.  
  1544.      RFC-908                                                 July 1984 
  1545.  
  1546.  
  1547.  
  1548.      4.5  Extended ACK Segment 
  1549.  
  1550.           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. 
  1551.  
  1552.  
  1553.  
  1554.      4.5.1  EACK Segment Format 
  1555.  
  1556.           The EACK segment has the format shown in Figure 8. 
  1557.  
  1558.  
  1559.  
  1560.      4.5.2  EACK Segment Fields 
  1561.  
  1562.      Data Length 
  1563.  
  1564.           A non-zero Data Length field indicates that  there  is  data           present in the segment. 
  1565.  
  1566.      Sequence Number 
  1567.  
  1568.           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. 
  1569.  
  1570.      Acknowledgement Number 
  1571.  
  1572.           The  Acknowledgement  Number  field  contains  the  sequence           number of the last segment received in sequential order. 
  1573.  
  1574.       Sequence # Received OK 
  1575.  
  1576.           Each entry is the sequence number  of  a  segment  that  was           received with a correct checksum, but out of sequence. 
  1577.  
  1578.  
  1579.  
  1580.  
  1581.  
  1582.  
  1583.  
  1584.  
  1585.  
  1586.      Page 40 
  1587.  
  1588.  
  1589.  
  1590.  
  1591.      RDP Specification                        RDP Segments and Formats 
  1592.  
  1593.  
  1594.  
  1595.                          0             0 0   1         1                         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5                        +-+-+-+-+-+-+---+---------------+                      0 |0|1|1|0|0|0|0 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              |                        |                               |                        +---------------+---------------+ 
  1596.  
  1597.                             EACK Segment Format                                  Figure 8 
  1598.  
  1599.  
  1600.  
  1601.  
  1602.  
  1603.  
  1604.  
  1605.  
  1606.  
  1607.                                                                Page 41 
  1608.  
  1609.  
  1610.  
  1611.  
  1612.      RFC-908                                                 July 1984 
  1613.  
  1614.  
  1615.  
  1616.      4.6  RST Segment 
  1617.  
  1618.           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. 
  1619.  
  1620.  
  1621.  
  1622.      4.6.1  RST Segment Format 
  1623.  
  1624.  
  1625.  
  1626.                         0             0 0   1         1                         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5                        +-+-+-+-+-+-+---+---------------+                      0 |0|0|0|1|0|0|0 1| Header Length |                        +-+-+-+-+-+-+---+---------------+                      1 | Source Port   |   Dest. Port  |                        +---------------+---------------+                      2 |       Data  Length = 0        |                        +---------------+---------------+                      3 |                               |                        +---    Sequence Number      ---+                      4 |                               |                        +---------------+---------------+                      5 |                               |                        +--- Acknowledgement Number  ---+                      6 |                               |                        +---------------+---------------+                      7 |                               |                        +---        Checksum         ---+                      8 |                               |                        +-------------------------------+ 
  1627.  
  1628.                             RST Segment Format                                  Figure 9 
  1629.  
  1630.  
  1631.  
  1632.  
  1633.  
  1634.  
  1635.  
  1636.  
  1637.  
  1638.  
  1639.  
  1640.  
  1641.  
  1642.      Page 42 
  1643.  
  1644.  
  1645.  
  1646.  
  1647.      RDP Specification                        RDP Segments and Formats 
  1648.  
  1649.  
  1650.  
  1651.      4.7  NUL Segment 
  1652.  
  1653.           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. 
  1654.  
  1655.  
  1656.  
  1657.      4.7.1  NUL segment format 
  1658.  
  1659.  
  1660.  
  1661.                         0             0 0   1         1                         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5                        +-+-+-+-+-+-+---+---------------+                      0 |0|0|0|0|1|0|0 1| Header Length |                        +-+-+-+-+-+-+---+---------------+                      1 | Source Port   |   Dest. Port  |                        +---------------+---------------+                      2 |       Data  Length = 0        |                        +---------------+---------------+                      3 |                               |                        +---    Sequence Number      ---+                      4 |                               |                        +---------------+---------------+                      5 |                               |                        +--- Acknowledgement Number  ---+                      6 |                               |                        +---------------+---------------+                      7 |                               |                        +---        Checksum         ---+                      8 |                               |                        +-------------------------------+ 
  1662.  
  1663.                             NUL Segment Format                                  Figure 10 
  1664.  
  1665.  
  1666.  
  1667.  
  1668.  
  1669.  
  1670.  
  1671.  
  1672.  
  1673.                                                                 Page 43 
  1674.  
  1675.  
  1676.  
  1677.  
  1678.      RFC-908                                                 July 1984 
  1679.  
  1680.  
  1681.  
  1682.  
  1683.  
  1684.  
  1685.  
  1686.  
  1687.  
  1688.  
  1689.  
  1690.  
  1691.  
  1692.  
  1693.  
  1694.  
  1695.  
  1696.  
  1697.  
  1698.  
  1699.  
  1700.  
  1701.  
  1702.  
  1703.  
  1704.  
  1705.  
  1706.  
  1707.  
  1708.  
  1709.  
  1710.  
  1711.  
  1712.  
  1713.  
  1714.  
  1715.  
  1716.  
  1717.  
  1718.  
  1719.  
  1720.  
  1721.  
  1722.  
  1723.  
  1724.  
  1725.  
  1726.  
  1727.  
  1728.  
  1729.  
  1730.  
  1731.  
  1732.      Page 44 
  1733.  
  1734.  
  1735.  
  1736.  
  1737.      RDP Specification                           Examples of Operation 
  1738.  
  1739.  
  1740.  
  1741.                                  CHAPTER 5 
  1742.  
  1743.                             Examples of Operation 
  1744.  
  1745.  
  1746.  
  1747.      5.1  Connection Establishment 
  1748.  
  1749.           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. 
  1750.  
  1751.                    Host A                         Host B 
  1752.  
  1753.      Time State                                              State 
  1754.  
  1755.      1.    CLOSED                                             LISTEN 
  1756.  
  1757.      2.    SYN-SENT    <SEQ=100><SYN> ---> 
  1758.  
  1759.      3.                               <--- <SEQ=200><ACK=100><SYN,ACK>                                                              SYN-RCVD       4.    OPEN    <SEQ=101><ACK=200> --->                    OPEN 
  1760.  
  1761.      5.      <SEQ=101><ACK=200><Data> ---> 
  1762.  
  1763.      6.                               <--- <SEQ=201><ACK=101> 
  1764.  
  1765.  
  1766.  
  1767.  
  1768.  
  1769.  
  1770.  
  1771.  
  1772.  
  1773.  
  1774.  
  1775.  
  1776.  
  1777.  
  1778.  
  1779.  
  1780.  
  1781.  
  1782.  
  1783.                                                                Page 45 
  1784.  
  1785.  
  1786.  
  1787.  
  1788.      RFC-908                                                 July 1984 
  1789.  
  1790.  
  1791.  
  1792.      5.2  Simultaneous Connection Establishment 
  1793.  
  1794.           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. 
  1795.  
  1796.           Host A                         Host B 
  1797.  
  1798.      Time State                                            State 
  1799.  
  1800.      1.   CLOSED                                           CLOSED 
  1801.  
  1802.      2.   SYN-SENT <SEQ=100><SYN>  --->                                    <--- <SEQ=200><SYN>     SYN-SENT 
  1803.  
  1804.      3.   SYN-RCVD                                         SYN-RCVD         <SEQ=100><ACK=200><SYN,ACK> --->                                    <--- <SEQ=200><ACK=100><SYN,ACK> 
  1805.  
  1806.      4.   OPEN                                             OPEN 
  1807.  
  1808.  
  1809.  
  1810.  
  1811.  
  1812.  
  1813.  
  1814.  
  1815.  
  1816.  
  1817.  
  1818.  
  1819.  
  1820.  
  1821.  
  1822.  
  1823.  
  1824.  
  1825.  
  1826.  
  1827.  
  1828.  
  1829.  
  1830.  
  1831.  
  1832.  
  1833.  
  1834.  
  1835.  
  1836.      Page 46 
  1837.  
  1838.  
  1839.  
  1840.  
  1841.      RDP Specification                           Examples of Operation 
  1842.  
  1843.  
  1844.  
  1845.      5.3  Lost Segments 
  1846.  
  1847.           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." 
  1848.  
  1849.       Time   Host A                           Host B 
  1850.  
  1851.      1.     <SEQ=100><ACK=200><Data>  ---> 
  1852.  
  1853.      2.                               <--- <SEQ=201><ACK=100> 
  1854.  
  1855.      3.     <SEQ=101><ACK=200><Data> (segment lost) 
  1856.  
  1857.      4. 
  1858.  
  1859.      5.     <SEQ=102><ACK=200><Data>  ---> 
  1860.  
  1861.      6.                               <--  <SEQ=201><ACK=100><EA=102> 
  1862.  
  1863.      7.     <SEQ=103><ACK=200><Data>  ---> 
  1864.  
  1865.      8.                               <--- <SEQ=201><ACK=100>                                              <EA=102,103> 
  1866.  
  1867.      9.     <SEQ=101><ACK=200><Data>  ---> 
  1868.  
  1869.      10.                              <--- <SEQ=201><ACK=103> 
  1870.  
  1871.      11.    <SEQ=104><ACK=200><Data>  ---> 
  1872.  
  1873.      12.                              <--- <SEQ=201><ACK=104> 
  1874.  
  1875.  
  1876.  
  1877.  
  1878.  
  1879.  
  1880.  
  1881.  
  1882.  
  1883.  
  1884.  
  1885.  
  1886.  
  1887.  
  1888.  
  1889.                                                                Page 47 
  1890.  
  1891.  
  1892.  
  1893.  
  1894.      RFC-908                                                 July 1984 
  1895.  
  1896.  
  1897.  
  1898.      5.4  Segments Received Out of Order 
  1899.  
  1900.           This an example of  segments  received  out  of  order.   It      further  illustrates  the  use  of  acknowledging segments out of      order to prevent needless retransmissions. 
  1901.  
  1902.       Time     Host A                           Host B 
  1903.  
  1904.      1.   <SEQ=100><ACK=200><Data>  ---> 
  1905.  
  1906.      2.                             <--- <SEQ=201><ACK=100> 
  1907.  
  1908.      3.   <SEQ=101><ACK=200><Data> (delayed) 
  1909.  
  1910.      4. 
  1911.  
  1912.      5.   <SEQ=102><ACK=200><Data>  ---> 
  1913.  
  1914.      6.                             <--- <SEQ=201><ACK=100><EA=102> 
  1915.  
  1916.      7.   <SEQ=103><ACK=200><Data>  --->                                    ---> (delayed segment 101 arrives) 
  1917.  
  1918.      8.                             <--- <SEQ=201><ACK=103> 
  1919.  
  1920.      9.   <SEQ=104><ACK=200><Data>  ---> 
  1921.  
  1922.      10.                            <--- <SEQ=201><ACK=104> 
  1923.  
  1924.  
  1925.  
  1926.  
  1927.  
  1928.  
  1929.  
  1930.  
  1931.  
  1932.  
  1933.  
  1934.  
  1935.  
  1936.  
  1937.  
  1938.  
  1939.  
  1940.  
  1941.  
  1942.  
  1943.  
  1944.      Page 48 
  1945.  
  1946.  
  1947.  
  1948.  
  1949.      RDP Specification                           Examples of Operation 
  1950.  
  1951.  
  1952.  
  1953.      5.5  Communication Over Long Delay Path 
  1954.  
  1955.           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. 
  1956.  
  1957.       Time        Host A                     Host B 
  1958.  
  1959.      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- 
  1960.  
  1961.  
  1962.  
  1963.  
  1964.  
  1965.  
  1966.  
  1967.  
  1968.  
  1969.  
  1970.  
  1971.                                                                Page 49 
  1972.  
  1973.  
  1974.  
  1975.  
  1976.      RFC-908                                                 July 1984 
  1977.  
  1978.  
  1979.  
  1980.      5.6  Communication Over Long Delay Path With Lost Segments 
  1981.  
  1982.           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. 
  1983.  
  1984.       Time       Host A                     Host B 
  1985.  
  1986.      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- 
  1987.  
  1988.  
  1989.  
  1990.  
  1991.  
  1992.  
  1993.  
  1994.  
  1995.  
  1996.       Page 50 
  1997.  
  1998.  
  1999.  
  2000.  
  2001.      RDP Specification                           Examples of Operation 
  2002.  
  2003.  
  2004.  
  2005.      5.7  Detecting a Half-Open Connection on Crash Recovery 
  2006.  
  2007.           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. 
  2008.  
  2009.         Host A                                  Host B 
  2010.  
  2011.      Time 
  2012.  
  2013.      1.  OPEN                                     OPEN         (crash!)               <--- <SEQ=200><ACK=100><ACK> 
  2014.  
  2015.      2.  CLOSED                                   OPEN         (recover) 
  2016.  
  2017.      3.  SYN-SENT                                 OPEN                  <SEQ=400><SYN> --->             (?) 
  2018.  
  2019.      4.  SYN-SENT                                 OPEN           (!)                  <--- <SEQ=200><ACK=100><ACK> 
  2020.  
  2021.      5.  SYN-SENT                                 OPEN                  <SEQ=101><RST> --->             (abort) 
  2022.  
  2023.      6.  SYN-SENT                                 CLOSED 
  2024.  
  2025.      7.  SYN-SENT <SEQ=400><SYN> ---> 
  2026.  
  2027.  
  2028.  
  2029.  
  2030.  
  2031.  
  2032.  
  2033.  
  2034.  
  2035.  
  2036.  
  2037.  
  2038.  
  2039.  
  2040.  
  2041.  
  2042.  
  2043.                                                                 Page 51 
  2044.  
  2045.  
  2046.  
  2047.  
  2048.      RFC-908                                                 July 1984 
  2049.  
  2050.  
  2051.  
  2052.      5.8  Detecting a Half-Open Connection from the Active Side 
  2053.  
  2054.           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. 
  2055.  
  2056.               Host A                         Host B 
  2057.  
  2058.      Time 
  2059.  
  2060.      1.  (crash!)                                            OPEN 
  2061.  
  2062.      2.  CLOSED                <--- <SEQ=200><ACK=100><Data> OPEN 
  2063.  
  2064.      3.  CLOSED  <SEQ=101><RST> --->                         (abort) 
  2065.  
  2066.      4.  CLOSED                                              CLOSED 
  2067.  
  2068.  
  2069.  
  2070.  
  2071.  
  2072.  
  2073.  
  2074.  
  2075.  
  2076.  
  2077.  
  2078.  
  2079.  
  2080.  
  2081.  
  2082.  
  2083.  
  2084.  
  2085.  
  2086.  
  2087.  
  2088.  
  2089.  
  2090.  
  2091.  
  2092.  
  2093.  
  2094.  
  2095.  
  2096.       Page 52 
  2097.  
  2098.  
  2099.  
  2100.  
  2101.      RDP Specification                           Examples of Operation 
  2102.  
  2103.  
  2104.  
  2105.                                 APPENDIX A 
  2106.  
  2107.                          Implementing a Minimal RDP 
  2108.  
  2109.  
  2110.  
  2111.           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: 
  2112.  
  2113.      o    Only one connection  and  connection  record  is  supported.           This is the connection used to load the device. 
  2114.  
  2115.      o    A single, well-known  port  is  used  as  the  loader  port.           Allocable ports are not implemented. 
  2116.  
  2117.      o    Only the passive Open request is implemented.  Active  Opens           are not supported. 
  2118.  
  2119.      o    The sequenced delivery option is  not  supported.   Messages           arriving  out  of  order  are  delivered  in  the order they           arrive. 
  2120.  
  2121.      o    If efficiency is less  important  than  protocol  size,  the           extended acknowledgement feature need not be supported. 
  2122.  
  2123.  
  2124.  
  2125.  
  2126.  
  2127.  
  2128.  
  2129.  
  2130.  
  2131.  
  2132.  
  2133.  
  2134.  
  2135.  
  2136.  
  2137.  
  2138.  
  2139.  
  2140.  
  2141.  
  2142.  
  2143.                                                                Page 53 
  2144.  
  2145.  
  2146.  
  2147.  
  2148.      RFC-908                                                 July 1984 
  2149.  
  2150.  
  2151.  
  2152.                                    INDEX 
  2153.  
  2154.  
  2155.  
  2156.  
  2157.  
  2158.      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 
  2159.  
  2160.  
  2161.  
  2162.      Page 54 
  2163.  
  2164.  
  2165.  
  2166.  
  2167.      RDP Specification                           Examples of Operation 
  2168.  
  2169.  
  2170.  
  2171.      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 
  2172.  
  2173.  
  2174.  
  2175.                                                                Page 55 
  2176.  
  2177.  
  2178.  
  2179.  
  2180.      RFC-908                                                 July 1984 
  2181.  
  2182.  
  2183.  
  2184.      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 
  2185.  
  2186.  
  2187.  
  2188.  
  2189.  
  2190.  
  2191.  
  2192.  
  2193.  
  2194.  
  2195.  
  2196.  
  2197.  
  2198.  
  2199.  
  2200.  
  2201.  
  2202.  
  2203.  
  2204.  
  2205.  
  2206.  
  2207.  
  2208.  
  2209.  
  2210.  
  2211.  
  2212.  
  2213.  
  2214.  
  2215.  
  2216.  
  2217.  
  2218.  
  2219.  
  2220.  
  2221.  
  2222.  
  2223.  
  2224.  
  2225.  
  2226.  
  2227.  
  2228.       Page 56 
  2229.  
  2230.  
  2231.  
  2232.  
  2233.      RDP Specification                           Examples of Operation 
  2234.  
  2235.  
  2236.  
  2237.  
  2238.  
  2239.  
  2240.  
  2241.  
  2242.  
  2243.  
  2244.  
  2245.  
  2246.  
  2247.  
  2248.  
  2249.  
  2250.  
  2251.  
  2252.  
  2253.  
  2254.  
  2255.  
  2256.  
  2257.  
  2258.  
  2259.  
  2260.  
  2261.  
  2262.  
  2263.  
  2264.  
  2265.  
  2266.  
  2267.  
  2268.  
  2269.  
  2270.  
  2271.  
  2272.  
  2273.  
  2274.  
  2275.  
  2276.  
  2277.  
  2278.  
  2279.  
  2280.  
  2281.  
  2282.  
  2283.  
  2284.  
  2285.  
  2286.  
  2287.                                                                Page 57 
  2288.  
  2289.  
  2290.