TCP状态转换

news/2024/4/24 7:48:18/文章来源:https://blog.csdn.net/qq_43471489/article/details/129243738

在这里插入图片描述

欢迎关注博主 Mindtechnist 或加入【Linux C/C++/Python社区】一起探讨和分享Linux C/C++/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。


TCP状态转换


专栏:《Linux从小白到大神》《网络编程》


TCP状态转换示意图如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KZxzKi3z-1677484783567)(Typora_picture_reference/1661863972737.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9JEz7mY8-1677484783568)(Typora_picture_reference/1661864004183.png)]

针对上面的示意图,主要对以下几点进行解析

  • 有哪些进程状态是可以捕捉到的?

    • LISTEN、ESTABLISHED、等,其他状态时间很短暂,捕捉不到。
    • netstat命令可以捕捉状态。
  • 2MSL是什么?

    • 2MSL是等待时长,主动关闭连接的一方将会处于TIME_WAIT状态。
    • 1MSL大概是30S,处于TIME_WAIT状态的进程(主动断开连接的进程)不会立即终止,而是会等待2MSL的时间;而被动断开连接的一方,在LAST_ACK状态,一旦收到对方的ACK就会立即终止进程。
  • 为什么主动断开的一方要等2MSL而被动断开的一方不需要等呢?

    • 因为有可能会出现这种情况,主动断开的一方(比如是client)属于TIME_WAIT时,向被断开的一方(比如说server)发送ACK,有可能对方没有收到,这时侯server会再发一次FIN,也就需要client再回复一次ACK(如果client没有等待就终止了,那么server发送的FIN就发送不到了,四次挥手就失败了),所以主动断开连接的一方要等待,来保证正常断开连接,而被断开的一方收到ACK就可以终止进程了,此时连接正常断开。
  • 什么是半关闭?

    • 如何理解半关闭

      • A给B发送FIN(A调用了close函数), 但是B没有给A发送FIN(B没有调用close)
      • A断开了与B的连接, B没有断开与A的连接
    • 特点:

      • A不能给B发送数据, A可以收B发送的数据
      • B可以给A发送数据
    • 函数: int shutdown(int sockfd, int how);

      • sockfd: 要半关闭的一方对应的文件描述符

      • 通信的文件描述符

      • how:(可以只关读、只关写,或读写都关)

        • SHUT_RD - 0 - 读
        • SHUT_WR - 1 - 写
        • SHUT_RDWR - 2 - 读写
  • 使用close()函数能否实现半关闭?

    • 不能。使用dup2函数可以复制一个文件描述符fd指向和sfd一样的内容,如果使用close(fd)关闭了对内核缓冲区的读写,但是还存在一个文件描述符sfd可以读写内核缓冲区,也就是说通信依然可以进行,这样并不能实现真正的半关闭。使用shutdown函数可以实现半关闭,是因为shutdown(fd, SHUT_RD)虽然在函数中只对fd关闭了读,但是它实际上是将缓冲区的读给关闭了,所有文件描述符(不管有多少个),都不能再读缓冲区了。

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9YpOxO0n-1677484783569)(Typora_picture_reference/1661865063373.png)]

在使用套接字通信时,可以使用netstat命令捕捉进程状态或使用netstat查看网络相关状态信息,netstat的常用参数如下:

  • -a (all)显示所有选项,默认不显示LISTEN相关进程,不加-a就不显示LISTEN进程。

  • -p 显示建立相关链接的程序名。

  • -n 拒绝显示别名,能显示数字的全部转化成数字。

  • -t (tcp)仅显示tcp相关选项。

  • -u (udp)仅显示udp相关选项。

  • -l 仅列出有在 Listen (监听) 的服务状态。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0Nhn1aBx-1677484783569)(Typora_picture_reference/1661865408314.png)]


在这里插入图片描述
在这里插入图片描述


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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高并发之读多写少的场景设计(用户中心)

用户中心是一个典型的读多写少系统,可以说我们大部分的系统都属于这种类型,而这类系统通过缓存就能获得很好的性能提升。并且在流量增大后,用户中心通常是系统改造中第一个要优化的模块,因为它常常和多个系统重度耦合,…

消息队列介绍和RabbitMQ的安装

1.消息队列 1.1 MQ的相关概念 1.1.1 什么是MQ MQ(message queue),从字面意思上看,本质是个队列,FIFO 先入先出,只不过队列中存放的内容是message 而已,还是一种跨进程的通信机制,用于上下游传递消息。在…

高阶人生从在职读研开始——中国社科院与美国杜兰大学金融管理硕士

说到学历,好多人都不太在意,感觉学历没什么用。等升职学历被卡时,等你想考公学历达不到时,当你想跳槽更大的平台时,学历会显得尤其重要。当机会来临时,我们应该做好全足的准备,而不是眼瞅着机会…

SpringBoot相关操作

01-今日内容 Spring概述、快速入门SpringBoot配置SpringBoot整合 02-SpringBoot概述 SpringBoot提供了一种快速使用Spring的方式,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的…

金融信创步入快车道,应“需”而生的监控易运维方案为国产化助力

在我国“28N”信创三步走战略中,金融信创赫然名列其中,成为最早践行信创理论与实操的行业之一。截止到目前,金融信创渗透率业已仅次于党政部门,位列“8”大重点行业之首。超快的发展速度,让金融信创较早的步入“买方市…

浅谈模型评估选择及重要性

作者:王同学 来源:投稿 编辑:学姐 模型评估作为机器学习领域一项不可分割的部分,却常常被大家忽略,其实在机器学习领域中重要的不仅仅是模型结构和参数量,对模型的评估也是至关重要的,只有选择那…

前端开发:JS的节流与防抖

前言 在前端实际开发中,有关JS原生的节流和防抖处理也是很重要的点,关于底层和原理的掌握使用,尤其是在性能优化方面甚为重要。作为前端开发的进阶内容,在实际开发过程中节流和防抖通常都是项目优化的必要手段,而且也是…

机器学习笔记之近似推断(二)推断的核心思想

机器学习笔记之近似推断——推断的核心思想引言回顾:推断的目的与困难推断的目的推断的困难推断的核心思想——优化引言 上一节介绍了从深度学习的角度介绍了推断,并介绍了推断的目的和困难。本节将继续介绍推断的核心思想。 回顾:推断的目…

写给交互设计新手的信息架构全方位指南

目录什么是信息架构?通用方法日常工作可以关注的大神常用工具相关书籍什么是信息架构?信息架构是一个比众多其他领域更难定义的领域。内容策划由内容策划师来完成,交互设计由设计师来完成,而信息架构的完成与它们不同,…

达梦数据库(DM8)集成使用 Geotools(27.2)

达梦数据库(DM8)集成使用 Geotools(27.2)系统环境版本达梦 8 集成 Geotools 环境安装达梦8,请参照项目 pom.xml 添加 geotools 配置项目 pom.xml 添加达梦数据库驱动包Geotools 使用示例Geotools 连接数据库Geotools 空…

CLion Remote Debug CrossCompile

CLion远程Docker调试ROS(交叉编译)的设置步骤 准备一个好用的docker,运行起来(Docker Image一定可以跑cuda和图形界面的,否则启动不了CLion,可以不用浪费时间看本教程了) 在docker镜像中配置好ssh和rsync,…

测量 R 代码运行时间的 5 种方法

简介 平常在撰写论文时,会需要比较算法之间的计算时间。本篇文章给出几种测量 R 代码运行时间的方法。本文是小编学习过程中的笔记,主要参考博客1,2。 1. 使用 Sys.time() 小编通常使用 Sys.time() 函数来计算时间。首先记录当前运行时刻&…

数据结构与算法之Huffman tree(赫夫曼树 / 霍夫曼树 / 哈夫曼树 / 最优二叉树)

目录赫夫曼树概述定义构造赫夫曼树步骤代码实现赫夫曼树概述 HuffmanTree因为翻译不同所以有其他的名字:赫夫曼树、霍夫曼树、哈夫曼树 赫夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点…

如何在logback.xml中自定义动态属性

原文地址:http://blog.jboost.cn/trick-logback-prop.html 当使用logback来记录Web应用的日志时,我们通过在logback.xml中配置appender来指定日志输出格式及输出文件路径,这在一台主机或一个文件系统上部署单个实例没有问题,但是…

超店有数分享:2023还有哪些tiktok数据值得关注?

目前,tiktok是全球增长最迅猛的社交媒体软件之一。很多商家瞄准了tiktok的变现转化潜力,纷纷入局tiktok电商赛道。在入局这个赛道之前,我们需要了解一些tiktok的相关数据,这样才能更好的了解大局,及时调整自己的业务情…

Python 简单可变、复杂可变、简单不可变、复杂不可变类型的copy、deepcopy的行为

copy模块:copy:浅拷贝deepcopy:深拷贝简单可变类型、复杂可变的copy()、deepcopy():简单不可变、复杂不可变类型的copy()、deepcopy():结论:对于简单类型的可变类型copy是深拷贝,改变了该拷贝变…

TIA博途Wincc中自定义配方画面的具体方法示例

TIA博途Wincc中自定义配方画面的具体方法示例 前面和大家分享了通过TIA博途自带的配方视图组态配方功能的具体方法,具体内容可参考以下链接中的内容: TIA PORTAL wincc中配方recipe组态及配方视图的使用方法 但是,使用配方视图的时候感觉不是很方便,同时一部分使用人员也感…

机房运维6大隐患,你中了几个?

随着医院的看诊预约、缴费、打印报告等众多业务转至线上进行,对医院的网络及数据处理能力提出越来越高的要求,那么,机房的稳定、安全运行是医院网络信息系统的关键因素。 机房运维6大隐患 01.电源电力系统不稳定,网络设备运转遭到…

C/C++语法练习之顺序结构篇

名人说: 如果你问一个善于溜冰的人怎样获得成功时, 他会告诉你:“跌倒了,爬起来”,这就是成功。——牛顿 专栏:牛客刷题 顺序结构篇〇、知识引入一、内容1004-学姐的“Helloworld”1005-乘法表1019-hellowo…

TCP粘包|拆包和解决方案

1 产生原因TCP是面向连接的,面向流的,提供高可靠性服务。收发两端(客户端和服务端)都要有一一成对的socket,因此,发送端为了将多个发给接收端的包,更有效的发给对方,使用了优化算法&…