TCP 三次握手,四次挥手 (详解)

TCP协议是一种面向连接、可靠的传输协议,用于在不可靠的网络上建立稳定的数据传输。建立连接通过三次握手实现,确保双方的发送和接收能力正常。关闭连接则需要四次挥手,以处理可能未完成的数据传输和确认信息的可靠性。在挥手过程中,被动方可能会有额外的数据要发送,因此需要多次确认确保连接完全关闭。
摘要由CSDN通过智能技术生成

什么是TCP协议?

TCP( Transmission control protocol )即传输控制协议,是一种面向连接,可靠的数据传输协议,它是为了在不可靠的互联网上提供可靠的端到端字节流而专门设计的一个传输协议,在TCP/IP协议中,连接是通过三次握手进行初始化的,TCP是全双工模式 ,所以需要四次挥手关闭连接

TCP三次握手

为了保证客户端和服务器端的可靠连接,TCP建立连接时必须要进行三次会话,也叫TCP三次握手,进行三次握手的目的是为了确认双方的接收能力和发送能力是否正常。

进行三次握手流程:

  1. 握手前服务器必须处于listen状态

  1. 第一个握手包由客户端发往服务器,此包为请求包,发完后客户端处于SYN_SEND状态。

  1. 服务器收到客户端第一个握手包后,发送第二个握手包,此包既为确认包也是请求包,发送完成后服务器处于SYN_RECV状态

  1. 客户端收到服务器回包后,确认数据正常后发送第三个握手包,此包为确认包,发送完成后客户端处于ESTABLISHED状态

  1. 服务器收到最后一个确认包后确认数据无误后状态变更为ESTABLISHED

6.如下图实例:

SYN为握手包,ACK为确认包,ack为确认号,seq为初始序号

思考题:握手为什么需要三次?为什么不是两次或四次?

1️⃣握手的目的在于客户端与服务器双方都能确认双方的收发数据包都正常。

2️⃣服务器第一个握手包收到后便能确认客户端的发送功能与服务器的接收功能正常。

3️⃣客户端收到第二个握手包后,已经能确认出双方收发都没有问题,但此时服务器并不知道自己发送是否正常,客户端能否正常收到数据包。

4️⃣服务器收到第三个握手包时才能确认自己的发送功能与客户端接收功能正常。

5️⃣三个数据包才能确认双方都能正常发送与接收数据,两个不够,而四个会冗余,降低性能。

TCP四次挥手

在挥手中,请求断开的可以是服务器也可以是客户端,但往往都是客户端主动断开连接

进行四次挥手流程:

  1. 第一次挥手 客户端发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u,客户端进入FIN-WAIT-1(终止等待1)状态。

  1. 第二次挥手 服务端收到 FIN 之后,会发送 ACK 报文,且把客户端的序列号值 +1 作为 ACK 报文的序列号值,表示已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT 状态。

  1. 第三次挥手 如果服务端也想断开连接了,和客户端的头一次挥手一样,发给客户端FIN 报文,且指定一个序列号。此时服务端处于 LAST_ACK 的状态。

  1. 第四次挥手 客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,且把服务端的序列号值 +1 作为自己 ACK 报文的序列号值,此时客户端处于 TIME_WAIT 状态。需要过2MSL(两倍的最大报文段时间)后以确保服务端收到自己的 ACK 报文之后才会进入 CLOSED 状态,服务端收到 ACK 报文之后,就处于关闭连接了,立刻进入 CLOSED 状态。

  1. 如下图实例:

FIN为挥手包,ACK为确认包,ack为确认号,seq为初始序号

思考题:为什么握手的时候需要三次,挥手的时候需要四次?

🔷握手时,服务端收到客户端发来的握手请求后,将自己的握手请求与应答包合并起来发送,而在挥手时,被动方收到FIN报文时,可能不会立即关闭SOCKET,也许还有其他消息没有处理完,故先回复一个ACK应答包,等待自己所有数据处理完后才会发送自己的FIN包。

为什么主动方最后还需要经历TIME_WAIT状态才会关闭?

🔷TIME_WAIT状态需要经过2MSL(两倍的最大报文段生存时间)才会回到CLOSE状态,由于网络本身不可靠,挥手最后一个ACK应答包可能会丢失,假设这个包丢失后,被动方会再次发送一个FIN挥手请求包,此时如果主动方已经关闭连接,则被动方会认为连接出错。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值