三次握手:总之就是分三步:请求连接-确认连接-连接;

三次握手和四次握手连接_tcp
第一次握手

当客户端向服务器发起连接请求时,客户端会发送SYN到服务器。
在这里我们设SYN为m

第二次握手

当服务器收到客户端发送的SYN后,服务器要做的是确认客户端发送过来的SYN,在这里服务器发送确认包ACK
这里的ACK为m+1,服务器也会向客户端发送一个SYN包,这里我们设SYN为n。

服务器端发送SYN和ACK两个包。

第三次握手

客户端收到服务器发送的SYN和ACK包后,需向服务器发送确认包ACK
这里的ACK为n+1,发送完毕后,即TCP连接成功。

在三次握手中,客户端和服务器端都发送两个包SYN和ACK,只不过服务器端的两个包是一次性发过来的,客户端的两个包是分两次发送的。

四次握手:请求断开-确认收到-确认断开-断开
当A端和B端要断开连接时,需要四次握手
三次握手和四次握手连接_客户端_02
断开连接请求可以由客户端发出,也可以由服务器端发出,在这里我们称A端向B端请求断开连接。

第一次挥手

A端向B端请求断开连接时会向B端发送一个带有FIN标记的报文段
第二次挥手

B端收到A发送的FIN后,B段还有数据没有传完,所以B端并不会马上向A端发送FIN,而是先发送一个确认序号ACK

第三次挥手

当B数据传送完毕之后,此时B端向A端发送FIN序号
意思是这次可以断开连接了。

第四次挥手

A端收到B端发送的FIN后,会向B端发送确认ACK
然后经过两个MSL时长后断开连接。

这个博主的写的很生动,非常形象:
javascript:void(0)