首页 > php教程 > php手册 > 正文

TCP连接的三次握手和四次解散过程,tcp握手四次解散

php中文网
发布: 2016-06-13 08:41:39
原创
1175人浏览过

tcp连接的三次握手和四次解散过程,tcp握手四次解散

客户端和服务器在使用tcp连接传输数据的过程中,需要经过三次握手建立连接和四次握手断开连接操作。

具体如下图所示

上图描述了TCP连接从建立到断开的详细过程,以下就其中的具体报文细节展开讨论。

在TCP三次握手建立连接阶段,客户端首先向服务器发送一个SYN=1,Sequence=p的请求包。

如果服务器同意授予客户端该链接,则发送ACK=p+1,SYN=1,Sequence=q的回应包。

最后在客户端收到服务器的回应包以后,也会向服务器发送一个回应包,具体内容为ACK=q+1,SYN=0,Sequence=p+1

对于TCP的断开则需要四次握手,为什么不是三次握手呢,具体原因为:

VoxDeck
VoxDeck

美间AI推出的演示文稿制作智能体

VoxDeck 90
查看详情 VoxDeck

当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

断开连接的过程是由客户端首先发起的,首先,客户端会发送FIN=1,Sequence=m的断开连接请求包。

服务器端收到请求以后,会发送一个确认包ACK=m+1,Sequence=n

此时,客户端到服务器端单方面的连接已经断开了,客户端不会再向服务器端发送数据包。而服务器还是可以向客户端发送数据的,如果服务器端发送s个数据包以后不需要向客户端发送数据了,此时可以向客户端发送断开连接请求。FIN=1,Sequence=m+s,ACK=m+1

客户端收到服务器的断开请求以后,会发送一个确认包。Sequence=m+1,ACK=m+s+1;

注意,客户端发送最后一次ACK包以后,还会等待2MSL(最大报文段生存时间),因为在网络中包有可能会丢失,客户端等待2MSL的时间是担心服务器端没有收到ACK包,从而重发FIN请求。

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号