3 research outputs found
Beyond socket options: making the Linux TCP stack truly extensible
The Transmission Control Protocol (TCP) is one of the most important
protocols in today's Internet. Its specification and implementations have been
refined for almost forty years. The Linux TCP stack is one of the most widely
used TCP stacks given its utilisation on servers and Android smartphones and
tablets. However, TCP and its implementations evolve very slowly. In this
paper, we demonstrate how to leverage the eBPF virtual machine that is part of
the recent versions of the Linux kernel to make the TCP stack easier to extend.
We demonstrate a variety of use cases where the eBPF code is injected inside
a running kernel to update or tune the TCP implementation. We first implement
the TCP User Timeout Option. Then we propose a new option that enables a client
to request a server to use a specific congestion control scheme. Our third
extension is a TCP option that sets the initial congestion window. We then
demonstrate how eBPF code can be used to tune the acknowledgment strategy.Comment: 9 pages, 8 figure
Beyond socket options: making the Linux TCP stack truly extensible
The Transmission Control Protocol (TCP) is one of the most important
protocols in today's Internet. Its specification and implementations have been
refined for almost forty years. The Linux TCP stack is one of the most widely
used TCP stacks given its utilisation on servers and Android smartphones and
tablets. However, TCP and its implementations evolve very slowly. In this
paper, we demonstrate how to leverage the eBPF virtual machine that is part of
the recent versions of the Linux kernel to make the TCP stack easier to extend.
We demonstrate a variety of use cases where the eBPF code is injected inside
a running kernel to update or tune the TCP implementation. We first implement
the TCP User Timeout Option. Then we propose a new option that enables a client
to request a server to use a specific congestion control scheme. Our third
extension is a TCP option that sets the initial congestion window. We then
demonstrate how eBPF code can be used to tune the acknowledgment strategy.Comment: 9 pages, 8 figure
Deploying Safe User-Level Network Services with icTCP
We present icTCP, an "information and control" TCP implementation that exposes key pieces of internal TCP state and allows certain TCP variables to be set in a safe fashion. The primary benefit of icTCP is that it enables a variety of TCP extensions to be implemented at user-level while ensuring that extensions are TCP-friendly. We demonstrate the utility of icTCP through a collection of case studies. We show that by exposing information and safe control of the TCP congestion window, we can readily implement user-level versions of TCP Vegas [11], TCP Nice [50], UDP with congestion control [28], and the Congestion Manager [6]; we show how user-level libraries can safely control the duplicate acknowledgement threshold to make TCP more robust to packet reordering [9] or more appropriate for wireless LANs [47]; we also show how the retransmission timeout value can be adjusted dynamically [30]. Finally, we find that converting a stock TCP implementation into icTCP is relatively straightforward; our prototype requires approximately 300 lines of new kernal code