TCP状态转换/ 半连接/ 端口复用代码实现

        三次挥手的时候的状态转换

        TCP(Transmission Control Protocol)的三次握手是建立TCP连接的过程。在三次握手中,涉及到的状态转换如下:

  1. Closed(关闭状态): 初始状态,表示没有任何连接。

  2. SYN_SENT(同步已发送状态): 客户端发送一个TCP报文,其中包含SYN(同步)标志位,表示请求建立连接。

  3. LISTEN(监听状态): 服务器在被动打开的套接字上等待连接请求,准备接受客户端的连接。

  4. SYN_RECEIVED(同步已接收状态): 服务器收到客户端的SYN报文,会回应一个包含SYN和ACK(确认)标志位的报文,表示同意建立连接。

  5. ESTABLISHED(已建立连接状态): 客户端收到服务器的SYN-ACK报文后,发送一个包含ACK标志位的报文,连接建立成功。

        以上是正常的三次握手过程。在三次握手中,如果某一阶段出现问题,可能会触发状态的不同转换。例如,如果客户端发送SYN后,长时间没有收到服务器的响应,可能触发超时,客户端会重新发送SYN,从而导致状态的转换。

        在实际网络中,可能还涉及到一些其他状态,例如超时、重传等,这取决于网络的具体情况和TCP协议的实现。但总体上,TCP的三次握手过程涉及到以上描述的状态转换。

 

        TCP的四次挥手是终止TCP连接的过程。在四次挥手中,涉及到的状态转换如下:

  1. ESTABLISHED(已建立连接状态): 双方的数据传输已完成,开始关闭连接。

  2. FIN_WAIT_1(等待对方的FIN报文状态): 主动关闭方发送一个FIN(结束)标志的报文,表示不再发送数据,但可以接收数据。

  3. CLOSE_WAIT(等待被动关闭状态): 被动关闭方接收到FIN报文,通知应用层停止发送数据。

  4. FIN_WAIT_2(等待对方的确认状态): 主动关闭方等待被动关闭方发送完毕数据后,发送一个带有ACK标志位的报文,确认收到了对方的FIN报文。

  5. TIME_WAIT(等待足够的时间以确保被动关闭方收到了ACK): 主动关闭方等待足够的时间,确保被动关闭方已经收到了对FIN的ACK,并且该ACK不会在网络中丢失。这个状态的目的是为了处理可能出现的延迟的报文,以防止新的连接中出现旧的数据。

  6. CLOSING(等待对方的确认状态): 被动关闭方在发送完ACK后,等待对方的确认,确认收到了自己的ACK。

  7. LAST_ACK(等待对方的最后的ACK状态): 主动关闭方等待最后一个ACK,表示对方已经收到了主动关闭方的确认。

  8. CLOSED(关闭状态): 双方的连接都已关闭。

        以上是正常的四次挥手过程。在四次挥手中,如果某一阶段出现问题,可能会触发状态的不同转换。例如,如果一方在发送FIN后,长时间没有收到对方的确认,可能会触发超时,重新发送FIN,从而导致状态的转换。

 

2MSL Maximum Segment Lifetime
主动断开连接的一方, 最后进出入一个 TIME_WAIT状态, 这个状态会持续: 2msl
msl: 官方建议 : 2 分钟 , 实际是 30s
        当 TCP 连接主动关闭方接收到被动关闭方发送的 FIN 和最终的 ACK 后,连接的主动关闭方 必须处于TIME_WAIT 状态并持续 2MSL 时间。
        这样就能够让 TCP 连接的主动关闭方在它发送的 ACK 丢失的情况下重新发送最终的 ACK 。 主动关闭方重新发送的最终 ACK 并不是因为被动关闭方重传了 ACK (它们并不消耗序列号, 被动关闭方也不会重传),而是因为被动关闭方重传了它的 FIN 。事实上,被动关闭方总是 重传 FIN 直到它收到一个最终的 ACK
半关闭
TCP 链接中 A B 发送 FIN 请求关闭,另一端 B 回应 ACK 之后( A 端进入 FIN_WAIT_2 状态),并没有立即发送 FIN A A 方处于半连接状态(半开关),此时 A 可以接收 B 发 送的数据,但是 A 已经不能再向 B 发送数据。

 从程序的角度,可以使用 API 来控制实现半连接状态:

netstat参数:

-a所有的socket

-p显示正在使用socket的程序的名称

-n直接使用IP地址,而不通过域名服务器 

 端口复用:

端口复用是指在一个网络应用程序中允许多个套接字共享同一个端口的能力。端口复用通常是通过设置套接字选项来实现的。在网络编程中,两个主要的套接字选项用于端口复用:

  1. SO_REUSEADDR: 允许多个套接字绑定到相同的IP地址和端口号,即使先前的套接字仍然处于 TIME_WAIT 状态。这个选项通常用于服务器程序,以便更快地重新启动服务器。

  2. SO_REUSEPORT: 允许多个套接字绑定到相同的IP地址和端口号。与 SO_REUSEADDR 不同的是,SO_REUSEPORT 允许多个套接字在同一台计算机上同时监听相同的 IP 地址和端口号,而不需要等待 TIME_WAIT。

端口复用最常用的用途是:

1.·防止服务器重启时之前绑定的端口还未释放·

2. 程序突然退出而系统没有释放端口

#include <sys/types.h>
#include <sys/socket.h>//设置套接字的属性(不仅仅能设置端口复用)int setsockopt(int sockfd,int level,int optname,const void *optval,socklen_t optlen);//参数:
-sockfd:要操作的文件描述符
-1eve1:  级别-S0L_S0cKET(端口复用的级别)
-optname: 选顶的名称 SO_REUSEADDR  -SO_REUSEPORT
-optva1:端口复用的值(整形)-1:可以复用-0:不可以复用-opt1en:optval:参数的大小setsockopt () bind();

 

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

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

相关文章

uni-app condition启动模式配置

锋哥原创的uni-app视频教程&#xff1a; 2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中...共计23条视频&#xff0c;包括&#xff1a;第1讲 uni…

【论文阅读+复现】SparseCtrl: Adding Sparse Controls to Text-to-Video Diffusion Models

SparseCtrl:在文本到视频扩散模型中添加稀疏控制。 &#xff08;AnimateDiff V3&#xff0c;官方版AnimateDiffControlNet&#xff0c;效果很丝滑&#xff09; code&#xff1a;GitHub - guoyww/AnimateDiff: Official implementation of AnimateDiff. paper&#xff1a;htt…

javaWeb蛋糕商城(前后台) 2

目录 摘要 1 关键词 1 前言 2 第一章 绪论 3 1.1 选题背景 3 1.2 选题的目的和意义 3 第二章 关键技术介绍 4 2.1 JSP 4 2.2 JDBC 5 2.3 Servlet 5 2.4 MVC模式 5 2.5 Ajax 5 第三章 系统分析及设计 5 3.1 需求分析 5 3.1.1 任务概述 5 3.1.2 功能需求 6 3.1.3 其它需求 6 3.2…

射频PCB电路布局设计及布线注意事项

在电子产品和设备中&#xff0c;电路板是一个不可缺少的部件&#xff0c;它起着电路系统的电气和机械等的连接作用。如何将电路中的元器件按照一定的要求&#xff0c;在PCB上排列组合起来&#xff0c;是PCB设计师的主要任务之一。布局设计不是简单的将元器件在PCB上排列起来&am…

探究element-ui 2.15.8中<el-input>的keydown事件无效问题

一、问题描述 今天看到一个问题&#xff0c;在用Vue2element-ui 2.15.8开发时&#xff0c;使用input组件绑定keydown事件没有任何效果。 <template><div id"app"><el-input v-model"content" placeholder"请输入" keydown&quo…

【中小型企业网络实战案例 四】配置OSPF动态路由协议

【中小型企业网络实战案例 三】配置DHCP动态分配地址-CSDN博客 【中小型企业网络实战案例 二】配置网络互连互通-CSDN博客 【中小型企业网络实战案例 一】规划、需求和基本配置_大小企业网络配置实例-CSDN博客 配置OSPF 由于内网互联使用的是静态路由&#xff0c;在链路出…

如何快速下载huggingface模型

Huggingface国内开源镜像 https://hf-mirror.com/ 上面总结了多种从Huggingface上下载模型的方法&#xff0c;如下图。 方法一&#xff1a;使用huggingface官网提供的huggingface-cli工具 官方详解地址https://huggingface.co/docs/huggingface_hub/guides/download 1. 安装…

Arduino中手写脉冲控制步进电机-2

目录 1、前言 2、时间-位移关系计算 3、Matlab计算时间和位置数据 (1)Matlab程序 &#xff08;2&#xff09;Arduino程序 4、Matlab生成Arduino电机正反转程序语句 &#xff08;1&#xff09;Arduino程序 &#xff08;2&#xff09;Matlab 命令行方式生成Arduino步进电…

【Unity自制手册】基于Unity中物体移动相关方法和API集锦(动图详解)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…

IPEmotion数据采集软件功能介绍

IPEmotion作为IPETRONIK的软件产品&#xff0c;主要应用于车辆测试和不同的实验室测试系统&#xff0c;能够满足各种测量需求。通过专业化的数据采集软件IPEmotion&#xff0c;我们可实现完整的数据采集过程&#xff0c;包括&#xff1a;配置数据采集设备&#xff1b;使用不同的…

SD-WAN企业组网的核心要点

随着企业网络需求的不断演进和全球化业务的扩张&#xff0c;SD-WAN&#xff08;软件定义广域网&#xff09;作为一种先进的网络架构技术&#xff0c;逐渐成为企业组网的首选方案。SD-WAN通过提供更灵活、高效和安全的网络连接&#xff0c;帮助企业轻松应对不同地区和业务需求。…

计算机毕业设计---ssm+mysql+jsp实现的校园二手市场交易平台源码

项目介绍 本系统主要实现的功能有&#xff1a; 前台&#xff1a;&#xff08;1&#xff09;二手物品信息查看、搜索。 &#xff08;2&#xff09;学生注册登录、个人信息修改。 &#xff08;3&#xff09;二手物品信息发布、编辑。 &#xff08;4&#xff09;二手物品评论、回…

【Unity细节】为什么按下移动键之后,物体还是会滑行一段距离(阻力都无穷大了)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 &#x1f636;‍&#x1f32b;️收录于专栏&#xff1a;unity细节和bug &#x1f636;‍&#x1f32b;️优质专栏 ⭐【…

内存满了无法开机(Ubuntu)

文章目录 在开机界面长按“shift”进入进入shell命令模式详细步骤选择Recovery Menu删除不需要的文件 在开机界面长按“shift”进入 进入shell命令模式详细步骤 选择Recovery Menu 删除不需要的文件 自己看着办吧

STM32 IIC开发学习

1IIC总线时序图 ① 起始信号 当 SCL 为高电平期间&#xff0c;SDA 由高到低的跳变。起始信号是一种电平跳变时序信号&#xff0c;而不是 一个电平信号。该信号由主机发出&#xff0c;在起始信号产生后&#xff0c;总线就会处于被占用状态&#xff0c;准备数据 传输。 ② 停止信…

Android 8.1 设置USB传输文件模式(MTP)

项目需求&#xff0c;需要在电脑端adb发送通知手机端接收指令&#xff0c;将USB的仅充电模式更改成传输文件&#xff08;MTP&#xff09;模式&#xff0c;便捷用户在我的电脑里操作内存文件&#xff0c;下面是我们的常见的修改方式 1、android12以下、android21以上是这种方式…

腾讯云轻量应用主机与云服务器功能、性能区别对比总结

腾讯云轻量服务器和云服务器CVM该怎么选&#xff1f;不差钱选云服务器CVM&#xff0c;追求性价比选择轻量应用服务器&#xff0c;轻量真优惠呀&#xff0c;活动 https://curl.qcloud.com/oRMoSucP 轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年&#xff0c;540元三…

事务的简介

一、什么是事务 事务是一组数据库的操作序列&#xff0c;包含一个或多个sql操作命令&#xff08;增删改&#xff09;&#xff0c;事务将所有的操作命令看做一个不可分割的整体&#xff0c;向数据库系统提交或撤销操作&#xff0c;所有操作要么执行要么不执行。 ●事务是一种机…

VR全景图片制作时有哪些技巧,VR全景图片能带来哪些好处

引言&#xff1a; VR全景图片是通过虚拟现实技术制作出的具有沉浸感的图片&#xff0c;能够提供给用户一种身临其境的感觉。在宣传方面&#xff0c;它有着独特的优势和潜力&#xff0c;能够帮助吸引更多的潜在客户&#xff0c;那么VR全景图片制作时有哪些技巧&#xff0c;VR全…

进程间通信-匿名管道

一 什么是通信 就是进程间的数据交换&#xff0c;进程间由于具有独立性&#xff0c;需要操作系统提供能让进程间交换信息&#xff0c;也就是数据的方法。 二 如何做到 让不同进程看到同一份资源(这不是很简单的事吗)&#xff0c;我在父进程定义一个变量&#xff0c;子进程不就…