1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 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 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669
|
<pre>Network Working Group J. Ioannidis
Request for Comments: 1235 G. Maguire, Jr.
Columbia University
Department of Computer Science
June 1991
<span class="h1">The Coherent File Distribution Protocol</span>
Status of this Memo
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.
Introduction
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.
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.
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.
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
<span class="grey">Ioannidis & Maguire, Jr. [Page 1]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-2" ></span>
<span class="grey"><a href="./rfc1235">RFC 1235</a> CFDP June 1991</span>
BOOTP [<a href="#ref-3" title=""Bootstrap Protocol"">3</a>] 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.
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 <a href="./rfc1084">RFC-1084</a> [<a href="#ref-4" title=""BOOTP Vendor Information Extensions"">4</a>]) that apply here.
Overview
CFDP is implemented as a protocol on top of UDP [<a href="#ref-5" title=""User Datagram Protocol"">5</a>], but it can be
implemented on top of any protocol that supports broadcast datagrams.
Moreover, when IP multicast [<a href="#ref-6" title=""Host Extensions for IP Multicasting"">6</a>] 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.
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 [<a href="#ref-7" title=""Internet Protocol - DARPA Internet Program Protocol Specification"">7</a>].
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 [<a href="#ref-8" title=""NETBLT: A Bulk Data Transfer Protocol"">8</a>].
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.
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
<span class="grey">Ioannidis & Maguire, Jr. [Page 2]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-3" ></span>
<span class="grey"><a href="./rfc1235">RFC 1235</a> CFDP June 1991</span>
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.
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.
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").
Let us now examine the protocol in more detail.
Protocol Specification
Initial Handshake (not strictly part of the protocol):
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.
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.
<span class="grey">Ioannidis & Maguire, Jr. [Page 3]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-4" ></span>
<span class="grey"><a href="./rfc1235">RFC 1235</a> CFDP June 1991</span>
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 \
/ /
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Fig. 1: "ReQuest TicKet" packet.
The filename is limited to 512 octets. This should not cause a
problem in most, if not all, cases.
The ticket server replies with a "This is Your Ticket" (TIYT) packet
containing the ticket. Figure 2 shows the format of this packet.
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) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Fig. 2: "This Is Your Ticket" packet.
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
<span class="grey">Ioannidis & Maguire, Jr. [Page 4]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-5" ></span>
<span class="grey"><a href="./rfc1235">RFC 1235</a> CFDP June 1991</span>
regular CFDP server, in which case informing the CFDP server of the
ticket/filename binding is trivial (as it is internal to the
process).
Once the client has received the ticket for the filename it has
requested, the file distribution can proceed.
Client Protocol:
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.
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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Fig. 3: FULREQ (FULl file REQuest) packet.
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.
<span class="grey">Ioannidis & Maguire, Jr. [Page 5]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-6" ></span>
<span class="grey"><a href="./rfc1235">RFC 1235</a> CFDP June 1991</span>
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 \
/ /
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Fig. 4: Data Packet
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.
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.
<span class="grey">Ioannidis & Maguire, Jr. [Page 6]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-7" ></span>
<span class="grey"><a href="./rfc1235">RFC 1235</a> CFDP June 1991</span>
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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Fig. 5: PARREQ (PARtial file REQuest) packet.
When all packets have been received the client enters the CLEND state
and stops listening.
Figure 6 summarizes the client's operations in a state diagram.
<span class="grey">Ioannidis & Maguire, Jr. [Page 7]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-8" ></span>
<span class="grey"><a href="./rfc1235">RFC 1235</a> CFDP June 1991</span>
+-----------+
| 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 |
+---------+
Fig. 6: Client State Transition Diagram
Server Protocol:
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.
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
<span class="grey">Ioannidis & Maguire, Jr. [Page 8]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-9" ></span>
<span class="grey"><a href="./rfc1235">RFC 1235</a> CFDP June 1991</span>
once again back to the SIDLE state.
receive +-------+ receive
.---------------| SIDLE |---------------.
| FULREQ +-------+ PARREQ |
| ^ ^ |
| | | |
V | | V
+--------+ | | +--------+
| FULSND | | | | PARSND |
| | done | | done | |
| send |------------' `------------| send |
| entire | | req'ed |
| file | | blocks |
+--------+ +--------+
Fig. 7: Server State Transition Diagram
Packet Formats
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.
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.
Tuneable Parameters: Packet Size, Delays and Timeouts
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
<span class="grey">Ioannidis & Maguire, Jr. [Page 9]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-10" ></span>
<span class="grey"><a href="./rfc1235">RFC 1235</a> CFDP June 1991</span>
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).
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).
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.
Summary
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:
SERVER CLIENT1 CLIENT-2 CLIENT-3 comments
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
<span class="grey">Ioannidis & Maguire, Jr. [Page 10]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-11" ></span>
<span class="grey"><a href="./rfc1235">RFC 1235</a> CFDP June 1991</span>
#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
#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
References
[<a id="ref-1">1</a>] Sollins, K., "The TFTP Protocol (Revision 2)", <a href="./rfc783">RFC 783</a>, MIT, June
1981.
[<a id="ref-2">2</a>] Finlayson, R., "Bootstrap Loading Using TFTP", <a href="./rfc906">RFC 906</a>, Stanford,
June 1984.
[<a id="ref-3">3</a>] Croft, W., and J. Gilmore, "Bootstrap Protocol", <a href="./rfc951">RFC 951</a>,
Stanford and SUN Microsystems, September 1985.
[<a id="ref-4">4</a>] Reynolds, J., "BOOTP Vendor Information Extensions", <a href="./rfc1084">RFC 1084</a>,
USC/Information Sciences Institute, December 1988.
[<a id="ref-5">5</a>] Postel, J., "User Datagram Protocol", <a href="./rfc768">RFC 768</a>, USC/Information
Sciences Institute, August 1980.
[<a id="ref-6">6</a>] Deering, S., "Host Extensions for IP Multicasting", <a href="./rfc1112">RFC 1112</a>,
Stanford University, August 1989.
<span class="grey">Ioannidis & Maguire, Jr. [Page 11]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-12" ></span>
<span class="grey"><a href="./rfc1235">RFC 1235</a> CFDP June 1991</span>
[<a id="ref-7">7</a>] Postel, J., "Internet Protocol - DARPA Internet Program Protocol
Specification", <a href="./rfc791">RFC 791</a>, DARPA, September 1981.
[<a id="ref-8">8</a>] Clark, D., Lambert, M., and L. Zhang, "NETBLT: A Bulk Data
Transfer Protocol", <a href="./rfc998">RFC 998</a>, MIT, March 1987.
Security Considerations
Security issues are not discussed in this memo.
Authors' Addresses
John Ioannidis
Columbia University
Department of Computer Science
450 Computer Science
New York, NY 10027
EMail: ji@cs.columbia.edu
Gerald Q. Maguire, Jr.
Columbia University
Department of Computer Science
450 Computer Science
New York, NY 10027
Phone: (212) 854-2736
EMail: maguire@cs.columbia.edu
Ioannidis & Maguire, Jr. [Page 12]
</pre>
|