在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG.

其中,对于我们日常的分析有用的就是前面的五个字段。

它们的含义是:

SYN表示建立连接,

FIN表示关闭连接,

ACK表示响应,

PSH表示有 DATA数据传输,

RST表示连接重置。

其中,ACK是可能与SYN,FIN等同时使用的,比如SYN和ACK可能同时为1,它表示的就是建立连接之后的响应,

如果只是单个的一个SYN,它表示的只是建立连接。

TCP的几次握手就是通过这样的ACK表现出来的。

但SYN与FIN是不会同时为1的,因为前者表示的是建立连接,而后者表示的是断开连接。

RST一般是在FIN之后才会出现为1的情况,表示的是连接重置。

一般地,当出现FIN包或RST包时,我们便认为客户端与服务器端断开了连接;而当出现SYN和SYN+ACK包时,我们认为客户端与服务器建立了一个连接。

PSH为1的情况,一般只出现在 DATA内容不为0的包中,也就是说PSH为1表示的是有真正的TCP数据包内容被传递。

TCP的连接建立和连接关闭,都是通过请求-响应的模式完成的。

概念补充-TCP三次握手:

TCP(Transmission Control Protocol)传输控制协议

TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:

位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)Sequence number(顺序号码) Acknowledge number(确认号码)

第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;

第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包;

第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。

完成三次握手,主机A与主机B开始传送数据。

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。  第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;  第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。完成三次握手,客户端与服务器开始传送数据. 摘自中国云安网(www.yunsec.net) 原文:http://www.yunsec.net/a/school/wlcs/agreement/2012/0317/10262.html

下面这一篇转载与https://www.cnblogs.com/grglym/p/7788175.html

一、报文结构介绍

  在开始讲TCP连接过程时,还是先看看TCP报文的格式如图1所示。IP数据报此时由IP头部+TCP头部+TCP数据组成。不带选项的TCP头部是20字节长,而带选项的,TCP头部最长可达60字节。常见的选项包括最大的大小(MSS),时间戳(传输控制时使用)、窗口缩放(流量控制时使用)、选择性ACK(传输控制时使用)。我们来具体看下TCP头部字段如图2所示。

图1 IP数据报中TCP封装

  图2所示的即是TCP头部的详细结构。源端口与目的端口和源IP及目的IP这四元组唯一标识每个TCP连接。序列号(Sequence Number)字段标识TCP的一端到另一端的数据流的第一个开始字节(例如发送端发送的数据总字节长度为1000字节,假定序列号从1开始,总的序列号是1-1000,TCP会给每个字节赋予一个序列号)。通过序列号来代表发送端到接收端的数据,接收端接收到数据后,即可通过确认号(ACK)来发送给发送端,让发送端知道数据已被接受。这个ACK号是由接收到的数据的序列号加1,代表接收端希望接收的下一个数据的序列号。(注:ACK是不占用序列号的,原因是接收端发送ACK给发送端后,发送端的ISN是等于此时接收到的ACK号)。

图2 TCP头部结构

  头部长度的单位32bit,所以这也定义了TCP的长度最大为4*15=60字节。八个标志位中(CWR、ECE。。。等),这里先每个介绍,后面文章有用到时在另行介绍。我们来主要了解下ACK、SYN、FIN。ACK即确认,连接建立后一般都是启用状态。SYN用于初始化一个连接的同步序列号。当发送方已经结束数据的发送时,即发送FIN报文段给接收端。窗口大小在TCP流量控制中会重点讲解。

二、TCP连接的建立与终止

  如图3所示即为TCP连接建立与终止的过程图。

图3 TCP连接的建立与终止

TCP建立的三次握手:

  1、发送端发送一个SYN报文段(SYN位被置位),SYN中包含TCP目的端口和发送端的初始序列号(图中ISN(c)),同时携带着TCP选项数据。

  2、接收端收到发送端连接请求后,接收端发送自己SYN报文段(包含ISN(s)),同时对发送端的SYN进行确认,如前所述,接收端发送的ACK是ISN(c)+1。此时ACK位与SYN位都被置位。接收端发送SYN+ACK到发送端。

  3、发送端接收到接收端的SYN+ACK数据后,对ISN(s)进行确认,发送ACK为ISN(s)+1的报文段给接收端。

TCP断开的四次握手:

  1、TCP协议规定通过发送一个FIN段(FIN被置位)来发起关闭操作,图3中发送端发送FIN段给接收端,告知它数据已发送完毕,请求断开TCP连接。同时FIN报文段还包含着对最近收到的数据进行ACK。

  2、接收端接收端FIN报文段后,对FIN进行确认,发送ACK=k+1给发送端。

  3、接收端将连接关闭发送给上层应用程序,由应用程序发起连接关闭操作。此时接收端由被动关闭连接壮成主动,并发送FIN报文段给发送端。报文的序列号为L(这里也可看出上一步骤中发送ACK序列号也为L,因为ACK不占用序列号,所以这里的FIN的序列号也为L)。

  4、发送端接收到FIN后,发送回ACK给接收端后,TCP连接终止。如果FIN丢失,发送FIN的那端需要重新发送FIN,知道接收到ACK为止。

三:总结

  如前所述,建立一个TCP连接需要3个报文段,而关闭TCP连接需要4个报文段。

Wireshark工作笔记-TCP的状态解析,以及建立连接与关闭连接相关推荐

  1. TCP协议 状态解析和状态统计

    一.三次握手和四次挥手 1.建立连接(三次握手) (1)服务器会处于listen状态,客户端发送一个带SYN标志的TCP报文到服务器. (2)服务器端回应客户端的请求,这是三次握手中的第2个报文,这个 ...

  2. TCP 协议状态解析

    我们讲述的都是一些基本的tcp状态,就是使用netstat可以观察到的状态,记录一下,以便出现问题的时候一个思路.先大概叙述一下三次握手和四次握手的机制. 1.建立连接(三次握手) (1)服务器会处于 ...

  3. Wireshark工作笔记-对TCP连接与断开以及数据传输的实战分析

    首先要使用一个TCP/UDP Socket调试工具. 本次使用虚拟机NAT模式,主机IP地址为192.168.164.1,此时主机的/UDP Socket调试工具配置如下: 虚拟机采用Win7 IP地 ...

  4. Qt文档阅读笔记-Qt工作笔记QProcess::finished的解析与实例

    目录 官方解析 博主例子 阻塞主程序运行外部程序 使用本地事件循环不阻塞主程序运行外部程序 官方解析 void QProcess::finished(int exitCode, QProcess::E ...

  5. Qt文档阅读笔记-Qt工作笔记-QTableWidget::selectedItems()官方解析与实例(如何进行多选)

    目录 前言 官方解析 博主例子 前言 QTableWidget::selectedItems(): 在使用QTableWidget中,可以选中多行,如何从界面获取多行的数据,可以使用selectedI ...

  6. Java工作笔记-Spring Boot + Jdbc + dm7Driver访问数据库(Spring Boot连接达梦数据库)

    目录 基本概念 代码与实例 基本概念 Jdbc有4种方式访问数据库,下面给出达梦访问数据库的方式. 安装好达梦库后,就会有驱动,在此不再说明怎么去安装! 本次使用Java7的环境,所以使用的Jar包为 ...

  7. TCP/IP状态详解

    今天犯懒了,本来自己也做了一些相应的笔记,但是发现这篇写的更好一些,简单易懂,而且有图有真相,为了方便以后查看,在此转载了,在此基础上加了自己的笔记                 TCP正常建立和关 ...

  8. TCP的状态转换及生产问题实操

    前文介绍了TCP协议主要的流程,包括建立连接.传输数据和断开连接.如果大家认真阅读了附图,应该可以看到在各个流程中套接字的状态是在不断变化的,不同的状态标识了套集字所处的阶段. 如图1是TCP一个完整 ...

  9. 通过TCP各个状态,可以排除和定位网络或系统故障

    我们通过了解TCP各个状态,可以排除和定位网络或系统故障时大有帮助. 1.TCP状态 了解TCP之前,先了解几个命令: linux查看tcp的状态命令: 1).netstat -nat  查看TCP各 ...

最新文章

  1. ElementUI中的el-table怎样实现每一列显示的是控件并能动态实现双向数据绑定
  2. 几个冷门字符串算法的学习笔记(最小表示法,exKMP,Lyndon Word)
  3. Vertx编程风格:您的反应式Web Companion REST API解释了
  4. php 多图上传编辑器,ThinkPHP5整合LayUI编辑器图片上传
  5. kernel开启启动log_MySql启动数据库设置初始密码
  6. linux php cpu,查找linux下进程占用CPU过高的原因,以php-fpm为例
  7. Linux的sleep()和usleep()的使用和区别
  8. mojoportal学习——文章翻译之使用Artisteer快捷的创建模板
  9. 正规矩阵的谱分解MATLAB,正规矩阵的谱分解.PDF
  10. 第08章 Tableau在线服务器
  11. 上海计算机一级考试理论,上海市计算机一级考试理论部分(上).doc
  12. es创建索引和yellow排查解决
  13. 电子邮件客户端:Mail Pilot 3 for Mac
  14. python生成一个四位数字的随机数
  15. MFC中得到2个SYSTEMTIME时间差的函数
  16. 亚声速-超声速等熵喷管拟一维流动的CFD解法(附完整代码)
  17. 3an推客CPC怎么设置?3an推客推广效果怎么样
  18. unity游戏开发毕设_《毕业设计(论文)-基于Unity游戏引擎的游戏设计》.doc
  19. jupyter notebook 中import torchvision提示ImportError: DLL load failed: 找不到指定的模块
  20. 2022年莆田市高新技术企业申报奖励补贴,高企认定条件以及申报材料汇总

热门文章

  1. web developer tips (78):使用文档大纲导航
  2. 创建优秀团队文化的四大要点
  3. 服务员就结账了的p8u8
  4. wed6699整站程序下载【首发】
  5. 飞鸽传书CSDN的搜索结果
  6. 即时通讯软件几个主要下载分类
  7. 【飞秋】Asp.net MVC2 model验证 看似美好,实则让人失望。
  8. 32岁,程序员,年薪60W,果断辞职考进体制内,月薪5K
  9. 人工智能时代,Python编程就业方向那么广,我该如何选择?
  10. OpenCV中直方图的计算和绘制