home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1999 January / Simtel-MSDOS-Jan1999-CD2.iso / uucp / uucproto.des < prev    next >
Text File  |  1998-12-10  |  14KB  |  247 lines

  1.                      Packet Driver Protocol
  2.  
  3.                           G. L. Chesson
  4.                         Bell Laboratories
  5.  
  6. Abstract
  7.      These notes describe the packet driver  link  protocol  that
  8.      was  supplied with the Seventh Edition of and is used by the
  9.      UUCP program.
  10.  
  11. General Information flow between a pair of machines may be  regu-
  12. lated by first representing the data as sequence-numbered packets
  13. of data and then establishing conventions that govern the use  of
  14. sequence  numbers.   The PK, or packet driver, protocol is a par-
  15. ticular instance of this type of  flow-control  discipline.   The
  16. technique  depends  on  the  notion  of  a transmission window to
  17. determine upper and lower bounds for valid sequence numbers.  The
  18. transmitter  is  allowed  to  retransmit  packets having sequence
  19. numbers within the window until the receiver indicates that pack-
  20. ets  have been correctly received.  Positive acknowledgement from
  21. the receiver moves the window;  negative  acknowledgement  or  no
  22. acknowledgement  causes retransmission.  The receiver must ignore
  23. duplicate transmission, detect the various errors that may occur,
  24. and  inform  the  transmitter  when  packets are correctly or in-
  25. correctly received.  The following paragraphs describe the packet
  26. formats,  message  exchanges, and framing used by the protocol as
  27. coded in the UUCP program and the kernel.   Although  no  attempt
  28. will  be  made here to present internal details of the algorithms
  29. that were used, the checksum routine is supplied for the  benefit
  30. of other implementors.  Packet Formats The protocol is defined in
  31. terms of message transmissions of 8-bit bytes.  Each message  in-
  32. cludes  one  control byte plus a data segment of zero or more in-
  33. formation bytes.  The allowed data segment sizes range between 32
  34. and  4096  as determined by the formula 32(2k) where k is a 3-bit
  35. number.  The packet sequence numbers are likewise constrained  to
  36. 3-bits;  i.e.  counting  proceeds  modulo-8.  The control byte is
  37. partitioned into three fields as depicted below.
  38.  
  39.           bit     7       6       5       4       3       2       1       0
  40.                   t       t       x       x       x       y       y       y
  41.  
  42. The t bits indicate a packet type and determine  the  interpreta-
  43. tion  to  be  placed  on the xxx and yyy fields.  The various in-
  44. terpretations are as follows:
  45.  
  46.           tt      interpretation
  47.  
  48.           00      control packet
  49.           10      data packet
  50.           11      `short' data packet
  51.           01      alternate channel
  52.  
  53. A  data  segment  accompanies  all  non-control  packets.    Each
  54. transmitter  is  constrained  to observe the maximum data segment
  55. size established during initial synchronization by  the  receiver
  56. that  it  sends  to.  Type 10 packets have maximal size data seg-
  57. ments.  Type 11, or `short', packets have zero or more data bytes
  58. but  less  than  the  maximum.  The first one or two bytes of the
  59. data segment of a short packet are `count'  bytes  that  indicate
  60. the  difference  between the maximum size and the number of bytes
  61. in the short segment.  If the difference is less  than  127,  one
  62. count  byte  is  used.   If  the difference exceeds 127, then the
  63. low-order seven bits of the difference are put in the first  data
  64. byte  and  the  high-order  bit  is  set as an indicator that the
  65. remaining bits of the difference are in the second byte.  Type 01
  66. packets  are  never used by UUCP and need not be discussed in de-
  67. tail here.  The sequence number of a non-control packet is  given
  68. by the xxx field.  Control packets are not sequenced.  The newest
  69. sequence number, excluding duplicate transmissions, accepted by a
  70. receiver  is  placed in the yyy field of non-control packets sent
  71. to the `other' receiver.  There are no data bytes associated with
  72. a  control packet, the xxx field is interpreted as a control mes-
  73. sage, and the yyy field is a value accompanying the control  mes-
  74. sage.  The control messages are listed below in decreasing prior-
  75. ity.  That is, if several control messages are to  be  sent,  the
  76. lower-numbered ones are sent first.
  77.  
  78.           xxx     name            yyy
  79.  
  80.           1       CLOSE   n/a
  81.           2       RJ              last correctly received sequence number
  82.           3       SRJ             sequence number to retransmit
  83.           4       RR              last correctly received sequence number
  84.           5       INITC   window size
  85.           6       INITB   data segment size
  86.           7       INITA   window size
  87.  
  88. The CLOSE message indicates that the communications channel is to
  89. be  shut down.  The RJ, or reject, message indicates that the re-
  90. ceiver has detected an error and  the  sender  should  retransmit
  91. after using the yyy field to update the window.  This mode of re-
  92. transmission is usually referred to as a  `go-back-N'  procedure.
  93. The  SRJ,  or  selective  reject, message carries with it the se-
  94. quence number of a particular packet to  be  retransmitted.   The
  95. RR,  or  receiver  ready, message indicates that the receiver has
  96. detected no errors; the yyy field updates  the  sender's  window.
  97. The  INITA/B/C  messages  are used to set window and data segment
  98. sizes.  Segment sizes are calculated by the formula  32(2yyy)  as
  99. mentioned  above,  and  window  sizes  may range between 1 and 7.
  100. Measurements of the protocol running on  communication  links  at
  101. rates  up  to 9600 baud showed that a window size of 2 is optimal
  102. given a packet size greater than 32 bytes.  This means  that  the
  103. link  bandwidth  can be fully utilized by the software.  For this
  104. reason the SRJ message is not as important as it might  otherwise
  105. be.   Therefore the implementations no longer generate or respond
  106. to SRJ messages.  It is mentioned here  for  historical  accuracy
  107. only, and one may assume that SRJ is no longer part of the proto-
  108. col.  Message Exchanges         Initialization Messages  are  ex-
  109. changed  between  four  cooperating entities: two senders and two
  110. receivers.  This means that the communication channel is  thought
  111. of  as  two  independent half-duplex data paths.  For example the
  112. window and segment sizes need not be the same in each  direction.
  113. Initial   synchronization   is   accomplished   with   two  3-way
  114. handshakes: two each of INITA/INITB/INITC.  Each sender transmits
  115. INITA  messages  repeatedly.   When an INITA message is received,
  116. INITB is sent in return.  When an INITB message is  received  and
  117. an  INITB  message  has been sent, an INITC message is sent.  The
  118. INITA and INITB messages carry with them the  packet  and  window
  119. size  that  each  receiver wants to use, and the senders are sup-
  120. posed to comply.  When a receiver has seen all  three  INIT  mes-
  121. sages,  the  channel is considered to be open.  It is possible to
  122. design a protocol that starts up using fewer  messages  than  the
  123. interlocked  handshakes  described  above.   The advantage of the
  124. more complicated design lies in its use as  a  research  vehicle:
  125. the   initial  handshake  sequence  is  completely  symmetric,  a
  126. handshake can be initiated by one side of the link while the con-
  127. nection  is  in use, and the software to do this can utilize code
  128. that would ordinarily be used only once at connection setup time.
  129. These  properties  were  used in experiments with dynamically ad-
  130. justed parameters.  That is attempts were made to adapt the  win-
  131. dow and segment sizes to changes observed in traffic while a link
  132. was in use.  Other experiments used the initial handshake   in  a
  133. different way for restarting the protocol without data loss after
  134. machine crashes.  These experiments  never  worked  well  in  the
  135. packet driver and basically provided the impetus for other proto-
  136. col designs.  The result as far as UUCP is concerned is that ini-
  137. tial  synchronization uses the two 3-way handshakes, and the INIT
  138. messages are ignored elsewhere.          Data Transport After in-
  139. itial  synchronization each receiver sets a modulo-8 incrementing
  140. counter R to 0; each sender sets a similar counter S to  1.   The
  141. value  of R is always the number of the most recent correctly re-
  142. ceived packet.  The value of  S  is  always  the  first  sequence
  143. number  in  the  output  window.  Let W denote window size.  Note
  144. that the value of W may be different for each sender.   A  sender
  145. may  transmit  packets  with  sequence  numbers in the range S to
  146. (S+W-1) mod-8.  At any particular time a receiver expects  arriv-
  147. ing   packets  to  have  numbers  in  the  range  (R+1) mod-8  to
  148. (R+W) mod-8.  Packets must arrive in sequence  number  order  are
  149. are only acknowledged in order.  That is, the `next' packet a re-
  150. ceiver will acknowledge must have sequence number (R+1) mod-8.  A
  151. receiver  acknowledges  receipt  of data packets by arranging for
  152. the value of its R counter to be sent across the channel where it
  153. will  be  used to update an S counter.  This is done in two ways.
  154. If data is flowing in both directions across a channel then  each
  155. receiver's  current  R  value is carried in the yyy field of non-
  156. control packets.  Otherwise when there is no  bidirectional  data
  157. flow,  each  receiver's R value is transmitted across the link as
  158. the yyy field of an RR control packet.  Error handling is  up  to
  159. the  discretion  of  the  receiver.   It can ignore all errors in
  160. which case transmitter timeouts must provide for  retransmission.
  161. The receiver may also generate RJ error control packets.  The yyy
  162. field of an incoming RJ message replaces the S value of the local
  163. sender  and  constitutes a request for retransmission to start at
  164. that sequence number.  The yyy field of an incoming  SRJ  message
  165. selects  a particular packet for retransmission.  The resemblance
  166. between the flow control procedure in the packet driver and  that
  167. defined  for X.25 is no accident.  The packet driver protocol be-
  168. gan life as an attempt at cleaning up X.25.  That is why, for ex-
  169. ample, control information is uniform in length (one byte), there
  170. is no RNR message (not needed), and there is but one timeout  de-
  171. fined  in  the  sender.          Termination The CLOSE message is
  172. used to terminate communications.  Software  on  either  or  both
  173. ends  of  the communication channel may initiate termination.  In
  174. any case when one end wants to terminate it sends CLOSE  messages
  175. until  one is received from the other end or until a programmable
  176. limit on the number of CLOSE messages is reached.  Receipt  of  a
  177. CLOSE message causes a CLOSE message to be sent.  In the environ-
  178. ment it also causes the SIGPIPE or `broken  pipe'  signal  to  be
  179. sent  to  the  local  process  using  the  communication channel.
  180.         Framing The term framing is used to denote the  technique
  181. by which the beginning and end of a message is detected in a byte
  182. stream; error control denotes the method  by  which  transmission
  183. errors  are  detected.   Strategies for framing and error control
  184. depend upon additional information being transmitted  along  with
  185. the control byte and data segment, and the choice of a particular
  186. strategy usually depends on characteristics of input/output  dev-
  187. ices  and  transmission media.  Several framing techniques are in
  188. used in support of PK protocol implementations, not all of  which
  189. can be described in detail here.  The technique used on asynchro-
  190. nous serial lines will be described.  A six byte framing envelope
  191. is constructed using the control byte C of a packet and five oth-
  192. er bytes as depicted below.
  193.           <DLE><k><c0><c1><C><x>
  194. The <DLE> symbol denotes the ASCII ctrl/P character.  If the  en-
  195. velope  is  to  be  followed by a data segment, <k> has the value
  196. log2(size)-4; i.e. 1 < k < 8.  If  k  is  9,  then  the  envelope
  197. represents  a  control  packet.   The <c0> and <c1> bytes are the
  198. low-order and high-order bytes respectively of a 16-bit  checksum
  199. of  the  data segment, if there is one.  For control packets <c1>
  200. is zero and <c0> is the same as the control byte C.  The <x> byte
  201. is  the  exclusive-or of <k><c0><c1><C>.  Error control is accom-
  202. plished by checking a received framing  envelope  for  compliance
  203. with  the  definition,  and  comparing a checksum function of the
  204. data segment with <c0><c1>.  This particular framing strategy as-
  205. sumes  data  segments are constant-sized: the `unused' bytes in a
  206. short packet are actually transmitted.  This  creates  a  certain
  207. amount  of overhead which can be eliminated by a more complicated
  208. framing technique.  The advantage of this strategy  is  that  i/o
  209. devices can be programmed to take advantage of the constant-sized
  210. framing envelopes and data segments.
  211.  
  212. The checksum calculation is displayed  below  as  a  C  function.
  213. Note  that the code is not truly portable because the definitions
  214. of and are not necessarily uniform across all machines that might
  215. support  this language.  This code assumes that and are 16 and 8-
  216. bits respectively.
  217.  
  218.      /* [Original document's version corrected to actual version] */
  219.      chksum(s,n)
  220.      register char *s;
  221.      register n;
  222.      {
  223.              register short sum;
  224.              register unsigned short t;
  225.              register short x;
  226.  
  227.              sum = -1;
  228.              x = 0;
  229.  
  230.              do {
  231.                      if (sum<0) {
  232.                              sum <<= 1;
  233.                              sum++;
  234.                      } else
  235.                              sum <<= 1;
  236.                      t = sum;
  237.                      sum += (unsigned)*s++ & 0377;
  238.                      x += sum^n;
  239.                      if ((unsigned short)sum <= t) {
  240.                              sum ^= x;
  241.                      }
  242.              } while (--n > 0);
  243.  
  244.              return(sum);
  245.      }
  246.  
  247.