TCP的几个状态 (SYN, FIN, ACK, PSH, RST, URG)

在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的几个状态 (SYN, FIN, ACK, PSH, RST, URG)

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则连接建立成功。

TCP的几个状态 (SYN, FIN, ACK, PSH, RST, URG)

TCP 四次挥手

当数据传输完成后,两台主机需要通过四次会话断开连接,这个过程我们称为四次挥手。

第一次挥手:

客户端向服务端请求断开连接,

FIN=1(断开连接),

seq=u(序列号),

客户端进入 FIN_WAIT_1 状态。

第二次挥手:

服务端向客户端返回确认报文,

ACK=1 (已收到),

ack=u+1(确认号为收到的序列号加一),

seq=v(序列号),

服务端进入 CLOSE_WAIT 状态,客户端进入 FIN_WAIT_2 状态。

第三次挥手:

服务端完成数据传输后,向客户端发送断开连接请求,

FIN=1(断开连接),

ACK=1 (已收到),

ack=u+1(确认号为收到的序列号加一),

seq=w(序列号),

服务端进入 LAST_ACK 状态。

第四次挥手:

客户端向服务端返回确认报文,

ACK=1 (已收到),

ack=w+1(确认号为收到的序列号加一),

seq=u+1(序列号),

客户端进入 TIME_WAIT 状态,服务端进入 CLOSED 状态。

客户端处于 TIME_WAIT 状态时,TCP 连接还未释放掉,等待 2 个 MSL(Maximum Segment Lifetime,最大段生命周期)的时长后,客户端进入 CLOSE 状态。

文章来源:https://www.cnaaa.net,转载请注明出处:https://www.cnaaa.net/archives/6159

(0)
郭靖的头像郭靖
上一篇 2022年11月19日 下午12:10
下一篇 2022年11月19日 下午5:43

相关推荐

  • 使用 netstat 命令来管理各个端口的网络连接

    了解 netstat NETSTAT命令有什么作用?NETSTAT一般用于显示与IP 、TCP 、UDP 和ICMP 协议相关的统计数据,一般用于检测本机各端口的网络连接情况。netstat 是一个快速收集你的服务器网络连接信息的有用工具。定期网络监测是了解你的系统的重要组成部分,对帮助你保持你的系统安全有着重要意义。将这一步纳入你的日常…

    2022年6月10日
    58200
  • 常用华为网络设备display命令合辑,真香!

    下午好,我的网工朋友。 今天给你做了个命令整合,华为设备提供了多条display命令用于查看硬件部件、接口及软件的状态信息。 通常这些状态信息可以为用户故障处理提供定位思路。 01 常用的故障信息搜集命令 信息项 使用命令 使用说明 基本信息 display diagnostic-information 此命令主要用于系统基本信息的收集,集合了多条常用dis…

    2024年1月15日
    23200
  • Prometheus 通过 consul 实现自动服务发现

    1、Consul 安装配置 Consul 安装很方便,官网 提供各个系统版本二进制安装包,解压安装即可,同时也可以通过 Docker 来快速安装。 1.1、源码安装 以 Linux 系统为例,源码安装并以开发模式启动一个单节点,下载最新版二进制安装包,解压启动即可。 启动完毕后,浏览器访问 http://127.0.0.1:8500 地址,即可打开 Cons…

    2023年8月7日
    28100
  • 宝塔面板下,打开phpmyadmin显示空白页的解决方法

    在宝塔面板里装完phpmyadmin但是进不去数据库的这种情况太常见了 1. 没开放888端口 当我们进phpmyadmin的时候,端口默认为888,这时,我们就要检查宝塔面板和阿里云或腾讯云等控制器里的安全组的888端口是否开放。 2. 环境不兼容 如果是纯静态,选择php版本即可。 如果PHP版本较高,则可以切换到低版本的PHP。

    2022年6月11日
    1.4K00
  • K8S 中使用kubectl工具远程连接K8S集群

    一、概述 一般情况下,在k8smaster节点上集群管理工具kubectl是连接的本地http8080端口和apiserver进行通讯的, 当然也可以通过https端口进行通讯前提是要生成证书。所以说kubectl不一定部署在master上,只要能和apiserver进行通讯, 所以你可以将kubectl部署在任何一台你想连接到集群的主机上,以下将介绍基于证…

    2023年5月29日
    39500

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

在线咨询: QQ交谈

邮件:712342017@qq.com

工作时间:周一至周五,8:30-17:30,节假日休息

关注微信