TCP
Transmission Control Protocol is a network communication protocol designed to reliably send ordered data packets over an IP network.
Segment Structure
A TCP segment consists of a TCP header and a data section. There are 10 mandatory fields for the header.
| Field | Description | Offset | Size (Bits) | 
|---|---|---|---|
| Source port | The sending port | 0 | 16 | 
| Destination port | The receiving port | 16 | 16 | 
| Sequence number | The initial sequence number (if SYN set) otherwise the accumulated sequence number | 32 | 32 | 
| Acknowledgement number | If ACK set, the expectant next sequence number | 64 | 32 | 
| Data offset | Size of the TCP header in 32-bit words (min 5, max 15) | 96 | 4 | 
| Reserved | For future use (should be set to 000) | 100 | 3 | 
| Flags | 9 1-bit flags | 103 | 9 | 
| Window Size | The size of the receive window | 112 | 16 | 
| Checksum | Error checking for the header | 128 | 16 | 
| Urgent pointer | If URG is set, offset from the sequence number indicating the last urgent data byte | 144 | 16 | 
| Options | Optional header fields | 160 | 0-320 | 
The flags section indicates which fields are relevant in the header. There are 9 total flags.
| Flag | Description | Total Offset | 
|---|---|---|
| NS | ECN-nonce - concealment protection (experimental) | 103 | 
| CWR | Congestion Window Reduced | 104 | 
| ECE | If SYN, the TCP peer is ECN capable, else congestion indicator | 105 | 
| URG | Indicates the Urgent pointer field is significant | 106 | 
| ACK | Indicates the Acknowledgement field is significant | 107 | 
| PSH | Asks to push the buffered data to the receiving application | 108 | 
| RST | Reset the connection | 109 | 
| SYN | Synchronize sequence numbers | 110 | 
| FIN | Last packet from sender | 111 | 
Protocol Operation
The protocol is divided into three phases: connection establishment, data transfer, and connection termination.
Connection Establishment
TCP uses a three-way handshake to establish a connection.
- SYN - The client sends SYN with a random sequence number 
x - SYN-ACK - The server replies with SYN-ACK with an acknowledgement number 
x+1and a random sequence numbery - ACK - The client sends ACK back to the server with an acknowledgement number 
y+1and a sequence numberx+1 
Connection Termination
TCP uses a four-way handshake to terminate a connection. Each endpoint needs to send a FIN and a final ACK to terminate its side of the connection.
- FIN - The initiator sends FIN
 - ACK - The receiver responds with ACK
 - FIN - The receiver sends FIN
 - ACK - The initiator responds with the final ACK
 
It is also possible to combine the receiver’s flags in steps 2 and 3 for a FIN-ACK.