Abstract
In the last couple of years, developers have started implementing more
complex features utilizing computer networks in interactive
applications, for example, advanced and large scale multiplayer modes
in games. In addition, we have seen applications using computer
communication in new ways, like IP telephony and video conference
systems. Due to their interactive nature, these applications have
strict latency requirements. Also, several of them have \textit{thin
stream} characteristics, meaning that they have very small bandwidth
requirements.
For applications to communicate over a computer network, they have to
use a transport protocol. The dominant ones today are TCP and UDP,
with TCP being preferred by the network because of the lack of
fairness mechanisms in UDP. Also, UDP is more likely to be blocked by
firewalls, and developers have to implement mechanisms that enforces
e.g., reliability when using UDP. Unfortunately, TCP and its
retransmission mechanisms are tuned for high-throughput streams
without any timeliness requirements, for example streams generated by
applications doing bulk data transfer. Interactive applications will
often suffer from unnecessary high latencies due to these mechanisms,
which can be devastating for the user experience.
To address the latency issues, we have developed a sender side TCP
modification that bundles potentially lost data into packets that are
to be sent or retransmitted. By doing this we hope to preempt the
experience of packet loss and improve the user experience. We have
implemented and tested this modification in the Linux kernel, and our
results show that we reduce the application latency by trading it
against bandwidth.