TCP utilizes buffers for the sender and receiver of each connection. The sender buffer is required for data bytes that have been send but not acknowledged. The receiver buffer is required to hold data bytes that have not been read by the receiving application as well as data bytes that arrive out of order. TCP supports sequencing of packets to allow for reordering and duplication detection. This animation shows how TCP handles buffering and sequencing.