10.物联网LWIP之TCP状态转变

news2025/4/16 8:00:31

一。TCP状态机

1.青粗线:理想TCP状态转变(服务器视角下)

2.虚线:被动TCP状态转变(服务器视角下)

3.细实线:不经常出现的TCP状态转变(类似于边界处理)

1.青粗线解释--》服务器主动通信,客户端被动通信(服务器也可作为客户端)

(1)服务器主动创建socket后开始监听Listen,像客户端发送SYN字段,表示需要连接

状态:CLOSED关闭状态  ----》 SYN_SENT连接_发送SYN字段状态

(2)服务器收到ACK回复,TCP连接成功,进入数据传送阶段

状态:SYN_SENT连接_发送SYN字段状态  ----》ESTABLISTHED数据发送阶段

(3)服务器发送FIN字段,准备进入结束等待1阶段(结束的第一次挥手)

状态:ESTABLISTHED数据发送阶段  ----》FIN_WAIT_1结束等待1阶段

(4)服务器收到ACK,进入结束等待2阶段(等待回复,一次挥手)

状态:FIN_WAIT_1结束等待1阶段  ----》FIN_WAIT_2结束等待2阶段

(5)服务器收到FIN,向客户端发送ACK确认,进入最后等待,如果客户端没有超时重传,关闭socket。

FIN_WAIT_2结束等待2阶段  ----》TIME_WAIT 最终等待 ----》CLOSED关闭

2.虚线解释--》客户端向服务器端通信,服务器被动接受信息

(1)服务器被动打开

状态:CLOSED  ----》LISTEN

(2)收到SYN,发送SYN,ACK(三次握手的前两次

状态:LISTEN  ----》SYN_RCVD

(3)收到ACK(三次握手的最后一次),进入数据传送阶段

状态:SYN_RCVD  ----》ESTABLISTHED

(4)收到FIN,发送ACK(四次挥手的前两次),进入退出阶段

状态:ESTABLISTHED  ----》CLOSE_WAIT

(5)发送FIN(四次挥手的第三次挥手

状态:CLOSE_WAIT  ----》LAST_ACK

(6)收到ACK(四次挥手的第四次挥手

状态:LAST_ACK  ----》CLOSED

3.细实线解释--》只是一些不经常的处理,比如服务器被动打开后没有人响应,在比如连接的三次挥手还没有挥手完毕建立连接,用户点了重新连接。。。

二。NC命令,netstat命令,find命令

1.nc命令

注意:上述命令有很多参数,具体可以看参考手册

(1)nc连接服务器

nc 127.0.0.1 6666

(2)nc建立服务器

-l端口模式

-p指定端口号

nc -l -p 6666

2.netstat命令find命令

netstat -an -p tcp | find "6666"

3.上述的实验

实验:nc创建客户端,COMMBOX创建服务器

(1)commbox创建服务器

(2)nc命令创建客户端

                nc 127.0.0.1 6666

(3)netstat查看tcp状态

新开一个控制台窗口

 (4)关掉COMMBOX

(5) commbox停止监听后,nc创建客户端的会关闭

 (6)另一个控制台会显示

注意:一开始会显示等待,过一分钟才消失(这是在等待是否有超时重发报文过来)

实验:commbox创建socket客户端(目标端口为127.0.0.1),nc创建服务器

(1)commbox创建socket客户端.

(2)nc创建服务器

(3)netstat观察TCP状态

(3)当我关闭commbox时,会有等待时段

 (4)等待时段,一分钟后消失

综上所述:netstat是查询网络传输的好帮手,帮助查询网络传输的状态

三。shutdown应用

1.close()与shutdown()区别

(1)close使用之后,socket会关闭并释放内存,shutdown使用之后,仅仅只是关闭

(2)int shutdown(int sockfd, int how);

    参数
    sockfd :要断开的套接字
    how :要断开的方式
        - SHUT_RD:断开输入流
        - SHUT_WR:断开输出流
        - SHUT_RDWR:同时断开 I/O 流
    返回值 
        0 :成功
        -1:error    

所以:可以只断开输入或者输出

总之shutdown:

1、保证数据不丢包(因为在调用shutdown时候,会检测发送缓冲区,直到发送缓冲区传输完毕后,才会发送FIN包)

2、当我们有多个任务(进程)共享一个socket,我们可以通过shutdown进行关闭,保证其他任务可以正常使用

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

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

相关文章

基于 OV2640 的图像采集显示系统(camera_init 摄像头初始化模块)

此部分可参考IIC系列文章: (1)I2C 接口控制器理论讲解 (2)I2C接口控制设计与实现 (3)I2C连续读写实现 文章目录 前言一、OV2640 摄像头初始化模块设计思路二、OV2640 摄像头初始化模块用法介绍三、复位时序设计四、数据写入操作五、数据查找表六、完整代码展示六、仿真代码展示…

VIT 和Swin Transformer

VIT:https://blog.csdn.net/qq_37541097/article/details/118242600 Swin Transform:https://blog.csdn.net/qq_37541097/article/details/121119988 一、VIT 模型由三个模块组成: Linear Projection of Flattened Patches(Embedding层) Tran…

中文情感分类

本文通过ChnSentiCorp数据集介绍了文本分类任务过程,主要使用预训练语言模型bert-base-chinese直接在测试集上进行测试,也简要介绍了模型训练流程,不过最后没有保存训练好的模型。 一.任务和数据集介绍 1.任务 中文情感分类本质还是一个文本…

会员管理系统实战开发教程05-会员开卡

上一篇我们讲解了如何点击按钮弹出层,已经罗列了会员管理的一些常见功能。本篇我们介绍一下会员开卡的业务。 1 创建变量 我们会员开卡的业务的话,也是要在本页面弹出,弹出其实只是让组件是否显示和隐藏,我们先定义一个布尔值类…

柠檬水找零【贪心算法-】

柠檬水找零 在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。 每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零&…

读书笔记-《ON JAVA 中文版》-摘要23[第二十章 泛型-2]

文章目录 第二十章 泛型5. 泛型擦除5.1 泛型擦除5.2 迁移兼容性5.3 擦除的问题5.4 边界处的动作 6. 补偿擦除7. 边界8. 通配符8.1 通配符8.2 逆变 9. 问题10. 动态类型安全11. 泛型异常 第二十章 泛型 普通的类和方法只能使用特定的类型:基本数据类型或类类型。如果…

驱动代码验证

要求 代码 #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdlib.h> #include <string.h> #include <sys/ioctl.h>int main(int argc,const char * a…

移动端h5项目的兼容和适配问题

解决兼容性问题的关键在于对移动端产品的生存环境进行梳理&#xff0c;在此基础之上制定应对策略。 所谓生存环境主要分为三个维度&#xff1a; 硬件环境&#xff0c;细分为品牌和机型&#xff0c;决定了屏幕大小、性能等硬件限制 操作系统&#xff0c;比如iOS6和iOS7&#xf…

Redis数据类型(list\set\zset)

"maybe its why" List类型 列表类型是⽤来存储多个有序的字符串&#xff0c;列表中的每个字符串称为元素&#xff08;element&#xff09;&#xff0c;⼀个列表最多可以存储个2^32 - 1个元素。在Redis中&#xff0c;可以对列表两端插⼊&#xff08;push&#xff09…

555定时器

一、定义 定时器是一种多用途的数字-模拟混合集成电路&#xff0c;可极方便的构成施密特触发器、单稳态触发器和多谐振荡器&#xff0c;其简化原理图及引脚定义如下所示 3个绿色电阻&#xff0c;电阻值为5K&#xff1b;2个黄色和粉色比较器&#xff1b;1个紫色SR触发器&#x…

WPF实战项目十三(API篇):备忘录功能api接口、优化待办事项api接口

1、新建MenoDto.cs /// <summary>/// 备忘录传输实体/// </summary>public class MenoDto : BaseDto{private string title;/// <summary>/// 标题/// </summary>public string Title{get { return title; }set { title value; }}private string con…

实验三十一、OCL 电路输出功率和效率的研究

一、题目 研究 OCL 功率放大电路的输出功率和效率。 二、仿真电路 OCL 功率放大电路如图1所示。 图 1 OCL 功率放大电路 图1\,\,\,\textrm{OCL}\,功率放大电路 图1OCL功率放大电路图中采用 NPN 型低频功率晶体管 2SC2001&#xff0c;其参数为&#xff1a; I C M 700 mA I_…

5G NR:RACH流程 -- Msg1之选择正确的PRACH时频资源

PRACH的时域资源是如何确定的 PRACH的时域资源主要由参数“prach-ConfigurationIndex”决定。拿着这个参数的取值去协议38211查表6.3.3.2-2/3/4&#xff0c;需要注意根据实际情况在这三张表中进行选择&#xff1a; FR1 FDD/SULFR1 TDDFR2 TDD Random access preambles can onl…

信号和槽的相关操作

目录 信号和槽 connect()函数 自定义信号槽 例子 自定义信号槽需要注意的事项 信号槽的更多用法 Lambda表达式 ① 函数对象参数 ② 操作符重载函数参数 ③ 可修改标示符 ④ 错误抛出标示符 ⑤ 函数返回值 ⑥ 是函数体 所谓信号槽&#xff0c;实际就是观察者模式。当…

AVS3变换:PBT、ST和SBT

前面的文章介绍了AVS3中的变换工具IST和ISTS&#xff0c;本文将介绍AVS3中剩余的几种变换工具&#xff1a;基于位置的变换&#xff08;PBT,Position Based Transform&#xff09;、二次变换&#xff08;ST, Secondary Transform&#xff09;和子块变换&#xff08;SBT, Sub-Blo…

SmartInspect Professional .Net Delphi Crack

SmartInspect Professional .Net & Delphi Crack SmartInspect Professional是一个用于调试和跟踪.NET、Java和Delphi软件的高级日志记录工具。它使您能够识别错误&#xff0c;找到客户问题的解决方案&#xff0c;并让您清楚地了解软件在不同环境和条件下的工作方式。可以轻…

给oracle逻辑导出clob大字段、大数据量表提提速

文章目录 前言一、大表数据附&#xff1a;查询大表 二、解题思路1.导出排除大表的数据2.rowid切片导出大表数据Linux代码如下&#xff08;示例&#xff09;&#xff1a;Windows代码如下&#xff08;示例&#xff09;&#xff1a;手工执行代码如下&#xff08;示例&#xff09;&…

java八股文面试[多线程]——Synchronized的底层实现原理

笔试&#xff1a;画出Synchronized 线程状态流转实现原理图 synchronized关键字解决的是多个线程之间访问资源的同步性&#xff0c;synchronized 翻译为中文的意思是同步&#xff0c;也称之为”同步锁“。 synchronized的作用是保证在同一时刻&#xff0c; 被修饰的代码块或方…

任意文件上传

文章目录 渗透测试漏洞原理任意文件上传1. 任意文件上传概述1.1 漏洞成因1.2 漏洞原理1.3 漏洞危害1.4 漏洞的利用方法1.5 漏洞的验证 2. WebShell解析2.1 Shell2.1.1 命令解释器 2.2 WebShell2.2.1 大马2.2.2 小马2.2.3 GetShell2.2.4 WebShell项目 3. 任意文件上传攻防3.1 毫…

注册字符设备

五、注册字符设备 struct cdev {struct kobject kobj;//表示该类型实体是一种内核对象struct module *owner;//填THIS_MODULE&#xff0c;表示该字符设备从属于哪个内核模块const struct file_operations *ops;//指向空间存放着针对该设备的各种操作函数地址struct list_head …