TCP --三次握手和四次挥手

三次握手

第一次握手
表示客户端想要和服务器建立连接
客户端向服务器发出连接请求报文,SYN=1,同时随机生成初始序列号seq=x。此时,TCP客户端进程进入了SYN-SENT(同步已发送状态)。TCP规定,SYN报文段不能携带数据,但消耗一个序号。

第二次握手
TCP服务器收到请求后,如果同意连接,则发送确认报文,ACK=1,SYN=1,ack=x+1,随机初始化一个序列号seq=y。此时,TCP服务器进程进入SYN-RCVD(同步收到)状态。这个报文也不能携带数据,同样也消耗一个序号。
询问客户端是否准备好

第三次握手
TCP客户进程收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,此时,TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态。
TCP规定,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号。这里客户端表示我已经准备好。

为什么要进行三次握手
如果客户端发送的第一个连接请求报文因为网络原因没有立即到达服务器,变成一个失效的报文,但服务器收到报文后,还是会发出确认报文,表示同意连接。假如没有第三次握手,那么这时新的连接就建立了。但是客户端是不会对服务器作出响应,而服务器认为新的连接已建立,就会一直等待客户端发来的数据,这样,服务器的资源就会浪费掉。


四次挥手

第一次挥手
TCP客户端发送一个连接释放报文,FIN=1,并且停止发送数据。此时,客户端进入FIN-WAIT-1(终止等待1)状态。
TCP规定,FIN报文段不携带数据,但要消耗一个序号。

第二次挥手
服务器收到这个FIN报文,回复一个确认报文。此时,服务器进入CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器方向的连接就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。

客户端收到服务器的确认请求后,进入FIN-WAIT-2状态,等待服务器发送连接释放报文,在这之前还需要接收服务器发送最后的数据。

第三次挥手
服务器发送一个FIN到客户端,关闭客户端 的连接。
服务器将最后的数据发送完毕,就会向客户端发送连接释放报文。此时,服务器进入了LAST-ACK(最后确认)状态,等待客户端的确认。

第四次挥手
客户端发送ACK报文确认,关闭完成。
此时,客户端进入TIME-WAIT状态,必须经过最长报文段寿命的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
服务器只要收到客户端的确认报文,立即进入CLOSED状态。

为什么要进行四次挥手
为了确保数据能够完成传输。
关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。

weixin073智慧旅游平台开发微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值