The options field in the TCP header

The TCP segment has an options field that consists of 0 or more 32-bit words and provides a way to deal with limitations of the original header. Here are some ways in which the options field is used:

1) The MSS (Maximum Segment Size) is defined as the largest block of data that a sender using TCP will send to the receiver. When a connection is initiated a SYN segment is sent (discussed in class), in the process of sending a SYN segment, the sender has the option of announcing its MSS. If a sender doesn’t use the options field to declare the MSS then TCP assumes a default of 536bytes (minus the 20 byte TCP header).

2) For lines with high bandwidth, high delay or high bandwidth-delay product 64KB is not enough to keep the sender busy all the time. Consider a T3 line (44.736 Mbps) – it would take 12msec to spew the entire 64KB worth of data. Assuming that the round trip delay is 50ms, the sender will be idle ¾ (38/50 = 0.76) of the time waiting for acknowledgements. The situation is much worse for satellite communications. Having a larger window would permit larger spewage, but we are naturally limited by the 64KB window size. In RFC 1323, the use of the options field is proposed permitting the use of a window scale factor. This scale factor permits shifting the window size up to 14 bits to the left therefore permitting window sizes of up to 2(16+14) = 230 bytes.

Here is what the options field would look like:

The first figure above shows the end of option list identified by kind = 0. The second is the MSS option. In all cases above, len is the total length in bytes of the option. So for example in the third figure, the length is 3 bytes, it is of kind 3 indicating a window scale factor will be in the third byte. The window scale is entered as a shift, i.e., a value of 1 indicates a shift of 1.