了解TCP的协议可以在很大程度上帮助我们分析服务器当前的TCP连接状态,同时也是排查一些网络故障的基础,首先来看一下TCP协议的三次握手与四次断开。
TCP协议三次握手
 
1.客户端首先发起连接,也就是第一次握手,处于SYN_SENT状态。
2.服务器端收到SYS 数包,立即发送ACK 应答,并发送自己的SYN(第二次握手);状态被置为SYN_RECEIVED。
3.客户端接收到服务器端的应答,将自己置于ESTABLISHED,表示已经准备就绪,同时发出ACK 应答(第三次握手)。
4.服务器端接收到应答,立即将自己置于ESTABLISHED 状态,开始发送数据。
数据传输keepalive
 
中间的这段时间可以称之为连接保持阶段,既服务器端与数据段正在传输数据。
TCP协议四次挥手
 
1.客户端接收完数据后,发送FIN,同时将自己置于FIN_WAIT_1 状态,等待服务器端的应答。
2.服务器端收到关闭请求,将自己置于CLOSE_WAIT,等待本地用户(进程)的关闭命令。同时发送应答告诉客户端可以关闭,并且自己也向客户端请求关闭,发出后将自己从CLOSE_WAIT 变迁到LAST_ACK 状态,等待客户端应答后由本地用户(进程)执行关闭操作。
3.客户端在接到服务的应答后,将自己的状态置于FIN_WAIT_2,等到服务器段发出FIN( 关闭请求), 当接收到服务器端发来的FIN 之后, 将自己置于TIME_WAIT(因为是客户端发起的关闭所以是TIME_WAIT,如果是服务器端发起的关闭,那么我们看到的将是CLOSE_WAIT。CLOSE_WAIT 是我们在浏览网页时经常看到的状态,因为网页传输完成后通常由服务器发起关闭命令),等待一定的时间以确保服务器接收到应答。
TCP协议的11种状态
 
LISTEN:等待从任何远端TCP 和端口的连接请求。
SYN_SENT:发送完一个连接请求后等待一个匹配的连接请求。
SYN_RECEIVED:发送连接请求并且接收到匹配的连接请求以后等待连接请求确认。
ESTABLISHED:表示一个打开的连接,接收到的数据可以被投递给用户。连接的数据传输阶段的正常状态。
FIN_WAIT_1:等待远端TCP 的连接终止请求,或者等待之前发送的连接终止请求的确认。
FIN_WAIT_2:等待远端TCP 的连接终止请求。
CLOSE_WAIT:等待本地用户的连接终止请求。
CLOSING:等待远端TCP 的连接终止请求确认。
LAST_ACK:等待先前发送给远端TCP 的连接终止请求的确认(包括它字节的连接终止请求的确认)
TIME_WAIT:等待足够的时间过去以确保远端TCP 接收到它的连接终止请求的确认。
CLOSED:不在连接状态(这是为方便描述假想的状态,实际不存在)
写在最后
 
熟悉掌握TCP/IP协议是作为一名出色的网络工程师必备的技能,等有时间我也要好好温习下这门功课了,因为不管是在平时管理网络当中,还是在处理系统错误的过程中,掌握这些协议真的是很有用。
原创文章首发自阿布的博客,转载请注明,本文地址:http://www.abuve.com/294.html

转载于:https://blog.51cto.com/abuve/611468

TCP协议连接的11种状态浅谈相关推荐

  1. tcp断开连接的几种状态

    FIN_WAIT_1:主动关闭连接的一方等待对方返回ACK包.若Socket在ESTABLISHED状态下主动关闭连接并向对方发送FIN包(表示己方不再有数据需要发送),则进入FIN_WAIT_1状态 ...

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

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

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

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

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

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

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

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

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

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

  7. 【性能优化】网络编程 - PHP - 使用TCP长连接的一种优化思路 - 学习/实践

    1.应用场景 主要了解学习如何基于PHP使用TCP长连接的一种优化思路. 2.学习/参考 文档阅读 PHP - CGI, Fast-FGI, PHP-FPM - 学习/实践 php使用tcp长连接的一 ...

  8. 计算机机房搬迁复杂吗,中心机房搬迁的两种方式浅谈

    中心机房搬迁的两种方式浅谈 最近在处理中心机房机房搬迁的事宜,很多事情其实看起来简单,但是实现的时候总会有一些不如意的地方,很可能你考虑的是一个看起来非常稳定完美的搬迁,但是 实现中总会有这样那样的限 ...

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

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

最新文章

  1. hpg8服务器系列指示灯意思,HP Proliant GEN8服务器指示灯说明
  2. Oracle 11g 通过创建物化视图实现不同数据库间的表数据同步
  3. UVA211 TheDomino Effect 多米诺效应
  4. Linux 命令之 unzip -- 解压缩文件
  5. Python---实验九
  6. 卡住 安装_【书中有路】弹簧式安全阀结构原理、故障解析、安装要点
  7. SQL Server 2008支持将数据导出为脚本 / 导出单张表
  8. Db4o 新建、查询、更新、删除操作
  9. PLC 有哪几种常用编程语言
  10. 计算机显示去掉拼音分类,大师传授win10系统取消电脑文件显示以字母数字拼音分组的办法...
  11. 数学建模竞赛经验分享(从本科生到研究生,获奖成功率100%,我从数模所学)
  12. UBUNTU——启动栏图标问号?异常
  13. Edison编译时显示No such file or directory
  14. 取消Excel里面全部超级链接
  15. 电脑删除快捷键还有哪些?学会了让工作效率更提升
  16. 单片机 74HC595 实例
  17. Zabbix启动失败,提示Zabbix-agent.servic never wrote its PID file,failing
  18. 计算机网络学习-003
  19. JavaSE、JavaEE、JavaME三者之间的关系与区别
  20. windows 完成端口

热门文章

  1. [PAL编程规范]SAP HANA PAL逻辑回归预测分析Logistic Regression编程规范LOGISTICREGRESSION(模型)...
  2. C#者重建C++之路 - 运行机制的差异
  3. python 多数据输出到txt_详解python读取和输出到txt
  4. [LGP4859,...] 一类奇怪的容斥套DP
  5. 【科技】浅谈圆的反演
  6. 确保nginx安全的10个技巧
  7. AtCoder Regular Contest 098
  8. MIT自然语言处理第三讲:概率语言模型
  9. 第1天 XML和DTD、schema约束
  10. 静态Web开发 JQuery