TCP三次握手
三次握手用于建立TCP连接,确保客户端和服务器之间能够可靠地通信。
第一次握手(SYN):
- 客户端发送一个SYN(同步)报文段到服务器,请求建立连接。
- 报文段中包含客户端的初始序列号(seq)。
第二次握手(SYN-ACK):
- 服务器收到SYN后,发送一个SYN-ACK报文段,确认接收到客户端的SYN。
- 这个报文段中包含服务器的初始序列号(seq)和客户端的序列号加1(ack),表示确认号。
第三次握手(ACK):
- 客户端收到SYN-ACK后,发送一个ACK报文段,确认收到服务器的SYN-ACK。
- 这个报文段的确认号为服务器的序列号加1(ack),同时客户端可以在此报文段中发送数据(可选)。
经过三次握手,客户端和服务器的连接建立成功。
TCP四次挥手
四次挥手用于终止TCP连接,确保双方能够正常关闭连接,避免数据丢失。
第一次挥手(FIN):
- 主动关闭连接的一方(比如客户端)发送一个FIN(结束)报文段,表示不再发送数据。
- 这个报文段中包含客户端的序列号(seq)。
第二次挥手(ACK):
- 另一方(服务器)收到FIN后,发送一个ACK报文段,确认收到FIN。
- 这个报文段的确认号为客户端的序列号加1(ack)。
第三次挥手(FIN):
- 服务器准备关闭连接后,发送一个FIN报文段,表示也不再发送数据。
- 这个报文段中包含服务器的序列号(seq)。
第四次挥手(ACK):
- 客户端收到服务器的FIN后,发送一个ACK报文段,确认收到服务器的FIN。
- 这个报文段的确认号为服务器的序列号加1(ack)。
为什么要四次挥手
防止服务端发送 fin的包丢失,导致客户端无法接收。