三次握手建立连接过程:
第一次握手(SYN,同步序列编号):
客户端发送一个 TCP 的连接请求报文段,其中包含 SYN=1,Seq=X 的数据包,表示请求建立连接,并选择一个初始序列号 X。
第二次握手(SYN + ACK):
服务器接收到客户端的 SYN 报文段后,会回复一个带有 ACK=1 和 SYN=1,Ack=X+1,Seq=Y 的报文段,表示同意建立连接,并选择一个自己的初始序列号 Y。
第三次握手(ACK):
客户端收到服务器的确认后,再次发送一个带有 ACK=1,Ack=Y+1,Seq=Z 的数据包给服务器,表示连接建立成功。
至此,TCP 连接建立,可以开始传输数据。
四次挥手断开连接过程:
第一次挥手(FIN):
客户端发送一个 FIN 报文段给服务器请求断开连接,表示客户端不再发送数据。
第二次挥手(ACK):
服务器收到客户端的 FIN 后,回复一个 ACK 表示确认收到断开请求,但此时服务器还可以向客户端发送数据。
第三次挥手(FIN):
服务器决定断开连接时,会发送一个 FIN 报文段给客户端,表示服务器不再发送数据。
第四次挥手(ACK):
客户端接收到服务器的 FIN 后,回复一个 ACK 确认收到断开请求,此时连接关闭。
举个通俗易懂的例子:
三次握手
C:客户端 S:服务器端
第一次握手:
C:在吗?我要和你建立连接。
第二次握手:
S:在的呢!来吧,确定要连接吗?
第三次握手:
C:非常确定!咱们建立连接吧。
四次挥手
C:客户端 S:服务器端
第一次挥手:
C:我的数据已经传完了,我想和你断开连接。
第二次挥手:
S:好的,我知道了,但是我这边还有数据给你,你先不要和我断开。
第三次挥手:
S:我的数据已经传送完了,你可以和我断开连接了!
第四次挥手:
C:我已经收到你的让我断开连接的信息了,可以断开了。
这个对话形象地展示了三次握手建立连接和四次断开释放连接的过程。