home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1997 December / Internet_Info_CD-ROM_Walnut_Creek_December_1997.iso / ien / ien-167 < prev    next >
Text File  |  1988-12-02  |  106KB  |  4,541 lines

  1. IEN 167                                            Sax and Edmond
  2.                          Bolt Beranek and Newman Inc.
  3.                                         July 1980
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.                HP3000 TCP DESIGN DOCUMENT
  17.  
  18.                Jack Sax and Winston Edmond
  19.  
  20.               Bolt Beranek and Newman Inc.
  21.  
  22.                         July 1980
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60. IEN 167                                            Sax and Edmond
  61.                          Bolt Beranek and Newman Inc.
  62.                                     July 1980
  63.  
  64.  
  65.  
  66.                 Table of Contents
  67.  
  68.  
  69.  
  70.  
  71. 1   Preface............................................... 3
  72. 2   Introduction.......................................... 4
  73. 3   Current HP3000 Structure.............................. 7
  74. 3.1   Processor Features.................................. 7
  75. 3.2   Network Interface Hardware.......................... 8
  76. 3.3   Operating System Software........................... 8
  77. 3.4   Input/Output....................................... 10
  78. 3.5   Interprocess Communication......................... 12
  79. 3.6   Existing INP Software.............................. 14
  80. 4   Protocol Software Architecture....................... 16
  81. 5   System Protocol Software............................. 20
  82. 5.1   Implemented Features............................... 20
  83. 5.2   Software Architecture Overview..................... 21
  84. 5.3   Control Structures................................. 23
  85. 5.3.1   Network Resources Control Block.................. 24
  86. 5.3.2   Foreign Host Control Blocks...................... 25
  87. 5.3.3   Connection Control Block......................... 26
  88. 5.3.4   Network Buffer Resources List Structures......... 26
  89. 6   User Process/TCP Interface........................... 29
  90. 6.1   Interface Intrinsics............................... 30
  91. 6.2   Flow Control Across the Interface.................. 36
  92. 6.3   Interface Control Structures....................... 36
  93. 6.4   Interface Control Algorithms....................... 37
  94. 6.5   Windowing, Acknowledgment, and Retransmission...... 48
  95. 7   1822 Layer/INP Driver Communication.................. 50
  96. 8   Protocol Software Buffering Scheme................... 52
  97. 8.1   Network Buffer Pool................................ 54
  98. 8.1.1   Packet Compaction................................ 55
  99. 8.1.2   Buffer Recycling................................. 56
  100. 8.2   User Process Buffer Pool........................... 58
  101. 9   Data Flow Through the Protocol Software.............. 60
  102. 9.1   ARPANET to the User Level Data Flow................ 61
  103. 9.2   User Level to the ARPANET Data Flow................ 64
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.                    -2-
  116.  
  117. IEN 167                                            Sax and Edmond
  118.                          Bolt Beranek and Newman Inc.
  119.                                     July 1980
  120.  
  121.  
  122.  
  123. 1  Preface
  124.  
  125.  
  126.      This report describes a  design  implementation  of  ARPANET
  127.  
  128. protocols on a Hewlett Packard HP3000 Series III computer system.
  129.  
  130. Specific protocols  to  be  implemented  include  a  Transmission
  131.  
  132. Control  Protocol  (TCP),  Internet  Protocol (IP), File Transfer
  133.  
  134. Protocol (FTP), and TELNET Protocols.  The reader is  assumed  to
  135.  
  136. be  familiar  with  the purpose of these protocols.  The protocol
  137.  
  138. software will run under the HP  Multiprocessing  Executive  (MPE)
  139.  
  140. operating system.
  141.  
  142.  
  143.      The  designs  reflect  our  current  understanding  of   the
  144.  
  145. environment  and the tasks ahead and may be changed as we proceed
  146.  
  147. with implementation.
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.                    -3-
  175.  
  176. IEN 167                                            Sax and Edmond
  177.                          Bolt Beranek and Newman Inc.
  178.                                     July 1980
  179.  
  180.  
  181.  
  182. 2  Introduction
  183.  
  184.  
  185.      The overall purpose of this project is to modify the Hewlett
  186.  
  187. Packard 3000/Series III computer system running the MPE operating
  188.  
  189. system so that it converses with the ARPANET.
  190.  
  191.  
  192.      A  layered  protocol  approach   will   be   used   in   our
  193.  
  194. implementation.   Protocol  layers one through four represent the
  195.  
  196. system layers which are responsible for moving a message reliably
  197.  
  198. from  one Host to another.  The next protocol layer consists of a
  199.  
  200. number of applications protocols which determine the content  and
  201.  
  202. meaning of the messages exchanged.
  203.  
  204.  
  205.      Protocol levels  one  and  two  are  X.25  LAP  link  access
  206.  
  207. protocols.   These  protocols are implemented in microcode on the
  208.  
  209. Intelligent Network  Processor  (INP)  interface  available  from
  210.  
  211. Hewlett  Packard.   Since  the  X.25 LAP  protocols are different
  212.  
  213. from the standard 1822 IMP Host protocols,  a  special  X.25  IMP
  214.  
  215. interface  is  used  to  link  the  HP3000 with the ARPANET.  The
  216.  
  217. interface divides standard 1822 packets into  a  number  of  X.25
  218.  
  219. frames  and  transfers  each  frame  separately.   The diagram in
  220.  
  221. Appendix A shows the hardware  configuration  used  to  link  the
  222.  
  223. HP3000 to the ARPANET.
  224.  
  225.  
  226.      The next two protocol layers consist  of  the  DOD  standard
  227.  
  228. Internet  Protocol  (IP)  and  the  Transmission Control Protocol
  229.  
  230.  
  231.  
  232.  
  233.                    -4-
  234.  
  235. IEN 167                                            Sax and Edmond
  236.                          Bolt Beranek and Newman Inc.
  237.                                     July 1980
  238.  
  239.  
  240.  
  241. (TCP).  The  Internet  protocol  provides  communication  between
  242.  
  243. Hosts  on  different  networks via gateways between the networks.
  244.  
  245. The Transmission Control Protocol provides reliable  transmission
  246.  
  247. between Hosts and performs some Host-to-Host flow control.
  248.  
  249.  
  250.      The initial implementation will  include  three  application
  251.  
  252. layer  protocols.   One  of  these  is the File Transfer Protocol
  253.  
  254. (FTP), which allows a user to move files from one computer system
  255.  
  256. to another.  The second and third application layer protocols are
  257.  
  258. User and Server TELNET.  User TELNET  gives  the  user  a  remote
  259.  
  260. terminal capability by taking the characters from the local input
  261.  
  262. device and sending  them  to  the  foreign  host,  and  returning
  263.  
  264. characters  from  the  foreign  host  to  the local output device
  265.  
  266. (typically a terminal).  The foreign  host  will  have  a  Server
  267.  
  268. TELNET  process  which  acts  as a pseudo-Teletype, with incoming
  269.  
  270. network messages providing TTY input, and TTY output  being  sent
  271.  
  272. to  the  network.   The operating system treats the Server TELNET
  273.  
  274. pseudo-Teletype like an ordinary terminal.
  275.  
  276.  
  277.      Most of  the  protocol  software  is  new  code,  the  major
  278.  
  279. exception  being  the  INP microcode which is supplied by Hewlett
  280.  
  281. Packard.   The  programs  will  be  written   in   HP's   Systems
  282.  
  283. Programming  Language  (SPL),  which  resembles PASCAL and allows
  284.  
  285. intermixing of assembly code and compiled code.  In  addition  to
  286.  
  287. new   code,  implementation  will  require  changes  to  the  MPE
  288.  
  289.  
  290.  
  291.  
  292.                    -5-
  293.  
  294. IEN 167                                            Sax and Edmond
  295.                          Bolt Beranek and Newman Inc.
  296.                                     July 1980
  297.  
  298.  
  299.  
  300. operating system code, which is also written in SPL.
  301.  
  302.  
  303.  
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  
  310.  
  311.  
  312.  
  313.  
  314.  
  315.  
  316.  
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337.  
  338.  
  339.  
  340.  
  341.  
  342.  
  343.  
  344.  
  345.  
  346.  
  347.  
  348.  
  349.  
  350.  
  351.                    -6-
  352.  
  353. IEN 167                                            Sax and Edmond
  354.                          Bolt Beranek and Newman Inc.
  355.                                     July 1980
  356.  
  357.  
  358.  
  359. 3  Current HP3000 Structure
  360.  
  361.  
  362.      This section describes the HP3000 system with an emphasis on
  363.  
  364. the  features  that  affect  the  network  software  design.  The
  365.  
  366. description  includes  both  the  processor  hardware   and   the
  367.  
  368. operating   system.    Some  of  the  operating  system  features
  369.  
  370. described are not currently released by Hewlett Packard, but  are
  371.  
  372. about  to  be  released or are part of the planned MPE IV release
  373.  
  374. this fall.
  375.  
  376.  
  377.  
  378.  
  379. 3.1  Processor Features
  380.  
  381.  
  382.      The HP3000 CPU is a medium speed machine which uses a  stack
  383.  
  384. architecture.   It  executes uncomplicated instructions in one to
  385.  
  386. two microseconds.  Code and data are separate and thus  all  code
  387.  
  388. is  re-entrant.   There  are  approximately 38 hardware registers
  389.  
  390. which make up the state of  the  processor,  most  of  which  are
  391.  
  392. associated  with  the  stack  (data)  and the current instruction
  393.  
  394. address (code).
  395.  
  396.  
  397.      Memory is divided into segments.  A segment is a  contiguous
  398.  
  399. block   of  memory  of  any  desired  length  up  to  32K  words.
  400.  
  401. Individual segments are swapped in and out of memory  as  needed.
  402.  
  403. Memory  paging,  a  scheme which uses fixed size memory chunks as
  404.  
  405. the basis for memory swapping, is not  used  in  the  HP3000.   A
  406.  
  407.  
  408.  
  409.  
  410.                    -7-
  411.  
  412. IEN 167                                            Sax and Edmond
  413.                          Bolt Beranek and Newman Inc.
  414.                                     July 1980
  415.  
  416.  
  417.  
  418. segment  may  be  designated  as  code  or  data by the operating
  419.  
  420. system.
  421.  
  422.  
  423.  
  424.  
  425. 3.2  Network Interface Hardware
  426.  
  427.  
  428.      The interface unit  between  the  HP3000  computer  and  the
  429.  
  430. ARPANET  machines  will  be  HP's  Intelligent  Network Processor
  431.  
  432. (INP).  This device consists of two boards located in the  HP3000
  433.  
  434. main  cabinet.   It  is  a  microprogrammed  interface unit whose
  435.  
  436. microcode is down-line loaded by HP3000 software.  HP will supply
  437.  
  438. the microcode to make the INP obey the X.25 LAP protocol and will
  439.  
  440. supply the device driver necessary to access the INP.
  441.  
  442.  
  443.      The INP will be connected to  a  BBN  C/30  (MBB)  computer.
  444.  
  445. This  machine  will  convert the X.25 protocols from the INP into
  446.  
  447. suitable ARPANET protocols.
  448.  
  449.  
  450.  
  451.  
  452. 3.3  Operating System Software
  453.  
  454.  
  455.      The  operating  system  for  the  HP3000  is  known  as  the
  456.  
  457. Multiprogramming  Executive  System  (MPE).  It offers both batch
  458.  
  459. and interactive job capabilities and allows  multiple  concurrent
  460.  
  461. users  of  either  type.   It  offers a file system which manages
  462.  
  463. files on disk, magnetic tape  and/or  punched  cards.   Some  I/O
  464.  
  465. devices, such as the line printer, have spooler programs built in
  466.  
  467.  
  468.  
  469.                    -8-
  470.  
  471. IEN 167                                            Sax and Edmond
  472.                          Bolt Beranek and Newman Inc.
  473.                                     July 1980
  474.  
  475.  
  476.  
  477. to the system.
  478.  
  479.  
  480.      User programs are run as processes within MPE.  Each process
  481.  
  482. has associated with it a code segment and a stack (data) segment.
  483.  
  484. In privileged mode, it may run in "split-stack mode", where it is
  485.  
  486. allowed  to  have  two  data  segments.   The  most common use of
  487.  
  488. split-stack mode is to access  tables  in  the  operating  system
  489.  
  490. during system calls.
  491.  
  492.  
  493.      The design of  MPE  is  greatly  influenced  by  the  HP3000
  494.  
  495. hardware  architecture.   MPE's  organization  relies  heavily on
  496.  
  497. operations which incur little processor overhead  while  avoiding
  498.  
  499. operations  which incur large amounts of processor overhead.  The
  500.  
  501. most striking example of this is the  MPE's  dependence  on  user
  502.  
  503. processes  for  a  large  number  of  what  would  ordinarily  be
  504.  
  505. considered system functions.  MPE  avoids  the  use  of  "system"
  506.  
  507. processes to perform these functions.
  508.  
  509.  
  510.      The design organization is a  direct  result  of  the  stack
  511.  
  512. architecture of the HP3000.  The large number of status registers
  513.  
  514. which must be saved when a new process is invoked  makes  process
  515.  
  516. switching a very expensive operation.  The time needed to perform
  517.  
  518. a procedure call into a new segment of system code  is  typically
  519.  
  520. less than the time to switch context from one process to another.
  521.  
  522. Writing  efficient  code  for  this  machine  has  thus  led   to
  523.  
  524. organizing   the   system  as  relatively  independent  "utility"
  525.  
  526.  
  527.  
  528.                    -9-
  529.  
  530. IEN 167                                            Sax and Edmond
  531.                          Bolt Beranek and Newman Inc.
  532.                                     July 1980
  533.  
  534.  
  535.  
  536. routines callable by the user rather  than  as  a  collection  of
  537.  
  538. separate processes which manage I/O devices and system utilities.
  539.  
  540. These operating system calls, called Intrinsics, are  implemented
  541.  
  542. as  subroutine  calls  into  system  code  segments.  The program
  543.  
  544. segments which implement the Intrinsics run in a privileged  mode
  545.  
  546. which allows them to directly access system tables and I/O device
  547.  
  548. tables.
  549.  
  550.  
  551.      One notable  side-effect  of  this  design  is  that  system
  552.  
  553. resources  such  as  I/O  devices  are  assigned to only a single
  554.  
  555. program and are not normally shared.  This approach  has  allowed
  556.  
  557. the  system  programmers  to  create  a  complex operating system
  558.  
  559. without tackling the problems of interprocess  communication  and
  560.  
  561. resource  sharing.   As  will  be  discussed later, it also has a
  562.  
  563. significant effect on protocol software design.
  564.  
  565.  
  566.  
  567.  
  568. 3.4  Input/Output
  569.  
  570.  
  571.      Input/Output operations typically consist of two steps.  The
  572.  
  573. first step is initiation of the desired operation.  This involves
  574.  
  575. checking to insure that access to the device is allowed (software
  576.  
  577. protection),  and  issuing  I/O  instructions  to  the  device to
  578.  
  579. initiate the desired action.   This  step  usually  occurs  as  a
  580.  
  581. result  of  an intrinsic call to the device handler code and thus
  582.  
  583. is executed  on  the  user's  stack.   The  second  step  is  the
  584.  
  585.  
  586.  
  587.                   -10-
  588.  
  589. IEN 167                                            Sax and Edmond
  590.                          Bolt Beranek and Newman Inc.
  591.                                     July 1980
  592.  
  593.  
  594.  
  595. operation  completion  handling.  This may occur using either the
  596.  
  597. Interrupt Control  Stack  (ICS)  or  the  System  Control  Stack,
  598.  
  599. neither  of which is the user's stack.  The choice of which stack
  600.  
  601. to use depends on the specific device's function.
  602.  
  603.  
  604.      A consequence of this system design is  that  "system  code"
  605.  
  606. tends  to  be  executed  using  the  data stack of the first user
  607.  
  608. process needing the function.  If process 1 wants to  do  an  I/O
  609.  
  610. operation,  it  invokes  a  system  procedure  which knows how to
  611.  
  612. manage that I/O device.  If process 2 now wishes  to  invoke  the
  613.  
  614. same device, and if the device is capable of supporting more than
  615.  
  616. one request concurrently, it invokes the same routine.  To  avoid
  617.  
  618. multiprocessing  hazards  in  issuing  I/O  commands,  the system
  619.  
  620. procedure first checks to see if it is the  first  invocation  of
  621.  
  622. itself  --  if not, it queues the request and exits; if it is, it
  623.  
  624. proceeds to issue the  I/O  instructions.   If  the  request  was
  625.  
  626. queued,  it  is  assumed  that  the first process will detect the
  627.  
  628. newly queued request and process it also.  The first  process  is
  629.  
  630. thus  performing  system functions for the second, and all later,
  631.  
  632. processes, and will be charged run time for doing their work.  In
  633.  
  634. practice, we do not expect this to be significant, but in theory,
  635.  
  636. the first process could run indefinitely, even if its own request
  637.  
  638. has long since completed.
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645.  
  646.                   -11-
  647.  
  648. IEN 167                                            Sax and Edmond
  649.                          Bolt Beranek and Newman Inc.
  650.                                     July 1980
  651.  
  652.  
  653.  
  654. 3.5  Interprocess Communication
  655.  
  656.  
  657.      Interprocess communication under the current version of  MPE
  658.  
  659. is  a  problem.   Only two techniques are currently available and
  660.  
  661. neither of them is really satisfactory.
  662.  
  663.  
  664.       One technique that may be  used  is  that  of  the  logical
  665.  
  666. device.   It  is  chiefly  used  to  accomplish  multiplexing  of
  667.  
  668. physical devices.  This facility is implemented by creating a new
  669.  
  670. entry in the system's Device Information Table, and by creating a
  671.  
  672. set of procedures which act as a  device  handler.   The  handler
  673.  
  674. will be run in privileged mode.
  675.  
  676.  
  677.      Like other system device handlers, the procedures to  manage
  678.  
  679. the  device  are  invoked  directly  by the user process, and the
  680.  
  681. user's stack is used by the system code.  This has the  advantage
  682.  
  683. of speed, since it avoids some process context switching.
  684.  
  685.  
  686.      There are a number of drawbacks to this  technique.   First,
  687.  
  688. the  Device  Information  Table entry must be maintained as if it
  689.  
  690. were a real hardware device.  This requires knowledge of all  the
  691.  
  692. MPE   internal   functions   that   might   access   this  table.
  693.  
  694. Furthermore, since these tables are  system  internal,  they  are
  695.  
  696. subject to change with each new release of MPE.  Use of the table
  697.  
  698. requires Privileged Mode.  Bugs in the code would have a  greater
  699.  
  700. chance  of  crashing  the  system.  The greatest drawback is that
  701.  
  702.  
  703.  
  704.  
  705.                   -12-
  706.  
  707. IEN 167                                            Sax and Edmond
  708.                          Bolt Beranek and Newman Inc.
  709.                                     July 1980
  710.  
  711.  
  712.  
  713. logical devices are still under development at HP, and  are  more
  714.  
  715. than usually likely to change over time.
  716.  
  717.  
  718.      A new operating system feature, not yet released officially,
  719.  
  720. that  has  been  written for MPE is an interprocess communication
  721.  
  722. method known at HP as message files.  These  correspond  to  Unix
  723.  
  724. ports,  and  allow  unrelated  processes  to communicate with one
  725.  
  726. another.  Each message file has one or  more  "reader"  processes
  727.  
  728. and  one or more "writer" processes.  During use, these files act
  729.  
  730. as FIFO queues.
  731.  
  732.  
  733.      Message files are implemented using the file system.   Read,
  734.  
  735. write, and query commands are all patterned after the file system
  736.  
  737. commands.  The message file code is designed so that  if  readers
  738.  
  739. and  writers  stay more or less in synchronization, disk I/O will
  740.  
  741. not be needed.  However, if the writers get far enough  ahead  of
  742.  
  743. the  readers,  the message file will start being spooled out onto
  744.  
  745. disk.
  746.  
  747.  
  748.      Message files are to be introduced as user  level  functions
  749.  
  750. by  HP, and, as such, their use will not change with new releases
  751.  
  752. of the operating system.  Code for this feature has already  been
  753.  
  754. implemented  at  HP  and  is  available with both MPE III and the
  755.  
  756. future MPE IV.  They appear to be relatively easy to use  and  do
  757.  
  758. not  require  knowledge of the internals of the operating system.
  759.  
  760. Their chief drawbacks  are  that  a  process  context  switch  is
  761.  
  762.  
  763.  
  764.                   -13-
  765.  
  766. IEN 167                                            Sax and Edmond
  767.                          Bolt Beranek and Newman Inc.
  768.                                     July 1980
  769.  
  770.  
  771.  
  772. required  between  writer  and  reader, and that some file system
  773.  
  774. overhead is incurred.
  775.  
  776.  
  777.      Timeouts, as seen in  message  files,  are  another  new  HP
  778.  
  779. function  that  will be available.  The older version of timeouts
  780.  
  781. simply suspended the process for a fixed amount of time, but  did
  782.  
  783. not  allow the process to be awakened by the completion of an I/O
  784.  
  785. event during its sleep.  The new version is equivalent to setting
  786.  
  787. a timer whose alarm may be awaited with the same IOWAIT intrinsic
  788.  
  789. that awaits I/O completion.  It allows  a  process  to  wait  for
  790.  
  791. either  some  I/O  device  operation completion or the passage of
  792.  
  793. some  maximum   amount   of   time,   whichever   occurs   first.
  794.  
  795. Alternatively, a timeout could be used to insure that waiting for
  796.  
  797. a specific event will terminate if the expected event does  occur
  798.  
  799. soon  enough.   There will be both user level and system internal
  800.  
  801. ways of accomplishing timeouts.
  802.  
  803.  
  804.  
  805.  
  806. 3.6  Existing INP Software
  807.  
  808.  
  809.      The  code  to  drive  the  INP  is  part  of   the   CS/3000
  810.  
  811. Communications  Software  package  from  HP.  It contains code to
  812.  
  813. send and receive packets via the INP and code to  manipulate  the
  814.  
  815. Device  Information  Tables.   The  code  also allows the user to
  816.  
  817. down-line load  microcode  into  the  INP  memory.   It  contains
  818.  
  819. intrinsics  to  open  and  close  the  line and to read and write
  820.  
  821.  
  822.  
  823.                   -14-
  824.  
  825. IEN 167                                            Sax and Edmond
  826.                          Bolt Beranek and Newman Inc.
  827.                                     July 1980
  828.  
  829.  
  830.  
  831. packets.  The microcode  allows  the  INP  to  support  X.25  LAP
  832.  
  833. protocols  and also allows the INP to buffer up to eight 128-byte
  834.  
  835. packets.  These packets are read by CS/3000 as soon  as  possible
  836.  
  837. in  order  to  keep  the INP from losing packets due to a lack of
  838.  
  839. buffer space in the  INP.   This  technique  allows  the  INP  to
  840.  
  841. function  as  a full duplex device, even though the MPE operating
  842.  
  843. system offers  only  a  half  duplex  control  mechanism  in  its
  844.  
  845. software.
  846.  
  847.  
  848.  
  849.  
  850.  
  851.  
  852.  
  853.  
  854.  
  855.  
  856.  
  857.  
  858.  
  859.  
  860.  
  861.  
  862.  
  863.  
  864.  
  865.  
  866.  
  867.  
  868.  
  869.  
  870.  
  871.  
  872.  
  873.  
  874.  
  875.  
  876.  
  877.  
  878.  
  879.  
  880.  
  881.  
  882.                   -15-
  883.  
  884. IEN 167                                            Sax and Edmond
  885.                          Bolt Beranek and Newman Inc.
  886.                                     July 1980
  887.  
  888.  
  889.  
  890. 4  Protocol Software Architecture
  891.  
  892.  
  893.      The protocol software architecture is dictated by a  set  of
  894.  
  895. design  requirements and MPE operating system constraints.  These
  896.  
  897. requirements and constraints are summarized as follows:
  898.  
  899.  
  900.      - The  new  network  software  must  be  isolated  from  the
  901.  
  902.        existing  operating  system  as  much  as  possible.   The
  903.  
  904.        isolation will allow any site to add or remove the network
  905.  
  906.        software  with a minimum of effort.  It will also make the
  907.  
  908.        network software less vulnerable to any changes  HP  makes
  909.  
  910.        to MPE.
  911.  
  912.  
  913.      - Efficient high speed network communications are  extremely
  914.  
  915.        important  because  this  TCP  version  will  be used on a
  916.  
  917.        production rather than an experimental basis.
  918.  
  919.  
  920.      -_One of the problems with MPE is that, though the operating
  921.  
  922.        system  performs  device assignment and access control for
  923.  
  924.        its I/O devices,  the  user  process  is  responsible  for
  925.  
  926.        operating  the  I/O  device.  MPE does offer intrinsics to
  927.  
  928.        operate common devices,  but  these  are  very  low  level
  929.  
  930.        operations.   This  I/O  arrangement makes it difficult to
  931.  
  932.        control an asynchronous network interface.   The  protocol
  933.  
  934.        software  architecture will therefore require at least one
  935.  
  936.        process which has exclusive control of the INP interface.
  937.  
  938.  
  939.  
  940.  
  941.                   -16-
  942.  
  943. IEN 167                                            Sax and Edmond
  944.                          Bolt Beranek and Newman Inc.
  945.                                     July 1980
  946.  
  947.  
  948.  
  949.      - One of the properties of these network protocols  is  that
  950.  
  951.        the message acknowledgments and retransmissions occur at a
  952.  
  953.        relatively high  level  --  in  the  Transmission  Control
  954.  
  955.        Protocol  in layer four.  A moderate amount of time passes
  956.  
  957.        from the time the originating TCP queues the  message  for
  958.  
  959.        transmission  and  the receiving TCP gets the message.  In
  960.  
  961.        order to prevent acknowledgment delays which in turn cause
  962.  
  963.        the   foreign   host  to  retransmit  data,  the  software
  964.  
  965.        architecture should minimize the amount of time  it  takes
  966.  
  967.        for  incoming  data  to move through the 1822, IP, and TCP
  968.  
  969.        protocols.
  970.  
  971.  
  972.      - With many network users and many connections  concurrently
  973.  
  974.        in  use,  the  network software must be able to handle the
  975.  
  976.        problems of multiplexing  use  of  the  network  interface
  977.  
  978.        hardware.   The  interface on which the multiplexing takes
  979.  
  980.        place must support a number of simultaneous users in  such
  981.  
  982.        a  way  that  the behavior of any individual user does not
  983.  
  984.        affect data throughput of the other users.
  985.  
  986.  
  987.      In  order  to  meet  all  of  the  design  requirements  and
  988.  
  989. constraints  described  above,  the  HP3000  protocol software is
  990.  
  991. implemented in a set of processes (see diagram  in  Appendix  B).
  992.  
  993. One  process  which will be called the system protocol process is
  994.  
  995. responsible  for  maintaining  the  INP  interface  as  well   as
  996.  
  997.  
  998.  
  999.  
  1000.                   -17-
  1001.  
  1002. IEN 167                                            Sax and Edmond
  1003.                          Bolt Beranek and Newman Inc.
  1004.                                     July 1980
  1005.  
  1006.  
  1007.  
  1008. supporting  the  1822,  IP  and  TCP  protocols.  The rest of the
  1009.  
  1010. processes, called applications protocol processes,  support   the
  1011.  
  1012. user interactive network functions including FTP and TELNET.
  1013.  
  1014.  
  1015.      The use of a single system protocol process is a key element
  1016.  
  1017. in  the  protocol  design.   The system protocol process provides
  1018.  
  1019. control over the INP interface by providing buffers and acting as
  1020.  
  1021. multiplexer and de-multiplexer of network traffic to and from the
  1022.  
  1023. INP.  Use of a  single  process  minimizes  inter-protocol  layer
  1024.  
  1025. communication  delays  which  in turn minimize the acknowledgment
  1026.  
  1027. delays for incoming data.  A single system protocol process makes
  1028.  
  1029. it  possible  to  use  interprocess  communication  primitives to
  1030.  
  1031. provide a uniform network interface for  the  applications  level
  1032.  
  1033. protocol processes.
  1034.  
  1035.  
  1036.      User TELNET and User FTP protocols are to be implemented  as
  1037.  
  1038. ordinary  user  programs.   They use the same system calls as any
  1039.  
  1040. other network accessing program, but are  written  to  provide  a
  1041.  
  1042. higher  level  command  language for the user.  As user programs,
  1043.  
  1044. they execute in the user's  address  space  with  the  privileges
  1045.  
  1046. normally  available  to  the  user.  The User TELNET and User FTP
  1047.  
  1048. programs are re-entrant, with as many processes running this code
  1049.  
  1050. as users wishing the service.
  1051.  
  1052.  
  1053.      Server TELNET is a single  process  created  as  the  system
  1054.  
  1055. starts  up  or  whenever  the  first  need  for  it  arises.  De-
  1056.  
  1057.  
  1058.  
  1059.                   -18-
  1060.  
  1061. IEN 167                                            Sax and Edmond
  1062.                          Bolt Beranek and Newman Inc.
  1063.                                     July 1980
  1064.  
  1065.  
  1066.  
  1067. multiplexing of  Server  TELNET  inputs  is  accomplished  via  a
  1068.  
  1069. pseudo-teletype driver.  The driver acts as the interface between
  1070.  
  1071. the Server TELNET process and the Teletype handler.
  1072.  
  1073.  
  1074.      The interface between application protocol processes and the
  1075.  
  1076. system  protocol process is through a set of TCP intrinsics.  The
  1077.  
  1078. intrinsics are designed to form a uniform interface  between  the
  1079.  
  1080. user  and  the  TCP.   Actual  data  communication between a user
  1081.  
  1082. process  and  the  system  protocol  process  is  done   with   a
  1083.  
  1084. combination   of   message   files  and  direct  buffer-to-buffer
  1085.  
  1086. transfers.   Message  files  are  used  to  pass   flow   control
  1087.  
  1088. information  while  the  actual  data transfer is made by copying
  1089.  
  1090. data between user  buffers  and  system  protocol  buffers.   The
  1091.  
  1092. combination  of  message  files  and  buffer copy is used to take
  1093.  
  1094. advantage of the flexibility of message files and the data  rates
  1095.  
  1096. achieved by direct data copy.
  1097.  
  1098.  
  1099.  
  1100.  
  1101.  
  1102.  
  1103.  
  1104.  
  1105.  
  1106.  
  1107.  
  1108.  
  1109.  
  1110.  
  1111.  
  1112.  
  1113.  
  1114.  
  1115.  
  1116.  
  1117.  
  1118.                   -19-
  1119.  
  1120. IEN 167                                            Sax and Edmond
  1121.                          Bolt Beranek and Newman Inc.
  1122.                                     July 1980
  1123.  
  1124.  
  1125.  
  1126. 5  System Protocol Software
  1127.  
  1128.  
  1129.      Since this TCP implementation is to be used on a  production
  1130.  
  1131. rather   than  an  experimental  basis,  the  design  effort  has
  1132.  
  1133. concentrated on the efficiency rather than the sophistication  of
  1134.  
  1135. the  protocol  software.   This  is especially true of the system
  1136.  
  1137. protocol  software  whose  initial  design  includes  only  those
  1138.  
  1139. features needed to support the FTP and TELNET protocols.
  1140.  
  1141.  
  1142.      At the same time,  the software design does  allow  for  the
  1143.  
  1144. future  enhancement  of  the  protocol  software.   There  are no
  1145.  
  1146. inherent design limitations which will prevent implementation  of
  1147.  
  1148. the more sophisticated TCP and Internet features.
  1149.  
  1150.  
  1151.  
  1152.  
  1153. 5.1  Implemented Features
  1154.  
  1155.  
  1156.      The specific TCP and Internet  features  to  be  implemented
  1157.  
  1158. include the following:
  1159.  
  1160.  
  1161.  
  1162.  
  1163.  
  1164.  
  1165.  
  1166.  
  1167.  
  1168.  
  1169.  
  1170.  
  1171.  
  1172.  
  1173.  
  1174.  
  1175.  
  1176.  
  1177.                   -20-
  1178.  
  1179. IEN 167                                            Sax and Edmond
  1180.                          Bolt Beranek and Newman Inc.
  1181.                                     July 1980
  1182.  
  1183.  
  1184.  
  1185.      - multiple connections to multiple hosts,
  1186.  
  1187.      - flow control at the 1822, Internet, and TCP layers,
  1188.  
  1189.      - error recovery,
  1190.  
  1191.      - fair allocation of resources among all connections,
  1192.  
  1193.      - handling of urgent data,
  1194.  
  1195.      - surviving incorrect packets,
  1196.  
  1197.      - datagram reassembly,
  1198.  
  1199.      - routing,
  1200.  
  1201.      - source quenching.
  1202.  
  1203.  
  1204.  
  1205.  
  1206. 5.2  Software Architecture Overview
  1207.  
  1208.  
  1209.      The system protocol software architecture reflects the  need
  1210.  
  1211. to  avoid packet processing delays rather than a strict hierarchy
  1212.  
  1213. between  protocol  layers.   The  system  protocol  software   is
  1214.  
  1215. implemented  as  a  single  process  to allow the system protocol
  1216.  
  1217. layers to share software resources for greater  efficiency.   The
  1218.  
  1219. shared  resources  include  subroutines  which  perform functions
  1220.  
  1221. required by more than one protocol layer and a common buffer pool
  1222.  
  1223. to   optimize   storage   resources   and   to   allow  efficient
  1224.  
  1225. communication between protocol layers.
  1226.  
  1227.  
  1228.      Network traffic through the system  protocol  process  takes
  1229.  
  1230. different  forms  including  1822  packets,  datagrams,  and  TCP
  1231.  
  1232. segments.  These various forms are  generically  referred  to  as
  1233.  
  1234.  
  1235.  
  1236.                   -21-
  1237.  
  1238. IEN 167                                            Sax and Edmond
  1239.                          Bolt Beranek and Newman Inc.
  1240.                                     July 1980
  1241.  
  1242.  
  1243.  
  1244. "packets".   Packets  are passed into the system protocol process
  1245.  
  1246. from either an  applications  protocol  process  or  the  ARPANET
  1247.  
  1248. interface.   Packets  from the ARPANET are passed into the system
  1249.  
  1250. protocol process by intrinsic calls to the INP  interface.   User
  1251.  
  1252. generated  network  packets  are  passed  to  the system protocol
  1253.  
  1254. process by using a combination of message files and data buffers.
  1255.  
  1256. Message files are used to transfer control and status information
  1257.  
  1258. while data transfer is done with buffer-to-buffer copies  between
  1259.  
  1260. the  user  protocol  data  segment  and  the system protocol data
  1261.  
  1262. segment.
  1263.  
  1264.  
  1265.      All read and write commands are done without wait  to  allow
  1266.  
  1267. the  system  protocol  process  to  simultaneously  multiplex I/O
  1268.  
  1269. channels  and  process  network  packets.   I/O  multiplexing  is
  1270.  
  1271. implemented  through  the  IOWAIT intrinsic.  The system protocol
  1272.  
  1273. process issues an IOWAIT intrinsic after it finishes processing a
  1274.  
  1275. data packet.  The IOWAIT intrinsic returns the file number of the
  1276.  
  1277. I/O channel associated with an I/O completion wakeup.
  1278.  
  1279.  
  1280.      When the number of free buffers  falls  below  a  prescribed
  1281.  
  1282. limit,   an   attempt  is  made  to  free  buffers  through  data
  1283.  
  1284. compaction.  The  attempt  begins  with  a  search  for  datagram
  1285.  
  1286. fragments  and  unacknowledged  TCP  segments  which waste buffer
  1287.  
  1288. space by using only a fraction of the  available  space  in  each
  1289.  
  1290. buffer  assigned  to  them.   This  lack  of  efficiency  can  be
  1291.  
  1292.  
  1293.  
  1294.  
  1295.                   -22-
  1296.  
  1297. IEN 167                                            Sax and Edmond
  1298.                          Bolt Beranek and Newman Inc.
  1299.                                     July 1980
  1300.  
  1301.  
  1302.  
  1303. particularly damaging because there is no guarantee that the data
  1304.  
  1305. contained  in  the  buffers  will  ever  be  processed.  Wherever
  1306.  
  1307. possible, datagram fragments are combined into a single  datagram
  1308.  
  1309. fragment  and  TCP segments are combined into a single segment to
  1310.  
  1311. more efficiently utilize system buffers.  Any  buffers  freed  by
  1312.  
  1313. this compaction process are returned to the freelist.
  1314.  
  1315.  
  1316.      Network packets from both the user process and  the  ARPANET
  1317.  
  1318. are  processed  along one of a number of data paths in the system
  1319.  
  1320. protocol process.  The actual data path taken depends on the type
  1321.  
  1322. of data packet and, in the case of TCP segments, the state of its
  1323.  
  1324. associated network connection.  Packet processing is performed by
  1325.  
  1326. a  series  of  function calls which act as processing steps along
  1327.  
  1328. the data path.
  1329.  
  1330.  
  1331.      In order to avoid processing delays which can tie up  system
  1332.  
  1333. resources, each arriving data packet is processed through as much
  1334.  
  1335. of the protocol software as possible.  Processing of a packet  is
  1336.  
  1337. suspended  only  when  the lack of some resource or some external
  1338.  
  1339. event prevents further processing.
  1340.  
  1341.  
  1342.  
  1343.  
  1344. 5.3  Control Structures
  1345.  
  1346.  
  1347.      All of the status information both  for  individual  network
  1348.  
  1349. connections  and  for  the system protocol software as a whole is
  1350.  
  1351.  
  1352.  
  1353.  
  1354.                   -23-
  1355.  
  1356. IEN 167                                            Sax and Edmond
  1357.                          Bolt Beranek and Newman Inc.
  1358.                                     July 1980
  1359.  
  1360.  
  1361.  
  1362. kept in a set of control blocks as well as in a number of  buffer
  1363.  
  1364. list  structures  as  shown  in  Appendix  C.  The control blocks
  1365.  
  1366. include a general network resources control block, a foreign host
  1367.  
  1368. control  block for each foreign host connected to the local host,
  1369.  
  1370. and send and receive control blocks for network connection.   The
  1371.  
  1372. list  structures include a network buffer free list, a TCP buffer
  1373.  
  1374. aging list and an Internet buffer aging list.
  1375.  
  1376.  
  1377.  
  1378.  
  1379. 5.3.1  Network Resources Control Block
  1380.  
  1381.  
  1382.      The Network Resources Control Block contains the information
  1383.  
  1384. needed to maintain the network buffer free lists and aging lists.
  1385.  
  1386. This information includes pointers to  the  network  buffer  free
  1387.  
  1388. lists  and  aging lists and a count of the buffers in each of the
  1389.  
  1390. lists.
  1391.  
  1392.  
  1393.      The information contained in the Network  Resources  Control
  1394.  
  1395. Block   is   used   by  the  protocol  software  to  control  the
  1396.  
  1397. distribution of network buffers among  the  various  lists.   The
  1398.  
  1399. information   is  scanned  at  various  times  to  determine  the
  1400.  
  1401. allocation or disposition of a particular  network  buffer.   The
  1402.  
  1403. determinations occur when new buffers are allocated from the free
  1404.  
  1405. list and when buffers containing TCP segments  are  about  to  be
  1406.  
  1407. acknowledged.   Decisions  are  made  based on the number of free
  1408.  
  1409. buffers available and the priority  of  the  task  requiring  the
  1410.  
  1411.  
  1412.  
  1413.                   -24-
  1414.  
  1415. IEN 167                                            Sax and Edmond
  1416.                          Bolt Beranek and Newman Inc.
  1417.                                     July 1980
  1418.  
  1419.  
  1420.  
  1421. buffers.
  1422.  
  1423.  
  1424.  
  1425.  
  1426. 5.3.2  Foreign Host Control Blocks
  1427.  
  1428.  
  1429.      Foreign Host Control Blocks maintain flow control within the
  1430.  
  1431. 1822 protocol layer.  The block contains a counter for the number
  1432.  
  1433. of outstanding 1822 packets sent to a single host.   The  counter
  1434.  
  1435. includes all of the packets sent to the host on all sockets.  The
  1436.  
  1437. counter is incremented  when  an  1822  packet  is  sent  and  is
  1438.  
  1439. decremented  when  either a RFNM or an Incomplete Transmission is
  1440.  
  1441. received from the host.
  1442.  
  1443.  
  1444.      The counter is used to prevent transmission of too many 1822
  1445.  
  1446. packets  to  a  single  host.   All transmission from the host is
  1447.  
  1448. blocked when the counter reaches the limit of  eight  outstanding
  1449.  
  1450. 1822 packets for any foreign host.
  1451.  
  1452.  
  1453.      The 1822 level flow control is actually implemented  by  the
  1454.  
  1455. send  side of the TCP software.  The TCP checks the RFNM count in
  1456.  
  1457. the connection control  block  before  it  tries  to  transmit  a
  1458.  
  1459. segment to the foreign host.
  1460.  
  1461.  
  1462.  
  1463.  
  1464.  
  1465.  
  1466.  
  1467.  
  1468.  
  1469.  
  1470.  
  1471.  
  1472.                   -25-
  1473.  
  1474. IEN 167                                            Sax and Edmond
  1475.                          Bolt Beranek and Newman Inc.
  1476.                                     July 1980
  1477.  
  1478.  
  1479.  
  1480. 5.3.3  Connection Control Block
  1481.  
  1482.  
  1483.      Each TCP connection has an associated  control  block.   The
  1484.  
  1485. control  block  contains  data  associated  with the Transmission
  1486.  
  1487. Control  Block  (TCB)  along  with   other   connection   related
  1488.  
  1489. information.   Specific information included in the control block
  1490.  
  1491. is as follows:
  1492.  
  1493.      - a  connection  state  variable  used   to   maintain   the
  1494.        connection state,
  1495.  
  1496.      - the local port number of the connection,
  1497.  
  1498.      - the TCP interface control  block  number  associated  with
  1499.        this connection,
  1500.  
  1501.      - the file number of the  private  message  file  associated
  1502.        with this connection,
  1503.  
  1504.      - the TCB data associated with  the  receive  side  of  this
  1505.        connection,
  1506.  
  1507.      - the TCB  data  associated  with  the  send  side  of  this
  1508.        connection,
  1509.  
  1510.      - A pointer to any buffers  containing  unacknowledged  data
  1511.        received on this connection.
  1512.  
  1513.  
  1514.  
  1515. 5.3.4  Network Buffer Resources List Structures
  1516.  
  1517.  
  1518.      Three list structures  are  used  to  maintain  the  network
  1519.  
  1520. buffer  resources  shared  by  all  of  the  sockets.  These list
  1521.  
  1522. structures include the free list and the two buffer aging queues.
  1523.  
  1524.  
  1525.      The network buffer free list contains  all  of  the  network
  1526.  
  1527. buffers currently available for use by any socket.  These buffers
  1528.  
  1529.  
  1530.  
  1531.                   -26-
  1532.  
  1533. IEN 167                                            Sax and Edmond
  1534.                          Bolt Beranek and Newman Inc.
  1535.                                     July 1980
  1536.  
  1537.  
  1538.  
  1539. are allocated when new data comes in from either the network or a
  1540.  
  1541. user protocol process.
  1542.  
  1543.  
  1544.      The Internet  Aging  Queue  is  a  list  of  active  buffers
  1545.  
  1546. assigned  to  blocked  datagram fragments and complete datagrams.
  1547.  
  1548. These buffers are the first to be reclaimed  when  there  are  no
  1549.  
  1550. free  buffers  available.   The  Queue  is  sorted  according  to
  1551.  
  1552. datagram age.  All buffers which belong to the same datagram  are
  1553.  
  1554. combined  into  a  single  list  structure.   The  datagram  list
  1555.  
  1556. structures are linked into the  Internet  Aging  Queue  with  the
  1557.  
  1558. least  recently updated datagram always at the head of the queue.
  1559.  
  1560. When a new datagram fragment comes in it is moved to the  end  of
  1561.  
  1562. the  queue  along with all of the other fragments which belong to
  1563.  
  1564. the same datagram.
  1565.  
  1566.  
  1567.      The TCP Aging Queue is a list of buffers  which  contain  at
  1568.  
  1569. least parts of unacknowledged TCP segments.  These buffers can be
  1570.  
  1571. reclaimed when there are no free buffers and no  buffers  on  the
  1572.  
  1573. Internet aging list.  The Queue is sorted by socket.  All buffers
  1574.  
  1575. which contain data for the same socket are combined in  a  buffer
  1576.  
  1577. list and each buffer list is linked into the queue.  The queue is
  1578.  
  1579. sorted by the age of the data associated with each socket.   Data
  1580.  
  1581. belonging  to  the socket which has been inactive for the longest
  1582.  
  1583. period of time is placed at the head of the queue so  it  can  be
  1584.  
  1585. recycled   first.    When  a  user  process  reads  data  from  a
  1586.  
  1587.  
  1588.  
  1589.  
  1590.                   -27-
  1591.  
  1592. IEN 167                                            Sax and Edmond
  1593.                          Bolt Beranek and Newman Inc.
  1594.                                     July 1980
  1595.  
  1596.  
  1597.  
  1598. connection, all the network buffers still waiting to be  read  on
  1599.  
  1600. that connection are moved to the end of the TCP aging list.  This
  1601.  
  1602. assures that data associated with an active TCP  connection  will
  1603.  
  1604. not  be  recycled  ahead  of data associated with an inactive TCP
  1605.  
  1606. connection.
  1607.  
  1608.  
  1609.  
  1610.  
  1611.  
  1612.  
  1613.  
  1614.  
  1615.  
  1616.  
  1617.  
  1618.  
  1619.  
  1620.  
  1621.  
  1622.  
  1623.  
  1624.  
  1625.  
  1626.  
  1627.  
  1628.  
  1629.  
  1630.  
  1631.  
  1632.  
  1633.  
  1634.  
  1635.  
  1636.  
  1637.  
  1638.  
  1639.  
  1640.  
  1641.  
  1642.  
  1643.  
  1644.  
  1645.  
  1646.  
  1647.  
  1648.  
  1649.                   -28-
  1650.  
  1651. IEN 167                                            Sax and Edmond
  1652.                          Bolt Beranek and Newman Inc.
  1653.                                     July 1980
  1654.  
  1655.  
  1656.  
  1657. 6  User Process/TCP Interface
  1658.  
  1659.  
  1660.      The user process/TCP interface is designed to meet two basic
  1661.  
  1662. requirements.   First,  the  interface  must allow for high speed
  1663.  
  1664. data  transmission  across  the  interface;  this  is  especially
  1665.  
  1666. important    since    this    interface   involves   interprocess
  1667.  
  1668. communication which could be delayed by excessive system overhead
  1669.  
  1670. due  to  context  switching  and process scheduling.  Second, the
  1671.  
  1672. interface must isolate  the  system  protocol  process  from  any
  1673.  
  1674. buffer  overhead  burdens caused by processing delays in the user
  1675.  
  1676. process.  System protocol process  buffers  are  too  valuable  a
  1677.  
  1678. resource to be locked into storing TCP segments which are waiting
  1679.  
  1680. for response from a user process.
  1681.  
  1682.  
  1683.      High speed data transmission  across  tser  process/TCP
  1684.  
  1685. interface  is  achieved  by copying data directly from buffers in
  1686.  
  1687. the user process to buffers in the system protocol process.   The
  1688.  
  1689. direct  transfer is implemented with the move-to-data-segment and
  1690.  
  1691. move-from-data-segment instructions provided by the HP3000.
  1692.  
  1693.  
  1694.      The system protocol process is isolated from delays  in  the
  1695.  
  1696. user process by making the user process responsible for buffering
  1697.  
  1698. TCP data segments.  Acknowledged incoming TCP segments,  and  TCP
  1699.  
  1700. segments  waiting  to be transmitted over the ARPANET, are stored
  1701.  
  1702. in buffers in the  user  protocol  process.   This  use  of  user
  1703.  
  1704. buffers  serves  two functions:  it frees system protocol buffers
  1705.  
  1706.  
  1707.  
  1708.                   -29-
  1709.  
  1710. IEN 167                                            Sax and Edmond
  1711.                          Bolt Beranek and Newman Inc.
  1712.                                     July 1980
  1713.  
  1714.  
  1715.  
  1716. from being locked into storing TCP segments, and also  gives  the
  1717.  
  1718. user  process  some  control  of  network  connection throughput.
  1719.  
  1720. Throughput control is accomplished by allowing each user  process
  1721.  
  1722. to  choose  the  amount  of buffer resources it dedicates to each
  1723.  
  1724. connection.
  1725.  
  1726.  
  1727.  
  1728.  
  1729. 6.1  Interface Intrinsics
  1730.  
  1731.  
  1732.      The TCP/user interface is implemented through a set  of  TCP
  1733.  
  1734. intrinsics.   These  intrinsics  allow the user process to create
  1735.  
  1736. and use network  connections  with  other  processes  on  foreign
  1737.  
  1738. hosts.
  1739.  
  1740.  
  1741.      Seven intrinsics, TCPWAIT,  TCPOPEN,  TCPCLOSE,  TCPRECEIVE,
  1742.  
  1743. TCPSEND,   TCPSTAT,  and  TCPABORT,  provide  the  basic  control
  1744.  
  1745. functions needed to transfer data through  the  user  process/TCP
  1746.  
  1747. interface.  Conceptually, the intrinsics allow the user to create
  1748.  
  1749. network connections with other processes on foreign hosts.   Each
  1750.  
  1751. connection  consists  of  a pair of sockets as defined in the TCP
  1752.  
  1753. protocol  document.   Connections  are  created  with  a  TCPOPEN
  1754.  
  1755. intrinsic  whose  parameters define the sockets which make up the
  1756.  
  1757. connection.  After a connection is created, the user process uses
  1758.  
  1759. the  TCPSEND  and  TCPRECEIVE intrinsics to send or receive data.
  1760.  
  1761. The TCPSTAT intrinsic allows the user to check the  status  of  a
  1762.  
  1763. connection.
  1764.  
  1765.  
  1766.  
  1767.                   -30-
  1768.  
  1769. IEN 167                                            Sax and Edmond
  1770.                          Bolt Beranek and Newman Inc.
  1771.                                     July 1980
  1772.  
  1773.  
  1774.  
  1775.      Within the user process, connections are identified  through
  1776.  
  1777. the  combination  of  a  connection  file number and a connection
  1778.  
  1779. buffer.  The connection file number is returned by  a  successful
  1780.  
  1781. TCPOPEN   call.   The  connection  buffer  is  an  integer  array
  1782.  
  1783. allocated by the user process.  The buffer is initialized by  the
  1784.  
  1785. TCPOPEN  intrinsic  and  is then passed as the first parameter to
  1786.  
  1787. all of the other TCP intrinsics.  It is the responsibility of the
  1788.  
  1789. user  process  to maintain the association between the connection
  1790.  
  1791. file number and the connection buffer.
  1792.  
  1793.  
  1794.      The TCP I/O interface is entirely  asynchronous  so  that  a
  1795.  
  1796. user  process can queue any number of read or write requests to a
  1797.  
  1798. particular connection.  The user process has three limitations in
  1799.  
  1800. this  regard:  first, it must provide the buffers associated with
  1801.  
  1802. each TCP intrinsic call; second, the user process must keep track
  1803.  
  1804. of  which  buffers  are associated with each I/O call; and third,
  1805.  
  1806. the user process cannot dequeue buffers until it  has  permission
  1807.  
  1808. to do so from the system protocol process.
  1809.  
  1810.  
  1811.      The user process uses a combination of the  IOWAIT  ane
  1812.  
  1813. TCPWAIT  intrinsic  calls to keep track of I/O completion events.
  1814.  
  1815. The IOWAIT  intrinsic  is  invoked  when  the  user  process  has
  1816.  
  1817. completed  processing  all  of the current data.  When the IOWAIT
  1818.  
  1819. intrinsic returns with  a  file  number  associated  with  a  TCP
  1820.  
  1821. connection,  the  TCPWAIT  intrinsic  is called to handle the I/O
  1822.  
  1823.  
  1824.  
  1825.  
  1826.                   -31-
  1827.  
  1828. IEN 167                                            Sax and Edmond
  1829.                          Bolt Beranek and Newman Inc.
  1830.                                     July 1980
  1831.  
  1832.  
  1833.  
  1834. completion.  The TCPWAIT intrinsic uses the connection buffer  to
  1835.  
  1836. determine  the  cause of the I/O completion and then performs the
  1837.  
  1838. appropriate I/O cleanup task and returns an I/O type code to  the
  1839.  
  1840. user process.
  1841.  
  1842.  
  1843.      The specific calling sequences of  the  TCP  intrinsics  are
  1844.  
  1845. given below:
  1846.  
  1847.  
  1848. TCPOPEN(TCPCBUF,FHIA,FP,A/P,LP[,BADDR]) opens a TCP connection
  1849.  
  1850.  
  1851.    TCPCBUF - TCP Connection Buffer - This  is  a  pointer  to  an
  1852.  
  1853.              integer  array  ten  elements long which acts as the
  1854.  
  1855.              control structure for all network connections.   The
  1856.  
  1857.              array  is  allocated  by the user process before any
  1858.  
  1859.              TCP intrinsics are called.
  1860.  
  1861.  
  1862.    FHIA    - Foreign Host Internet  Address  -  32  bit  address.
  1863.  
  1864.              This  address  may  be  obtained  with  the HOSTADDR
  1865.  
  1866.              intrinsic which takes the host name text string as a
  1867.  
  1868.              parameter  and  returns the 32 bit internet address.
  1869.  
  1870.              In the  case  of  a  passive  open  a  zero  address
  1871.  
  1872.              indicates a listen for any host.
  1873.  
  1874.  
  1875.    FP      - Foreign Port -  a  16  bit  port  address  for  this
  1876.  
  1877.              connection  at  the  foreign host.  In the case of a
  1878.  
  1879.              passive open a 0 port indicates a  listen  from  any
  1880.  
  1881.              port on a foreign host.
  1882.  
  1883.  
  1884.  
  1885.                   -32-
  1886.  
  1887. IEN 167                                            Sax and Edmond
  1888.                          Bolt Beranek and Newman Inc.
  1889.                                     July 1980
  1890.  
  1891.  
  1892.  
  1893.    A/P     - Active/Passive - a boolean flag used to indicate  if
  1894.  
  1895.              this open is for a listen socket (passive) or for an
  1896.  
  1897.              active connection.
  1898.  
  1899.  
  1900.    LP      - Local Port - 16 bit local port id.   This  parameter
  1901.  
  1902.              is  optional.  If it is not specified, the TCP picks
  1903.  
  1904.              a free local port id from a  reserved  part  of  the
  1905.  
  1906.              name space.
  1907.  
  1908.  
  1909.    BADDR   - Buffer Address - an optional buffer used to give the
  1910.  
  1911.              foreign  host  a  window  for  transmission.  If the
  1912.  
  1913.              buffer is not provided,  the  connection  is  opened
  1914.  
  1915.              with a zero window size until the user process calls
  1916.  
  1917.              the TCPRECEIVE intrinsic.
  1918.  
  1919.  
  1920.    returns - local connection name or error code  of  -1  if  the
  1921.  
  1922.              connection  failed.   The  local  connection name is
  1923.  
  1924.              actually the file number of the private message file
  1925.  
  1926.              associated with this connection.
  1927.  
  1928.  
  1929. TCPCLOSE(TCPCBUF) closes a TCP connection
  1930.  
  1931.  
  1932.    TCPCBUF - TCP Connection Buffer  -  same  as  in  the  TCPOPEN
  1933.  
  1934.              intrinsic.
  1935.  
  1936.  
  1937. TCPABORT(TCPBUF,BUFPTR) aborts a TCP connection
  1938.  
  1939.  
  1940.    TCPCBUF - TCP Connection Buffer  -  same  as  in  the  TCPOPEN
  1941.  
  1942.  
  1943.  
  1944.                   -33-
  1945.  
  1946. IEN 167                                            Sax and Edmond
  1947.                          Bolt Beranek and Newman Inc.
  1948.                                     July 1980
  1949.  
  1950.  
  1951.  
  1952.              intrinsic.
  1953.  
  1954.  
  1955.    BUFPTR  - Buffer Pointer  -  pointer  to  a  list  of  buffers
  1956.  
  1957.              released   by  the  TCPABORT  call.   A  zero  value
  1958.  
  1959.              indicates that no buffers were released.
  1960.  
  1961.  
  1962. TCPRECEIVE(TCPCBUF,BADDR,BCNT) reads data from a TCP connection
  1963.  
  1964.  
  1965.    TCPCBUF - TCP Connection Buffer  -  same  as  in  the  TCPOPEN
  1966.  
  1967.              intrinsic.
  1968.  
  1969.  
  1970.    BADDR   - Buffer Address - address of user buffer for  receiv-
  1971.  
  1972.              ing network data.
  1973.  
  1974.  
  1975.    BCNT    - Byte Count - number of bytes to be transferred.
  1976.  
  1977.  
  1978.    returns - an error code of -1 if the TCPRECEIVE failed.
  1979.  
  1980.  
  1981. TCPSEND(TCPCBUF,BADDR,BCNT,EOL) writes data to a TCP connection
  1982.  
  1983.  
  1984.    TCPCBUF - TCP Connection Buffer  -  same  as  in  the  TCPOPEN
  1985.  
  1986.              intrinsic.
  1987.  
  1988.  
  1989.    BADDR   - Buffer Address - address of user buffer for  sending
  1990.  
  1991.              network data.
  1992.  
  1993.  
  1994.    BCNT    - Byte Count - number of bytes to be transferred.
  1995.  
  1996.  
  1997.    EOL     - End Of Letter - a boolean flag to indicate that this
  1998.  
  1999.              buffer is an end of letter.
  2000.  
  2001.  
  2002.  
  2003.                   -34-
  2004.  
  2005. IEN 167                                            Sax and Edmond
  2006.                          Bolt Beranek and Newman Inc.
  2007.                                     July 1980
  2008.  
  2009.  
  2010.  
  2011. TCPSTAT(TCPCBUF,SBADDR) gives TCP connection status
  2012.  
  2013.  
  2014.    TCPCBUF - TCP Connection Buffer  -  same  as  in  the  TCPOPEN
  2015.  
  2016.              intrinsic.
  2017.  
  2018.  
  2019.    SBADDR  - Status Buffer Address - address of user  buffer  for
  2020.  
  2021.              receiving network data.
  2022.  
  2023.  
  2024. TCPWAIT(TCPCBUF,BUFPTR,DATAPTR) returns the result of a  previous
  2025.  
  2026. TCP intrinsic call.
  2027.  
  2028.  
  2029.    TCPCBUF - TCP Connection Buffer  -  Same  as  in  the  TCPOPEN
  2030.  
  2031.              intrinsic.
  2032.  
  2033.  
  2034.    BUFPTR  - Buffer Pointer - used  to  return  a  pointer  to  a
  2035.  
  2036.              buffer  list  released  by  an  I/O  event.   A zero
  2037.  
  2038.              pointer indicates that no buffers were released.
  2039.  
  2040.  
  2041.    DATAPTR - Data Pointer - pointer to  the  first  data  element
  2042.  
  2043.              within  a  buffer  returned  by  the  intrinsic to a
  2044.  
  2045.              TCPRECEIVE intrinsic.
  2046.  
  2047.  
  2048.    returns - a code indicating the type of I/O completed.  A list
  2049.  
  2050.              of the I/O codes is given in Appendix D.
  2051.  
  2052.  
  2053.  
  2054.  
  2055.  
  2056.  
  2057.  
  2058.  
  2059.  
  2060.  
  2061.  
  2062.                   -35-
  2063.  
  2064. IEN 167                                            Sax and Edmond
  2065.                          Bolt Beranek and Newman Inc.
  2066.                                     July 1980
  2067.  
  2068.  
  2069.  
  2070. 6.2  Flow Control Across the Interface
  2071.  
  2072.  
  2073.      Flow  control  across  the  user  process/TCP  interface  is
  2074.  
  2075. implemented  through the use of message files.  The message files
  2076.  
  2077. act as control channels  to  transmit  flow  control  and  status
  2078.  
  2079. messages  between  the user process and the TCP.  Each connection
  2080.  
  2081. makes use of two message files.  A general input message file  is
  2082.  
  2083. used to transmit control messages from user processes to the TCP.
  2084.  
  2085. All user processes share the same  general  input  message  file.
  2086.  
  2087. Each  connection  also  uses  a  private  message  file to convey
  2088.  
  2089. control and status information from the system  protocol  process
  2090.  
  2091. to the user process.
  2092.  
  2093.  
  2094.      The control messages passed between the user process and the
  2095.  
  2096. system  protocol  process  are short data buffers.  These buffers
  2097.  
  2098. contain the message type along with other information  associated
  2099.  
  2100. with the particular command.  The formats for each of the message
  2101.  
  2102. types is shown in Appendix D.
  2103.  
  2104.  
  2105.  
  2106.  
  2107. 6.3  Interface Control Structures
  2108.  
  2109.  
  2110.      Each network connection  has  an  associated  TCP  interface
  2111.  
  2112. control  block.   These blocks include a set of pointers and data
  2113.  
  2114. segment numbers used to keep track of  buffers  within  both  the
  2115.  
  2116. user  process  and  the  system  protocol  process.  The pointers
  2117.  
  2118.  
  2119.  
  2120.  
  2121.                   -36-
  2122.  
  2123. IEN 167                                            Sax and Edmond
  2124.                          Bolt Beranek and Newman Inc.
  2125.                                     July 1980
  2126.  
  2127.  
  2128.  
  2129. contain buffer addresses relative to the beginning of  the  stack
  2130.  
  2131. data  segment  for  each process.  A diagram of the TCP interface
  2132.  
  2133. control block is given in Appendix E.
  2134.  
  2135.  
  2136.      The control blocks are maintained in a separate data segment
  2137.  
  2138. shared  by both the user and system protocol processes.  The data
  2139.  
  2140. segment is initialized by the system  protocol  process  when  it
  2141.  
  2142. starts  up.   The  initialization  of the data segment divides it
  2143.  
  2144. into a number of control blocks.  Individual control  blocks  are
  2145.  
  2146. initialized   by   the   TCPOPEN  intrinsic.  Responsibility  for
  2147.  
  2148. releasing the  control  blocks  is  shared  among  the  TCPCLOSE,
  2149.  
  2150. TCPABORT, and TCPWAIT intrinsics.
  2151.  
  2152.  
  2153.  
  2154.  
  2155. 6.4  Interface Control Algorithms
  2156.  
  2157.  
  2158.      The specific functions performed by each of the network  I/O
  2159.  
  2160. intrinsics are as follows:
  2161.  
  2162.  
  2163.      TCPOPEN
  2164.  
  2165.  
  2166.      1.  The TCPOPEN intrinsic software searches for a  free  TCP
  2167.  
  2168.          connection interface control block and initializes it.
  2169.  
  2170.  
  2171.      2.  The TCPOPEN software creates a private message file with
  2172.  
  2173.          a  unique file name.  The unique file name is formed out
  2174.  
  2175.          of the prefix  "TCP"  and  the  id  number  of  the  TCP
  2176.  
  2177.  
  2178.  
  2179.  
  2180.                   -37-
  2181.  
  2182. IEN 167                                            Sax and Edmond
  2183.                          Bolt Beranek and Newman Inc.
  2184.                                     July 1980
  2185.  
  2186.  
  2187.  
  2188.          interface control block.
  2189.  
  2190.  
  2191.      3.  The TCPOPEN software sends an  OPEN  CONNECTION  command
  2192.  
  2193.          message  to  the TCP via the general input message file.
  2194.  
  2195.          The message includes all of the TCPOPEN  parameters  and
  2196.  
  2197.          the id number of the TCP interface control block.
  2198.  
  2199.  
  2200.      4.  The TCPOPEN software makes a read request  with  timeout
  2201.  
  2202.          on the private message file.  If the read times out, the
  2203.  
  2204.          TCPOPEN software sends an ABORT  CONNECTION  command  to
  2205.  
  2206.          the  TCP,  deletes  the TCP interface control block, and
  2207.  
  2208.          returns  an  error  code  to  the  user  process.    The
  2209.  
  2210.          connection  buffer provided as a parameter to TCPOPEN is
  2211.  
  2212.          used as the read buffer.
  2213.  
  2214.  
  2215.      5.  The TCP software reads the open command from the general
  2216.  
  2217.          input  message file and uses the information to create a
  2218.  
  2219.          connection  control  block.   The  TCP   software   also
  2220.  
  2221.          initiates  the  connection  protocols  specified  in the
  2222.  
  2223.          command message.
  2224.  
  2225.  
  2226.      6.  The TCP software sends an OPEN CONFIRM message  back  to
  2227.  
  2228.          the user process via the private message file created by
  2229.  
  2230.          the  TCPOPEN  intrinsic  software.   The  OPEN   CONFIRM
  2231.  
  2232.          message  will fail if the user process is destroyed by a
  2233.  
  2234.          user abort.  If this  occurs,  the  TCP  software  takes
  2235.  
  2236.  
  2237.  
  2238.  
  2239.                   -38-
  2240.  
  2241. IEN 167                                            Sax and Edmond
  2242.                          Bolt Beranek and Newman Inc.
  2243.                                     July 1980
  2244.  
  2245.  
  2246.  
  2247.          responsibility for cleaning up the TCP interface control
  2248.  
  2249.          block as well the connection control blocks.
  2250.  
  2251.  
  2252.      7.  The TCPOPEN software reads the OPEN CONFIRM message from
  2253.  
  2254.          the   private   message   file.   The  TCPOPEN  software
  2255.  
  2256.          initiates a read without wait  on  the  private  message
  2257.  
  2258.          file.   The  connection buffer is again used as the read
  2259.  
  2260.          buffer.
  2261.  
  2262.  
  2263.      8.  If the user provides a read buffer as the last parameter
  2264.  
  2265.          to the TCPOPEN intrinsic, a read operation is initiated.
  2266.  
  2267.          The TCPOPEN software attaches  the  buffer  to  the  TCP
  2268.  
  2269.          interface  control structure and sends a RECEIVE message
  2270.  
  2271.          to the TCP via the general input message file.  The  TCP
  2272.  
  2273.          uses  this  message  to  set  the size of the connection
  2274.  
  2275.          window.
  2276.  
  2277.  
  2278.      9.  The TCPOPEN software returns  the  file  number  of  the
  2279.  
  2280.          private message file to the user process.
  2281.  
  2282.  
  2283.      TCPCLOSE
  2284.  
  2285.  
  2286.      1.  The TCPCLOSE software marks the  connection  closed  bit
  2287.  
  2288.          for  the  send  side in the TCP interface control block.
  2289.  
  2290.          The TCPCLOSE software checks to see  if  there  are  any
  2291.  
  2292.          data  buffers  waiting  to be read by the TCP.  If there
  2293.  
  2294.          are no data buffers, the TCPCLOSE software sends a CLOSE
  2295.  
  2296.  
  2297.  
  2298.                   -39-
  2299.  
  2300. IEN 167                                            Sax and Edmond
  2301.                          Bolt Beranek and Newman Inc.
  2302.                                     July 1980
  2303.  
  2304.  
  2305.  
  2306.          CONNECTION  command  to the TCP.  If the receive side is
  2307.  
  2308.          marked closed and there are no  buffers  waiting  to  be
  2309.  
  2310.          read,   the  TCPCLOSE intrinsic software deletes the TCP
  2311.  
  2312.          interface connection control block.
  2313.  
  2314.  
  2315.      2.  The TCPCLOSE software returns to the user process.
  2316.  
  2317.  
  2318.      3.  When the TCP receives a connection  close  command  from
  2319.  
  2320.          the  user process it sends a FIN to the foreign host and
  2321.  
  2322.          marks the send side  of  the  connection  as  FINWAIT-1.
  2323.  
  2324.          When  the  TCP  receives an ACK of the close the foreign
  2325.  
  2326.          host, it marks  the  send  side  of  the  connection  as
  2327.  
  2328.          FINWAIT-2.   If  the  receive  side of the connection is
  2329.  
  2330.          marked closed, the TCP deletes  the  connection  control
  2331.  
  2332.          block.
  2333.  
  2334.  
  2335.      4.  If the TCP receives a FIN  from  the  foreign  host,  it
  2336.  
  2337.          marks  the  receive  side  of its connection as closing.
  2338.  
  2339.          When all data and the FIN sent by the foreign  host  are
  2340.  
  2341.          ACKED,  the  TCP  sends  a  NETCLOSE command to the user
  2342.  
  2343.          process and marks the receive  side  of  the  connection
  2344.  
  2345.          closed.   If the send side is also marked as closed, the
  2346.  
  2347.          TCP deletes the connection  control  block.   The  close
  2348.  
  2349.          message  sent  to  the  user process is processed by the
  2350.  
  2351.          TCPWAIT intrinsic.
  2352.  
  2353.  
  2354.  
  2355.  
  2356.  
  2357.                   -40-
  2358.  
  2359. IEN 167                                            Sax and Edmond
  2360.                          Bolt Beranek and Newman Inc.
  2361.                                     July 1980
  2362.  
  2363.  
  2364.  
  2365.      TCPABORT
  2366.  
  2367.  
  2368.      1.  The TCPABORT software sends an ABORT CONNECTION  command
  2369.  
  2370.          to  the  TCP  via  the  general input command file.  The
  2371.  
  2372.          TCPABORT software releases  the  TCP  interface  control
  2373.  
  2374.          block and deletes the connection's private message file.
  2375.  
  2376.  
  2377.      2.  The TCPABORT software returns to the user process.   The
  2378.  
  2379.          return  includes  a  pointer  to  a list of user buffers
  2380.  
  2381.          which were assigned to the connection.
  2382.  
  2383.  
  2384.      3.  When the TCP receives an ABORT CONNECTION  command  from
  2385.  
  2386.          the  user  process it sends a reset to the foreign host,
  2387.  
  2388.          deletes  any  unacknowledged  data  it  has   for   this
  2389.  
  2390.          connection, and deletes the connection control block.
  2391.  
  2392.  
  2393.      4.  If the TCP receives a reset from the  foreign  host,  it
  2394.  
  2395.          deletes all of the data waiting to be transmitted to the
  2396.  
  2397.          user process and sends a NETABORT message  to  the  user
  2398.  
  2399.          process  via  the  private  message  file.  The NETABORT
  2400.  
  2401.          message is handled by the TCPWAIT intrinsic.
  2402.  
  2403.  
  2404.      TCPRECEIVE
  2405.  
  2406.  
  2407.      1.  The TCPRECEIVE software checks to  see  if  the  receive
  2408.  
  2409.          side connection closed flag is set.  If the flag is set,
  2410.  
  2411.          the TCPRECEIVE  software  returns  a  connection  closed
  2412.  
  2413.  
  2414.  
  2415.  
  2416.                   -41-
  2417.  
  2418. IEN 167                                            Sax and Edmond
  2419.                          Bolt Beranek and Newman Inc.
  2420.                                     July 1980
  2421.  
  2422.  
  2423.  
  2424.          indication  to  the  user process.  It is up to the user
  2425.  
  2426.          process to close the send side  of  the  connection  and
  2427.  
  2428.          clean up the connection buffer if it has not done so.
  2429.  
  2430.  
  2431.      2.  If the  connection  is  open,  the  TCPRECEIVE  software
  2432.  
  2433.          attaches  its  read  buffer to the TCP interface control
  2434.  
  2435.          block and sends a  RECEIVE  message  to  the  TCP.   The
  2436.  
  2437.          message is used to indicate to the TCP that the user has
  2438.  
  2439.          made  a  buffer  available  to  the   connection.    The
  2440.  
  2441.          TCPRECEIVE software returns to the user process.
  2442.  
  2443.  
  2444.      3.  When the TCP receives the user's read message, it checks
  2445.  
  2446.          to  see if it has any unacknowledged segments waiting to
  2447.  
  2448.          be transferred to  the  user  process.   If  it  has  no
  2449.  
  2450.          segments,  it  uses  the RECEIVE message to increase its
  2451.  
  2452.          receive window size.  If the TCP  has  segments  waiting
  2453.  
  2454.          for  transfer,  it  transfers  as  much  of  the data as
  2455.  
  2456.          possible to the user process.  All transferred  data  is
  2457.  
  2458.          immediately  acknowledged  to the foreign host.  The TCP
  2459.  
  2460.          sends a PENDING RECEIVE message to the user  process  to
  2461.  
  2462.          advise  it  of  the  transfer  of data.  This message is
  2463.  
  2464.          processed by the TCPWAIT intrinsic.
  2465.  
  2466.  
  2467.      4.  If the TCP receives  data  from  the  foreign  host,  it
  2468.  
  2469.          checks  to see if the user process has assigned any free
  2470.  
  2471.          buffers to this connection.  If there are free  buffers,
  2472.  
  2473.  
  2474.  
  2475.                   -42-
  2476.  
  2477. IEN 167                                            Sax and Edmond
  2478.                          Bolt Beranek and Newman Inc.
  2479.                                     July 1980
  2480.  
  2481.  
  2482.  
  2483.          the  TCP  copies  as  much  of  the  data it receives as
  2484.  
  2485.          possible into the  user  buffers  and  acknowledges  the
  2486.  
  2487.          copied  data to the foreign host.  Any data which is not
  2488.  
  2489.          copied is maintained on the TCP aging list where  it  is
  2490.  
  2491.          stored  until it is transferred to a user process buffer
  2492.  
  2493.          or discarded.  The user process is informed of the  data
  2494.  
  2495.          transfer  through  a PENDING RECEIVE command message via
  2496.  
  2497.          the private message file.  This message is  received  by
  2498.  
  2499.          the TCPWAIT intrinsic.
  2500.  
  2501.  
  2502.      TCPSEND
  2503.  
  2504.  
  2505.      1.  The TCPSEND intrinsic checks to see if the connection is
  2506.  
  2507.          still  open.   If  the  connection is marked closed, the
  2508.  
  2509.          TCPSEND returns an error code to the user.
  2510.  
  2511.  
  2512.      2.  If the connection is still open, the intrinsic  software
  2513.  
  2514.          attaches  the  user  supplied  data  buffer  to  the TCP
  2515.  
  2516.          interface control block.  The TCPSEND software  sends  a
  2517.  
  2518.          SEND  message  to  the TCP via the general input message
  2519.  
  2520.          file.  The TCPSEND software  now  returns  to  the  user
  2521.  
  2522.          process.
  2523.  
  2524.  
  2525.      3.  The TCP software, on receiving the  data  SEND  message,
  2526.  
  2527.          checks  to  see  if  it can send the data to the foreign
  2528.  
  2529.          host.  The decision on whether to send the data is  made
  2530.  
  2531.  
  2532.  
  2533.  
  2534.                   -43-
  2535.  
  2536. IEN 167                                            Sax and Edmond
  2537.                          Bolt Beranek and Newman Inc.
  2538.                                     July 1980
  2539.  
  2540.  
  2541.  
  2542.          by checking the following conditions:
  2543.  
  2544.  
  2545.             - the foreign host has advertised  sufficient  window
  2546.           space,
  2547.  
  2548.             - the number of outstanding RFNMs for all connections
  2549.           to the foreign host is less than eight,
  2550.  
  2551.             - the amount of data waiting to be sent is sufficient
  2552.           to  warrant a data packet.  This condition prevents
  2553.           single byte segments from being sent out  over  the
  2554.           ARPANET.   The  TCP  waits until it has at least 10
  2555.           bytes of data before transmitting  it  out  to  the
  2556.           ARPANET.
  2557.  
  2558.             - the user has specified an EOL.
  2559.  
  2560.  
  2561.          If the TCP decides to  send  the  data,  it  prepares  a
  2562.  
  2563.          network packet and copies as much of the user data as it
  2564.  
  2565.          can transmit into the network packet.  The data transfer
  2566.  
  2567.          is made directly from the list of user buffers queued by
  2568.  
  2569.          the TCPSEND intrinsic to the message packet buffer.  All
  2570.  
  2571.          buffers filled by the data transfer are marked as filled
  2572.  
  2573.          and appended to the filled buffer list.
  2574.  
  2575.  
  2576.      4.  After the TCP has transferred all of the data  from  the
  2577.  
  2578.          user buffers, it checks the TCP interface control block.
  2579.  
  2580.          If the send side of the connection is marked closed, the
  2581.  
  2582.          TCP  sends  a  Fin  to the foreign host.  If the receive
  2583.  
  2584.          side is also closed, the TCP sends a  NETCLOSED  command
  2585.  
  2586.          to the user process.
  2587.  
  2588.  
  2589.      5.  After  the  data  is  transmitted,  the   TCP   sets   a
  2590.  
  2591.  
  2592.  
  2593.                   -44-
  2594.  
  2595. IEN 167                                            Sax and Edmond
  2596.                          Bolt Beranek and Newman Inc.
  2597.                                     July 1980
  2598.  
  2599.  
  2600.  
  2601.          retransmission timer.
  2602.  
  2603.  
  2604.      6.  If the TCP receives an acknowledgment from  the  foreign
  2605.  
  2606.          host,  it  updates  the  TCP  interface control block to
  2607.  
  2608.          reflect the acknowledgment, turns  off  the  timer,  and
  2609.  
  2610.          sends  a  DATA  SENT  message  to the user process via a
  2611.  
  2612.          connection private message file.  The  message  contains
  2613.  
  2614.          the  number  of  bytes  acknowledged.   This  message is
  2615.  
  2616.          processed by the TCPWAIT command.  If only some  of  the
  2617.  
  2618.          data  is  acknowledged, the TCP resets the timer for the
  2619.  
  2620.          unacknowledged data.
  2621.  
  2622.  
  2623.      7.  If the TCP does  not  get  an  acknowledgment  from  the
  2624.  
  2625.          foreign  host  and  the  connection  times out, it again
  2626.  
  2627.          reads as much data as it can from the  user  buffer  and
  2628.  
  2629.          sends it out as a network packet.
  2630.  
  2631.  
  2632.      TCPSTATUS
  2633.  
  2634.  
  2635.      1.  The TCPSTATUS software checks to see if  the  connection
  2636.  
  2637.          is still open.  If it is closed, it returns a connection
  2638.  
  2639.          closed code to the user process.
  2640.  
  2641.  
  2642.      2.  The TCPSTATUS command checks to see if there is an  out-
  2643.  
  2644.          standing  status  request by the user process.  If there
  2645.  
  2646.          is, it returns an error code to the user process.
  2647.  
  2648.  
  2649.  
  2650.  
  2651.  
  2652.                   -45-
  2653.  
  2654. IEN 167                                            Sax and Edmond
  2655.                          Bolt Beranek and Newman Inc.
  2656.                                     July 1980
  2657.  
  2658.  
  2659.  
  2660.      3.  If there is no pending  status  request,  the  TCPSTATUS
  2661.  
  2662.          software  attaches  the status request buffer to the TCP
  2663.  
  2664.          interface control block and sends a  STATUS  message  to
  2665.  
  2666.          the  TCP  via  the  general  input  message  file.   The
  2667.  
  2668.          TCPSTATUS returns to the user process.
  2669.  
  2670.  
  2671.      4.  When the TCP receives the status  request   message,  it
  2672.  
  2673.          formulates  a  status  message  and  copies  it into the
  2674.  
  2675.          user's status buffer attached to the connection  buffer.
  2676.  
  2677.          The TCP then sends a status complete message to the user
  2678.  
  2679.          process via the connection private  message  file.   The
  2680.  
  2681.          message  from  the  TCP  is  processed  by  the  TCPWAIT
  2682.  
  2683.          intrinsic.
  2684.  
  2685.  
  2686.      TCPWAIT
  2687.  
  2688.  
  2689.      1.  The TCPWAIT software checks the  message  received  from
  2690.  
  2691.          the TCP.
  2692.  
  2693.  
  2694.      2.  If the  message  is  a  NETCLOSE  command,  the  TCPWAIT
  2695.  
  2696.          software  checks  if  the send side of the connection is
  2697.  
  2698.          closed and there is no data waiting to be  sent  to  the
  2699.  
  2700.          TCP.  If the send side is closed and there is no pending
  2701.  
  2702.          TCP data, the TCPWAIT software deletes the TCP interface
  2703.  
  2704.          control   block.    If  there  is  data  waiting  to  be
  2705.  
  2706.          transmitted, the TCPWAIT software marks the receive side
  2707.  
  2708.  
  2709.  
  2710.  
  2711.                   -46-
  2712.  
  2713. IEN 167                                            Sax and Edmond
  2714.                          Bolt Beranek and Newman Inc.
  2715.                                     July 1980
  2716.  
  2717.  
  2718.  
  2719.          of  the  connection  closed.   In  either  case, TCPWAIT
  2720.  
  2721.          returns a connection closed code to  the  user  process.
  2722.  
  2723.          It is up to the user process to decide when to close the
  2724.  
  2725.          send side of the connection, if it has not already  done
  2726.  
  2727.          so.   If  there  are  any user buffers still assigned to
  2728.  
  2729.          this connection, they are returned to the  user  process
  2730.  
  2731.          at this time.
  2732.  
  2733.  
  2734.      3.  If  the  message  is  a  NETABORT  command  the  TCPWAIT
  2735.  
  2736.          software  deletes  the  TCP  interface control block and
  2737.  
  2738.          returns a connection abort code  to  the  user  process.
  2739.  
  2740.          Any buffers associated with connection are also returned
  2741.  
  2742.          in  a  list  structure  through   the   buffer   pointer
  2743.  
  2744.          parameter.
  2745.  
  2746.  
  2747.      4.  If the message is a PENDING RECEIVE command, the TCPWAIT
  2748.  
  2749.          returns  the  pointer  to  the  head  of  the first data
  2750.  
  2751.          buffer, the first data byte, and a  byte  count.   Since
  2752.  
  2753.          the  data may be returned in a number of linked buffers,
  2754.  
  2755.          it is up to the user to follow the buffer links.  As the
  2756.  
  2757.          user  process  reads  the  data  it  should  check  each
  2758.  
  2759.          buffer's header.  Completely filled buffers marked  with
  2760.  
  2761.          a  zero in the in use field can be reclaimed by the user
  2762.  
  2763.          process.
  2764.  
  2765.  
  2766.      5.  If the  message  is  a  DATASENT  message,  the  TCPWAIT
  2767.  
  2768.  
  2769.  
  2770.                   -47-
  2771.  
  2772. IEN 167                                            Sax and Edmond
  2773.                          Bolt Beranek and Newman Inc.
  2774.                                     July 1980
  2775.  
  2776.  
  2777.  
  2778.          software checks the acknowledgment count and releases as
  2779.  
  2780.          many buffers as it can from the send buffer  list.   The
  2781.  
  2782.          released  buffers  are  linked  in a list and the buffer
  2783.  
  2784.          pointer parameter is set to point to the first buffer in
  2785.  
  2786.          the   list.    The   TCPWAIT  software  returns  a  data
  2787.  
  2788.          acknowledgment code to the user process.
  2789.  
  2790.  
  2791.      6.  If the message is a STATUS COMPLETE message, the TCPWAIT
  2792.  
  2793.          software  sets  the buffer pointer parameter to point to
  2794.  
  2795.          the status buffer and returns a status complete  command
  2796.  
  2797.          code to the user process.
  2798.  
  2799.  
  2800.  
  2801.  
  2802. 6.5  Windowing, Acknowledgment, and Retransmission
  2803.  
  2804.  
  2805.      The receive window size and data segment acknowledgment  are
  2806.  
  2807. completely  dependent  on  the number of buffers the user process
  2808.  
  2809. allocates  to  a  connection.  The  receive  window  size  of   a
  2810.  
  2811. connection  is  always set to the amount of free buffer space the
  2812.  
  2813. user process allocates to  the  receive  side  of  a  connection.
  2814.  
  2815. Acknowledgments  of  incoming  TCP  segments are limited to those
  2816.  
  2817. sequence   numbers   which   fit   in   the    receive    window.
  2818.  
  2819. Acknowledgments  are  sent  as  soon  as  data is copied from the
  2820.  
  2821. system protocol buffers to the user protocol buffers.
  2822.  
  2823.  
  2824.  
  2825.  
  2826.  
  2827.  
  2828.  
  2829.                   -48-
  2830.  
  2831. IEN 167                                            Sax and Edmond
  2832.                          Bolt Beranek and Newman Inc.
  2833.                                     July 1980
  2834.  
  2835.  
  2836.  
  2837.      The initial retransmission algorithm  is  extremely  simple.
  2838.  
  2839. The  first retransmission of unacknowledged data occurs 3 seconds
  2840.  
  2841. after  the  original  transmission.   The  second  retransmission
  2842.  
  2843. occurs  6  seconds  after  the  first.   The third and successive
  2844.  
  2845. retransmissions   occur   15   seconds   after    the    previous
  2846.  
  2847. retransmissions.
  2848.  
  2849.  
  2850.  
  2851.  
  2852.  
  2853.  
  2854.  
  2855.  
  2856.  
  2857.  
  2858.  
  2859.  
  2860.  
  2861.  
  2862.  
  2863.  
  2864.  
  2865.  
  2866.  
  2867.  
  2868.  
  2869.  
  2870.  
  2871.  
  2872.  
  2873.  
  2874.  
  2875.  
  2876.  
  2877.  
  2878.  
  2879.  
  2880.  
  2881.  
  2882.  
  2883.  
  2884.  
  2885.  
  2886.  
  2887.  
  2888.                   -49-
  2889.  
  2890. IEN 167                                            Sax and Edmond
  2891.                          Bolt Beranek and Newman Inc.
  2892.                                     July 1980
  2893.  
  2894.  
  2895.  
  2896. 7  1822 Layer/INP Driver Communication
  2897.  
  2898.  
  2899.      Communication between the system protocol  process  and  the
  2900.  
  2901. INP  driver  is implemented with four intrinsics:  IOPEN, ICLOSE,
  2902.  
  2903. IREAD, and IWRITE.  These intrinsics are modified  forms  of  the
  2904.  
  2905. CS/3000  intrinsics.   Their  function is to open a connection to
  2906.  
  2907. the INP network processor and to transmit  data  buffers  to  and
  2908.  
  2909. from  the  INP.   The IREAD and IWRITE intrinsics are always done
  2910.  
  2911. without wait.  The IOWAIT intrinsic  is  used  to  determine  the
  2912.  
  2913. completion of an I/O request.
  2914.  
  2915.  
  2916.      Initialization of the INP interface  begins  with  an  IOPEN
  2917.  
  2918. call  which initializes the interface software.  This is followed
  2919.  
  2920. by four IREAD intrinsic calls to initialize buffers for  incoming
  2921.  
  2922. network  packets.   Four  pending  buffers  should  allow  enough
  2923.  
  2924. buffering to catch all of the incoming data without tying up  too
  2925.  
  2926. many network buffers.
  2927.  
  2928.  
  2929.      The  following  is  a  summary  of  the  commands  used   to
  2930.  
  2931. communicate between the protocol process and the INP driver.
  2932.  
  2933.  
  2934.      - IOPEN()
  2935.  
  2936.  
  2937.        returns error code on  failure.   Possible  failure  modes
  2938.  
  2939.        include failure to find the INP microcode file, failure to
  2940.  
  2941.        load the microcode file in the INP, and a hardware failure
  2942.  
  2943.        in the INP.
  2944.  
  2945.  
  2946.  
  2947.                   -50-
  2948.  
  2949. IEN 167                                            Sax and Edmond
  2950.                          Bolt Beranek and Newman Inc.
  2951.                                     July 1980
  2952.  
  2953.  
  2954.  
  2955.        This  command  initializes  the  connection  between   the
  2956.  
  2957.        protocol process and the INP.  The initialization includes
  2958.  
  2959.        activating the INP and loading its microcode.
  2960.  
  2961.  
  2962.      - ICLOSE()
  2963.  
  2964.  
  2965.        This command closes the connection between the INP and the
  2966.  
  2967.        protocol  process  when  the  network  software is brought
  2968.  
  2969.        down.
  2970.  
  2971.  
  2972.      - IREAD(buffer)
  2973.  
  2974.  
  2975.        This intrinsic passes an empty buffer to the  INP  driver.
  2976.  
  2977.        The  buffer  is  queued to a DIT with an ATTACHIO command.
  2978.  
  2979.        Control then returns to the protocol process.
  2980.  
  2981.  
  2982.      - IWRITE(buffer)
  2983.  
  2984.  
  2985.        This intrinsic passes a full buffer to the  INP  DIT  with
  2986.  
  2987.        the  ATTACHIO  command.   Control  is  returned  after the
  2988.  
  2989.        buffer is attached to the DIT.   The  buffer  is  released
  2990.  
  2991.        when  the calling process receives an interrupt indicating
  2992.  
  2993.        I/O completion.
  2994.  
  2995.  
  2996.  
  2997.  
  2998.  
  2999.  
  3000.  
  3001.  
  3002.  
  3003.  
  3004.  
  3005.  
  3006.                   -51-
  3007.  
  3008. IEN 167                                            Sax and Edmond
  3009.                          Bolt Beranek and Newman Inc.
  3010.                                     July 1980
  3011.  
  3012.  
  3013.  
  3014. 8  Protocol Software Buffering Scheme
  3015.  
  3016.  
  3017.      Data buffer management is the most  important  component  of
  3018.  
  3019. the  network  protocol  software.   Data  buffers perform the key
  3020.  
  3021. functions of data  storage  and  data  communication  within  the
  3022.  
  3023. protocol  software.  These functions have complex and conflicting
  3024.  
  3025. requirements which must be  balanced  by  the  buffer  management
  3026.  
  3027. scheme.    An  understanding  of  the  buffer  management  scheme
  3028.  
  3029. therefore begins with an understanding of its requirements.
  3030.  
  3031.  
  3032.      First, data buffers must be  considered  a  scarce  resource
  3033.  
  3034. shared  by  a number of competing "interests" within the protocol
  3035.  
  3036. software.  These "interests" include the various protocol  layers
  3037.  
  3038. as  well  as individual network connections within the TCP layer.
  3039.  
  3040. The major problem is how to effectively allocate buffer resources
  3041.  
  3042. among   these   interests.   This  problem  becomes  particularly
  3043.  
  3044. difficult when there is a shortage of buffers.
  3045.  
  3046.  
  3047.      An examination of the buffer requirements  shows  that  they
  3048.  
  3049. fall  into  two  categories.   The  first category includes those
  3050.  
  3051. buffers used to support general network functions.  This includes
  3052.  
  3053. buffers  used  in  the  1822 and Internet protocol layers.  These
  3054.  
  3055. buffers are assigned to move and store  data  in  these  protocol
  3056.  
  3057. layers  without  regard  to  particular network connections.  The
  3058.  
  3059. second category includes those buffers used by the  TCP  protocol
  3060.  
  3061. to support specific connections.
  3062.  
  3063.  
  3064.  
  3065.                   -52-
  3066.  
  3067. IEN 167                                            Sax and Edmond
  3068.                          Bolt Beranek and Newman Inc.
  3069.                                     July 1980
  3070.  
  3071.  
  3072.  
  3073.      The  distinction  between  the  two  buffer  categories   is
  3074.  
  3075. important  because  buffer use within each category is controlled
  3076.  
  3077. by a different set of events.  The use of buffers assigned to the
  3078.  
  3079. general  network  functions  can  be  controlled  by  the  system
  3080.  
  3081. protocol software.  Buffers are processed  through  the  Internet
  3082.  
  3083. and  1822  protocol layers without regard to the behavior of user
  3084.  
  3085. processes and their affect on  individual  connections.   Buffers
  3086.  
  3087. assigned  to the connection specific network functions in the TCP
  3088.  
  3089. and higher level protocol layers are greatly affected  by  events
  3090.  
  3091. which  occur  in  user  processes.   The  rate  at  which data is
  3092.  
  3093. accepted from or transmitted to the ARPANET by user processes  is
  3094.  
  3095. totally  unpredictable.  This unpredictability makes it difficult
  3096.  
  3097. for the system protocol  process  to  effectively  assign  buffer
  3098.  
  3099. resources to individual network connections.
  3100.  
  3101.  
  3102.      Two buffer  pools  are  used  to  separate  those  buffering
  3103.  
  3104. functions  shared  by all network connections from the connection
  3105.  
  3106. specific buffering functions.  A network buffer pool,  maintained
  3107.  
  3108. by  the  system protocol process, is used to support the 1822 and
  3109.  
  3110. Internet and some TCP buffering functions.  A user  buffer  pool,
  3111.  
  3112. maintained  by  each  user  protocol  process  is used to support
  3113.  
  3114. connection dependent buffering functions for the TCP  and  higher
  3115.  
  3116. level protocols.
  3117.  
  3118.  
  3119.  
  3120.  
  3121.  
  3122.  
  3123.  
  3124.                   -53-
  3125.  
  3126. IEN 167                                            Sax and Edmond
  3127.                          Bolt Beranek and Newman Inc.
  3128.                                     July 1980
  3129.  
  3130.  
  3131.  
  3132. 8.1  Network Buffer Pool
  3133.  
  3134.  
  3135.      The network buffer  pool  supports  the  following  specific
  3136.  
  3137. functions.
  3138.  
  3139.  
  3140.      - movement of network packets from the INP driver  1822  and
  3141.        Internet protocol layers;
  3142.  
  3143.      - storage of Internet datagram  fragments  in  the  Internet
  3144.        protocol layer;
  3145.  
  3146.      - storage of unacknowledged TCP segments which do  not  fall
  3147.        into the current window;
  3148.  
  3149.      - movement of network packets from the TCP layer through the
  3150.        Internet and 1822 layer to the INP driver.
  3151.  
  3152.  
  3153.      The network buffer pool is maintained on the system protocol
  3154.  
  3155. process  stack  where  it  can  be accessed easily by the various
  3156.  
  3157. system protocol layers.  All of the buffers in the pool  are  the
  3158.  
  3159. same  size  to minimize the amount of software overhead needed to
  3160.  
  3161. maintain the buffers.  The buffer size is matched to the  maximum
  3162.  
  3163. frame  size  (128  bytes)  which may be transmitted over the X.25
  3164.  
  3165. link between the INP and the ARPANET IMP.
  3166.  
  3167.  
  3168.      The size choice is the result of  two  constraints.   First,
  3169.  
  3170. the  buffers used to catch incoming data must be large enough for
  3171.  
  3172. the largest incoming network packet.  The packets are transferred
  3173.  
  3174. directly into memory by the INP hardware making it impossible for
  3175.  
  3176. a packet to cross buffer boundaries.   Second,  the  single  size
  3177.  
  3178. buffer  scheme  limits  the amount of software overhead needed to
  3179.  
  3180.  
  3181.  
  3182.  
  3183.                   -54-
  3184.  
  3185. IEN 167                                            Sax and Edmond
  3186.                          Bolt Beranek and Newman Inc.
  3187.                                     July 1980
  3188.  
  3189.  
  3190.  
  3191. maintain the buffer pool.
  3192.  
  3193.  
  3194.      The single size buffer scheme does not  waste  buffer  space
  3195.  
  3196. because  the  buffer  size  is  well  matched  with  the  data it
  3197.  
  3198. processes.  The 128 byte buffer size allows room for all  of  the
  3199.  
  3200. protocol  headers and a small amount of data.  Messages with more
  3201.  
  3202. data will use multiple buffers.  The buffers are large enough  to
  3203.  
  3204. hold  a  significant amount of data yet small enough to limit the
  3205.  
  3206. waste caused by partially filled buffers.
  3207.  
  3208.  
  3209.      No  attempt  is  made  to  assign  network  buffers  to  any
  3210.  
  3211. particular  protocol layer or task.  Buffers are allocated either
  3212.  
  3213. when data is read from the ARPANET or when the  TCP  layer  sends
  3214.  
  3215. data out to the ARPANET.
  3216.  
  3217.  
  3218.  
  3219.  
  3220. 8.1.1  Packet Compaction
  3221.  
  3222.  
  3223.      When the total number of network buffers in  the  free  list
  3224.  
  3225. falls  below a set value, a data compaction algorithm is invoked.
  3226.  
  3227. This algorithm searches for  partially  filled  buffers  used  to
  3228.  
  3229. store Internet datagram fragments and unacknowledged TCP segments
  3230.  
  3231. waiting to be transferred to a user process.  These  buffers  are
  3232.  
  3233. chosen  because  processing  of  the data in them is indefinitely
  3234.  
  3235. suspended.  Compaction of the data in these buffers  allows  some
  3236.  
  3237. of the buffers to be released to the free list.
  3238.  
  3239.  
  3240.  
  3241.  
  3242.                   -55-
  3243.  
  3244. IEN 167                                            Sax and Edmond
  3245.                          Bolt Beranek and Newman Inc.
  3246.                                     July 1980
  3247.  
  3248.  
  3249.  
  3250. 8.1.2  Buffer Recycling
  3251.  
  3252.  
  3253.      A buffer recycling algorithm  is  invoked  when  the  system
  3254.  
  3255. protocol process runs out of free network buffers.  The algorithm
  3256.  
  3257. allows buffers to be reused even if they currently contain  data.
  3258.  
  3259. The  mechanism  works  by  identifying  which data buffers can be
  3260.  
  3261. reused without losing irreplaceable information.   These  buffers
  3262.  
  3263. are  sorted in a priority scheme wallows the least important
  3264.  
  3265. buffers to  be  recycled  first.   The  buffer  recycling  scheme
  3266.  
  3267. prevents  one socket from tying up too much of the network buffer
  3268.  
  3269. resources.  It also helps assure a supply of network buffers even
  3270.  
  3271. under heavy load conditions.
  3272.  
  3273.  
  3274.      The buffer algorithm scheme  divides  network  buffers  into
  3275.  
  3276. three   categories:  free  buffers,  in-use  buffers,  and  aging
  3277.  
  3278. buffers.  Free buffers are available for  immediate  use  by  any
  3279.  
  3280. protocol  layer and are maintained on a common free list.  In-use
  3281.  
  3282. buffers are buffers bound to messages currently  being  processed
  3283.  
  3284. and cannot be used for any other purpose.  Aging buffers are used
  3285.  
  3286. in messages where processing  is  suspended  for  any  number  of
  3287.  
  3288. reasons.   These  buffers  are placed in one of two special lists
  3289.  
  3290. arranged in order of decreasing age.  That  is,  message  buffers
  3291.  
  3292. which  have been blocked for the longest time are at the front of
  3293.  
  3294. the queue, while the message buffers  which  were  most  recently
  3295.  
  3296. blocked are at the end of the queue.
  3297.  
  3298.  
  3299.  
  3300.  
  3301.                   -56-
  3302.  
  3303. IEN 167                                            Sax and Edmond
  3304.                          Bolt Beranek and Newman Inc.
  3305.                                     July 1980
  3306.  
  3307.  
  3308.  
  3309.      There are two points in the protocol software where messages
  3310.  
  3311. may  be  blocked.  The  first  point  is in the Internet Protocol
  3312.  
  3313. software.  Fragmented datagrams cannot be passed on  to  the  TCP
  3314.  
  3315. and  can  be blocked indefinitely if one or more of the fragments
  3316.  
  3317. which make up the datagram is lost.   A  duplicate  datagram  may
  3318.  
  3319. eventually  be  transmitted  leaving the fragmented datagram in a
  3320.  
  3321. suspended state.   The  second  blocking  point  is  in  the  TCP
  3322.  
  3323. software.   Unacknowledged segments sent by a foreign host remain
  3324.  
  3325. suspended in the TCP until they are transferred to a user process
  3326.  
  3327. buffer.  Any segments which are not transferred to a user process
  3328.  
  3329. will remain blocked indefinitely.
  3330.  
  3331.  
  3332.      Buffer recycling is implemented through buffer  aging  lists
  3333.  
  3334. which  are  adjuncts  to  the buffer free list.  When an incoming
  3335.  
  3336. message is blocked, its buffers are attached to the end of one of
  3337.  
  3338. two  aging  lists.   Buffers  bound  to  datagram  fragments  are
  3339.  
  3340. attached to one aging lists while buffers bound to  TCP  segments
  3341.  
  3342. waiting  to  be read by user processes are attached to the second
  3343.  
  3344. aging list.
  3345.  
  3346.  
  3347.      The aging lists are  periodically  manipulated  when  a  new
  3348.  
  3349. datagram  fragment  comes in or when a user process receives some
  3350.  
  3351. data from  the  TCP.   Buffers  associated  with  the  particular
  3352.  
  3353. datagram  fragments or TCP segments are moved to the end of their
  3354.  
  3355. respective aging lists.  This helps assure that  any  data  which
  3356.  
  3357.  
  3358.  
  3359.  
  3360.                   -57-
  3361.  
  3362. IEN 167                                            Sax and Edmond
  3363.                          Bolt Beranek and Newman Inc.
  3364.                                     July 1980
  3365.  
  3366.  
  3367.  
  3368. has a chance of being used will not be thrown away.
  3369.  
  3370.  
  3371.      The buffers bound to fragmented datagrams are recycled first
  3372.  
  3373. because  they  are the most expendable.  Blocked datagram buffers
  3374.  
  3375. may be a part of datagrams  which  have  been  retransmitted  and
  3376.  
  3377. passed  on  to  the  TCP.   When the blocked datagram buffers are
  3378.  
  3379. exhausted the buffers bound to blocked  TCP  segments  are  used.
  3380.  
  3381. These  buffers contain the unacknowledged segments which have not
  3382.  
  3383. been claimed by a user process.  The assumptions  here  are  that
  3384.  
  3385. the  user  process  will never claim these segments and that they
  3386.  
  3387. are expendable.
  3388.  
  3389.  
  3390.  
  3391.  
  3392. User Process Buffer Pool
  3393.  
  3394.  
  3395.      The user process is responsible for  maintaining  a  set  of
  3396.  
  3397. fixed  length buffers for passing the user data to the TCP.  Each
  3398.  
  3399. buffer must include a four byte header along  with  80  bytes  of
  3400.  
  3401. data space.
  3402.  
  3403.  
  3404.      The first element of the header is used  as  either  a  byte
  3405.  
  3406. count  or a full buffer marker.  The count is used by the TCPSEND
  3407.  
  3408. intrinsic to indicate the number of data  bytes  in  the  buffer.
  3409.  
  3410. The  TCPRECEIVE intrinsic uses the buffer full marker to identify
  3411.  
  3412. buffers which may be reclaimed by the user process.
  3413.  
  3414.  
  3415.  
  3416.  
  3417.  
  3418.  
  3419.                   -58-
  3420.  
  3421. IEN 167                                            Sax and Edmond
  3422.                          Bolt Beranek and Newman Inc.
  3423.                                     July 1980
  3424.  
  3425.  
  3426.  
  3427.      The second element in  the  array  header  contains  a  list
  3428.  
  3429. pointer.   This  pointer  is maintained by the intrinsic software
  3430.  
  3431. and should not be altered by the user process until the buffer is
  3432.  
  3433. released.
  3434.  
  3435.  
  3436.  
  3437.  
  3438.  
  3439.  
  3440.  
  3441.  
  3442.  
  3443.  
  3444.  
  3445.  
  3446.  
  3447.  
  3448.  
  3449.  
  3450.  
  3451.  
  3452.  
  3453.  
  3454.  
  3455.  
  3456.  
  3457.  
  3458.  
  3459.  
  3460.  
  3461.  
  3462.  
  3463.  
  3464.  
  3465.  
  3466.  
  3467.  
  3468.  
  3469.  
  3470.  
  3471.  
  3472.  
  3473.  
  3474.  
  3475.  
  3476.  
  3477.  
  3478.                   -59-
  3479.  
  3480. IEN 167                                            Sax and Edmond
  3481.                          Bolt Beranek and Newman Inc.
  3482.                                     July 1980
  3483.  
  3484.  
  3485.  
  3486. 9  Data Flow Through the Protocol Software
  3487.  
  3488.  
  3489.      Data flow through the protocol software is effected  through
  3490.  
  3491. a  series  of tests and function calls.  The tests check the type
  3492.  
  3493. and processing state of each  packet  while  the  function  calls
  3494.  
  3495. perform  specific  operations  on  each packet.  These operations
  3496.  
  3497. include such things as creating or checking headers and  queueing
  3498.  
  3499. or de-queueing packet buffers.
  3500.  
  3501.  
  3502.      Whenever possible, network packets are processed through all
  3503.  
  3504. of  the  system protocol layers without interruption.  This helps
  3505.  
  3506. increase  throughput  by  minimizing  two  important  parameters.
  3507.  
  3508. First,  the  amount  of  buffering  required  to  process data is
  3509.  
  3510. decreased because all network buffers associated  with  a  packet
  3511.  
  3512. are  released  when  the  packet  has passed through the protocol
  3513.  
  3514. software.  Second, the time between the receipt of a packet  from
  3515.  
  3516. the ARPANET and the transmission of an ACK is reduced.
  3517.  
  3518.  
  3519.      There are a number of instances when  the  processing  of  a
  3520.  
  3521. packet  can  be  interrupted  within the system protocol process.
  3522.  
  3523. This can occur when the lack of some resource or  event  prevents
  3524.  
  3525. further processing.  Examples of this are as follows:
  3526.  
  3527.  
  3528.      - Internet datagram fragments waiting for reassembly;
  3529.  
  3530.      - TCP segments from a foreign host waiting to be read  by  a
  3531.        user process;
  3532.  
  3533.      - TCP segments  from  a  user  process  waiting  for  window
  3534.  
  3535.  
  3536.  
  3537.                   -60-
  3538.  
  3539. IEN 167                                            Sax and Edmond
  3540.                          Bolt Beranek and Newman Inc.
  3541.                                     July 1980
  3542.  
  3543.  
  3544.  
  3545.        allocation before being transmitted to the ARPANET;
  3546.  
  3547.      - TCP segments from a  user  process  already  sent  to  the
  3548.        ARPANET but waiting for an acknowledgment.
  3549.  
  3550.  
  3551.  
  3552.  
  3553. 9.1  ARPANET to the User Level Data Flow
  3554.  
  3555.  
  3556.      Data packets come in from the network via a DMA interface to
  3557.  
  3558. the  INP  network  processor.  Incoming data is first transferred
  3559.  
  3560. into the protocol process via network buffers passed to the IREAD
  3561.  
  3562. intrinsic  which  places  a  read request on the DIT queue of the
  3563.  
  3564. INP.  An arriving network packet is placed in the network  buffer
  3565.  
  3566. by  the  INP  driver.  The system protocol process is notified of
  3567.  
  3568. each I/O completion through the IOWAIT intrinsic.
  3569.  
  3570.  
  3571.      Processing of network packets begins  when  an  IOWAIT  call
  3572.  
  3573. returns   on   completion  of  an  IREAD  intrinsic.   The  first
  3574.  
  3575. processing step is to link the network buffers which contain  the
  3576.  
  3577. pieces of an 1822 packet.
  3578.  
  3579.  
  3580.      The next processing steps are performed by the 1822 protocol
  3581.  
  3582. software.   If  this  is  a normal data packet the 1822 header is
  3583.  
  3584. removed and the data packet  is  passed  as  a  datagram  to  the
  3585.  
  3586. Internet Software.  The transfer is done by calling a sequence of
  3587.  
  3588. Internet protocol routines with the datagram as a parameter.
  3589.  
  3590.  
  3591.  
  3592.  
  3593.  
  3594.  
  3595.  
  3596.                   -61-
  3597.  
  3598. IEN 167                                            Sax and Edmond
  3599.                          Bolt Beranek and Newman Inc.
  3600.                                     July 1980
  3601.  
  3602.  
  3603.  
  3604.      The  Internet  software  checks  the  datagram  header   for
  3605.  
  3606. integrity  and  then  tries  to  find the proper address for this
  3607.  
  3608. datagram.  If the datagram is not for the local host it is routed
  3609.  
  3610. to  the  proper ARPANET Host and the network buffers are returned
  3611.  
  3612. to the free list.
  3613.  
  3614.  
  3615.      If the datagram is a fragment of a  larger  datagram  it  is
  3616.  
  3617. linked to any existing fragments waiting to be processed.  If the
  3618.  
  3619. new  fragment  does  not  complete  the  incoming  datagram,  the
  3620.  
  3621. fragment  is placed in an aging buffer queue next to the youngest
  3622.  
  3623. buffer in the partially complete datagram.   At  this  point  all
  3624.  
  3625. processing  on  the incoming datagram is suspended until the rest
  3626.  
  3627. of the datagram fragments arrive.
  3628.  
  3629.  
  3630.      A complete datagram is stripped of its Internet  header  and
  3631.  
  3632. sent  to  the TCP software as a data segment.  The TCP performs a
  3633.  
  3634. number of functions on  incoming  segments:   first  the  segment
  3635.  
  3636. header is checked to see if it belongs to a known socket -- if it
  3637.  
  3638. does, any acknowledgment information from the header is taken  to
  3639.  
  3640. update  the socket status; next, the segment is checked to see if
  3641.  
  3642. it falls within a window -- if it is not within the window (or  a
  3643.  
  3644. reasonable  approximation  thereof), the segment is discarded and
  3645.  
  3646. its buffers are returned to the free list.
  3647.  
  3648.  
  3649.      Accepted TCP segments are transferred into the user buffers.
  3650.  
  3651. The  transfer  is  initiated by the user process which provides a
  3652.  
  3653.  
  3654.  
  3655.                   -62-
  3656.  
  3657. IEN 167                                            Sax and Edmond
  3658.                          Bolt Beranek and Newman Inc.
  3659.                                     July 1980
  3660.  
  3661.  
  3662.  
  3663. buffer through the TCPOPEN or TCPRECEIVE  intrinsic.   A  command
  3664.  
  3665. message sent via the general input message file is used to inform
  3666.  
  3667. the system protocol process that  a  buffer  is  available.   The
  3668.  
  3669. system  protocol  process  transfers  as  much  of its segment as
  3670.  
  3671. possible to the user buffer.  The user process is  then  notified
  3672.  
  3673. of  the  data transfer via the connection's private message file.
  3674.  
  3675. Only the transferred portions of the segments are acknowledged to
  3676.  
  3677. the  foreign  host.  Any portions of segments which do not fit in
  3678.  
  3679. the receive window are stored in the TCP aging queue.
  3680.  
  3681.  
  3682.      The acknowledgment may be sent in a number of ways.  If  the
  3683.  
  3684. same  network  connection  has  an  outgoing  packet  waiting for
  3685.  
  3686. transmission, the acknowledgment  information  is  added  to  the
  3687.  
  3688. outgoing packet.  If there is no pending outgoing packet, a check
  3689.  
  3690. is made to see if there  is  sufficient  unacknowledged  data  to
  3691.  
  3692. warrant   an   acknowledgment   packet.    If   there  is  enough
  3693.  
  3694. information, a separate acknowledgment packet  is  generated  and
  3695.  
  3696. transmitted  out  to  the ARPANET as if it were a normal message.
  3697.  
  3698. If the number  of  unacknowledged  segments  is  insufficient  to
  3699.  
  3700. justify  an acknowledgment packet, the pending acknowledgment bit
  3701.  
  3702. in the TCB is set and a timer is started.  If the timer runs out,
  3703.  
  3704. an  acknowledgment  packet  is  sent  regardless of the number of
  3705.  
  3706. unacknowledged segments.
  3707.  
  3708.  
  3709.  
  3710.  
  3711.  
  3712.  
  3713.  
  3714.                   -63-
  3715.  
  3716. IEN 167                                            Sax and Edmond
  3717.                          Bolt Beranek and Newman Inc.
  3718.                                     July 1980
  3719.  
  3720.  
  3721.  
  3722. 9.2  User Level to the ARPANET Data Flow
  3723.  
  3724.  
  3725.      Transfer of data from the user process out  to  the  ARPANET
  3726.  
  3727. begins  with  a  NETSEND  intrinsic call.  The intrinsic software
  3728.  
  3729. sends a message to the system protocol process to inform it  that
  3730.  
  3731. it has data to send.  The system protocol process tests the state
  3732.  
  3733. of the connection to see if data transmission is  feasible.   The
  3734.  
  3735. following  are sufficient conditions for data transmission out to
  3736.  
  3737. the ARPANET:
  3738.  
  3739.  
  3740.      - enough data has collected to justify  transmitting  it  to
  3741.        the foreign host;
  3742.  
  3743.      - the  user  process  has  specified  an  EOL  in  the  data
  3744.        transmission;
  3745.  
  3746.      - there are  fewer  than  eight  outstanding  1822  protocol
  3747.        packets waiting for RFNMs to the foreign host;
  3748.  
  3749.      - the waiting data falls within the foreign host's window.
  3750.  
  3751.  
  3752.      If the state of the connection does not allow a transmission
  3753.  
  3754. to  occur,  a  request-to-send data flag is set in the connection
  3755.  
  3756. control block.  When the connection state  changes  due  to  some
  3757.  
  3758. external  event,  a  check is made to see if the new state allows
  3759.  
  3760. the transmission of waiting data.  An example of such an event is
  3761.  
  3762. the  arrival  of  a RFNM from a foreign host; in this case all of
  3763.  
  3764. the connections to the foreign host are checked for data  waiting
  3765.  
  3766. for  transmission.   The  connection  with  data  which  has been
  3767.  
  3768. waiting for the longest time is processed first.  An  attempt  is
  3769.  
  3770.  
  3771.  
  3772.  
  3773.                   -64-
  3774.  
  3775. IEN 167                                            Sax and Edmond
  3776.                          Bolt Beranek and Newman Inc.
  3777.                                     July 1980
  3778.  
  3779.  
  3780.  
  3781. made  to  combine as many of the waiting TCP segments as possible
  3782.  
  3783. into  one  data  transfer  to  increase  the   amount   of   data
  3784.  
  3785. transmitted.
  3786.  
  3787.  
  3788.      If there is nothing blocking transmission of the  data,  the
  3789.  
  3790. TCP  software  allocates  a  buffer,  creates  the necessary TCP,
  3791.  
  3792. Internet, and 1822 headers, and copies the data to be transmitted
  3793.  
  3794. from the user buffer to the system's buffer.  The TCP header will
  3795.  
  3796. include any acknowledgment information for data received  on  the
  3797.  
  3798. return socket associated with the connection.
  3799.  
  3800.  
  3801.      In order to assure proper transmission of the TCP segment  a
  3802.  
  3803. retransmission  sequence  is  started.  A retransmission timer is
  3804.  
  3805. started to wake up the protocol software when a retransmission is
  3806.  
  3807. needed.   If  a  timeout  occurs, the segment is retransmitted as
  3808.  
  3809. soon as the state of the connection  allows  it.   The  necessary
  3810.  
  3811. conditions  for  a  retransmission  are the same as those for the
  3812.  
  3813. original transmission.  If the segment is partially acknowledged,
  3814.  
  3815. the  data  left  in  the  retransmission  queue is only that data
  3816.  
  3817. represented by the unacknowledged sequence numbers.
  3818.  
  3819.  
  3820.  
  3821.  
  3822.  
  3823.  
  3824.  
  3825.  
  3826.  
  3827.  
  3828.  
  3829.  
  3830.  
  3831.  
  3832.                   -65-
  3833.  
  3834. IEN 167                                            Sax and Edmond
  3835.                          Bolt Beranek and Newman Inc.
  3836.                                     July 1980
  3837.  
  3838.  
  3839.  
  3840.            APPENDIX A - HP3000 to ARPANET Link
  3841.  
  3842.  
  3843.  
  3844.                       
  3845.       +----------+                      +----------+
  3846.       |          |---+              +---|          |
  3847.       |             | I |   X.25 LAP   |   |          |
  3848.       |  HP3000  | N |--------------|   |  C30 IMP |
  3849.       |          | P |              |   |          |
  3850.       |          |---+              +---|          |
  3851.       +----------+                      +----------+
  3852.                       
  3853.  
  3854.  
  3855.  
  3856.  
  3857.  
  3858.  
  3859.  
  3860.  
  3861.  
  3862.  
  3863.  
  3864.  
  3865.  
  3866.  
  3867.  
  3868.  
  3869.  
  3870.  
  3871.  
  3872.  
  3873.  
  3874.  
  3875.  
  3876.  
  3877.  
  3878.  
  3879.  
  3880.  
  3881.  
  3882.  
  3883.  
  3884.  
  3885.  
  3886.  
  3887.  
  3888.  
  3889.  
  3890.  
  3891.                   -66-
  3892.  
  3893. IEN 167                                            Sax and Edmond
  3894.                          Bolt Beranek and Newman Inc.
  3895.                                     July 1980
  3896.                                
  3897.          APPENDIX B - Protocol Software Organization
  3898.  
  3899.                             +---------+
  3900.                             |   MBB   |
  3901.                             +---+-+---+   
  3902.                         ^ |
  3903.                                  | v       
  3904.                              +---+-+---+   
  3905.                             |   INP   |   
  3906.                             +---------+   
  3907.                                 | Driver  |   
  3908.                                 +---+-+---+   
  3909.                         ^ |
  3910.                                     | v       
  3911.                                ,----+-+----,  
  3912.              High Priority    /  Device   /   
  3913.              User Mode       /Information/    
  3914.              Process        /    Table  /     
  3915.                            '----+-+----'      
  3916.                             ^ |
  3917.                              ATTACHIO
  3918.                             | v
  3919.                           +-----+-+----+                            
  3920.                           |    1822    |                              
  3921.                           |  -------   |           ,---------------, 
  3922.                           |  Internet  |--------->/ Transmission  /  
  3923.                           |  -------   |<--------/ Control Block /   
  3924.                           |    TCP     |        '---------------'    
  3925.                           +-+--+---+--++                            
  3926.                             ^  |   |  |
  3927.                     :  |   |  |
  3928.                    +--------:--+   |  +------------+                  
  3929.                |        :      |               |
  3930.                    |     ...:......|...............|....              
  3931.                |     :         |      :        |   :
  3932.                    v     :         v      :        v   :   
  3933.                +---+-----+---+  +--+------+-+   +--+---+--+
  3934.                |Server Telnet|  |User Telnet|   |User FTP |
  3935.                |  Program    |  |  Program  |   | Program |
  3936.                +-----+--+----+  +--+-+-+-+--+   +-+-+-+-+-+
  3937.                  ^  |          | | | |        | | | |
  3938.                      |  v          | | | |        | | | |
  3939.  Pseudo-TTY        ,-+--+-,         USERS          USERS
  3940.  Logical Devices  / PTY  /
  3941.  (one each user) '-+-+--'   
  3942.                ^ |                                                
  3943.                    | v                     
  3944.                  HP3000
  3945.            Command Interpreter
  3946.                                   ---- Private Message Files
  3947.                                   .... General Input Message File
  3948.                                 
  3949.  
  3950.                   -67-
  3951.  
  3952. IEN 167                                            Sax and Edmond
  3953.                          Bolt Beranek and Newman Inc.
  3954.                                     July 1980
  3955.  
  3956.  
  3957.  
  3958.              APPENDIX C - Control Structures
  3959.  
  3960.              _______________________________
  3961.              |POINTER TO BUFFER FREELIST   |
  3962.              |-----------------------------|
  3963.              |POINTER TO END OF FREELIST   |
  3964.              |-----------------------------|
  3965.              |FREE BUFFER COUNT            |
  3966.              |-----------------------------|
  3967.              |POINTER TO INTERNET AGE LIST |
  3968.              |-----------------------------|
  3969.              |POINTER TO END OF INTERNET   |
  3970.              |-----------------------------|
  3971.              |INTERNET AGE LIST COUNT      |
  3972.              |-----------------------------|
  3973.              |POINTER TO TCP AGE LIST      |
  3974.              |-----------------------------|
  3975.              |POINTER TO END OF TCP LIST   |
  3976.              |-----------------------------|
  3977.              |TCP AGE LIST BUFFER COUNT    |
  3978.              |-----------------------------|
  3979.  
  3980.              NETWORK RESOURCE CONTROL BLOCK
  3981.  
  3982.  
  3983.  
  3984.  
  3985.  
  3986.              _______________________________
  3987.              |HOST NUMBER                  |
  3988.              |-----------------------------|
  3989.              |NUMBER OF OUTSTANDING 1822   |
  3990.              |PACKETS WAITING FOR RFNMS    |
  3991.              |_____________________________|
  3992.  
  3993.           FOREIGN HOST CONTROL BLOCK
  3994.  
  3995.  
  3996.  
  3997.  
  3998.  
  3999.  
  4000.  
  4001.  
  4002.  
  4003.  
  4004.  
  4005.  
  4006.  
  4007.  
  4008.  
  4009.                   -68-
  4010.  
  4011. IEN 167                                            Sax and Edmond
  4012.                          Bolt Beranek and Newman Inc.
  4013.                                     July 1980
  4014.  
  4015.  
  4016.  
  4017.           _____________________
  4018.           | CONNECTION STATE  |
  4019.           |-------------------|
  4020.           | LOCAL PORT NUMBER |
  4021.           |-------------------|
  4022.           | TCP INTERFACE     |
  4023.           | CONTROL BLOCK NO. |
  4024.           |-------------------|
  4025.           |CONNECTION PRIVATE |
  4026.           |MESSAGE FILE ID    |
  4027.           --------------------|
  4028.  
  4029.              GENERAL INFORMATION SECTION
  4030.              OF THE CONNECTION CONTROL
  4031.              BLOCK
  4032.  
  4033.  
  4034.           _____________________
  4035.           |RECEIVE SEQUENCE   |
  4036.           |-------------------|
  4037.           |RECEIVE WINDOW     |
  4038.           |-------------------|
  4039.           |RECEIVE BUFF SIZE  |
  4040.           |-------------------|
  4041.           |RECEIVE URGENT PTR |
  4042.           |-------------------|
  4043.           |RECEIVE LAST BUFF  |
  4044.           |-------------------|
  4045.           |INITIAL RECEIVE    |
  4046.           |SEQUENCE NUMBER    |
  4047.           |-------------------|
  4048.           |PTR TO UN-ACKED TCP|
  4049.           | SEGMENTS          |
  4050.           |___________________|
  4051.  
  4052.              CONNECTION RECEIVE DATA
  4053.  
  4054.  
  4055.  
  4056.  
  4057.  
  4058.  
  4059.  
  4060.  
  4061.  
  4062.  
  4063.  
  4064.  
  4065.  
  4066.  
  4067.  
  4068.                   -69-
  4069.  
  4070. IEN 167                                            Sax and Edmond
  4071.                          Bolt Beranek and Newman Inc.
  4072.                                     July 1980
  4073.  
  4074.  
  4075.  
  4076.    _____________________
  4077.    |SEND UN-ACKED      |
  4078.    |-------------------|
  4079.    |SEND SEQUENCE      |
  4080.    |-------------------|
  4081.    |SEND WINDOW        |
  4082.    |-------------------|
  4083.    |SEND BUFFER SIZE   |
  4084.    |-------------------|
  4085.    |SEND URGENT PTR    |
  4086.    |-------------------|
  4087.    |SEND SEQUENCE FOR  |
  4088.    |LAST WINDOW UPDATE |
  4089.    |-------------------|
  4090.    |SEND LAST BUFFER   |
  4091.    |-------------------|
  4092.    |INITIAL SEND       |
  4093.    |SEQUENCE NUMBER    |
  4094.    |___________________|
  4095.  
  4096.    CONNECTION SEND DATA
  4097.  
  4098.  
  4099.  
  4100.  
  4101.  
  4102.  
  4103.  
  4104.  
  4105.  
  4106.  
  4107.  
  4108.  
  4109.  
  4110.  
  4111.  
  4112.  
  4113.  
  4114.  
  4115.  
  4116.  
  4117.  
  4118.  
  4119.  
  4120.  
  4121.  
  4122.  
  4123.  
  4124.  
  4125.  
  4126.  
  4127.                   -70-
  4128.  
  4129. IEN 167                                            Sax and Edmond
  4130.                          Bolt Beranek and Newman Inc.
  4131.                                     July 1980
  4132.  
  4133.  
  4134.  
  4135.                  ________________
  4136. FREEBUFFER QUEUE --->|NEXT BUFFER   |____
  4137.                  |--------------|   |
  4138.                  |              |   |
  4139.                  |______________|   |
  4140.                         |
  4141.               ______________________|
  4142.               |
  4143.               |  ________________
  4144.               -->|NEXT BUFFER   |____
  4145.                  |--------------|   |
  4146.                  |              |   |
  4147.                  |              |   |
  4148.                  |______________|   |
  4149.                         |
  4150.               ______________________|
  4151.               |
  4152.               |  ________________
  4153.               -->|NULL          |
  4154.                  |--------------|
  4155.                  |              |
  4156.                  |              |
  4157.                  |______________|
  4158.  
  4159.              NETWORK BUFFER FREELIST
  4160.  
  4161.  
  4162.  
  4163.  
  4164.  
  4165.  
  4166.  
  4167.  
  4168.  
  4169.  
  4170.  
  4171.  
  4172.  
  4173.  
  4174.  
  4175.  
  4176.  
  4177.  
  4178.  
  4179.  
  4180.  
  4181.  
  4182.  
  4183.  
  4184.  
  4185.  
  4186.                   -71-
  4187.  
  4188. IEN 167                                            Sax and Edmond
  4189.                          Bolt Beranek and Newman Inc.
  4190.                                     July 1980
  4191.  
  4192.  
  4193.  
  4194.            OLDEST DATAGRAM          SECOND OLDEST
  4195.            FRAGMENT                 DATAGRAM FRAGMENT
  4196. INTERNET   ________________         ________________
  4197. AGING  --->|NEXT DATAGRAM |-------->|NEXT DATAGRAM |-->  PTR TO
  4198. LIST       |--------------|         |--------------|     THIRD
  4199.            |NEXT BUFFER   |____     |NEXT BUFFER   |____ OLDEST
  4200.            |--------------|   |     |--------------|   |
  4201.            |______________|   |     |______________|   |
  4202.                   |                        |
  4203.         ______________________|   _____________________|
  4204.         |                         |
  4205.         |  ________________       |  _______________
  4206.         -->|NEXT BUFFER   |____   -->|NEXT BUFFER  |____
  4207.            |--------------|   |      |-------------|   |
  4208.            |              |   |      |             |   |
  4209.            |              |   |      |             |   |
  4210.            |______________|   |      |_____________|   |
  4211.                   |                        |
  4212.         ______________________|    ____________________|
  4213.         |                          |
  4214.         |  ________________        |  _______________
  4215.         -->|NULL          |        -->|NULL         |
  4216.            |--------------|           |-------------|
  4217.            |              |           |             |
  4218.            |              |           |             |
  4219.            |______________|           |_____________|
  4220.  
  4221.                  INTERNET AGING LIST
  4222.  
  4223.  
  4224.  
  4225.  
  4226.  
  4227.  
  4228.  
  4229.  
  4230.  
  4231.  
  4232.  
  4233.  
  4234.  
  4235.  
  4236.  
  4237.  
  4238.  
  4239.  
  4240.  
  4241.  
  4242.  
  4243.  
  4244.  
  4245.                   -72-
  4246.  
  4247. IEN 167                                            Sax and Edmond
  4248.                          Bolt Beranek and Newman Inc.
  4249.                                     July 1980
  4250.  
  4251.  
  4252.  
  4253.            CONNECTION 1             CONNECTION 2
  4254.            OLDEST UN-ACKED          SECOND OLDEST UN-ACKED
  4255.            SEGMENT BUFFERS          SEGMENT BUFFERS
  4256. TCP        ________________         ________________    PTR TO
  4257. AGING  --->|NEXT SEGMENT  |-------->|NEXT SEGMENT  |--> THIRD
  4258. LIST       |--------------|         |--------------|    OLDEST
  4259.            |NEXT BUFFER   |____     |NEXT BUFFER   |____
  4260.            |--------------|   |     |--------------|   |
  4261.            |______________|   |     |______________|   |
  4262.                   |                        |
  4263.         ______________________|   _____________________|
  4264.         |                         |
  4265.         |  ________________       |  _______________
  4266.         -->|NEXT BUFFER   |____   -->|NEXT BUFFER  |____
  4267.            |--------------|   |      |-------------|   |
  4268.            |              |   |      |             |   |
  4269.            |              |   |      |             |   |
  4270.            |______________|   |      |_____________|   |
  4271.                   |                        |
  4272.         ______________________|    ____________________|
  4273.         |                          |
  4274.         |  ________________        |  _______________
  4275.         -->|NULL          |        -->|NULL         |
  4276.            |--------------|           |-------------|
  4277.            |              |           |             |
  4278.            |              |           |             |
  4279.            |______________|           |_____________|
  4280.  
  4281.                TCP AGING LIST
  4282.  
  4283.  
  4284.  
  4285.  
  4286.  
  4287.  
  4288.  
  4289.  
  4290.  
  4291.  
  4292.  
  4293.  
  4294.  
  4295.  
  4296.  
  4297.  
  4298.  
  4299.  
  4300.  
  4301.  
  4302.  
  4303.  
  4304.                   -73-
  4305.  
  4306. IEN 167                                            Sax and Edmond
  4307.                          Bolt Beranek and Newman Inc.
  4308.                                     July 1980
  4309.  
  4310.  
  4311.  
  4312.           APPENDIX D - Command Message Formats
  4313.  
  4314.  
  4315. General Message Format
  4316.  
  4317.     _________________________
  4318.     | Command Type (2 bytes)|
  4319.     |_______________________|
  4320.     | TCP Interface Control |
  4321.     | Block No. (2 bytes)   |
  4322.     |_______________________|
  4323.     | Data  (10 bytes)      |
  4324.     |_______________________|
  4325.  
  4326.  
  4327. OPEN CONNECTION Data Area Format
  4328.  
  4329.     _________________________
  4330.     | Foreign Host Internet |
  4331.     | Address (4 bytes)     |
  4332.     |_______________________|
  4333.     | Foreign Port (2 bytes)|
  4334.     |_______________________|
  4335.     | Local Port (2 bytes)  |
  4336.     |_______________________|
  4337.     | Status Flag bits      |
  4338.     | (2 bytes)             |
  4339.     |_______________________|
  4340.  
  4341.  
  4342. SEND Command Data Area Format
  4343.  
  4344.     _________________________
  4345.     | Send Byte Count       |
  4346.     | (2 bytes)             |
  4347.     |_______________________|
  4348.  
  4349.  
  4350.  
  4351.  
  4352.  
  4353.  
  4354.  
  4355.  
  4356.  
  4357.  
  4358.  
  4359.  
  4360.  
  4361.  
  4362.  
  4363.                   -74-
  4364.  
  4365. IEN 167                                            Sax and Edmond
  4366.                          Bolt Beranek and Newman Inc.
  4367.                                     July 1980
  4368.  
  4369.  
  4370.  
  4371. Message File Command Codes
  4372.  
  4373.     ___________________________________________________
  4374.     |User To TCP Command | TCP to User Command | Code |
  4375.     |____________________|_____________________|______|
  4376.     | OPEN CONNECTION    |  OPENCONFIRM        |   0  |
  4377.     |____________________|_____________________|______|
  4378.     | CLOSE CONNECTION   |  NETCLOSE           |   1  |
  4379.     |____________________|_____________________|______|
  4380.     | ABORT CONNECTION   |  NETABORT           |   2  |
  4381.     |____________________|_____________________|______|
  4382.     | SEND               |  DATASENT           |   3  |
  4383.     |____________________|_____________________|______|
  4384.     | RECEIVE            |  PENDING RECEIVE    |   4  |
  4385.     |____________________|_____________________|______|
  4386.     | STATUS             |  STATUS COMPLETE    |   5  |
  4387.     |____________________|_____________________|______|
  4388.  
  4389.  
  4390.  
  4391.  
  4392.  
  4393.  
  4394.  
  4395.  
  4396.  
  4397.  
  4398.  
  4399.  
  4400.  
  4401.  
  4402.  
  4403.  
  4404.  
  4405.  
  4406.  
  4407.  
  4408.  
  4409.  
  4410.  
  4411.  
  4412.  
  4413.  
  4414.  
  4415.  
  4416.  
  4417.  
  4418.  
  4419.  
  4420.  
  4421.  
  4422.                   -75-
  4423.  
  4424. IEN 167                                            Sax and Edmond
  4425.                          Bolt Beranek and Newman Inc.
  4426.                                     July 1980
  4427.  
  4428.  
  4429.  
  4430.             APPENDIX E - TCP Interface Control Block
  4431.  
  4432.  
  4433.       GENERAL INFO SECTION OF THE
  4434.     TCP INTERFACE CONNECTION BLOCK
  4435.    +----------------------------+
  4436.    | TCP STATUS BUFFER PTR      |
  4437.    +----------------------------+
  4438.    | USER PROCESS STACK DATA    |
  4439.    | SEGMENT NUMBER             |
  4440.    +----------------------------+
  4441.    | SEND Side Open/Close flag) |
  4442.    +----------------------------+
  4443.    |RECEIVE Side Open/Close flag|
  4444.    +----------------------------+
  4445.  
  4446.  
  4447.        SEND PORTION OF THE TCP                  USER BUFFERS USED
  4448.       INTERFACE CONNECTION BLOCK                TO TRANSMIT DATA
  4449.                         TO THE TCP
  4450.    +----------------------------+              +--------------+
  4451.    | Ptr to First Free Buffer   |------------->| Data Count   |
  4452.    | (user buffer whose data    |              |(no data bytes|
  4453.    |  has been read by TCP      |              | in buffer)   |
  4454.    +----------------------------+              +--------------+
  4455.    | Ptr to Next Data Buffer    |              | Link to next |
  4456.    | (user buffer whose data    +-----+     +--+ Buffer       |
  4457.    |  not been read by TCP)     |     |     |  +--------------+
  4458.    +----------------------------+     |     |  | DATA         |
  4459.    | Ptr to first UnAcked byte  +---+ |     |  +--------------+
  4460.    +----------------------------+   | |     |
  4461.    | Offset in Next Data Buffer |   | |     |
  4462.    |(offset in next data buffer +-+-+ |     |
  4463.    | to first unread data byte) | | | |     |  +--------------+
  4464.    +----------------------------+ | | +--->-+->| Data Count   |
  4465.                       | |          +--------------+
  4466.                       | |       +--| LINK         |
  4467.                       | |       |  +--------------+
  4468.                       | +-------|->|              |
  4469.                       +-------->|->| DATA         |
  4470.                             |  +--------------+
  4471.                             |
  4472.                             |  +--------------+
  4473.                             +->| Data Count   |
  4474.                            +--------------+
  4475.                            | LINK         |
  4476.                            +--------------+
  4477.                            | DATA         |
  4478.                            +--------------+
  4479.  
  4480.  
  4481.                   -76-
  4482.  
  4483. IEN 167                                            Sax and Edmond
  4484.                          Bolt Beranek and Newman Inc.
  4485.                                     July 1980
  4486.  
  4487.  
  4488.  
  4489.       RECEIVE PORTION OF THE TCP                USER BUFFERS USED
  4490.       INTERFACE CONNECTION BLOCK                FROM THE TCP
  4491.       TO TRANSMIT DATA
  4492.    +----------------------------+              +--------------+
  4493.    | Ptr to First Filled Buffer |------------->|Full/Filling  |
  4494.    | (user buffer which has been|              |True indicates|
  4495.    |  filled by TCP)            |              |buffer is full|
  4496.    +----------------------------+              +--------------+
  4497.    | Ptr to Next Data byte to be|           +--+ Link to next |
  4498.    | read by user process       +-------+   |  | Buffer       |
  4499.    +----------------------------+       |   |  +--------------+
  4500.    | Ptr to First Partially Full|       |   |  | DATA         |
  4501.    | Buffer (buffer not yet     +-----+ +->-+->|              |
  4502.    |  filled by TCP)            |     |     |  +--------------+
  4503.    +----------------------------+     |     |
  4504.    | Offset in Partially Full   |     |     |
  4505.    | Buffer (next free byte for +--+  |     |
  4506.    |  TCP)                      |  |  |     |  +--------------+
  4507.    +----------------------------+  |  +-----+->| Full/Filling |
  4508.                        |           +--------------+
  4509.                        |        +--| LINK         |
  4510.                        |        |  +--------------+
  4511.                        +------->+->| DATA         |
  4512.                             |  +--------------+
  4513.                             |
  4514.                             |
  4515.                             |
  4516.                             |  +--------------+
  4517.                             +->| Full/Filling |
  4518.                            +--------------+
  4519.                            | LINK         |
  4520.                            +--------------+
  4521.                            | DATA         |
  4522.                            +--------------+
  4523.  
  4524.  
  4525.  
  4526.  
  4527.  
  4528.  
  4529.  
  4530.  
  4531.  
  4532.  
  4533.  
  4534.  
  4535.  
  4536.  
  4537.  
  4538.  
  4539.  
  4540.                   -77-
  4541.