[comp.protocols.tcp-ip] Proper handling of TCP PUSH by sender?

hascall@cs.iastate.edu (John Hascall) (02/12/90)

   Hi!

      I am working on a TCP implementation and have a question about
   the proper handling of PUSH by the sender which doesn't seem to
   be addressed (at least clearly) in any RFC I can find.   I would
   greatly appreciate any information anyone might have.

      Say you have two chunks of data (chunk1 and chunk2) from the user
   and chunk1 was PUSHed but chunk2 was not.  These two chunks have been
   held for whatever reason (window closed, unACKed data, whatever).
      Now, however, you are clear to send, I see three cases (associated
   with three different window sizes) and I am unsure what is the "right"
   thing to do in any of them.


         3 3 3 3 3 3 3 3 3 3 4 4|4 4 4 4 4 4 4 4 5 5 5     (example sequence
         0 1 2 3 4 5 6 7 8 9 0 1|2 3 4 5 6 7 8 9 0 1 2      number space)
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |         chunk1        |        chunk2       |
        +-+-+-+-+-+-+-+-+-+-+-+p+-+-+-+-+-+-+-+-+-+-+-+

 case 1 |<--window--->|
 case 2 |<----------window----------->|
 case 3 |<--------------------window--------------------->|
     

    Case 1:  do I hold off, waiting for a bigger window?  (deadlock?)
             do I send what I can?                        (efficiency?)

    Case 2:  do I hold off, waiting for a bigger window?  (doesn't seem right)
             do I send only chunk1 (setting PUSH)         (my current guess)
             do I send all I can (setting PUSH)           (too much pushed?)

    Case 3:  do I send only chunk1 (setting PUSH)         (correct?)
             do I send it all (setting PUSH)              (too much pushed?)


Thanks for any help, pointers, references you might have,
John Hascall  /  Iowa State Univ  /  hascall@atanasoff.cs.iastate.edu