基础:TCP四次挥手做了什么,为什么要挥手?

1. TCP 四次挥手在做些什么

1. 第一次挥手

1)挥手作用:主机1发送指令告诉主机2,我没有数据发送给你了。

2)数据处理:主机1(可以是客户端,也可以是服务端),设置 Sequence NumberAcknowledgment Number ,向主机2发送一个 FIN 报文段;随后,主机1 进入 FIN_WAIT_1 状态。

2. 第二次挥手

1)挥手作用:主机2收到主机1信息后,回复报文给主机1,告诉主机1我也没有数据发送给你了,可以进行关闭连接。

2)数据处理:主机2收到了主机1发送的 FIN 报文段,向主机1回一个 ACK 报文段,Acknowledgment NumberSequence Number 加1;主机1进入 FIN_WAIT_2 状态。

3. 第三次挥手

1)挥手作用:主机2向主机1发送关闭连接指令请求。

2)数据处理:主机2向主机1发送 FIN 报文段,请求关闭连接,同时主机2进入 CLOSE_WAIT 状态;。

4. 第四次挥手

1)挥手作用:主机1收到主机2的关闭请求后,回复确认关闭指令给主机2,关闭链接。

2)数据处理:主机1收到主机2发送的 FIN 报文段,向主机2发送 ACK 报文段,然后主机1进入 TIME_WAIT 状态;主机2收到主机1的 ACK 报文段以后,就关闭连接;此时,主机1等待 2MSL 后依然没有收到回复,则证明 Server 端已正常关闭,那好,主机1也可以关闭连接了。

2. 为什么要四次挥手

1. TCP 协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。

2. TCP 是全双工 模式,这就意味着,当主机1发出 FIN 报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2, 它的数据已经全部发送完毕了;但是,这个时候主机1还是可以接受来自主机2的数据。

3. 当主机2返回 ACK 报文 段时,表示它已经知道主机1没有数据发送了,但是主机2还是可以发送数据到主机1。

4. 当主机2也发送了 FIN 报文段时,这个时候就表示主机2也没有数据要发送,就会告诉主机1,我也没有数据要发送了。

5. 主机1收到主机2的 FIN 报文后,回复 ACK 确认之后彼此就会愉快的中断这次TCP连接。

3. 四次挥手状态参数说明

  • FIN_WAIT_1FIN_WAIT_1 针对主动发起关闭一方来讲;FIN_WAIT_1FIN_WAIT_2 状态的真正含义都是表示等待对方的 FIN 报文。而这两种状态的区别是:FIN_WAIT_1 状态实际上是当SOCKETESTABLISHED 状态时, 它想主动关闭连接,向对方发送了 FIN 报文,此时该 SOCKET 即进入到 FIN_WAIT_1 状态。而当对方回应 ACK 报 文后,则进入到 FIN_WAIT_2 状态,当然在实际的正常情况下,无论对方何种情况下,都应该马上回应 ACK 报文,所以 FIN_WAIT_1 状态一般是比较难见到的,而FIN_WAIT_2 状态还有时常常可以用 netstat 看到。

  • FIN_WAIT_2FIN_WAIT_2 针对主动发起关闭一方来讲;FIN_WAIT_2 状态下的 SOCKET ,表示半连接,也即有一方要求 close 连接,但另外还告诉对方,我暂时还有点数据需要传送给你(ACK 信息),稍后再关闭连接。

  • CLOSE_WAITCLOSE_WAIT 针对被动关闭一方来讲;表示在等待关闭。当主动关闭一方 close 一个 SOCKET 后发送 FIN 报文给自己,被动关闭一方会回应一个 ACK 报文给对方,此时则进入到 CLOSE_WAIT 状态。接下来,被动关闭一方要看是否还有数据发送给对方,如果没有的话,那么可以 close 这个 SOCKET ,发送 FIN 报文给对方,也即关闭连接。被动关闭一方在CLOSE_WAIT状态下,需要完成的事情是等待自己去关闭连接。

  • LAST_ACKLAST_ACK 针对被动关闭一方来讲;表示被动关闭一方在发送 FIN 报文后,最后等待对方的 ACK 报 文。当收到 ACK 报文后,也即可以进入到 CLOSED 可用状态。

  • TIME_WAITTIME_WAIT 主动发起关闭一方来讲;表示收到了对方的 FIN 报文,并发送出了 ACK 报文,就等 2MSL 后即可回到 CLOSED 可用状态。 如果 FINWAIT1 状态下,收到了对方同时带 FIN 标志和 ACK 标志的报文时,可以直接进入到 TIME_WAIT 状态,而无须经过 FIN_WAIT_2 状态。

  • CLOSED:表示连接中断。

相关推荐
远游客071322 分钟前
centos stream 8下载安装遇到的坑
linux·服务器·centos
fantasy_arch2 小时前
CPU性能优化-磁盘空间和解析时间
网络·性能优化
LIKEYYLL2 小时前
GNU Octave:特性、使用案例、工具箱、环境与界面
服务器·gnu
云云3213 小时前
搭建云手机平台的技术要求?
服务器·线性代数·安全·智能手机·矩阵
云云3213 小时前
云手机有哪些用途?云手机选择推荐
服务器·线性代数·安全·智能手机·矩阵
CircleMouse3 小时前
Centos7, 使用yum工具,出现 Could not resolve host: mirrorlist.centos.org
linux·运维·服务器·centos
是Dream呀4 小时前
Python从0到100(七十八):神经网络--从0开始搭建全连接网络和CNN网络
网络·python·神经网络
木子Linux4 小时前
【Linux打怪升级记 | 问题01】安装Linux系统忘记设置时区怎么办?3个方法教你回到东八区
linux·运维·服务器·centos·云计算
kaixin_learn_qt_ing4 小时前
了解RPC
网络·网络协议·rpc
不惑_5 小时前
小白入门 · 腾讯云轻量服务器部署 Hadoop 3.3.6
服务器·hadoop·腾讯云