Brief description of IIP-Mobile patch ------------------------------------- by Pasi Sarolahti, 5.4.2002, modified 19.6.2003: JS, TK. 'patch-2.4.18-frto-20020419' implements the TCP variants tested during the IWTCP projects in Univerity of Helsinki, Department of Computer Science. The primary purpose of the patch is to enable performance tests in an isolated network, thus it is not intended to be used in general networking. The code is very experimental in nature (read: not beautiful or easily maintainable), and there may be bugs. Some of the modifications, e.g. fixes on congestion window undoing on timestamps (Eifel), are submitted to Alexey Kuznetsov, but many of the modifications remain unsubmitted due to their incomplete state. They can be used for tests in closed network but not in a general Linux system. The TCP variants are controlled by sysctl options that can be found as entries in /proc/sys/net/ipv4. The descriptions below are very brief and assume prior knowledge about the Linux TCP implementation and TCP enhancements. The patch adds following TCP options: iip_rto_behaviour This option enables F-RTO, which may avoid some unnecessary retransmissions after spurious retransmission timeouts. Setting 1 means the conventional Linux RTO recovery, value 3 enables F-RTO. iip_srwnd_addr IIP Mobile project studied the effects of sharing the receiver's advertised window space between the connections under same host in order to avoid slow start overshooting in the beginning of the connection. Advertised window sharing is applied only for connections having peer address of 10.0.0.x, where the last octet x is placed in this variable. If this variable is 0, advertised window sharing is disabled. iip_srwnd_size Size of the shared advertised window. Applies only for connections from address specified above. iip_srwnd_min Each connection gets to advertise at least this much of window. Applies only for connections with shared advertised window. iip_srwnd_max An upper limit for advertised window size per each connection. Applies only for connections with shared advertised window. iip_cbi This option controls whether Linux destination cache is used for TCP variables. In IETF terms this is roughly equal to Control Block Interdependence (RFC 2140). (Values: 0 off, 1 on). Please see the notes! iip_ratehalving Linux implements Rate-halving algorithm explained in the Internet draft draft-ratehalving.txt by default. This option allows disabling it. (Values: 0 off, 1 on). iip_limitedxmit Controls whether Limited transmit explained in RFC 3042 is in use or not. (Values: 0 off, 1 on). iip_delack_mode Setting 1 uses a static delay of 200 ms for each ACK. Setting 2 uses the unmodified Linux algorithm for delayed ACKs, dynamically adjusting the ACK delay and using quick acknowledgements. iip_iw This option allows setting the TCP Initial Window size. Please see the notes! The standard Linux options: -------------------------- tcp_sack Enables SACK tcp_fack Enables Forward Acknowledgements, if SACK is in use. See below. tcp_dsack Enables D-SACK. Does not work very well in standard Linux, but with this patch it usually does. tcp_timestamps Enables TCP timestamps and with this patch the Eifel algorithm. Other points of note: ==================== - SACK behaviour is slightly modified for configuration having FACK disabled. The patch implements behaviour close to RFC 3517. The RFC has some additional precautions against reordering not included in the patch. - Behaviour with timestamps is equal to Eifel algorithm, which is slightly different of the original Linux algorithm (which does not undo congestion window if there are multiple consequtive RTOs) - If CBI is used the iip_iw setting is overriden. - This patch has issues with the PAWS checking if TCP Timestamps option is enabled. If first SYN-ACK of a connection is lost, the following retransmissions of the SYN-ACK are discarded, which causes the connection to fail.