tcp
Three-Way Handshake
The following scenario occurs when a TCP connection is established:
- The server must be prepared to accept an incoming connection. This is normally done by calling
socket
,bind
, andlisten
and is called a passive open. - The client issues an active open by calling
connect
. This causes the client TCP to send a “synchronize” (SYN) segment, which tells the server the client’s initial sequence number for the data that the client will send on the connection. Normally, there is no data sent with the SYN; it just contains an IP header, a TCP header, and possible TCP options (which we will talk about shortly). - The server must acknowledge (ACK) the client’s SYN and the server must also send its own SYN containing the initial sequence number for the data that the server will send on the connection. The server sends its SYN and the ACK of the client’s SYN in a single segment.
- The client must acknowledge the server’s SYN.
The minimum number of packets required for this exchange is three; hence, this is called TCP’s three-way handshake. 【叫三次握手是因为最少三个数据包,可能会超过三个】
We show the client’s initial sequence number as J and the server’s initial sequence number as K. The acknowledgment number in an ACK is the next expected sequence number for the end sending the ACK.
TCP Connection Termination
While it takes three segments to establish a connection, it takes four to terminate a connection.
- One application calls
close
first, and we say that this end performs the active close (这一方主动关闭). This end’s TCP sends a FIN segment, which means it is finished sending data. - The other end that receives the FIN performs the passive close (另一方被动关闭). The received FIN is acknowledged by TCP. The receipt of the FIN is also passed to the application as an end-of-file (after any data that may have already been queued for the application to receive), since the receipt of the FIN means the application will not receive any additional data on the connection.
- Sometime later, the application that received the end-of-file will
close
its socket. This causes its TCP to send a FIN. 另一方关闭,并发送FIN向主动关闭的一方 - The TCP on the system that receives this final FIN (the end that did the active close) acknowledges the FIN. (主动关闭的一方确认此FIN)
Since a FIN and an ACK are required in each direction, four segments are normally required.
References
- UNP