TCP三次握手
TCP 是面向连接的协议,所以使用 TCP 前必须先建立连接,而建立连接是通过三次握手来进行的。三次握手可以确保双方同时具备完整的发送和接收数据的能力。
-
第一次握手,客户端会随机初始化序号(x),将此序号置于 TCP 首部的序号字段中,同时把 SYN 标志位置为 1,表示 SYN 报文。接着把第一个 SYN 报文发送给服务端,表示向服务端发起连接。
-
第二次握手,服务端收到客户端的 SYN 报文后,首先服务端也随机初始化自己的序号(y),将此序号填入 TCP 首部的序号字段中,其次把 TCP 首部的确认应答号字段填入 x+1,接着把 SYN 和 ACK 标志位置为 1。最后把该报文发给客户端。
-
第三次握手,客户端收到服务端报文后,还要向服务端回应最后一个应答报文,首先该应答报文 TCP 首部 ACK 标志位置为 1 ,其次确认应答号字段填入 y+1 ,最后把报文发送给服务端。
一旦完成三次握手,此时连接就已建立完成,客户端和服务端就可以相互发送数据了。
TCP四次挥手
TCP 断开连接是通过四次挥手方式,双方都可以主动断开连接,断开连接后主机中的资源将被释放。
- 第一次挥手,客户端发送一个 FIN 标志位被置为 1 的报文,即 FIN 报文,告诉服务器需要关闭连接。
- 第二次挥手,服务端收到该报文后,会发送一个 ACK 的确认包,告诉客户端接收到关闭的请求。发送完成后,客户端收到这个包后,等待服务器关闭连接。
- 第三次挥手,等待服务端处理完数据后,服务端准备好关闭连接时,在向客户端发送 FIN 报文,告诉客户端准备关闭。发送完成后,等待客户端确认。
- 第四次挥手,客户端接收到服务端的关闭请求,再发送 ACK 标记的确认包,服务端收到了 ACK 应答报文后,服务端完成连接的关闭。客户端在经过一段时间后,客户端自动也完成连接的关闭。
每个方向都需要一个 FIN 和一个 ACK,因此通常被称为四次挥手。