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