Traditional operating system interfaces and network protocol implementations force system state to be kept on both sides of a connection. However, holding connection state at endpoints binds the corresponding connections to those endpoints, thus limiting the flexibility of the system.
The Trickles network stack is a stateless replacement for TCP and the Berkeley sockets interface. It removes all per-connection state from one endpoint, typically the server, while providing important features such as congestion control, security of server-side state, and support for dynamic content.
In addition to markedly reduced memory overhead, our server-side stateless stack allows increased flexibility in redirecting network traffic at packet-level granularity, since any server can service any request regardless of past communications history. This enables new functionality in the network layer, such as transparent failover, load balancing, anycast services, and striped download.
Challenges and solutions
State exists at different layers -- for instance, in the application and the protocol implementation. A fully stateless stack holds no state at any layer. The protocol design and API specification strongly influence the amount and type of state that is held at each layer. The TCP protocol and sockets API intrinsically requires the implementation to hold state to, respectively, carry out the mandatory congestion control algorithms, and to provide the necessary semantic guarantees. Thus, under TCP+Sockets, even if a server application is completely stateless, the protocol implementation holds state on its behalf as soon as a connection is established.
The Trickles stateless transport protocol and programming interface are both inherently stateless. The transport protocol achieves stateless operation on the server by migrating all server state to the client within continuations. The client periodically sends this state to the server as needed to restore the server's state and generate the necessary data.
|Overview||Overview of the Trickles project|
|Protocol||Description of the Trickles stateless transport protocol, a replacement for TCP|
|API||Description of the Trickles API, a replacement for Berkeley sockets|
|Applications||Trickles server applications and and network services|
|Code||Trickles code release|
|Papers||Papers and talks about Trickles|