Before exchanging data, a connection must be established between client and server using a three-way handshake. Hence TCP is called a connection oriented protocol.
- The client while initiating a connection with the server, sends a TCP segment with SYN flag set, as well as an Initial Sequence Number (ISN) and the port number of the server. This client is said to be in SYN_SENT state.
- At this point, the server will make an entry for connection in the listen queue and send back a reply that has both SYN and ACK flags set which indicates that the server acknowledges receiving the client's initial packet and wishes to establish a connection with the client. The server responds with a TCP segment with SYN flag and ACK flag set. Also, the server sets the ISN with a value one higher than the ISN sent by the client. This is referred as SYN-ACK packet or SYN-ACK segment. The server is said to be in SYN_RCVD state.
- The client then acknowledges the SYN-ACK packet be sending a TCP segment with ACK flag set and by incrementing ISN by one. This completes the three-way handshake and connection is said to be in ESTABLISHED state. Once the client responds, the connection moves from listen queue into the connection queue.
For a system on a high-latency network that receives a large number of connection requests, there is a possibility of listen queue becoming full because of the time required for the clients to complete the connection.
With TCP, both client and server can send data at the same time, making TCP a full duplex protocol.
TCP three-way handshake can be briefed as follows:
1) Client end
Client sends SYN
2) Server end
Kernel hands SYN to Server
Server calls accept()
Kernel sends SYN/ACK to the client
3) Client end
Client sends ACK
Now in the server end, the kernel passes connection into the server's accept() menthod.
No comments:
Post a Comment