I. Introduction
TLS (and its predecessor SSL) is a collection of cryptographic protocols that are designed to support confidentiality, integrity, and authenticity of network connections. It is the de facto standard for securing Internet communications such as web browsing (HTTPS) and email (SMTP over TLS). As TLS connections are computationally expensive to set up, because they require public key cryptography, TLS supports session resumption, where parameters of a previous connection can be reused to avoid the cost of establishing a new connection with a returning client. If the client and server both have stored session information from a previous connection, they can resume the previous session without public key cryptography and using fewer messages than a full handshake, making resuming sessions much cheaper than creating new ones. To resume sessions, clients and servers must store recently negotiated sessions. Whereas clients only need to store a handful of sessions, one for each TLS server with which the client has recently communicated, servers may need to store a large number of sessions if they have many active clients, but the memory required to store these sessions may exceed the server's capacity or degrade the server's performance. Moreover, sessions become stale over time as clients terminate and purge their session information, either because sessions are held in memory or because it would be insecure to continue using session information for long periods of time. To handle these problems, a TLS server provides session caches to store recently negotiated sessions and evicts sessions when the cache overflows.