三次握手和四次挥手

本文详细介绍了TCP协议中建立连接的三次握手过程和关闭连接的四次挥手过程,通过生动的例子解释了各自的原因和目的。三次握手确保双方的发送与接收能力,而四次挥手则是因为在关闭连接时需要分别确认数据发送和接收通道的关闭,确保数据完整传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

三次握手和四次挥手

三次握手

  1. 第一次握手:客户端给服务器发送一个SYN报文。
  2. 第二次握手:服务器收到 SYN 报文之后,会应答一个 SYN+ACK 报文。
  3. 第三次握手:客户端收到 SYN+ACK 报文之后,会回应一个 ACK 报文。
  4. 服务器收到 ACK 报文之后,三次握手建立完成

作用是为了确认双方的接收与发送能力是否正常

举例子

客户端: 你在吗 ?
服务端: 我在。你好吗?
客户端: 好啊!

TCP 的连接因为是全双工的,也就是Client和Server两端,发送消息两个方向的连接都要建立成功。如果要保证双向连接都成功的话,三次通信是最少的次数了。大于三次的话,后面的次数通信就没有必要了,是在浪费资源。
如果,仅仅两次握手,不能保证客户端目前是否还在线。只有三次才可以最大概率的保证是否连接上。

在这里插入图片描述

四次挥手

四次挥手即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。

第一次挥手:A数据传输完毕需要断开连接,A的应用进程向其TCP发出连接释放报文段(FIN = 1,序号seq = u),并停止再发送数据,主动关闭TCP连接,进入FIN-WAIT-1状态,等待B的确认。

第二次挥手:B收到连接释放报文段后即发出确认报文段(ACK=1,确认号ack=u+1,序号seq=v),B进入CLOSE-WAIT关闭等待状态,此时的TCP处于半关闭状态,A到B的连接释放。而A收到B的确认后,进入FIN-WAIT-2状态,等待B发出的连接释放报文段。

第三次挥手:当B数据传输完毕后,B发出连接释放报文段(FIN = 1,ACK = 1,序号seq = w,确认号ack=u+1),B进入LAST-ACK(最后确认)状态,等待A 的最后确认。

第四次挥手:A收到B的连接释放报文段后,对此发出确认报文段(ACK = 1,seq=u+1,ack=w+1),A进入TIME-WAIT(时间等待)状态。此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL后,A才进入CLOSE状态。


举例子

  1. 客户端:我要走了
  2. 服务端: 你真的要走了吗?
  3. 服务端: 你真的真的要走了吗?
  4. 客户端: 我真的要走了!
    5

为什么建立连接是三次握手,而关闭连接却是四次挥手呢?

这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方是否现在关闭发送数据通道,需要上层应用来决定,因此,己方ACK和FIN一般都会分开发送。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值