[fa.tcp-ip] TCP Testing

POSTEL@USC-ISIB.ARPA (10/03/85)

Hi:

Back in the olden days when TCP's were first being tested by those
"old network boys" of legend, there were a couple of events called
"TCP Bakeoff"s.  The first bakeoff was held at ISI with all the
implementers of different TCP in the same room (well actually a set of
offices on a common hall) -- all six of them.  The date of this event
escapes me just now.  The second bakeoff was held over the network in
the spring of 1980.  I've dug up the rules used in that bakeoff and
appended them below.  They may or may not be helpful in suggesting
some testing for current implementations of TCP.

--jon.




< INC-PROJECT, BAKEOFF.NLS.2, >, 8-Apr-80 22:12 JBP ;;;;


                           TCP & IP BAKE OFF
                           --- - -- ---- ---

This is the procedure for the distributed TCP & IP Bake Off.  Each
implementer of a TCP & IP is to perform the following tests and to
report the results.  You are on the honor system.  I will try to figure
out some way of presenting the results.  The testing period is from now
through 27 April.  All results must be reported via sndmsg to LINDA@ISIE
by midnight (Pacific time) on Monday 28 April.

Scoring

   Note that 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  points for talking to yourself (opening a connection)

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

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

      2  point for a 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)

      4  points for a 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 rubber baby buffer bumpers in
         both directions (End of Letter sequence number adjustments)

      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 EOL 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 do not meet 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 source route option

      10 points for doing return route option

      10 points for using quench messages

      10 points for using routing advice messages

      5  points for doing something with the type of service

      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

      5  points for showing that a gateway forwards datagrams with the
         time to live equal zero

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

   Bonus Points

      10 point 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

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.

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

      user telnet--->TCP--->TCP--->server telnet
                                       !
                                       V
      server telnet<---TCP<---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 (e.g.,
       TTYTST at TENEX), 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
       letters of various sizes, use urgent occasionally.

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

*** end ***
-------