TCP is a connection-oriented protocol and provides reliable communication. Before TCP transmits data, it will use the three-way handshake to establish a connection.
Bob want to have a talk through a phone. During the old days. the connection is not stable. Before they beginning to talk with each other, they want to have a double-check about the connectivity.
So, this is the normal starting:
Similarly, TCP’s 3-way handshake is the process of exchanging some data to make sure 2 things:
- Sending data from client to server is OK
- Sending data from server to client is OK
The overall process of 3-way handshake is:
SYN means synchronization of the sequence numbers. Client and server communicate each other their initial sequence numbers which are crucial for the communication to start.
Note : All the TCP segments which consume sequence numbers must be acknowledged by the peer. If no acknowledgment is received for this segment, it will be retransmitted until it reaches the specified number of times.
This is one important reason that TCP could provide a reliable data transmission.
syn are both flag bits of TCP header:
The sequence number and acknowledgment number are both 32 bits.
Initial Sequence Number (aka ISN) does not start from 0, and both parties of the communication generate it separately.
Why ISN can not be a fixed number?
- For security. If the ISN of a connection is known, it is easy for an attacker to construct a sequence number. The source IP and source port numbers are easy to forge. In this way, an attacker can forge an RST packet and force the connection to close.
- A dynamically growing ISN can guarantee that segments in the right order.
Defaultly, client will retry in 2 seconds, then 4 second, then 8 seconds … until it tried 6 times. This number is configured by
From the captured result by Wireshark. Except for SYN, ACK, Sequence number, there are some other parameters contained.
MSS (Maximum Segment Size), MSS = 1460 for client is MSS = 1360 for server.
WS (Windows Scaling), which used to control the maximum TCP receive window size, more details please refer to RFC1323.
There are more parameters, they are important configuration parameters for both sides to know before TCP transmission start.