http://kendy.blog.51cto.com/147692/34057

1、建立连接协议(三次握手)

(1)客户端发送一个带SYN标志的TCP报文到服务器。这是三次握手过程中的报文1.
(2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN标志。因此它表示对刚才客户端SYN报文的回应;同时又标志SYN给客户端,询问客户端是否准备好进行数据通讯。
(3) 客户必须再次回应服务段一个ACK报文,这是报文段3.
2、连接终止协议(四次分手)
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
(1) TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送(报文段4)。
(2) 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。
(3) 服务器关闭客户端的连接,发送一个FIN给客户端(报文段6)。
(4) 客户段发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)。
CLOSED: 这个没什么好说的了,表示初始状态。
LISTEN: 这个也是非常容易理解的一个状态,表示服务器端的某个SOCKET处于监听状态,可以接受连接了。
SYN_RCVD: 这个状态表示接受到了SYN报文,在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂,基本上用netstat你是很难看到这种状态的,除非你特意写了一个客户端测试程序,故意将三次TCP握手过程中最后一个ACK报文不予发送。因此这种状态时,当收到客户端的ACK报文后,它会进入到ESTABLISHED状态。
SYN_SENT: 这个状态与SYN_RCVD遥想呼应,当客户端SOCKET执行CONNECT连接时,它首先发送SYN报文,因此也随即它会进入到了SYN_SENT状态,并等待服务端的发送三次握手中的第2个报文。SYN_SENT状态表示客户端已发送SYN报文。
ESTABLISHED:这个容易理解了,表示连接已经建立了。
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_WAIT_2:上面已经详细解释了这种状态,实际上FIN_WAIT_2状态下的SOCKET,表示半连接,也即有一方要求close连接,但另外还告诉对方,我暂时还有点数据需要传送给你,稍后再关闭连接。
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: 这种状态的含义其实是表示在等待关闭。怎么理解呢?当对方close一个SOCKET后发送FIN报文给自己,你系统毫无疑问地会回应一个ACK报文给对方,此时则进入到CLOSE_WAIT状态。接下来呢,实际上你真正需要考虑的事情是察看你是否还有数据发送给对方,如果没有的话,那么你也就可以close这个SOCKET,发送FIN报文给对方,也即关闭连接。所以你在CLOSE_WAIT状态下,需要完成的事情是等待你去关闭连接。
LAST_ACK: 这个状态还是比较容易好理解的,它是被动关闭一方在发送FIN报文后,最后等待对方的ACK报文。当收到ACK报文后,也即可以进入到CLOSED可用状态了。

TCP协议连接过程详解相关推荐

  1. rabbitmq 连接过程详解

    连接过程详解 转载于:https://www.cnblogs.com/mrxiaohe/p/6605068.html

  2. TCP/IP协议连接状态详解

    目录 引言 一.建立连接(三次握手) 二.结束连接(四次挥手) 三.最大报文长度 四.TCP状态迁移图 4.1 状态迁移图各状态解析 4.2 服务器的状态迁移图 4.3 客户端应用程序的状态迁移图 4 ...

  3. TCP建连过程详解/160805

    jehol.liuyang 本文仅涉及对基本的建连过程的讨论,同时打开.建连失败处理等异常流程均不涉及,后期有时间会逐步完善: 另外,因时间仓促,加之能力有限,文章错误之处在所难免,敬请批评指正 TC ...

  4. TCP协议中报文详解

    TCP协议中报文SYN.ACK.FIN.RST.PSH.URG详解 1. SYN:同步连接序号,TCP SYN报文就是把这个标志设置为1,来请求建立连接: 2. ACK:请求/应答状态.0为请求,1为 ...

  5. JavaEE|TCP/IP协议栈之TCP协议端格式详解

    文章目录 一.对TCP协议的感性认识 简介 特点 二.TCP的报文结构 概览 16位端口号和16位目的端口号 32位序号和32位确认序号 4位首部长度 保留位(6位) 6个标志位 16位窗口大小 16 ...

  6. HTTP 和HTTPS 连接过程详解(SSL TLS)

    简介 HTTPS是在HTTP的基础上和ssl/tls证书结合起来的一种协议,保证了传输过程中的安全性,减少了被恶意劫持的可能.很好的解决了解决了http的三个缺点(被监听.被篡改.被伪装) 对称加密和 ...

  7. SSL 连接过程详解

    1.SSL 简介 SSL(Secure Sockets Layer 安全套接字协议),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的 ...

  8. EIGRP实验--协议工作过程详解(一)

    实验目的: 了解五种报文的格式及工作过程:初步学习,不妥当的地方还请大牛指教! Hello: 我们现在R1路由器上面开启EIGRP进程,R2上暂时不开启,然后使用wireshark进行抓包分析: 由此 ...

  9. 蓝牙btsnoop log,HFP协议连接流程详解,以及RFCOMM连接和常用AT指令

    HFP(Hands-Free):蓝牙免提协议,两个角色AG,HF端,AG端通常是手机设备,HF免提端一般为耳机车载等,hfp的连接首先要进行SDP,然后建立RFCOMM,然后SLC连接完成,HFP正式 ...

最新文章

  1. Android 读取本地图片
  2. 企业网络推广中用户行为到底能为企业网络推广带来多少影响?
  3. 异常机制及throw与throws的区别 (z)
  4. iOS 地图定位 定位
  5. python连接linux获取日志_Python 日志记录模块logging的使用
  6. 兴业银行与第四范式开启AI平台加速模式 毫秒级信用卡反欺诈系统上线
  7. Apache启动过程(PHP_MINIT_FUNCTION的调用)
  8. mysql索引是自动使用吗_mysql索引是自动使用吗?
  9. 谁来代替博客园——寄生博客
  10. 2017百度之星程序设计大赛 - 资格赛【1001 Floyd求最小环 1002 歪解(并查集),1003 完全背包 1004 01背包 1005 打表找规律+卡特兰数】...
  11. 学mysql需要学python吗_python 学习 第六篇 mysql
  12. [新闻]MacBook Pro新版上市
  13. WPF中两个窗口的互斥
  14. VS+Qt报错无法解析的外部符号
  15. visio教程仓库流程图_完整的VISIO教程(绝对干货)
  16. Excel自学详细视频教程百度网盘分享
  17. C#对Java--微软的反击
  18. SQLite3的安装使用
  19. APNS部署教程2(证书配置)
  20. 大数据平台架构技术选型与场景运用

热门文章

  1. 对于一颗具有n个结点,度为4的树来说,( )
  2. TensorFlow模型持久化
  3. 基于傅里叶算子的手势识别
  4. 进阶指南:如何编写可重用程序
  5. Jenkins 权限配置与集群配置
  6. 函数、指针、数组的组合 及结构体和共用体
  7. 【Linux网络编程】套接字简介
  8. 【Qt5.8】Qt5.8中串口类QSerialPort
  9. [Qt教程] 第26篇 数据库(六)SQL关系表格模型QSqlRelationalTableModel
  10. php image处理,PHP图像处理之imagecreate、imagedestroy函数介绍