文章目录

  • 计算机网络之TCP中11种状态
    • 1.TCP中11种状态

计算机网络之TCP中11种状态

1.TCP中11种状态

1.CLOSED:
初始状态,表示TCP连接是“关闭着的”或“未打开的”。
2.LISTEN:
表示服务器端的某个SOCKET处于监听状态,可以接受客户端的连接。
3.SYN_RCVD:
表示服务器接收到了来自客户端请求连接的SYN报文。在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂,基本上用netstat很难看到这种状态,除非故意写一个监测程序,将三次TCP握手过程中最后一个ACK报文不予发送。当TCP连接处于此状态时,再收到客户端的ACK报文,它就会进入到ESTABLISHED 状态。
4.SYN_SENT:
这个状态与SYN_RCVD 状态相呼应,当客户端SOCKET执行connect()进行连接时,它首先发送SYN报文,然后随即进入到SYN_SENT 状态,并等待服务端的发送三次握手中的第2个报文。SYN_SENT 状态表示客户端已发送SYN报文。
5.ESTABLISHED:
表示TCP连接已经成功建立; 表示两台机器正在传输数据
6.FIN_WAIT_1 :
这个状态得好好解释一下,其实FIN_WAIT_1 和FIN_WAIT_2 两种状态的真正含义都是表示等待对方的FIN报文。而这两种状态的区别是:FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET进入到FIN_WAIT_1 状态。而当对方回应ACK报文后,则进入到FIN_WAIT_2 状态。当然在实际的正常情况下,无论对方处于任何种情况下,都应该马上回应ACK报文,所以FIN_WAIT_1 状态一般是比较难见到的,而FIN_WAIT_2 状态有时仍可以用netstat看到
fin_wait1状态是在server端主动要求关闭tcp连接,并且主动发送fin以后,等待client端回复ack时候的状态
7.FIN_WAIT_2:
上面已经解释了这种状态的由来,实际上FIN_WAIT_2状态下的SOCKET表示半连接,即有一方调用close()主动要求关闭连接。注意:FIN_WAIT_2 是没有超时的(不像TIME_WAIT 状态),这种状态下如果对方不关闭(不配合完成4次挥手过程),那这个 FIN_WAIT_2 状态将一直保持到系统重启,越来越多的FIN_WAIT_2 状态会导致内核crash。
8.TIME_WAIT:
表示收到了对方的FIN报文,并发送出了ACK报文。 TIME_WAIT状态下的TCP连接会等待2*MSL(Max Segment Lifetime,最大分段生存期,指一个TCP报文在Internet上的最长生存时间。每个具体的TCP协议实现都必须选择一个确定的MSL值,RFC 1122建议是2分钟,但BSD传统实现采用了30秒,Linux可以cat /proc/sys/net/ipv4/tcp_fin_timeout看到本机的这个值),然后即可回到CLOSED 可用状态了。如果FIN_WAIT_1状态下,收到了对方同时带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。(这种情况应该就是四次挥手变成三次挥手的那种情况)
9.CLOSING :
这种状态在实际情况中应该很少见,属于一种比较罕见的例外状态。正常情况下,当一方发送FIN报文后,按理来说是应该先收到(或同时收到)对方的ACK报文,再收到对方的FIN报文。但是CLOSING 状态表示一方发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。什么情况下会出现此种情况呢?那就是当双方几乎在同时close()一个SOCKET的话,就出现了双方同时发送FIN报文的情况,这是就会出现CLOSING 状态,表示双方都正在关闭SOCKET连接。
10.CLOSE_WAIT :
表示正在等待关闭。怎么理解呢?当对方close()一个SOCKET后发送FIN报文给自己,你的系统毫无疑问地将会回应一个ACK报文给对方,此时TCP连接则进入到CLOSE_WAIT状态。接下来呢,你需要检查自己是否还有数据要发送给对方,如果没有的话,那你也就可以close()这个SOCKET并发送FIN报文给对方,即关闭自己到对方这个方向的连接。有数据的话则看程序的策略,继续发送或丢弃。简单地说,当你处于CLOSE_WAIT 状态下,需要完成的事情是等待你去关闭连接。
11.LAST_ACK:
当被动关闭的一方在发送FIN报文后,等待对方的ACK报文的时候,就处于LAST_ACK 状态。当收到对方的ACK报文后,也就可以进入到CLOSED 可用状态了。

计算机网络之TCP中11种状态相关推荐

  1. 实时监测tcp链接状态_终于搞懂了 TCP 的 11 种状态,太不容易了…

    后台回复"666",获取新资料 本来想写运维过程中,nginx 服务器中 time_wait 的相关测试及解决方法的,然后发现TCP 的状态需要先铺垫一下,于是就整理了这篇文章. ...

  2. 重学TCP协议(8) TCP的11种状态

    TCP的11种状态 为了逻辑更加清晰,假设主动打开连接和关闭连接皆为客户端,被动打开连接和关闭连接皆为服务端 客户端独有的:(1)SYN_SENT (2)FIN_WAIT1 (3)FIN_WAIT2 ...

  3. 计算机网络之TCP中6种标识位

    文章目录 计算机网络之TCP中6种标识位 1.TCP中6种标识位 2.SYN 3.ACK 4.FIN 计算机网络之TCP中6种标识位 1.TCP中6种标识位 标志位也叫位码.也叫控制位 SYN (sy ...

  4. Linux命令:netstat【监控TCP/IP网络,可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息】【TCP的11种状态】

    netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表.实际的网络连接以及每一个网络接口设备的状态信息. netstat [选项] 选项 描述 -a 显示所有网络连接和监听的所 ...

  5. TCP协议连接的11种状态浅谈

    了解TCP的协议可以在很大程度上帮助我们分析服务器当前的TCP连接状态,同时也是排查一些网络故障的基础,首先来看一下TCP协议的三次握手与四次断开. TCP协议三次握手   1.客户端首先发起连接,也 ...

  6. go 监测tcp 连接断开_TCP三次握手和四次挥手以及11种状态

    三次握手 置位概念:根据TCP的包头字段,存在3个重要的标识ACK.SYN.FIN ACK:表示验证字段 SYN:位数置1,表示建立TCP连接 FIN:位数置1,表示断开TCP连接 三次握手过程说明: ...

  7. java tcp ack_TCP三次握手和四次挥手以及11种状态

    Java面试笔试面经.Java技术每天学习一点 作者:IT_外卖小哥 来源:https://blog.51cto.com/jinlong 1.三次握手 置位概念:根据TCP的包头字段,存在3个重要的标 ...

  8. TCP三次握手四次断开及11种状态转变

    TCP三次握手四次断开及11种状态转变 置位概念: 根据TCP的包头字段,存在三个重要的标识ACK.SYN.FIN ACK: 表示验证字段 SYN: 位数置为1,表示建立TCP连接 FIN: 位数置为 ...

  9. zabbix Server 4.0 监控TCP的12种状态

      zabbix Server 4.0 监控TCP的12种状态 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 大家对TCP三次握手比较熟悉了,都知道当发生DOSS攻击时,客户端发送 ...

  10. TCP/IP 协议簇 端口 三次握手 四次挥手 11种状态集

    第1章 概念介绍 1.1 VLAN 1.1.1 什么是VLAN VLAN(Virtual LAN),翻译成中文是"虚拟局域网".LAN可以是由少数几台家用计算机构成的网络,也可以是 ...

最新文章

  1. 神策数据潘书荟:解读千人千面,洞悉数据智能的价值
  2. Leetcode: Binary Tree Maximum Path Sum
  3. Zookeeper实战之单机模式
  4. (转)MyBatis框架的学习(七)——MyBatis逆向工程自动生成代码
  5. Django实战(10):单元测试
  6. hmcl启动器java下载_HMCL启动器|Hello Minecraft! Launcher 3.2 —— Win/Mac苹果系统/Ubuntu|2亿次使用...
  7. sqlmap的简单使用(sql注入)
  8. 删除文件时提示正在被使用无法删除问题/删除dll文件
  9. 【听课笔记】复旦大学遗传学_07基因表达调控
  10. 去除xp桌面图标阴影
  11. 深究递归和迭代的区别、优缺点及实例对比
  12. Android自定义锁屏实现----仿正点闹钟滑屏解锁
  13. cacti graphs new.php,Cacti /graphs_new.php SQL Injection Vulnerability
  14. 北京思想聚合科技有限公司
  15. 1. 学校在线考试系统
  16. The missing semester of your CS education--命令行环境
  17. Andriod Studio虚拟机启动失败解决方案
  18. 为什么OSPF在广播网络里面,DD和LSR采用单播,而LSU hello采用组播。
  19. 【Linux】文件的编码语系转换与换行符转换
  20. connect 连接超时

热门文章

  1. 网站建设教程:如何自己做网站,步骤有哪些?
  2. 百度 95 后程序员删库跑路被判刑,动机为工作内容变动及对领导不满,删库会给互联网公司带来哪些影响?
  3. IOS捷径早安,创建自动化可实现自动化叫醒
  4. python 波浪号用法_波浪号(~)是什么意思,正规的用法是什么?
  5. 情人节神奇的传情之物,“懂爱”的你都会爱上它丨情人节系列
  6. 计蒜客 - T1212 仙岛求药 BFS+DFS剪枝
  7. 交换机和集线器的区别
  8. 如何c语言看字节大小,如何计算C语言结构占用的字节数
  9. 小觅双目+IMU联合标定
  10. Android Wi-Fi源码分析之wpa_supplicant初始化(三):wpa_supplicant_add_iface函数分析