Structured Streams: a New Transport Abstraction

Abstract:

Internet applications currently have a choice
between stream and datagram transport abstractions.
Datagrams efficiently support small transactions
and streams are suited for long-running conversations,
but neither abstraction adequately supports applications like HTTP
that exhibit a mixture of transaction sizes,
or applications like FTP and SIP
that use multiple transport instances.
Structured Stream Transport (SST)
enhances the traditional stream abstraction
with a hierarchical hereditary structure,
allowing applications to create lightweight child streams
from any existing stream.
Unlike TCP streams,
these lightweight streams incur
neither 3-way handshaking delays on startup
nor TIME-WAIT periods on close.
Each stream offers independent data transfer and flow control,
allowing different transactions to proceed in parallel
without head-of-line blocking,
but all streams share one congestion control context.
SST supports both reliable and best-effort delivery in a way
that semantically unifies datagrams with streams
and solves the classic “large datagram” problem,
where a datagram's loss probability
increases exponentially with fragment count.
Finally, an application can prioritize its streams relative to each other
and adjust priorities dynamically through out-of-band signaling.
A user-space prototype shows that
SST is TCP-friendly to within 2%,
and performs comparably to a user-space TCP
and to within 10% of kernel TCP on a WiFi network.