了解TCP协议端口的连接状态,对排除和定位网络或系统故障会有很大帮助,因此了解一下是有必要的:

一、LISTENING 

  提供某种服务,侦听远方TCP端口的连接请求,当提供的服务没有被连接时,处于LISTENING状态,端口是开放的,等待被连接。

二、SYN_SENT (客户端状态)

  客户端调用connect,发送一个SYN请求建立一个连接,在发送连接请求后等待匹配的连接请求,此时状态为SYN_SENT.

三、SYN_RECEIVED (服务端状态)

  在收到和发送一个连接请求后,等待对方对连接请求的确认,当服务器收到客户端发送的同步信号时,将标志位ACK和SYN置1发送给客户端,此时服务器端处于SYN_RCVD状态,如果连接成功了就变为ESTABLISHED,正常情况下SYN_RCVD状态非常短暂。

四、ESTABLISHED

  ESTABLISHED状态是表示两台机器正在传输数据。

五、FIN-WAIT-1

  等待远程TCP连接中断请求,或先前的连接中断请求的确认,主动关闭端应用程序调用close,TCP发出FIN请求主动关闭连接,之后进入FIN_WAIT1状态。

六、FIN-WAIT-2

  从远程TCP等待连接中断请求,主动关闭端接到ACK后,就进入了FIN-WAIT-2 .这是在关闭连接时,客户端和服务器两次握手之后的状态,是著名的半关闭的状态了,在这个状态下,应用程序还有接受数据的能力,但是已经无法发送数据,但是也有一种可能是,客户端一直处于FIN_WAIT_2状态,而服务器则一直处于WAIT_CLOSE状态,而直到应用层来决定关闭这个状态。

  附半关闭例图:

七、CLOSE-WAIT

  等待从本地用户发来的连接中断请求 ,被动关闭端TCP接到FIN后,就发出ACK以回应FIN请求(它的接收也作为文件结束符传递给上层应用程序),并进入CLOSE_WAIT.

八、CLOSING

  等待远程TCP对连接中断的确认,处于此种状态比较少见。

九、LAST-ACK

  等待原来的发向远程TCP的连接中断请求的确认,被动关闭端一段时间后,接收到文件结束符的应用程序将调用CLOSE关闭连接,TCP也发送一个 FIN,等待对方的ACK.进入LAST-ACK。

十、TIME-WAIT

  在主动关闭端接收到FIN后,TCP就发送ACK包,并进入TIME-WAIT状态,等待足够的时间以确保远程TCP接收到连接中断请求的确认,很大程度上保证了双方都可以正常结束,但是也存在问题,须等待2MSL时间的过去才能进行下一次连接。

十一、CLOSED

  被动关闭端在接受到ACK包后,就进入了closed的状态,连接结束,没有任何连接状态。

TCP正常连接建立和终止所对应的状态图

:本文为博主原创文章,未经博主允许不得转载。

jessezeng

TCP协议端口状态说明:CLOSE-WAIT、TIME-WAIT 、LISTENING、SYN_SENT、ESTABLISHED、LAST-ACK ...

了解TCP协议端口的连接状态,对排除和定位网络或系统故障会有很大帮助,因此了解一下是有必要的:

一、LISTENING 

  提供某种服务,侦听远方TCP端口的连接请求,当提供的服务没有被连接时,处于LISTENING状态,端口是开放的,等待被连接。

二、SYN_SENT (客户端状态)

  客户端调用connect,发送一个SYN请求建立一个连接,在发送连接请求后等待匹配的连接请求,此时状态为SYN_SENT.

三、SYN_RECEIVED (服务端状态)

  在收到和发送一个连接请求后,等待对方对连接请求的确认,当服务器收到客户端发送的同步信号时,将标志位ACK和SYN置1发送给客户端,此时服务器端处于SYN_RCVD状态,如果连接成功了就变为ESTABLISHED,正常情况下SYN_RCVD状态非常短暂。

四、ESTABLISHED

  ESTABLISHED状态是表示两台机器正在传输数据。

五、FIN-WAIT-1

  等待远程TCP连接中断请求,或先前的连接中断请求的确认,主动关闭端应用程序调用close,TCP发出FIN请求主动关闭连接,之后进入FIN_WAIT1状态。

六、FIN-WAIT-2

  从远程TCP等待连接中断请求,主动关闭端接到ACK后,就进入了FIN-WAIT-2 .这是在关闭连接时,客户端和服务器两次握手之后的状态,是著名的半关闭的状态了,在这个状态下,应用程序还有接受数据的能力,但是已经无法发送数据,但是也有一种可能是,客户端一直处于FIN_WAIT_2状态,而服务器则一直处于WAIT_CLOSE状态,而直到应用层来决定关闭这个状态。

  附半关闭例图:

  

七、CLOSE-WAIT

  等待从本地用户发来的连接中断请求 ,被动关闭端TCP接到FIN后,就发出ACK以回应FIN请求(它的接收也作为文件结束符传递给上层应用程序),并进入CLOSE_WAIT.

八、CLOSING

  等待远程TCP对连接中断的确认,处于此种状态比较少见。

九、LAST-ACK

  等待原来的发向远程TCP的连接中断请求的确认,被动关闭端一段时间后,接收到文件结束符的应用程序将调用CLOSE关闭连接,TCP也发送一个 FIN,等待对方的ACK.进入LAST-ACK。

十、TIME-WAIT

  在主动关闭端接收到FIN后,TCP就发送ACK包,并进入TIME-WAIT状态,等待足够的时间以确保远程TCP接收到连接中断请求的确认,很大程度上保证了双方都可以正常结束,但是也存在问题,须等待2MSL时间的过去才能进行下一次连接。

十一、CLOSED

  被动关闭端在接受到ACK包后,就进入了closed的状态,连接结束,没有任何连接状态。

TCP正常连接建立和终止所对应的状态图

  

状态迁移过程:

  a、客户端:

    CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED

  b、服务端

    CLOSED->LISTEN->SYN_RECEIVED->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSE

在众多状态中,经常关注的有两个:TIME_WAIT、CLOSE_WAIT。

附状态迁移过程图:

TCP协议端口状态说明:CLOSE-WAIT、TIME_WAIT 、LISTENING、SYN_SENT、ESTABLISHED、LAST_ACK、CLOSED相关推荐

  1. tcp协议不具备的功能是_TCP协议的状态深度解析,你知道的和不知道的都在这篇文章(干货)...

    今天和大家说说,TCP协议的状态解析.大家可以看看下图,接下来我们会详细说明. 发起握手阶段 CLOSED:表示初始状态. LISTEN:表示服务器端的某个SOCKET处于监听状态,可以接受连接. S ...

  2. 判断端口是否能用_扫描器篇(八)之python+scapy构造TCP协议包扫描主机端口

    TCP协议端口扫描 要使用TCP协议去完成端口扫描,肯定是需要了解TCP协议通信过程和原理才能完成的 TCP协议的特点 1 面向连接的:使用TCP协议通信的双方必须先建立连接,然后才能开始数据的读写, ...

  3. TCP协议常见的端口

    服务器的端口分类很多,如果根据所提供的服务方式来划分,服务器端口可分为"TCP协议端口"和"UDP协议端口"两种.而采用TCP协议的是一种直接与接收方进行的连接 ...

  4. TCP协议、算法和原理

    TCP是一个巨复杂的协议,因为他要解决很多问题,而这些问题又带出了很多子问题和阴暗面.所以学习TCP本身是个比较痛苦的过程,但对于学习的过程却能让人有很多收获. 关于TCP这个协议的细节,我还是推荐你 ...

  5. 通俗大白话来理解TCP协议的三次握手和四次分手

    最近在恶补计算机网络方面的知识,之前对于TCP的三次握手和四次分手也是模模糊糊,对于其中的细节更是浑然不知,最近看了很多这方面的知识,也在系统的学习计算机网络,加深自己的CS功底,就把看过的一些比较好 ...

  6. TCP协议的三次握手和四次分手

    HTTP连接 HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用. ...

  7. 浅谈TCP协议与DDOS

    本节内容 1.TCP协议浅谈 1.HTTP连接 2.SOCKET原理 3.TCP介绍 4.TCP连接的三次握手与四次挥手 2.DDOS 1.什么是DDOS 2.攻击原理 3.防护方法 4.其他攻击方式 ...

  8. 《lwip学习10》-- TCP协议

    TCP服务简介 UDP 运载的数据是以报文的形式,各个报文在网络中互不相干传输, UDP 每收到一个报文就递交给上层应用,因此如果对于大量数据来说,应用层的重装是非常麻烦的,因为UDP 报文在网络中到 ...

  9. 易语言tcp多线程服务端客户端_从TCP协议到TCP通信的各种异常现象和分析

    很多人总觉得学习TCP/IP协议没什么用,觉得日常编程开发只需要知道socket接口怎么用就可以了.如果大家定位过线上问题就会知道,实际上并非如此.如果应用在局域网内,且设备一切正常的情况下可能确实如 ...

最新文章

  1. Android中 AsyncTask
  2. 数据库的数据在硬盘上吗
  3. 使用架构(XSD)验证XML文件
  4. 飞桨第三课2020.4.2
  5. java实现输出字符串中的数字字符
  6. redis集群linux安装教程,linux下redis集群的原生安装方式部署
  7. mysql 多表删除
  8. R中读取文件,找不到路径问题 No such file or directory
  9. “他们”将变身为全国最大的房屋租赁供应商
  10. web高拍仪图片上传
  11. Unity3D 2D设计小游戏移动幻影的实现
  12. C#莱姆达表达式的使用
  13. Axure9.0---输入文字时文本框提示消失
  14. STC12C5A60S2串口通信(使用独立波特率发生器)
  15. 牛人分析如何高效学习嵌入式
  16. Python图像处理之识别图像中的文字
  17. Windows下创建自定义服务的正确姿势(InstrsrvSrvany)
  18. HTML语言怎么对表格求和,excel求和怎么弄 EXCEL表格求和公式怎么运用?
  19. 中文文件如何翻译为英文
  20. NOR Flash擦写和原理分析

热门文章

  1. NAR再版 | 人类长非编码RNA知识库LncRNAWiki 2.0
  2. ubuntu下gvim启动出现gtk warning Invalid input string
  3. Final Cut Pro X实用教程:FCPX安装插件位置以及如何删除插件
  4. 第67课 选择排序 例67.1 《小学生C++编程入门》
  5. 计算机网络课程设计之网络嗅探器的设计与实现
  6. python中os模块里有哪些类_python-os模块的常用方法
  7. Python笔记-CAPM(资本资产定价模型)例子
  8. BootStrap笔记-分页
  9. cuda笔记-初始化矩阵及thread,block,grid概念
  10. Java学习笔记-Spring IoC 通过XML把Bean给IoC容器