Path: utzoo!attcan!uunet!deimos!dino!cs.iastate.edu!hascall From: hascall@cs.iastate.edu (John Hascall) Newsgroups: comp.protocols.tcp-ip Subject: Proper handling of TCP PUSH by sender? Message-ID: <568@dino.cs.iastate.edu> Date: 12 Feb 90 14:37:23 GMT Sender: news@dino.cs.iastate.edu Organization: Iowa State Univ. Computation Center Lines: 40 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