当前位置:网站首页>TCP状态转换图
TCP状态转换图
2022-07-04 04:24:00 【StudyWinter】
如图
1 主动发起连接
1.1 理论
主动发起连接请求的状态变化如下图。
最开始的时候,主动请求端和被动端都处于CLOSED状态。
第一阶段:当主动请求端发送SYN标志位后,其状态变化为SYN_SEND;
第二阶段:此时被动方收到主动方的请求后,会向主动方发送SYN标志位以及去确认信息ACK,主动方收到信息后,向被动方发送
ACK确认信息,此时主动方的状态变化为ESTABLISHED,完成TCP连接的三次握手。
SYN_SEND一般不容易见到
状态变化:
CLOSE -- 发送SYN -- SEND_SYN -- 接收 ACK、SYN -- SEND_SYN -- 发送 ACK -- ESTABLISHED(数据通信态)
1.2 测试
使用命令查看状态
查看客户端
netstat -apn | grep client
查看服务端
netstat -apn | grep server
这里是多进程通信,一个server处于监听状态,另一个server处于ESTABLISHED状态
查看端口号
netstat -apn | grep 9527
2 主动关闭连接
2.1 理论
主动关闭连接请求的状态变化如下图。
在主动发发起关闭请求前,两方都处于ESTABLISHED状态。
第一阶段:主动方发起关闭连接请求,发送FIN,此时其状态变化为FIN_WAIT_1,当其收到被动方的ACK确认之后,其状态变化为FIN_WAIT_2,这也就是半关闭状态。
第二阶段:主动方收到被动方的关闭连接请求(FIN),其向被动方发送ACK确认,状态变化为TIME_WAIT。
第三阶段:要真正进入到CLOSED状态,需要等待2MSL时长,不同的系统时间不一样。
状态变化:
ESTABLISHED(数据通信态) -- 发送 FIN -- FIN_WAIT_1 -- 接收ACK -- FIN_WAIT_2(半关闭)-- 接收对端发送 FIN -- FIN_WAIT_2(半关闭)-- 回发ACK -- TIME_WAIT(只有主动关闭连接方,会经历该状态) -- 等 2MSL时长 -- CLOSE
2.2 测试
使用命令查看状态
查看主动关闭方的状态
netstat -apn | grep 9527
查看客户端的TIME_WAIT
先关客户端,再关服务器,此时客户端处于TIME_WAIT状态,并且再次启动程序没有问题。
先关服务器,再关客户端,两端都处于TIME_WAIT状态,并且此时服务器因有2MSL时长,端口复用,无法启动。
3 被动方接受连接
3.1 理论
被动连接连接请求的状态变化如下图
第一阶段:被动接受连接一般都是服务器,因此一开始就处于LISTEN监听状态,的当其收到主动方的SYN标志位后,再向主动方发送SYN标志位和ACK确认信息后,其状态变化为SYN_RCVD。
第二阶段:当被动方收到主动方发送的ACK确认信息后,其状态变化为ESTABLISHED。
状态变化:
CLOSE -- LISTEN -- 接收 SYN -- LISTEN -- 发送 ACK、SYN(发送成功) -- SYN_RCVD -- 接收ACK -- ESTABLISHED(数据通信态)
如果被动方没有收到主动方的ACK确认信息,在被动方一直向主动方发送SYN和ACK。
4 被动关闭连接
4.1 理论
被动关闭连接请求的状态变化如下图。
第一阶段:主动方和被动方都处于数据通信阶段,当被动方收到主动方发送的FIN结束标志,并且被动方向主动方发送ACK确认信息后,
被动方状态变化为CLOSE_WAIT,其与主动方的半关闭状态对应。
第二阶段:被动方向主动方发送FIN结束标志后,其状态变化为LAST_ACK。
第三阶段:当被动方收到主动方的ACK确认后,其状态变化为CLOSE。
状态变化:
STABLISHED(数据通信态) -- 接收 FIN -- ESTABLISHED(数据通信态) -- 发送ACK
-- CLOSE_WAIT (说明对端【主动关闭连接端】处于半关闭状态) -- 发送FIN -- LAST_ACK -- 接收ACK -- CLOSE
2MSAL保证最后一个 ACK 能成功被对端接收。(等待期间,对端没收到我发的ACK,对端会再次发送FIN请求。)
一定出现在【主动关闭连接请求端】。 --- 对应 TIME_WAIT 状态。
5 名词解释
CLOSED:表示初始状态。
LISTEN:该状态表示服务器端的某个SOCKET处于监听状态,可以接受连接。
SYN_SEN:这个状态与SYN_RCVD遥相呼应,当客户端SOCKET执行CONNECT连接时,它首先发送SYN报文,随即进入到了SYN_SENT状态,并等待服务端的发送三次握手中的第2个报文。SYN_SENT状态表示客户端已发送SYN报文。
SYN_RCVD: 该状态表示接收到SYN报文,在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂。此种状态时,当收到客户端的ACK报文后,会进入到ESTABLISHED状态。
ESTABLISHED:表示连接已经建立。
FIN_WAIT_1: FIN_WAIT_1和FIN_WAIT_2状态的真正含义都是表示等待对方的FIN报文。区别是:FIN_WAIT_1状态是当socket在ESTABLISHED状态时,想主动关闭连接,向对方发送了FIN报文,此时该socket进入到FIN_WAIT_1状态。FIN_WAIT_2状态是当对方回应ACK后,该socket进入到FIN_WAIT_2状态,正常情况下,对方应马上回应ACK报文,所以FIN_WAIT_1状态一般较难见到,而FIN_WAIT_2状态可用netstat看到。
FIN_WAIT_2:主动关闭链接的一方,发出FIN收到ACK以后进入该状态。称之为半连接或半关闭状态。该状态下的socket只能接收数据,不能发。
TIME_WAIT: 表示收到了对方的FIN报文,并发送出了ACK报文,等2MSL后即可回到CLOSED可用状态。如果FIN_WAIT_1状态下,收到对方同时带 FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。
CLOSING: 这种状态较特殊,属于一种较罕见的状态。正常情况下,当你发送FIN报文后,按理来说是应该先收到(或同时收到)对方的 ACK报文,再收到对方的FIN报文。但是CLOSING状态表示你发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。什么情况下会出现此种情况呢?如果双方几乎在同时close一个SOCKET的话,那么就出现了双方同时发送FIN报文的情况,也即会出现CLOSING状态,表示双方都正在关闭SOCKET连接。
CLOSE_WAIT: 此种状态表示在等待关闭。当对方关闭一个SOCKET后发送FIN报文给自己,系统会回应一个ACK报文给对方,此时则进入到CLOSE_WAIT状态。接下来呢,察看是否还有数据发送给对方,如果没有可以 close这个SOCKET,发送FIN报文给对方,即关闭连接。所以在CLOSE_WAIT状态下,需要关闭连接。
LAST_ACK: 该状态是被动关闭一方在发送FIN报文后,最后等待对方的ACK报文。当收到ACK报文后,即可以进入到CLOSED可用状态。
边栏推荐
- Yolov6 practice: teach you to use yolov6 for object detection (with data set)
- Acwing game 58
- Y55. Chapter III kubernetes from entry to proficiency -- HPA controller and metrics server (28)
- 【MATLAB】通信信号调制通用函数 — 傅里叶逆变换
- Kivy tutorial 07 component and attribute binding implementation button button click to modify the label component (tutorial includes source code)
- Technology Management - learning / practice
- Utiliser des unités de mesure dans votre code pour une vie meilleure
- Unity中RampTex介绍和应用: 溶解特效优化
- 中科磐云—2022广西逆向解析思路
- appliedzkp zkevm(11)中的EVM Proof
猜你喜欢
Secondary vocational group network security - memory Forensics
Change the background color of Kivy tutorial (tutorial includes source code)
Sample template of software design document - learning / practice
Annexe VI: exposé sur les travaux de défense. Docx
附件六:防守工作简报.docx
《Cross-view Transformers for real-time Map-view Semantic Segmentation》论文笔记
Zhengzhou zhengqingyuan Culture Communication Co., Ltd.: seven marketing skills for small enterprises
Flutter ‘/usr/lib/libswiftCore.dylib‘ (no such file)
VSCode的有用插件
GUI application: socket network chat room
随机推荐
Definition of DCDC power supply current
【MATLAB】MATLAB 仿真模拟调制系统 — DSB 系统
Rollup各组件作用
C language one-way linked list exercise
RPC Technology
Network equipment emergency response Guide
Correct the classpath of your application so that it contains a single, compatible version of com. go
【MATLAB】通信信号调制通用函数 — 低通滤波器
RPC - gRPC简单的demo - 学习/实践
Share some of my telecommuting experience
【MATLAB】MATLAB 仿真数字基带传输系统 — 双极性基带信号(余弦滚降成形脉冲)的眼图
令人头痛的延时双删
Intersection traffic priority, illustration of intersection traffic rules
【MATLAB】通信信号调制通用函数 — 带通滤波器
中科磐云—2022广东木马信息获取解析
海力士EMMC5.0及5.1系列对比详解
1. Mx6u-alpha development board (simulating STM32 drive development experiment)
Create ASM disk through DD
【MATLAB】MATLAB 仿真 — 低通高斯白噪声
Network - vxlan