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

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7. Network Working Group                                       J. Ioannidis Request for Comments:  1235                              G. Maguire, Jr.                                                      Columbia University                                           Department of Computer Science                                                                June 1991 
  8.  
  9.                  The Coherent File Distribution Protocol 
  10.  
  11. Status of this Memo 
  12.  
  13.    This memo describes the Coherent File Distribution Protocol (CFDP).    This is an Experimental Protocol for the Internet community.    Discussion and suggestions for improvement are requested.  Please    refer to the current edition of the "IAB Official Protocol Standards"    for the standardization state and status of this protocol.    Distribution of this memo is unlimited. 
  14.  
  15. Introduction 
  16.  
  17.    The Coherent File Distribution Protocol (CFDP) has been designed to    speed up one-to-many file transfer operations that exhibit traffic    coherence on media with broadcast capability.  Examples of such    coherent file transfers are identical diskless workstations booting    simultaneously, software upgrades being distributed to more than one    machines at a site, a certain "object" (bitmap, graph, plain text,    etc.) that is being discussed in a real-time electronic conference or    class being sent to all participants, and so on. 
  18.  
  19.    In all these cases, we have a limited number of servers, usually only    one, and <n> clients (where <n> can be large) that are being sent the    same file.  If these files are sent via multiple one-to-one    transfers, the load on both the server and the network is greatly    increased, as the same data are sent <n> times. 
  20.  
  21.    We propose a file distribution protocol that takes advantage of the    broadcast nature of the communications medium (e.g., fiber, ethernet,    packet radio) to drastically reduce the time needed for file transfer    and the impact on the file server and the network.  While this    protocol was developed to allow the simultaneous booting of diskless    workstations over our experimental packet-radio network, it can be    used in any situation where coherent transfers take place. 
  22.  
  23.    CFDP was originally designed as a back-end protocol; a front-end    interface (to convert file names and requests for them to file    handles) is still needed, but a number of existing protocols can be    adapted to use with CFDP.  Two such reference applications have been    developed; one is for diskless booting of workstations, a simplified 
  24.  
  25.  
  26.  
  27. Ioannidis & Maguire, Jr.                                        [Page 1] 
  28.  RFC 1235                          CFDP                         June 1991 
  29.  
  30.     BOOTP [3] daemon (which we call sbootpd) and a simple, TFTP-like    front end (which we call vtftp).  In addition, our CFDP server has    been extended to provide this front-end interface.  We do not    consider this front-end part of the CFDP protocol, however, we    present it in this document to provide a complete example. 
  31.  
  32.    The two clients and the CFDP server are available as reference    implementations for anonymous ftp from the site CS.COLUMBIA.EDU    (128.59.16.20) in directory pub/cfdp/.  Also, a companion document    ("BOOTP extensions to support CFDP") lists the "vendor extensions"    for BOOTP (a-la RFC-1084 [4]) that apply here. 
  33.  
  34. Overview 
  35.  
  36.    CFDP is implemented as a protocol on top of UDP [5], but it can be    implemented on top of any protocol that supports broadcast datagrams.    Moreover, when IP multicast [6] implementations become more    widespread, it would make more sense to use a multicast address to    distribute CFDP packets, in order to reduce the overhead of non-    participating machines. 
  37.  
  38.    A CFDP client that wants to receive a file first contacts a server to    acquire a "ticket" for the file in question.  This server could be a    suitably modified BOOTP server, the equivalent of the tftpd daemon,    etc. The server responds with a 32-bit ticket that will be used in    the actual file transfers, the block size sent with each packet    (which we shall call "BLKSZ" from now on), and the size (in bytes) of    the file being transferred ("FILSZ").  BLKSZ should be a power of    two.  A good value for BLKSZ is 512. This way the total packet size    (IPheader+UDPheader+CFDPheader+data=20+8+12+512=552), is kept well    under the magic number 576, the minimum MTU for IP networks [7].    Note that this choice of BLKSZ supports transfers of files that are    up to 32 Mbytes in size.  At this point, the client should allocate    enough buffer space (in memory, or on disk) so that received packets    can be placed directly where they belong, in a way similar to the    NetBLT protocol [8]. 
  39.  
  40.    It is assumed that the CFDP server will also be informed about the    ticket so that it can respond to requests.  This can be done, for    example, by having the CFDP server and the ticket server keep the    table of ticket-to-filename mappings in shared memory, or having the    CFDP server listening on a socket for this information.  To reduce    overhead, it is recommended that the CFDP server be the same process    as the front-end (ticket) server. 
  41.  
  42.    After the client has received the ticket for the file, it starts    listening for (broadcast) packets with the same ticket, that may    exist due to an in-progress transfer of the same file.  If it cannot 
  43.  
  44.  
  45.  
  46. Ioannidis & Maguire, Jr.                                        [Page 2] 
  47.  RFC 1235                          CFDP                         June 1991 
  48.  
  49.     detect any traffic, it sends to the CFDP server a request to start    transmitting the whole file.  The server then sends the entire file    in small, equal-sized packets consisting of the ticket, the packet    sequence number, the actual length of data in this packet (equal to    BLKSZ, except for the last packet in the transfer), a 32-bit    checksum, and the BLKSZ bytes of data.  Upon receipt of each packet,    the client checksums it, marks the corresponding block as received    and places its contents in the appropriate place in the local file.    If the client does not receive any packets within a timeout period,    it sends to the CFDP server a request indicating which packets it has    not yet received, and then goes back to the receiving mode.  This    process is repeated until the client has received all blocks of the    file. 
  50.  
  51.    The CFDP server accepts requests for an entire file ("full" file    requests, "FULREQ"s), or requests for a set of BLKSZ blocks    ("partial" file requests, "PARREQ"s).  In the first case, the server    subsequently broadcasts the entire file, whereas in the second it    only broadcasts the blocks requested.  If a FULREQ or a PARREQ    arrives while a transfer (of the same file) is in progress, the    requests are ignored.  When the server has sent all the requested    packets, it returns to its idle state. 
  52.  
  53.    The CFDP server listens for requests on UDP/IP port "cfdpsrv". The    clients accept packets on UDP/IP port "cfdpcln" (both to be defined    by the site administrator), and this is the destination of the    server's broadcasts.  Those two port numbers are sent to the client    with the initial handshake packet, along with the ticket.  If the    minimal ticket server is implemented as described later in this    document, it is recommended (for interoperability reasons) that it    listens for requests on UDP/IP port 120 ("cfdptkt"). 
  54.  
  55.    Let us now examine the protocol in more detail. 
  56.  
  57. Protocol Specification 
  58.  
  59.  Initial Handshake (not strictly part of the protocol): 
  60.  
  61.    The client must acquire a ticket for the file it wishes to transfer,    and the CFDP server should be informed of the ticket/filename    mapping.  Again, this can be done inside a BOOTP server, a modified    TFTP server, etc., or it can be part of the CFDP server itself.  We    present here a suggested protocol for this phase. 
  62.  
  63.    The client sends a "Request Ticket" (REQTKT) request to the CFDP    Ticket server, using UDP port "cfdptkt".  If the address of the    server is unknown, the packet can be sent to the local broadcast    address.  Figure 1 shows the format of this packet. 
  64.  
  65.  
  66.  
  67. Ioannidis & Maguire, Jr.                                        [Page 3] 
  68.  RFC 1235                          CFDP                         June 1991 
  69.  
  70.         0                   1                   2                   3        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+       |      'R'      |      'Q'      |      'T'      |      'K'      |       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+       |                                                               |       /                                                               /       \     Filename, null-terminated, up to 512 octets               \       /                                                               /       |                                                               |       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
  71.  
  72.                        Fig. 1: "ReQuest TicKet" packet. 
  73.  
  74.    The filename is limited to 512 octets.  This should not cause a    problem in most, if not all, cases. 
  75.  
  76.    The ticket server replies with a "This is Your Ticket" (TIYT) packet    containing the ticket.  Figure 2 shows the format of this packet. 
  77.  
  78.        0                   1                   2                   3        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+       |      'T'      |      'I'      |      'Y'      |      'T'      |       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+       |                           "ticket"                            |       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+       |                       BLKSZ (by default 512)                  |       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+       |                             FILSZ                             |       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+       |            IP address of CFDP server (network order)          |       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+       |   client UDP port# (cfdpcln)  |   server UDP port# (cfdpsrv)  |       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
  79.  
  80.                     Fig. 2: "This Is Your Ticket" packet. 
  81.  
  82.    The reply is sent to the UDP port that the RQTK request came from.    The IP address of the CFDP server is provided because the original    handshake server is not necessarily on the same machine as the ticket    server, let alone the same process.  Similarly, the cfdpcln and    cfdpsrv port numbers (in network order) are communicated to the    client.  If the client does not use this ticket server, but rather    uses BOOTP or something else, that other server should be responsible    for providing the values of cfdpcln and cfdpsrv.  The ticket server    also communicates this ticket/filename/filesize to the real CFDP    server.  It is recommended that the ticket requests be handled by the 
  83.  
  84.  
  85.  
  86. Ioannidis & Maguire, Jr.                                        [Page 4] 
  87.  RFC 1235                          CFDP                         June 1991 
  88.  
  89.     regular CFDP server, in which case informing the CFDP server of the    ticket/filename binding is trivial (as it is internal to the    process). 
  90.  
  91.    Once the client has received the ticket for the filename it has    requested, the file distribution can proceed. 
  92.  
  93.  Client Protocol: 
  94.  
  95.    Once the ticket has been established, the client starts listening for    broadcast packets on the cfdpcln/udp port that have the same "ticket"    as the one it is interested in.  In the state diagram below, the    client is in the CLSTART state.  If the client can detect no packets    with that ticket within a specified timeout period, "TOUT-1", it    assumes that no transfer is in progress.  It then sends a FULREQ    packet (see discussion above) to the CFDP server, asking it to start    transmitting the file, and goes back to the CLSTART state (so that it    can time out again if the FULREQ packet is lost).  Figure 3 shows the    format of the FULREQ packet. 
  96.  
  97.        0                   1                   2                   3        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+       |                           "ticket"                            |       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+       |                           checksum                            |       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+       |      'F'      |       0       |         length == 0           |       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
  98.  
  99.                   Fig. 3: FULREQ (FULl file REQuest) packet. 
  100.  
  101.    When the first packet arrives, the client moves to the RXING state    and starts processing packets.  Figure 4 shows the format of a data    packet. 
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  Ioannidis & Maguire, Jr.                                        [Page 5] 
  118.  RFC 1235                          CFDP                         June 1991 
  119.  
  120.         0                   1                   2                   3        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+       |                           "ticket"                            |       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+       |                           checksum                            |       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+       |          block number         |          data length          |       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+       |                                                               |       /                                                               /       \      up to BLKSZ octets of data                               \       /                                                               /       |                                                               |       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
  121.  
  122.                              Fig. 4: Data Packet 
  123.  
  124.    The format is self-explanatory.  "Block number" the offset (in    multiples of BLKSZ) from the beginning of the file, data length is    always BLKSZ except for the very last packet, where it can be less    than that, and the rest is data. 
  125.  
  126.    As each packet arrives, the client verifies the checksum and places    the data in the appropriate position in the file.  While the file is    incomplete and packets keep arriving, the client stays in the RXING    state, processing them.  If the client does not receive any packets    within a specified period of time, "TOUT-2", it times out and moves    to the INCMPLT state.  There, it determines which packets have not    yet been received and transmits a PARREQ request to the server.  This    request consists of as many block numbers as will fit in the data    area of a data packet.  If one such request is not enough to request    all missing packets, more will be requested when the server has    finished sending this batch and the client times out.  Also, if the    client has sent a PARREQ and has not received any data packets within    a timeout period, "TOUT-3", it retransmits the same PARREQ.  Figure 5    shows the format of the PARtial REQuest packet. 
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139.  
  140.  Ioannidis & Maguire, Jr.                                        [Page 6] 
  141.  RFC 1235                          CFDP                         June 1991 
  142.  
  143.         0                   1                   2                   3        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+       |                           "ticket"                            |       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+       |                           checksum                            |       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+       |      'P'      |       0       |      data length (2*N)        |       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+       |           Block #0            |           Block #1            |       |           Block #2            |           Block #3            |       /                                                               /       \      data  (block numbers requested)                          \       /                                                               /       |           Block #N-2          |           Block #N-1          |       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
  144.  
  145.                 Fig. 5: PARREQ (PARtial file REQuest) packet. 
  146.  
  147.    When all packets have been received the client enters the CLEND state    and stops listening. 
  148.  
  149.    Figure 6 summarizes the client's operations in a state diagram. 
  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.  
  175.  
  176.  
  177.  Ioannidis & Maguire, Jr.                                        [Page 7] 
  178.  RFC 1235                          CFDP                         June 1991 
  179.  
  180.                             +-----------+                            |  CLSTART  |                            |           | <---.                            |   send    |     | timeout TOUT-1                            |  FULREQ   | ----'                            |           |                            +-----------+                                  |              received packet     | received packet       .-----------------------.  |       |                       V  V      +---------+             +---------+      | INCMPLT |             |  RXING  |      |         |   timeout   |         | <---.      |  send   |<------------| process |     | received packet      | PARREQ  |    TOUT-2   | packet  | ----'      |         |             |         |      +---------+             +---------+         ^   |                     |         |   |                     |finished         `---'                     |        timeout                    V         TOUT-3               +---------+                              |  CLEND  |                              +---------+ 
  181.  
  182.                 Fig. 6: Client State Transition Diagram 
  183.  
  184.  Server Protocol: 
  185.  
  186.    As described above, the CFDP server accepts two kinds of requests: a    request for a full file transfer, "FULREQ", and a request for a    partial (some blocks only) file transfer, "PARREQ".  For the first,    it is instructed to start sending out the contents of a file.  For    the second, it will only send out the requested blocks.  The server    should know at all times which files correspond to which "tickets",    and handle them appropriately.  Note that this may run into    implementation limits on some Unix systems (e.g., on older systems, a    process could only have 20 files open at any one time), but that    should not normally pose a problem. 
  187.  
  188.    The server is initially in the SIDLE state, idling (see diagram    below).  When it receives a FULREQ packet, it goes to the FULSND    state, whence it broadcasts the entire contents of the file whose    ticket was specified in the FULREQ packet.  When it is done, it goes    back to the SIDLE state. When it receives a PARREQ packet, it goes to    the PARSND state and broadcasts the blocks specified in the PARREQ    packet. When it has finished processing the block request, it goes 
  189.  
  190.  
  191.  
  192. Ioannidis & Maguire, Jr.                                        [Page 8] 
  193.  RFC 1235                          CFDP                         June 1991 
  194.  
  195.     once again back to the SIDLE state. 
  196.  
  197.                      receive    +-------+    receive                 .---------------| SIDLE |---------------.                 |    FULREQ     +-------+     PARREQ    |                 |                 ^   ^                 |                 |                 |   |                 |                 V                 |   |                 V             +--------+            |   |            +--------+             | FULSND |            |   |            | PARSND |             |        |    done    |   |    done    |        |             |  send  |------------'   `------------|  send  |             | entire |                             | req'ed |             |  file  |                             | blocks |             +--------+                             +--------+ 
  198.  
  199.                 Fig. 7: Server State Transition Diagram 
  200.  
  201. Packet Formats 
  202.  
  203.    The structure of the packets has been already described.  In all    packet formats, numbers are assumed to be in network order ("big-    endian"), including the ticket and the checksum. 
  204.  
  205.    The checksum is the two's complement of the unsigned 32-bit sum with    no end-around-carry (to facilitate implementation) of the rest of the    packet.  Thus, to compute the checksum, the sender sets that field to    zero and adds the contents of the packet including the header.  The    it takes the two's complement of that sum and uses it as the    checksum.  Similarly, the receiver just adds the entire contents of    the packet, ignoring overflows, and the result should be zero. 
  206.  
  207. Tuneable Parameters: Packet Size, Delays and Timeouts 
  208.  
  209.    It is recommended that the packet size be less than the minimum MTU    on the connected network where the file transfers are taking place.    We want this so that there be no fragmentation; one UDP packet should    correspond to one hardware packet.  It is further recommended that    the packet size be a power of two, so that offsets into the file can    be computed from the block number by a simple logical shift    operation.  Also, it is usually the case that page-aligned transfers    are faster on machines with a paged address space.  Small packet    sizes are inefficient, since the header will be a larger fraction of    the packet, and packets larger than the MTU will be fragmented.  A    good selection for BLKSZ is 512 or 1024. Using that BLKSZ, one can    transfer files up to 32MB or 64MB respectively (since the limit is    the 16-bit packet sequence number).  This is adequate for all but    copying complete disks, and it allows twice as many packets to be 
  210.  
  211.  
  212.  
  213. Ioannidis & Maguire, Jr.                                        [Page 9] 
  214.  RFC 1235                          CFDP                         June 1991 
  215.  
  216.     requested in a PARREQ request than if the sequence number were 32    bits.  If larger files must be transferred, they could be treated as    multiple logical files, each with a size of 32MB (or 64MB). 
  217.  
  218.    Since most UDP/IP implementations do not buffer enough UDP datagrams,    the server should not transmit packets faster than its clients can    consume them.  Since this is a one-to-many transfer, it is not    desirable to use flow-control to ensure that the server does not    overrun the clients.  Rather, we insert a small delay between packets    transmitted.  A good estimate of the proper delay between two    successive packets is twice the amount of time it takes for the    interface to transmit a packet.  On Unix implementations, the ping    program can be used to provide an estimate of this, by specifying the    same packet length on the command line as the expected CFDP packet    length (usually 524 bytes). 
  219.  
  220.    The timeouts for the client are harder to compute. While there is a    provision for the three timeouts (TOUT-1, TOUT-2 and TOUT-3) to be    different, there is no compelling reason not to make them the same.    Experimentally, we have determined that a timeout of 6-8 times the    transfer time for a packet works best.  A timeout of less than that    runs the risk of mistaking a transient network problem for a timeout,    and more than that delays the transfer too much. 
  221.  
  222. Summary 
  223.  
  224.    To summarize, here is the timeline of a sample file distribution    using CFDP to three clients.  Here we request a file with eight    blocks.  States are capitalized, requests are preceded with a '<'    sign, replies are followed by a '>' sign, block numbers are preceded    with a '#' sign, and actions are in parentheses: 
  225.  
  226. SERVER       CLIENT1     CLIENT-2      CLIENT-3      comments 
  227.  
  228. IDLE                                                everybody idle              CLSTART                                CL1 wants a file              <TKRQ                                  requests ticket TIYT>                                               server replies              (timeout)                              listens for traffic              <FULREQ                                full request #0           RXING                                  CL1 starts receiving              (rx 0) #1           (rx 1)      CLSTART                    CL2 decides to join                          <TKRQ #2           (rx 2)                                 SRV still sending TIYT>                                               responds to TKRQ #3           (rx 3)      (listens)                  CL2 listens                          RXING                      found traffic 
  229.  
  230.  
  231.  
  232. Ioannidis & Maguire, Jr.                                       [Page 10] 
  233.  RFC 1235                          CFDP                         June 1991 
  234.  
  235.  #4           (rx 4)      (rx 4)        CLSTART      CL3 joins in                                        <TKRQ #5           (missed)    (rx 5)                     CL1 missed a packet TIYT>                                  (listens) #6           (rx 6)      (rx 6)        RXING        CL3 found traffic 
  236.  
  237. #7           (rx 7)      (rx 7)        (rx 7)       Server finished IDLE              (wait)      (wait)        (wait)       CL1 managed to              (timeout)   (wait)        (wait)       timeout              <PARREQ[5]  (timeout)     (timeout)    CL1 blockrequests... #5           (rx 5)      <PARREQ[0123] <PARREQ[0123456] ignored by SRV              CLEND                                  CL1 has all packets IDLE                     (wait)        (wait)       CL2+3 missed #5                          (timeout)     (timeout)                          <PARREQ[0123] <PARREQ[0123456] CL2's req gets #0                       (rx 0)        (rx 0)       through, CL3 ignored #1                       (rx 1)        (rx 1)       moving along #2                       (rx 2)        (rx 2) #3                       (rx 3)        (rx 3) IDLE                     CLEND         (wait)       CL2 finished                                        (timeout)                                        <PARREQ[456] #4                                     (rx 4) #5                                     (rx 5) #5                                     (rx 6) IDLE                                   CLEND        CL3 finished 
  238.  
  239. References 
  240.  
  241.    [1] Sollins, K., "The TFTP Protocol (Revision 2)", RFC 783, MIT, June        1981. 
  242.  
  243.    [2] Finlayson, R., "Bootstrap Loading Using TFTP", RFC 906, Stanford,        June 1984. 
  244.  
  245.    [3] Croft, W., and J. Gilmore, "Bootstrap Protocol", RFC 951,        Stanford and SUN Microsystems, September 1985. 
  246.  
  247.    [4] Reynolds, J., "BOOTP Vendor Information Extensions", RFC 1084,        USC/Information Sciences Institute, December 1988. 
  248.  
  249.    [5] Postel, J., "User Datagram Protocol", RFC 768, USC/Information        Sciences Institute, August 1980. 
  250.  
  251.    [6] Deering, S., "Host Extensions for IP Multicasting", RFC 1112,        Stanford University, August 1989. 
  252.  
  253.  
  254.  
  255.  Ioannidis & Maguire, Jr.                                       [Page 11] 
  256.  RFC 1235                          CFDP                         June 1991 
  257.  
  258.     [7] Postel, J., "Internet Protocol - DARPA Internet Program Protocol        Specification", RFC 791, DARPA, September 1981. 
  259.  
  260.    [8] Clark, D., Lambert, M., and L. Zhang, "NETBLT: A Bulk Data        Transfer Protocol", RFC 998, MIT, March 1987. 
  261.  
  262. Security Considerations 
  263.  
  264.    Security issues are not discussed in this memo. 
  265.  
  266. Authors' Addresses 
  267.  
  268.    John Ioannidis    Columbia University    Department of Computer Science    450 Computer Science    New York, NY 10027 
  269.  
  270.    EMail:  ji@cs.columbia.edu 
  271.  
  272.     Gerald Q. Maguire, Jr.    Columbia University    Department of Computer Science    450 Computer Science    New York, NY 10027 
  273.  
  274.    Phone:  (212) 854-2736 
  275.  
  276.    EMail:  maguire@cs.columbia.edu 
  277.  
  278.  
  279.  
  280.  
  281.  
  282.  
  283.  
  284.  
  285.  
  286.  
  287.  
  288.  
  289.  
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298. Ioannidis & Maguire, Jr.                                       [Page 12] 
  299.  
  300.