A Comparison of Mechanisms for Improving TCP Performance over Wireless Links

H. Balakrishnan, V. Padmanabhan, S. Seshan, R. H. Katz, “A Comparison of Mechanisms for Improving TCP Performance over Wireless Links,” IEEE/ACM Transactions on Networking, (December 1997). [PDF]


Unlike wired networks, congestion is not the only source of packet loss in wireless networks. Networks with wireless and lossy links also suffer from significant losses due to bit errors and handoffs. This paper performs an in-depth examination of the applicability of different mechanisms to improve TCP performance over wireless links in LAN and WAN environments.

The authors observe that there are two different approaches to improving TCP performance in such lossy systems:

  • Hide non-congestion-related losses from the TCP sender, so that no changes are required in the existing TCP implementations. In this approach, transport layer remains unaware of the losses due to link characteristics.
  • Make senders aware of lossy links so that senders do not invoke congestion control algorithms when losses are due to link characteristics. However, differentiating different types of losses is a hard problem in both cases.
  • In addition, a hybrid of the two (wireless-aware transport layer coexisting with link layer schemes) can also be used.

This paper classifies the many schemes into three basic groups based on their underlying philosophy:

  1. End-to-end proposals: These protocols try to handle losses through the use of Selective ACKs (SACKs) and Explicit Loss Notification (ELNs). Two types of SACK-related proposals are considered: standard SACK, which contain ACK for three recent non-contagious blocks, and SMART, which contain cumulative ACK and the sequence number of the packet that caused the SACK.
  2. Split-connection proposals: In this case, end-to-end connection is broken into two, one wireless (to the base station) and the other wired (from the base station to other end). Split connection protocols suffer from several problems:
    • Wired part is bottlenecked by the wireless part;
    • Processing twice at the base station;
    • End-to-end TCP semantics is broken;
    • Large number of states in the intermediate point.
  3. Link-layer proposals: These protocols hide link-related losses from the transport layer by using local retransmissions and forward error correction (FEC). TCP-aware link layer proposals are also considered to avoid timer mismatch between two layers and to avoid TCP’s duplicate ACKs causing retransmissions.

From the experiments, this paper provides the following conclusions:

  • A reliable link layer protocol that is also TCP-aware (to shield duplicate ACKs) gives a 10-30% higher throughput than TCP-unaware link layer protocol. In general, TCP-aware link layer protocol with SACK (SMART) turned out to be the best mechanism.
  • Split-connection-based proposals are not comparable to TCP-aware link layer combo.
  • SACK-based schemes are very useful in the presence of lossy links, specially for bursty losses.
  • End-to-end schemes, while not as good as the better options, can be considered since they require no changes to the intermediate nodes. ELN scheme improves throughput by more than a factor of two over TCP-Reno.


The authors have done a great job in comparing a large number of algorithms and covered a full spectrum of possible solutions for improving TCP performance over wireless links. They also pointed out several issues with SACKs and ELN for general case. One thing seemed missing though: this paper shows advantages of using SACKs as well as ELNs separately; what about the performance characteristics of using SACK and ELN together? Since they had both of those implemented, why did they not test them together (even though they mentioned they ought to) leaves a question mark.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>