基础: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:表示连接中断。

相关推荐
T1mzhou4 小时前
ARM64 Linux 6.10内核启动流程7-ioremap和readl writel
linux·服务器·c语言
小羊没烦恼!4 小时前
Hello Web API系列教程——Web API与国际化
java·服务器·前端·javascript·php
Cx330❀5 小时前
【Linux网络】网络层协议 IP :从网络层原理到 Linux 内核源码
linux·运维·服务器·网络·tcp/ip·ai·ai编程
ITxiaobing20236 小时前
广告归因场景下的IP情报工程化:提升AppsFlyer P360匹配精度的实践思路
大数据·人工智能·tcp/ip
Gl�ria6 小时前
Linux 清理日志常用命令
linux·运维·服务器
天道jimmy7 小时前
VulnHub 系列:HA, Wordy
linux·服务器·web安全
FPC工厂——皇榜科技7 小时前
机器人灵巧手线路板:从“握得住”到“摸得准”:一只机械手的柔性神经密码
网络·人工智能·科技·机器人·pcb工艺
Orange_sparkle7 小时前
Pi Agent vs LangGraph:从人机交互、企业 RAG 到持久化工作流的完整选型指南
java·网络·人机交互
j7~8 小时前
【Linux网络加餐(二)】《进程组,会话,控制终端,作业控制和守护进程》---详解
linux·运维·服务器·守护进程·会话·进程组·控制终端