Window Management Suggestions
Allocating a very small window causes data to be transmitted in many small segments when better performance is achieved using fewer large segments.
One suggestion for avoiding small windows is for the receiver to defer updating a window until the additional allocation is at least X percent of the maximum allocation possible for the connection (where X might be 20 to 40).
Another suggestion is for the sender to avoid sending smallsegments by waiting until the window is large enough before sending data. If the the user signals a push function then the data must be sent even if it is a small segment.
Note that the acknowledgments should not be delayed or unnecessary retransmissions will result. One strategy would be to send an acknowledgment when a small segment arrives (with out updating the window information), and then to send another acknowledgment with new window information when the window is larger.
The segment sent to probe a zero window may also begin a break up of transmitted data into smaller and smaller segments. If a segment containing a single data octet sent to probe a zero window is accepted, it consumes one octet of the window now available. If the sending TCP simply sends as much as it can whenever the window is non zero, the transmitted data will be broken into alternating big and small segments. As time goes on, occasional pauses in the receiver making window allocation available will
result in breaking the big segments into a small and not quite so big pair. And after a while the data transmission will be in mostly small segments.
The suggestion here is that the TCP implementations need to actively attempt to combine small window allocations into larger windows, since the mechanisms for managing the window tend to lead to many small windows in the simplest minded implementations.