TCP的三次握手和四次挥手

在最开始,客户端和服务器都处在CLOSED状态

eaf1e21883e4466c9a62be431bcb2d78.png

第一次握手

       客户端向服务器发送报文标志位SYN=1,随机产生一个序号值seq=x保存在这个TCP的首部的序列号字段里,然后将数据包发给服务器,发送完毕后,客户端进入了SYN-SEND状态。

第二次握手

       服务器收到客户端发的数据包后,通过标志位SNY=1确认客户端请求建立连接的要求,于是服务器将TCP报文的标志位SYN=1和ACK=1(确认应答号),请求号ack=x+1(表明序号为x的数据包已经接收了,下一次传输的序列号为x+1),然后再随机产生一个序列号seq=y,然后将这数据包发给客户端进行确认连接请求,服务器进入SYN-RCVD状态。

第三次握手

       客户端收到服务器的确认后,查看ack是否为x+1,ACK是否为1,若无误,则将ACK=1,请求号ack=y+1(序列号为y的已经接收,下一次传输的序列号为y+1)发给服务器,服务器检查ack是否为1,ACK是否为1,若正确,则成功建立连接。双方都进入ESTABLISHED状态,三次握手结束

可以开始传输数据了

简单来说:

第一次握手:我给你发送了一条消息,问你能收到我发的消息吗?

第二次握手:你收到了消息,给我回复:我收到了,并且问我:那你能收到我发的消息吗?

第三次握手:我也收到了你回的消息并且给你回复:我也能收到。

9bb87e3317ef4ed6971e3ce77327af54.png

 

第一次挥手

       当客户端不想传输数据时,就发起了第一次挥手请求,将TCP报文标志为FIN=1,序列号seq=u发送给服务器,客户端进入了终止等待1的状态

第二次挥手

        服务器接收到客户端的FIN数据报文时,知道客户端不想发送数据,于是发送确认消息ACK=1,ack=u+1,seq=v(随机产生的序列号),表示服务器确认收到了FIN报文,于是服务器进入了关闭等待中,当客户端收到服务器的ACK确认消息后,进入了终止等待2状态。

第三次挥手

      服务器发送完ACK报文后,再次发送一个FIN报文,表明服务器不再发送数据。服务器进入了最后确认阶段。

第四次挥手

客户端收到服务器发的FIN报文,向服务器发送ACK报文,确认收到了FIN 报文。然后服务器就进入了关闭状态,客户端等待2MSL(MSL:报文最大存活时间。如果服务器没有收到ACK报文,则会重新发送FIN报文,若过了2MSL后,没有收到FIN报文,则证明服务器收到了ACK报文,并正常关闭连接)后也进入关闭状态。

简单来说:

第一次挥手
A:我要关闭,等你确认。

第二次挥手
B:正在确认,等候关闭。

第三次挥手
B:确认完成,可以关闭。

第四次挥手
A:确认关闭,立即关闭。

TCP的三次握手和四次挥手就是为了解决网络信道中不可靠的问题。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值