summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc1025.txt
blob: 70e87283345f230aa1857de4814adb31914bae4e (plain) (blame)
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
Network Working Group                                          J. Postel
Request for Comments: 1025                                           ISI
                                                          September 1987


                          TCP AND IP BAKE OFF


Status of This Memo

   This memo describes some of the procedures, scoring, and tests used
   in the TCP and IP bake offs held in the early development of these
   protocols.  These procedures and tests may still be of use in testing
   newly implemented TCP and IP modules.  Distribution of this memo is
   unlimited.

Introduction

   In the early days of the development of TCP and IP, when there were
   very few implementations and the specifications were still evolving,
   the only way to determine if an implementation was "correct" was to
   test it against other implementations and argue that the results
   showed your own implementation to have done the right thing.  These
   tests and discussions could, in those early days, as likely change
   the specification as change the implementation.

   There were a few times when this testing was focused, bringing
   together all known implementations and running through a set of tests
   in hopes of demonstrating the N squared connectivity and correct
   implementation of the various tricky cases.  These events were called
   "Bake Offs".

   An early version of the list of tests included here appears in IEN-69
   of October 1978.  A demonstration of four TCP implementations was
   held at the Defense Communication Engineering Center in Reston,
   Virginia on 4 December 1978, and reported in IEN-70 of December 1978.
   A bake off of six implementations was held 27-28 January 1979 at
   USC-Information Sciences Institute in Marina del Rey, California and
   reported in IEN-77 of February 1979.  And a distributed bake off was
   held in April 1980 over the network and reported in IEN-145 of May
   1980.

   The following section reproduces (with very slight editing) the
   procedure, tests, and scoring of the April 1980 Bake Off.







Postel                                                          [Page 1]
^L
RFC 1025                  TCP and IP Bake Off             September 1987


Procedure

   This is the procedure for the TCP and IP Bake Off.  Each implementor
   of a TCP and IP is to perform the following tests and to report the
   results.  In general, this is done by using a test program or user
   Telnet program to open connections to your own or other TCP
   implementations.

   Some test are made more interesting by the use of a "flakeway".  A
   flakeway is a purposely flakey gateway.  It should have control
   parameters that can be adjusted while it is running to specify a
   percentage of datagrams to be dropped, a percentage of datagrams to
   be corrupted and passed on, and a percentage of datagrams to be
   reordered so that they arrive in a different order than sent.

   Many of the following apply for each distinct TCP contacted (for
   example, in the Middleweight Division there is a possibility of 20
   points for each other TCP in the Bake Off).

   Note Bene: Checksums must be enforced.  No points will be awarded if
   the checksum test is disabled.

      Featherweight Division

         1 point for talking to yourself (opening a connection).

         1 point for saying something to yourself (sending and receiving
         data).

         1 point for gracefully ending the conversation (closing the
         connection without crashing).

         2 points for repeating the above without reinitializing the
         TCP.

         5 points for a complete conversation via the testing gateway.

      Middleweight Division

         2 points for talking to someone else (opening a connection).

         2 points for saying something to someone else (sending and
         receiving data).

         2 points for gracefully ending the conversation (closing the
         connection without crashing).





Postel                                                          [Page 2]
^L
RFC 1025                  TCP and IP Bake Off             September 1987


         4 points for repeating the above without reinitializing the
         TCP.

         10 points for a complete conversation via the testing gateway.

      Heavyweight Division

         10 points for being able to talk to more than one other TCP at
         the same time (multiple connections open and active
         simultaneously with different TCPs).

         10 points for correctly handling urgent data.

         10 points for correctly handling sequence number wraparound.

         10 points for correctly being able to process a "Kamikaze"
         packet (AKA nastygram, christmas tree packet, lamp test
         segment, et al.).  That is, correctly handle a segment with the
         maximum combination of features at once (e.g., a SYN URG PUSH
         FIN segment with options and data).

         30 points for KOing your opponent with legal blows.  (That is,
         operate a connection until one TCP or the other crashes, the
         surviving TCP has KOed the other.  Legal blows are segments
         that meet the requirements of the specification.)

         20 points for KOing your opponent with dirty blows.  (Dirty
         blows are segments that violate the requirements of the
         specification.)

         10 points for showing your opponents checksum test is faulty or
         disabled.

      Host & Gateway IP Division

         25 points for doing fragmentation and reassembly.

         15 points for doing loose source route option.

         15 points for doing strict source route option.

         10 points for doing return route option.

         10 points for using source quench messages.

         10 points for using routing advice messages.

         5 points for doing something with the type of service.



Postel                                                          [Page 3]
^L
RFC 1025                  TCP and IP Bake Off             September 1987


         5 points for doing something with the security option.

         5 points for doing something with the timestamp option.

         5 points for showing that a gateway forwards datagrams without
         decreasing the time to live (showing a gateway is faulty).

         5 points for showing that a gateway forwards datagrams with the
         time to live equal zero (showing a gateway is faulty).

         10 points for showing that a gateway or hosts checksum test is
         faulty or disabled (showing a gateway is faulty).

      Bonus Points

         10 points for the best excuse.

         20 points for the fewest excuses.

         30 points for the longest conversation.

         40 points for the most simultaneous connections.

         50 points for the most simultaneous connections with distinct
         TCPs.

   Tests

      The following tests have been identified for checking the
      capabilities of a TCP implementation.  These may be useful in
      attempting to KO an opponent.

         1.  Single connection.  Open & close a single connection many
             times.

         2.  Multi connections.  Open several connections
             simultaneously.  Two connections to the same socket
             (i.e., a-b and a-c) check proper separation of data.

         3.  Half Open Connection.  Open a connection, crash local TCP
             and attempt to open same connection again.










Postel                                                          [Page 4]
^L
RFC 1025                  TCP and IP Bake Off             September 1987


         4.  Piggy-back Loop.  Open connections via Telnet.

         user telnet--->TCP--->IP--->net--->IP--->TCP--->server telnet
                                                               |
                                                               V
         server telnet<---TCP<---IP<---net<---IP<---TCP<---user telnet
              |
              V
         user telnet--->...

         5.  Maximum connections.  Open connections between a pair of
             TCP until refused or worse.

         6.  Refused connection.  Open a connection to a non-accepting
             socket, does it get refused?

         7.  Zero Window.  Try to send data to a TCP that is presenting
             a zero window.

         8.  Fire Hose.  Make many connections to data source ports, or
             connections to a data sink and send as fast as you can.

         9.  Urgent Test.  Try to send data to a user program that only
             receives data when in urgent mode.

         10. Kamikazi Segment.  Send and receive nastygrams.  A
             nastygram is a segment with SYN, EOL, URG, and FIN on and
             carrying one octet of data.

         11. Sequence Wraparound.  Test proper functioning when sequence
             numbers (a) pass 2**31 (i.e., go from plus to "minus") and
             (b) pass 2**32 (i.e., go from 2**32-1 to 0).

         12. Buffer size.  With buffer size not equal to one, send data
             in segments of various sizes, use urgent occasionally.

         13. Send a nastygram into a half open connection when the
             sequence number is about to wrap around.













Postel                                                          [Page 5]
^L
RFC 1025                  TCP and IP Bake Off             September 1987


New Ideas

   The above tests check for basic operation and handling of some of the
   tricky cases.  They do not consider performance in any way, or check
   to see if some of the recently developed ideas have been implemented.

      New Mechanisms

         1.  The John Nagel Procedures (RFC-896).

         2.  The Van Jacobson Procedures (slow start, RTT measurements,
             etc).

         3.  The SQuID Procedures (RFC-1016).

      Performance Tests

         Performance tests are difficult to specify because the results
         depend so much on the state of the environment of the test.
         Here are a few possibilities:

         1.  FTP Throughput:  Send a 1 megabyte file to a locally nearby
             machine on an Ethernet measuring the elapsed time.

         2.  FTP Throughput:  Send a 1 megabyte file to a locally nearby
             machine on an ARPANET measuring the elapsed time.

         3.  NETBLT Throughput:  Send a 1 megabyte file to a locally
             nearby machine on an Ethernet measuring the elapsed time.

         4.  NETBLT Throughput:  Send a 1 megabyte file to a locally
             nearby machine on an ARPANET measuring the elapsed time.

         5.  Character Test:  Use a test program to send a character via
             TCP to the Echo Server (RFC-862), time the round trip (from
             the time the character is sent until the echo is returned
             to the test program).

Appendix

   For History Buffs Only:

      The following item was in the original 1980 tests, but has been
      moved to this appendix since it no longer applies.

         10 points for correctly handling rubber baby buffer bumpers in
         both directions (End of Letter sequence number adjustments).




Postel                                                          [Page 6]
^L