栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

四次挥手扫清障碍

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

四次挥手扫清障碍

建立一个TCP链接需要三次握手,断开一个连接要经过四次挥手。这由TCP的半关闭(half-close)造成的。所谓的半关闭,其实就是TCP提供了连接的一端在结束的发送后还能接收来自另一端数据的能力。 TCP的链接拆除需要发送四个包,因此成为四次挥手(Four-way handshake),客户端和服务器军和主动发起挥手动作。

上述符号的意思

FIN:连接终止位
seq:发送的第一个字节的序号
ACK:确认报文段
ack:确认号,希望收到的下一个数据的第一个字节的序号

刚开始双发都处于ESTABLISHED状态,假设是客户端先发起的关闭请求,四次挥手的过程如下: 第一次握手

客户端发送一个FIN报文(请求链接终止:FIN=1),报文中会制定一个序列号seq=u。并停止在发送数据,主动关闭TCP连接。此时客户端处于FIN_WAIT1状态,等待服务端的确认。

FIN-WAIT1 等待远程TCP连接中断请求,或先前的链接中断请求的确认。

第二次握手

服务端收到FIN之后,会发送ACK报文,且把客户端的序列号+1作为ACK报文的序列号值,表明已经收到客户端的报文了,此时服务器处理CLOSE_WAIT状态。

CLOSE_WAIR 等待从本地用户发来的链接中断请求;

此时的TCP处于半关闭状态,客户端到服务端的连接释放。客户端收到服务端的确认号,进入FIN_WAIT2(终止等待2)状态,等待服务端发胡的连接释放报文段

FIN-WAIT2从远程TCP等待连接中断请求

第三次挥手

如果服务端也想断开连接(没有要向客户端发出的数据),和客户端的第一次挥手一样,发送FIN报文段,指定一个序列号。此时服务端处于LAST_ACK的状态,等待客户端确认

LAST_ACK 等待原来发向远程TCP的连接中断请求的确认

第四次挥手

客户端收到FIN之后,一样发送一个ACK报文作为应答(ack=w+1),并且把服务端的序列值+1作为自己ACK报文序列号值(seq=u+1),此时客户端处于TIME_WAIT(时间等待)状态

TIME-WAIT等待足够的时间以确认远程TCP连接接收到连接中断请求的确认

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/886085.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号