重学TCP协议(8) TCP的11种状态
TCP的11种状态
为了逻辑更加清晰,假设主动打开连接和关闭连接皆为客户端,被动打开连接和关闭连接皆为服务端
客户端独有的:(1)SYN_SENT (2)FIN_WAIT1 (3)FIN_WAIT2 (4)CLOSING (5)TIME_WAIT
服务器独有的:(1)LISTEN (2)SYN_RCVD (3)CLOSE_WAIT (4)LAST_ACK 。
共有的:(1)CLOSED (2)ESTABLISHED 。
1. LISTEN(服务端)
首先服务端需要打开一个 socket 进行监听,状态为LISTEN。
有提供某种服务才会处于LISTENING状态, TCP状态变化就是某个端口的状态变化,提供一个服务就打开一个端口,例如:提供www服务默认开的是80端口,提供ftp服务默认的端口为21,当提供的服务没有被连接时就处于LISTENING状态。FTP服务启动后首先处于侦听(LISTENING)状态。处于侦听LISTENING状态时,该端口是开放的,等待连接,但还没有被连接。就像你房子的门已经敞开的,但还没有人进来。
在客户端发送连接请求后,等待匹配的连接请求:
客户端通过应用程序调用connect进行active open.于是客户端tcp发送一个SYN以请求建立一个连接.之后状态置为SYN_SENT. /*The socket is actively attempting to establish a connection. 在发送连接请求后等待匹配的连接请求 */
2. SYN_SENT(客户端)
当请求连接时客户端首先要发送同步信号给要访问的机器,此时状态为SYN_SENT,同时会开启一个定时器,如果超时还没有收到ACK会重发 SYN。正常情况下SYN_SENT状态非常短暂。
例如要访问网站http://www.baidu.com ,如果是正常连接的话,用TCPView观察 IEXPLORE .EXE(IE)建立的连接会发现很快从SYN_SENT变为ESTABLISHED,表示连接成功。SYN_SENT状态快的也许看不到。
3. SYN-RECEIVED(服务端)
收到和发送一个连接请求后,等待对方对连接请求的确认。当服务器收到客户端发送的同步信号时,将标志位ACK和SYN置1发送给客户端,此时服务器端处于SYN_RCVD状态,如果连接成功了就变为ESTABLISHED,正常情况下SYN_RCVD状态非常短暂。
4. ESTABLISHED(共有)
ESTABLISHED状态是表示两台机器正在传输数据,观察这个状态最主要的就是看哪个程序正在处于ESTABLISHED状态。
5. FIN_WAIT_1(客户端)
主动关闭(active close)端应用程序调用close,于是其TCP发出FIN请求主动关闭连接,之后进入FIN_WAIT_1状态.
6. FIN-WAIT_2(客户端)
主动关闭端接到服务端的ACK后,就进入了FIN-WAIT-2。这就是著名的半关闭的状态了,这是在关闭连接时,客户端和服务器两次握手之后的状态。在这个状态下,应用程序还有接受数据的能力,但是已经无法发送数据,但是也有一种可能是,客户端一直处于FIN_WAIT_2状态,而服务器则一直处于WAIT_CLOSE状态,而直到应用层来决定关闭这个状态
7. CLOSE_WAIT(服务端)
服务端端TCP接到FIN后,就发出ACK以回应FIN请求(它的接收也作为文件结束符传递给上层应用程序),并进入CLOSE_WAIT.
8. TIME-WAIT(客户端)
在客户端接收到服务端的FIN后,客户端就发送ACK包,并进入TIME-WAIT状态
TIME_WAIT等待状态,这个状态又叫做2MSL状态,说的是在TIME_WAIT2发送了最后一个ACK数据报以后,要进入TIME_WAIT状态,这个状态是防止最后一次握手的数据报没有传送到对方那里而准备的(注意这不是四次握手,这是第四次握手的保险状态)。这个状态在很大程度上保证了双方都可以正常结束。
9. LAST-ACK(服务端)
服务端已经发送FIN以后等待客户端发送的ACK
被动关闭端一段时间后,接收到文件结束符的应用程序将调用CLOSE关闭连接。这导致它的TCP也发送一个 FIN,等待对方的ACK.就进入了LAST-ACK
10. CLOSING(客户端)
CLOSING状态在「同时关闭」的情况下出现。这里的同时关闭中的「同时」其实并不是时间意义上的同时,而是指的是在发送 FIN 包还未收到确认之前,收到了对端的 FIN 的情况。
11. closed(共有)
服务端在接受到ACK包后,就进入了closed的状态。连接结束
重学TCP协议(8) TCP的11种状态相关推荐
- TCP协议连接的11种状态浅谈
了解TCP的协议可以在很大程度上帮助我们分析服务器当前的TCP连接状态,同时也是排查一些网络故障的基础,首先来看一下TCP协议的三次握手与四次断开. TCP协议三次握手 1.客户端首先发起连接,也 ...
- 实时监测tcp链接状态_终于搞懂了 TCP 的 11 种状态,太不容易了…
后台回复"666",获取新资料 本来想写运维过程中,nginx 服务器中 time_wait 的相关测试及解决方法的,然后发现TCP 的状态需要先铺垫一下,于是就整理了这篇文章. ...
- TCP协议及TCP正常连接与断开
一.TCP协议简介 TCP,全称Transfer Control Protocol,中文名为传输控制协议,它工作在OSI的传输层,提供面向连接的可靠传输服务. TCP的工作主要是建立连接,然后从应用层 ...
- 【计算机网络】传输层 : 总结 ( TCP / UDP 协议 | 寻址与端口 | UDP 协议 | TCP 协议特点 | TCP 连接释放 | TCP 流量控制 | TCP 拥塞控制 ) ★★★
文章目录 一.传输层 TCP / UDP 协议 ★ 二.寻址端口号 ★ 三.UDP 协议特点 四.UDP 协议首部格式 五.UDP 校验 六.TCP 协议 特点 ★ 七.TCP 报文段首部格式 八.T ...
- 【计算机网络】传输层 : TCP 协议 ( TCP 协议特点 | TCP 报文段首部格式 | TCP 报文段控制位 )
文章目录 一.TCP 协议 特点 二.TCP 报文段首部格式 三.TCP 报文段首部 666 控制位 一.TCP 协议 特点 TCP 协议 特点 : ① 面向连接 : TCP 协议的连接是 " ...
- go 监测tcp 连接断开_TCP三次握手和四次挥手以及11种状态
三次握手 置位概念:根据TCP的包头字段,存在3个重要的标识ACK.SYN.FIN ACK:表示验证字段 SYN:位数置1,表示建立TCP连接 FIN:位数置1,表示断开TCP连接 三次握手过程说明: ...
- java tcp ack_TCP三次握手和四次挥手以及11种状态
Java面试笔试面经.Java技术每天学习一点 作者:IT_外卖小哥 来源:https://blog.51cto.com/jinlong 1.三次握手 置位概念:根据TCP的包头字段,存在3个重要的标 ...
- TCP三次握手四次断开及11种状态转变
TCP三次握手四次断开及11种状态转变 置位概念: 根据TCP的包头字段,存在三个重要的标识ACK.SYN.FIN ACK: 表示验证字段 SYN: 位数置为1,表示建立TCP连接 FIN: 位数置为 ...
- TCP/IP 协议簇 端口 三次握手 四次挥手 11种状态集
第1章 概念介绍 1.1 VLAN 1.1.1 什么是VLAN VLAN(Virtual LAN),翻译成中文是"虚拟局域网".LAN可以是由少数几台家用计算机构成的网络,也可以是 ...
最新文章
- Linux 多版本python3、python2共存安装
- Sqlserver:sp_recompile的副作用
- VBS 脚本语言-利用vbs调用ie浏览器访问百度查天气实例演示
- Java lambda例子
- 前端学习(1671):前端系列实战课程之透明度运动效果实现思路
- 【剑指offer】面试题27:二叉树的镜像(Java)
- Math类的三个方法比较: floor() ceil() round()
- 【机器学习-西瓜书】八、Bagging;随机森林(RF)
- Android 7.1 竖屏转横屏全过程实现-基于高通平台
- 获取音频频响和失真_专业音响设备_音频功放失真的四大要点及改善方法
- Java 封装、继承、多态的理解
- 如何压缩pdf文件的大小?
- echarts 地图散点
- qcom usb驱动下载_艾肯Mobile Q驱动下载
- 图片怎么转化word文档?分享一个实用的方法。
- 人工智能对智能建筑有哪些影响,智能建筑发展存在哪些问题?
- python拦截广告弹窗_电脑总是有弹窗广告,真的烦人,一招教你解决!
- Emacs入门:重要的基本概念、基本读写操作以及一些常用的快捷键
- 如何用几何画板把圆奇数等分
- “代理服务出现问题,或者地址有误“解决方案
热门文章
- AUTOSAR MCAL详解: SPI (2)
- Linux高级运维: Session与Cookie 、 部署memcached和Session共享(OPERATION----DAY36)
- 计算机程序员笔试题,历年计算机软考程序员笔试真题及答案
- python设计一个学生类姓名年龄成绩_C# 编写学生类Student,包含学生姓名,成绩,设计一个友员函数sortDegree(),将学生成绩按大到小排序。...
- springboot和springMVC
- js验证身份证(详细版)
- python保存图片到指定路径_python 抓取页面数据,并保存图片文本到指定目录文件夹...
- 自己动手写Spring-1-简单的IOC实现
- vue脚手架结构目录文件
- ASP.NET Core 和 EF Core系列教程——CRUD