We make two basic design modifications in TCP for the purpose of better throughput when connected to mobile hosts. The changes at the source side is to ensure that the source can distinguish between congestion in the fixed network and noise in the wireless link as the cause for packet loss. The changes in the receiving side (the wireless host) is to ensure that in case packets are dropped due to noise in the wireless channel, the source starts to re-transmit packets earlier than its timeout deadline, for which it normally waits.
When a TCP connection is to be opened between a fixed host on a network and a wireless host, it opens two independent connections - one to the base station and the other to the mobile host. The call setup functionality is left unchanged as is in original TCP. The connection between the source and the base station basically serves as a control, to estimate the network congestion that occurs between the two ends. With the assumption that the mobile host receives all packets through the base station, we expect that packets on both these connections should be routed by almost the same route. and would see the same network congestion.
Packets on the control connection are sent at some regular interval, but at rates sufficiently low so as to not cause too much overhead in the network because of these control packets. The TCP source will also be sending packets on the connection with the mobile host as the application hands down packets to it. By comparing the fraction of the packets that are acknowledged within the timeout on the two connections the source will determine if there is congestion in the network which is causing packets to be lost, or is it the channel noise. If the acknowledged fraction is significantly different in the two cases, then the conclusion is that the channel noise is causing the packet loss. In this situation, the source will be prevented from reducing the congestion window size, and it will continue its linear increment at the same rate. If the two fractions are the same, then the normal congestion control mechanisms are allowed to proceed as it would in ordinary TCP.
At the wireless host side, to pre-empt the source to re-send packets that are lost due to the channel noise (or even otherwise), we employ the technique of fast re-transmissions [9]. The source on seeing a duplicate acknowledgement decides that its previous packet sent have been lost or corrupted. Hence, it re-transmits the subsequent packet even before the timer expires and re-starts the timer. On sending a packet the source at time , it waits upto time ( ) before recognizing another duplicate acknowledgement for a subsequent re-transmission. The need to await for at least the sRTT time is to ensure that these new re-transmissions had a chance to reach the destination before another re-transmission is done.
Also, to ensure that the duplicate acknowledgements manage to get through the wireless channel even under poor channel quality, the wireless host sends multiple duplicate acknowledgements on receiving a new packet at time . This period extends from the time a new packet is received upto time ( ) more. Any acknowledgements sent after this time will reach around the timeout period, and the source will automatically re-transmit after that, and so further acknowledgements are wasted.
If no further packets are received upto ( ), further automatic acknowledgements are made upto time ( ). Hence, it absence of further packets being received, automatic acknowledgements are sent in regular intervals in the periods [( ), ( )], where is the time when the last packet was received by the wireless host. The value is reset each time a new packet is received.
The wireless host continuously receives the values of timeout and sRTT from the source, since it needs the estimation of the source for both these values to figure out its re-transmission period.