TCP是全双工的,也就是说,在客户端、服务端两个方向上都可以发送信息。TCP连接的建立过程,就是两个方向确保均可收发信息的过程。
连接的建立
- 客户端发送连接请求,附带对应的标识位SYN(synchronous);
- 服务端接收到请求,确认与客户端进行通信,设置确认标识位ACK(acknowledgement),同时服务端也询问客户端是否与自己通信,也要设置标识位SYN;
- 客户端收到了服务端响应,再次进行回应,设置标识位ACK;
至此,TCP连接通过交换三个数据包完成建立,这个过程称为“三次握手”。
连接的保持
经过三次握手,连接已经建立,在客户端与服务端互相传送数据的过程中,发送的所有数据包上都会设置ACK标识,表示确认收到了先前的数据包。
连接的终止
- 客户端发送设置了FIN标识的数据包给服务端,请求关闭连接;
- 服务端收到此数据包,发回一个ACK数据包确认,从客户端到服务端方向的连接终止;
- 服务端发送完响应数据后,也发送一个FIN数据包给客户端,请求关闭从服务端到客户端方向的连接;
- 客户端回复ACK数据包确认,从服务端到客户端方向的连接终止。
至此,TCP连接断开,称为“四次挥手”。
注意: 四次挥手中,第2、3步没有如同三次握手那样合并在一起的原因是,在大多数情况下,从服务端到客户端方向还有数据需要发送,服务端将在最后的数据发送完后,再向客户端发送FIN报文请求关闭连接。
网友评论