 - the receiver delivers ordered, error-free data to the application layer; - the receiver implements a source flow control mechanism based on its receive buffer occupancy; - the source rate is regulated based on the congestion state of the network. The TCP is byte-stream oriented: - at the source side, the application writes bytes into the transmission buffer. The TCP transmits segments to the recipient; - at the destination side, the application reads bytes into the reception buffer. The application is in charge of delimiting messages. 12.2.1. TCP header The TCP header is described in Figure 12.2 and contains the following fields: Source Port and Destination Port: these fields identify the port numbers of the source and destination applications. Sequence Number: this field specifies the current number assigned to the first octet of the data encapsulated by the TCP header. Each byte of the message encapsulated by the TCP header consumes a number. Acknowledgment Number: this field contains the next sequence number expected by the transmitter of this acknowledgment. It implicitly acknowledges the previous numbers. Data Offset: this field indicates the number of 32-bit words in the TCP header. Taking into account the presence of the Option field, this field indicates the starting point of the data encapsulated by the TCP header. MPTCP Aggregation Reserved: this field is reserved for later use. Source Port Destination Port Sequence Number Acknowledgment Number UAPRSF Offset Reserved Window Checksum Urgent Pointer Figure 12.2. Format of TCP header Flags: - URG bit is set to ONE if the Urgent Pointer field is being used; - ACK bit is set to ONE to indicate the validity of the Acknowledgment Number. When the ACK bit is set to ZERO, the segment does not contain an acknowledgment and the Acknowledgment Number field is ignored; - PSH bit is set to ONE to notify the recipient to deliver the data to the respective application without buffering; - RST bit is set to ONE to allow a connection to be reset; it is also used to re