TCPIP状态转换

news2024/11/25 23:34:14

一个TCP连接在其生命周期中经过了一系列的状态跃迁。一个TCP连接的状态包括:
tcpip-state-machine

  • LISTEN :表示正在等待来自任何远程TCP和端口的连接请求,调用listen后套接字出于监听状态
  • SYN_SENT : 表示在发送了连接请求后,正在等待匹配的连接请求。(发送SYN后没有收到ACK)
  • SYN_RECV : 表示在收到和发送连接请求后,等待确认连接请求确认。(收到对方发送的SYN,但还没有收到自己发送SYN的ACK)
  • ESTABLISHED : 表示一个开放的连接,接收到的数据可以传递给用户。连接的数据传输阶段的正常状态。
  • FIN-WAIT-1 : 表示正在等待来自远程TCP的连接终止请求,或确认先前发送的连接终止请求。(发送FIN, 没有收到ACK也没有收到FIN)
  • FIN-WAIT-2 : 表示正在等待来自远程TCP的连接终止请求
  • CLOSE-WAIT : 表示正在等待来自本地用户的连接终止请求。(被动关闭的一方收到FIN,发送ACK)
  • CLOSING : 表示正在等待来自远程TCP的连接终止请求确认。(在FIN-WAIT-1状态下收到了FIN, 等待接收ACK的确认)
  • LAST-ACK : 表示等待对先前发送到远程TCP的连接终止请求的确认(其中包括对其连接终止请求的确认)
  • TIME-WAIT : 表示正在等待足够的时间通过,以确保远程TCP收到了对其连接终止请求的确认。
  • CLOSED : 表示根本没有任何连接状态。虚拟的一个状态

按TCP/IP协议的描述,TCP三次握手过程,TCP的状态迁移如下所示:

(1)客户端将TCP报文标志位SYN置为1,随机产生一个序号值seq=J,保存在TCP首部的序列号(Sequence Number)字段里,指明客户端打算连接的服务器的端口,并将该数据包发送给服务器端,发送完毕后,客户端进入SYN_SENT状态,等待服务器端确认。
(2)服务器端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器端将TCP报文标志位SYN和ACK都置为1,ack=J+1,随机产生一个序号值seq=K,并将该数据包发送给客户端以确认连接请求,服务器端进入SYN_RCVD状态。
(3)客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给服务器端,服务器端检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。
注意:我们上面写的ack和ACK,不是同一个概念:
备注: 小写的ack代表的是头部的确认号Acknowledge number, 缩写ack,是对上一个包的序号进行确认的号,ack=seq+1。
大写的ACK,则是我们上面说的TCP首部的标志位,用于标志的TCP包是否对上一个包进行了确认操作,如果确认了,则把ACK标志位设置成1。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1042875.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录Day03 | 链表基础1 LeetCode T203 移除链表元素 T707设计链表 T206 反转链表

本题思路和解答主要来源于: 代码随想录 (programmercarl.com) LeetCode T203 移除链表元素 题目链接:203. 移除链表元素 - 力扣(LeetCode) 首先我们回顾一下单向链表,每个链表有一个指针域和一个数据域,在内存中是呈现不连续排列的,对比之前的数组,链…

一百八十八、Hive——HiveSQL查询表中的日期是星期几(亲测,附截图)

一、目的 指标需要查询以工作日和周末维度的数据统计,因此需要根据数据的日期判断这一天属于星期几,周一到周五为工作日,周六到周日为周末 二、SQL查询 (一)SQL语句 selectday,case when pmod(datediff(create_tim…

【CentOS7】基于python2,3安装docker-compose

【CentOS7】基于python2,3安装docker-compose 前言【基于python2.7】1.安装pip服务2.安装docker-compose服务 【基于python3】1.安排python32.检查是否安装成功3.安排python-pip3并升级4.执行如下命令安装 docker-compose:5.查看docker-compose 版本 前言…

【IDEA】IDEA 单行注释开头添加空格

操作 打开 IDEA 的 Settings 对话框(快捷键为CtrlAltS);在左侧面板中选择Editor -> Code Style -> Java;在右侧面板中选择Code Generation选项卡;将Line comment at first column选项设置为false使注释加在行开…

Hazelcast系列(三):hazelcast管理中心

系列文章 Hazelcast系列(一):初识hazelcast Hazelcast系列(二):hazelcast集成 Hazelcast系列(三):hazelcast管理中心 目录 前言 平台搭建 测试 其他 参考 总结 前言 前面,我们通过几种配置方式(Hazelcast系…

解决jetbrains-toolbox缺失修改安装路径默认安装C盘问题

前一阵子使用 ToolBox 的时候还可以修改 IDEA 的安装路径,但是过了一段时间在家里电脑发现无法没有了修改安装路径这一选项,庞大的 IDEA 软件累积起来C盘的空间也日趋臃肿,有强迫症的程序员怎么会让它安装在C盘呢? 如图所示&…

1024程序员节之天马低代码开发者大赛篇

卡奥斯第二届1024程序员节正在火热进行中!本次活动由四个线上活动分会场线下会场组成,今天向大家详细介绍一下四大线上分会场中的“低代码分会场”~ 天马低代码开发者大赛于2023年9月22日至10月20日12: 00进行,活动设立能源和组态两个赛道&a…

《安富莱嵌入式周报》第323期:NASA开源二代星球探索小车, Matlab2023b,蓝牙照明标准NLC, Xilinx发布电机套件,Clang V17发布

周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版: https://www.bilibili.com/video/BV1vp4y1F7qD 《安富莱嵌入式周报》第323期:NASA开源…

Docker-基本了解

Docker-基本了解 一、基本概念1、镜像2、容器 二、执行流程三、体系结构 一、基本概念 Docker是容器化平台,提供应用打包,部署与运行应用的容器化平台,应用程序通过docker engine(Docker 引擎获取可用资源)&#xff0…

磁铁产品上架亚马逊做什么认证?磁铁产品16CFR1262认证标准

玩具产品就需要做CPC认证:CPSIAASTMF9634.38磁铁标准(玩具安全标准消费者安全规范。) 法规要求 必须根据ASTM F963-17第8.25.1节至第8.25.3节中概述的程序对所有磁体产品进行测试。 《消费品安全法》(CPSA)第14&…

【安卓】开发跳过广告app,具备“李跳跳”app的部分功能

前言 现在手机的开屏广告还是挺多的,还有应用内弹出广告,青少年模式等,市面上很多跳过广告app下架了,我利用工作闲暇时间开发了自己用的app,不传播,分享知识! 实现思路 利用手机的无障碍服务…

ARM day1

1.复习今日内容 2.搭建汇编环境 下发资料-》工具软件 -》汇编环境搭建 3.安装Ubuntu下的交叉编译工具链 思维导图:

MQ - 31 基础功能: 优先级队列的设计

文章目录 导图概述什么是优先级队列如何设计实现优先级队列业务实现优先级队列的效果内核支持优先级队列RabbitMQ 中优先级队列的实现总结导图 概述 当我们需要在业务中对消息设置优先级,让优先级高的消息能被优先消费,此时就需要用到消息队列中优先级队列的特性。 为了了解…

玩转Mysql系列 - 第23篇:mysql索引管理详解

这是Mysql系列第23篇。 环境:mysql5.7.25,cmd命令中进行演示。 代码中被[]包含的表示可选,|符号分开的表示可选其一。 关于索引的,可以先看一下前2篇文章: 什么是索引? mysql索引原理详解 本文主要介…

Sui资助申请指南,310万美元资助金已成功申领

Sui基金会致力于资助开发者、构建者、教育工作者、研究人员以及其他推动和推广Sui生态发展的社区成员。立即申请:https://airtable.com/shrkLWBRNPL89f0SX 资助计划类型 构建者资助计划 通过推动Sui的全球采用,帮助引导下一个十亿用户进入Web3的项目。…

外包干了3个月,技术退步明显。。。。。

先说一下自己的情况,大专生,17年通过校招进入广州某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

使用 Microsoft 365 进行移动设备管理

什么是 Microsoft 365 的移动设备管理 移动设备通过允许员工访问文件、电子邮件、联系人等,在帮助员工随时随地工作方面发挥了巨大作用,允许员工将公司拥有的移动设备用于工作目的可能意味着允许员工在不在办公场所时从外部网络访问资源,这使…

人工智能在医疗中的应用:医院陪诊系统的前沿技术

人工智能在医疗领域的应用已经带来了巨大的变革,其中之一是医院陪诊系统。这些系统利用机器学习和自然语言处理等人工智能技术,改善了患者体验,提高了医疗机构的效率。本文将讨论医院陪诊系统的前沿技术,并提供一个简单的示例代码…

密码学【第三节:对称密码-DES\AES】

前言 在密码学中,加密算法分为双向加密和单向加密。单向加密包括MD5、SHA等摘要算法,它们是不可逆的。双向加密包括对称加密和非对称加密,对称加密包括AES加密、DES加密等。双向加密是可逆的,存在密文的密钥。AES算法是DES算法的替…

Java 大厂八股文面试专题-JVM相关面试题 类加载器

Java 大厂八股文面试专题-设计模式 工厂方法模式、策略模式、责任链模式-CSDN博客 JVM相关面试题 1 JVM组成 1.1 JVM由那些部分组成,运行流程是什么? 难易程度:☆☆☆ 出现频率:☆☆☆☆ JVM是什么 Java Virtual Machine Java程序…