TCP三次握手和四次挥手

三次握手

第一次握手:客户端先开始给服务器发送一个报文,这个报文带有序列号和标志位SYN。序列号是系统随机分配,比如设为x,则seq = x,SYN置为1:SYN = 1。这个报文不包含应用层数据,之后客户端处于SYN-SENT状态。

第二次握手:服务端收到客户端的请求报文后,会做出应答。给客户端发送确认报文,报文带有确认应答号ack = x+1,应答标志位ACK = 1,服务端自己的序列号seq = y,SYN = 1。该报文不包含应用层的数据,之后服务端进入SYN-RCVD状态。

第三次握手:客户端收到服务端的应答,也做出应答,则给服务端发送带有ACK = 1、 seq = x+1、ack = y+1 的报文,这个报文可以携带数据,之后就可以进行数据传输了。
在这里插入图片描述

四次挥手

第一次挥手:客户端想断开连接,给服务端发送一个带有FIN=1标志位和经过递增后的序列号seq = u的报文,然后客户端进入FIN_WAIT_1状态。

第二次握手:服务端接收到后,会应答一个带ACK = 1、seq = v、ack = u+1的报文。服务端进入FIN_WAIT状态,客户端收到应答后进入FIN_WAIT_2状态

第三次握手:等服务器准备好,已经把要传的数据都传完了,给客户端发送一个带FIN = 1、ACK = 1、seq = w、ack = u+1断开请求报文。

第四次握手:客户端收到服务端的FIN报文后,回一个ACK应答报文,之后进入TIME_WAIT状态。服务器收到了ACK应答报文后,就进入了CLOSED状态,至此服务器已经完成连接断开。客户端再经过2MSL一段时间后,自动进入CLOSED状态,至此客户端也完成连接的关闭。
在这里插入图片描述

TCP连接的断开为什么需要四次挥手

关闭连接时,客户端向服务器端发送FIN报文,只是告诉服务端不再给你发数据了,但是还可接收数据。

当服务端接收到FIN报文断开请求时,会先回一个ACK应答报文,告诉客户端我知道了,但是我可能还有数据没传完,等我一下。当数据传完之后再发送FIN报文给客户端说OK了,可以断开了。在接到客户端回应时服务端就断开结束了。

从此可知,服务端往往需要等待数据的发送和处理完成才断开连接,所以服务端的ACK和FIN一般会分开发送,所以比三次握手多一次。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值