Linux中三次握手,四次挥手状态图,端口复用 半关闭状态,心跳包

news2024/12/24 10:37:25

tcp三次握手和四次挥手状态图:

为什么需要2MSL:

原因1:让四次挥手过程更加可靠,确保最后一个发送给对方的ACK到达;若对方没有收到ACK应答,对方会再次发送FIN请求关闭,此时在2MSL时间内被动关闭方仍然可以发送ACK给对方;

原因2:为了保证在2MSL时间内,不能启用相同的SOCKET_PAIR

问题:

启动服务端和客户端,然后先关闭服务端,又立即启用时会报错:bind error:Adddress already in use;先关闭客户端,又立即启用就不会报错。 

端口复用:

解决端口复用的问题:bind error:Adddress already in use,发生在关闭服务端后,又立即启用。

int setsockopt(int sockfd, int level, int optname,
                      const void *optval, socklen_t optlen);

在bind函数之前调用,添加以下代码就可以解决端口复用:

int opt=1;
setsockopt(lfd,SOL_SOCKET,SO_REUSEADDR,&opet,sizeof(int));

 SO_REUSEADDR:如果*val为非零,重用bind中的地址。

半关闭状态:

如果一方close,另一方没有close,则认为时半关闭状态,处于半关闭状态的时候,可以接收数据,但是不能发送数据,相当于把缓冲区的写缓冲区操作关闭了。

注意:半关闭一定出现在主动关闭的一方。

int shutdown(int sockfd, int how);

函数参数:
sockfd:监听描述符

how:

       If how is  SHUT_RD,
       further  receptions  will  be  disallowed.   If how is SHUT_WR, further
       transmissions will be disallowed.  If how is SHUT_RDWR, further  recep‐
       tions and transmissions will be disallowed.
 

shutdown和close的区别:

1 shutdown可以实现半关闭,close不行;

2 shutdown关闭的时候,不考文件描述符的引用计数,是彻底关闭;

  close考虑文件描述符的引用计数(创建子进程加一,dup函数也加一),调用一次close只是将引用次数减一,只有减到零才真正关闭。 

长连接和短连接:

长连接:连接建立好之后,一直保持连接不关闭

短连接:连接使用完之后就立刻关闭。

心跳包:

心跳包是用于长连接是否正常的字符串;

作用:检查与对方的连接是否正常;

心跳包一般用于长连接。 

发送心跳过程:

1 服务A给B发送心跳数据AAAA,服务B收到AAAA之后,给A回复BBBB,此时A收到BBBB之后,认为连接正常。

假如A连续发送多次(3~5)之后,仍然没有收到B的回复,则认为连接异常。

异常之后,A应该重新建立连接:

先close原来的连接,然后在connect连接。

如何让心跳数据和正常的业务数据不混淆:

解决方法:

双方可以协商协议,如四个字节长度+具体数据

如果对方发送心态数据应该:0004AAAA;

如果发送业务数据:0009123456789;

对方收数据的时候,先收4个字节的报头数据,若最后计算长度为4,且数据内容是AAAA,则认为是心跳数据,然后B发送0004BBBB。 

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

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

相关文章

【uni-app】condition 启动模式配置,生产环境无效,仅开发期间生效

在小程序开发过程中,每次代码修改后,都会启动到首页,有时非常不方便,为了更高效的开发,有时需要模拟直接跳转到指定的页面, 操作方法如下: 在pages.joson里面配置下列代码: "…

C#,煎饼排序问题(Pancake Sorting Problem)算法与源代码

1 煎饼排序问题 给定一个未排序的数组,任务是对给定数组进行排序。您只能在阵列上执行以下操作。 翻转(arr,i):将数组从0反转为i 示例: 输入:arr[]{23、10、20、11、12、6、7} 输出&#xff1a…

Prompt Engineering、Finetune、RAG:OpenAI LLM 应用最佳实践

一、背景 本文介绍了 2023 年 11 月 OpenAI DevDay 中的一个演讲,演讲者为 John Allard 和 Colin Jarvis。演讲中,作者对 LLM 应用落地过程中遇到的问题和相关改进方案进行了总结。虽然其中用到的都是已知的技术,但是进行了很好的总结和串联…

Vue+SpringBoot打造天沐瑜伽馆管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 瑜伽课程模块2.3 课程预约模块2.4 系统公告模块2.5 课程评价模块2.6 瑜伽器械模块 三、系统设计3.1 实体类设计3.1.1 瑜伽课程3.1.2 瑜伽课程预约3.1.3 系统公告3.1.4 瑜伽课程评价 3.2 数据库设计3.2.…

从零开始学习Diffusion Models: Sharon Zhou

How Diffusion Models Work 本文是 https://www.deeplearning.ai/short-courses/how-diffusion-models-work/ 这门课程的学习笔记。 文章目录 How Diffusion Models WorkWhat you’ll learn in this course [1] Intuition[2] SamplingSetting Things UpSamplingDemonstrate i…

SpringBoot第三课-日志

1.日志分类 2.默认使用 默认使用logback与slf4j作为底层默认日志 但是由于日志是系统启动就需要使用,所以与其他的自动配置不同,自动配置是后来使用的,而日志是使用监听器配置好的。 ApplicationListener 3.日志级别 1.级别介绍 SpringB…

【MySQL 系列】在 Windows 上安装 MySQL

在 Windows 平台上安装 MySQL 很简单,并不需要太复杂的步骤。按照本文的步骤操练起来就可以了。 文章目录 1、下载 MySQL 安装程序2、安装 MySQL 数据库2.1、选择安装类型2.2、检查所需组件2.3、安装所选产品组件2.4、产品配置2.5、配置高可用性2.6、配置服务器类型…

正则表达式-分组

1、oracle-正则表达式:将09/29/2008 用正则表达式转换成2008-09-29 select regexp_replace(09/29/2008, ^([0-9]{2})/([0-9]{2})/([0-9]{4})$, \3-\1-\2) replace from dual; 解析:regexp_replace-替换, 第一个参数:需要进行处…

分享7款前端直接使用的项目动画特效(附在线演示)

分享7款非常不错的项目动画特效 其中有jQuery特效、canvas特效、CSS动画等等 下方效果图可能不是特别的生动 那么你可以点击在线预览进行查看相应的动画特效 同时也是可以下载该资源的 图片分割组合特效 首先会把图片分割成均匀的小块 之后又会将这些小块拼接组合起来 以下效…

节日专访|「我」是「我」

又到了 Zilliz 一年一度的特别时刻——三八妇女节专访。按照惯例,我们每年都会选定一个话题进行讨论,今年的主题是「我是我」。 我是我, 是生物学上以性别划分的女性, 是在不同职业领域中绽放光彩的工程师、财务、市场运营…… 是…

数据结构从入门到精通——栈

栈 前言一、栈1.1栈的概念及结构1.2栈的实现1.3栈的面试题 二、栈的具体实现代码栈的初始化栈的销毁入栈出栈返回栈顶元素返回栈中的元素个数检测是否为空Stack.hStack.ctest.c 前言 栈,作为一种后进先出(LIFO)的数据结构,在计算…

力扣大厂热门面试算法题 6-8

6. Z 字形变换,7. 整数反转,8. 字符串转换整数 (atoi),每题做详细思路梳理,配套Python&Java双语代码, 2024.03.08 可通过leetcode所有测试用例。 目录 6. Z 字形变换 解题思路 边界条件 完整代码 Python Ja…

李想已经5天没发微博了

李想的微博已经5天没更新了。 理想MEGA发布之后的第二天,李想在微博转发了一条某汽车自媒体和理想MEGA设计师BenBaum的访谈视频,并配文表示,Ben的访谈非常好。 不过,在之后的5天时间里,李想的微博便悄无声息了。这与“…

yocto本地离线构建时报错

解决方案:在local.conf中添加 BB_NO_NETWORK "1"禁用网络,从本地downloads中fetch源码

【方法】如何打开7Z分卷压缩文件?

什么是7Z分卷压缩文件?就是在压缩文件时,将文件压缩成若干个大小一样、以“文件名.7z.序号”格式命名的7Z压缩包,可以方便存储和传输,如下图所示。 一、7Z分卷压缩文件如何打开? 我们只需要按照普通压缩包的打开方式&…

智慧园区综合运营数字化解决方案

1. 楼栋管理 2. 物业管理 3. 安防管理 4. 门禁管理 5. 停车管理 6. 能源管理 7. 环保管理 8. 园区生活服务 9. 招商管理 10. 收费中心 11. 园区地图 12. 门户网站 智慧园区软件方案:智慧园区软件解决方案,园区运营管理系统(源码)-…

DiT:Scalable Diffusion Models with Transformers

TOC 1 前言2 方法和代码 1 前言 该论文发表之前,市面上几乎都是用卷积网络作为实际意义上的(de-facto)backbone。于是一个想法就来了:为啥不用transformer作为backbone呢? 文章说本论文的意义就在于揭示模型选择对于…

二叉树—层序遍历

102. 二叉树的层序遍历 代码实现: /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ /*** Return an array of arrays of size *returnSize.* The sizes of the arrays …

L波段光端机-L波段+CATV射频光端机工作机制及行业应用探究

L波段光端机-L波段CATV射频光端机工作机制及行业应用探究 北京海特伟业任洪卓发布于2023年3月8日 一、何为L波段光端机 L波段光端机是一种用于光通信的设备,其主要工作波长位于L波段,即40~860MHz和950~2600MHz的带宽,可选独立工作于950~260…

开发Chrome扩展插件

1.首先开发谷歌chrome扩展插件,没有严格的项目结构目录,但是需要保证里面有一个mainfest.json文件 (必不可少的文件)。在这个文件里有三个属性必不可少:name、version、mainfest_version; // 清单文件的版本,这个必须写…