Skip navigation.
Home

Structured Streams: a New Transport Abstraction

Bryan Ford (MIT)

Internet applications currently have a choice between stream and datagram transport abstractions. Datagrams efficiently support small transactions and streams are suited for longrunning 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.

AttachmentSize
fp240-ford.pdf651.4 KB

good timing!!

around 10 years back, Steve mccane did a presentation at the RMRG or perhaps it was at the NGC workshop, where he talked about structuring the data and session/transport API, but it was never fully followed up - this paper does a really nice job of pulling together similar ideas, and ideas springing up from the shortcomings of trying to carry complex structured information on HTTP and SIP, over a stream (or datagram) API - it would be very nice to see if a programming language (e.g. ocaml) toolset could be built for this - I think a new family of "stub compilers" could be built to help with this sort of thing, integrating with a far more subtle (but efficient) way to move data through the layers - SCTP and DCCP probably need re-writing as a result of this work, but in a good way:)