This preview shows page 1. Sign up to view the full content.
Unformatted text preview: request is written.) By allowing the client
application to tell its TCP to set the flag, it was a notification to the client's TCP that the
client process didn't want the data to hang around in the TCP buffer, waiting for additional
data, before sending a segment to the server. Similarly, when the server's TCP received the
segment with the PUSH flag, it was a notification to pass the data to the server process and
not wait to see if any additional data arrives.
Today, however, most APIs don't provide a way for the application to tell its TCP to set the
PUSH flag. Indeed, many implementors feel the need for the PUSH flag is outdated, and a
good TCP implementation can determine when to set the flag by itself.
Most Berkeley-derived implementations automatically set the PUSH flag if the data in the
segment being sent empties the send buffer. This means we normally see the PUSH flag set
for each application write, because data is usually sent when it's written.
A comment in the code indicates this algorithm is to please those implementations that only pass received
data to the application when a buffer fills or a segment is received with the PUSH flag.
It is not possible using the sockets API to tell TCP to turn on the PUSH flag or to tell whether the PUSH
flag was set in received data. Berkeley-derived implementations ignore a received PUSH flag because they normally
never delay the delivery of received data to the application.
In Figure 20.1 we see the PUSH flag turned on for all eight data segments (4-6, 9, 11-13,
and 15). This is because the client did eight writes of 1024 bytes, and each write emptied the
Look again at Figure 20.7. We expect the PUSH flag to be set on segment 12, since that is
the final data segment. Why was the PUSH flag set on segment 7, when the sender knew
there were still more bytes to send? The reason is that the size of the sender's send buffer is
4096 bytes, even though we specified a single write of 8192 bytes. file:///D|/Documents%20and%20Settings/bigini/Docu...homenet2run/tcpip/tcp-ip-illustrated/tcp_bulk.htm (10 of 24) [12/09/2001 14.47.22] Chapter 20. TCP...
View Full Document
This test prep was uploaded on 04/04/2014 for the course ECE EL5373 taught by Professor Guoyang during the Spring '12 term at NYU Poly.
- Spring '12