1. server maintains: every frame it has ever been in. every packet it has ever sent. packet has: frame no, frame it depends on (maybe nothing), 0 server's Last Known Client Frame client has told us the latest frame it can now contruct some packets have transmitted frames > this recently, but those frames haven't yet been acked some packets may have transmitted frames > this long ago and haven't been acked. we call those lost 2. most recent frame is "current frame" most recent frame not lost is "presumed client frame" most recent frame acked is "last known client frame" 3. goal: transmit current frame to client by most efficient means could send packet depending on "nothing", "presumed client frame", or "last known client frame" 4. when client gets a packet, it tells us the latest frame it can now construct 5. when sending packet, server tells client last known client frame. client discards all frames older than this.