TCP是一种可靠的传输协议,它提供了多种机制来保证数据的可靠传输。其中最重要的机制是数据确认和重传机制。
TCP通过三次握手建立连接,保证数据的可靠传输。具体流程如下:
- 客户端向服务端发送SYN包,表示请求建立连接,此时客户端进入SYN_SENT状态。
- 服务端收到请求后,向客户端发送SYN+ACK包,表示确认请求并向客户端发送自己的SYN包,此时服务端进入SYN_RECV状态。
- 客户端收到服务端的SYN+ACK包后,向服务端发送ACK包,表示确认请求,此时客户端进入ESTABLISHED状态。服务端收到ACK包后也进入ESTABLISHED状态。
三次握手的原因是为了避免已经失效的连接请求报文段突然又传送到了服务端,从而产生错误。
四次挥手是断开连接时的流程,具体流程如下:
- 客户端向服务端发送FIN包,表示要断开连接,此时客户端进入FIN_WAIT_1状态。
- 服务端收到FIN包后,向客户端发送ACK包,表示收到了请求,此时服务端进入CLOSE_WAIT状态。
- 服务端准备好断开连接时,向客户端发送FIN包,表示同意断开连接,此时服务端进入LAST_ACK状态。
- 客户端收到服务端的FIN包后,向服务端发送ACK包,表示收到请求,此时客户端进入TIME_WAIT状态。服务端收到ACK包后进入CLOSED状态,客户端在等待2MSL后进入CLOSED状态。
四次挥手的原因是因为TCP连接是全双工的,每个方向上的关闭都需要单独进行,而且需要等待双方都确认关闭才能完全关闭连接。