2、TCP协议基础

news2024/11/17 13:38:27

TCP协议基础

1、3次握手建立连接

SYN表示建立连接的标志位,ACK为应答标志位

客户端 服务器 SYN 1000(0)<mss,1460>(包号,(包携带的数据大小))<数据上限> SYN 8000(0),ACK 1001<mss 1024>(序号1001表示1001之前数据全部收到) ACK 8001(0) 客户端 服务器

以上三个箭头就是三次握手,accept和connect成功返回,表示三次握手已经成功

2、数据通信

客户端 服务器 1001(20),ACK 8001(ACK表示三次握手成功) 8001(10),ACK 1021 ACK 8011 客户端 服务器

注意:不是每通信一次就要做出ACK应答,可以批量做出应答

3、四次握手关闭连接

客户端 服务器 FIN 1021(0) ACK 8011 ACK 1022 进入半关闭状态,写缓存区关闭 FIN 8011(0) ACK(1023) ACK 8012 客户端 服务器

​ 有4次握手的原因:半关闭

​ 半关闭后可以继续发送ACK应答:因为连接还存在,只是关闭了写缓存区

4、滑动窗口和数据包格式

​ 主要是为了防止数据丢失,告诉客户端缓存区有多少容量,让客户端发送时注意。

5、TCP通信时序

三次握手:

​ 主动发起请求,发送SYN标志位,请求建立连接。携带数据包包号、数据字节数(0)、滑动窗口大小

​ 被动接收连接请求端:发送ACK标志位,同时携带SYN请求标志位。携带序号,确认序号、数据字节数,滑动窗口大小。

​ 主动发起连接请求端,发送ACK标志位,应答服务器连接请求。携带确认序号。

四次挥手:

​ 主动关闭连接请求端,发送FIN标志位。

​ 被动关闭连接请求端,应答ACK标志位。 -----半关闭完成

​ 被动关闭连接请求端,发送FIN标志位。

​ 主动关闭连接请求端,应答ACK标志位。

滑动窗口:

​ 发送给连接端,本端的缓存区大小,保证数据不会丢失。

6、错误处理函数的封装

例如:

int Accept(int fd, struct sockaddr *sa, socklen_t *salenptr)
{
	int n;

again:
	if ((n = accept(fd, sa, salenptr)) < 0) {
		if ((errno == ECONNABORTED) || (errno == EINTR))
			goto again;
		else
			perr_exit("accept error");
	}
	return n;
}

​ 系统调用的错误都存储于 errno中,errno由操作系统维护,存储就近发生的错误,即下一次的错误码会覆盖掉上一次的错误。

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

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

相关文章

js精度问题

1、问题场景&#xff1a;请求接口取得Number类型的数字和后端实际值不一致 比如&#xff1a; 后端返回10976458979374929&#xff0c;实际从接口拿到的是10976458979374928&#xff0c;在控制台也会得到这样的结果&#xff1a; 原因&#xff1a; 在JavaScript中&#xff0c;N…

Seata入门系列【5】事务分组原理及应用案例详解

1 事务分组 1.1 概念 事务分组&#xff1a;seata的资源逻辑&#xff0c;可以按微服务的需要&#xff0c;在应用程序&#xff08;客户端&#xff09;对自行定义事务分组&#xff0c;每组取一个名字。 例如以下配置中&#xff0c;定义了当前事务分组名为${spring.application.…

凉鞋的 Unity 笔记 108. 第二个通识:增删改查

在这一篇&#xff0c;我们来学习此教程的第二个通识&#xff0c;即&#xff1a;增删改查。 增删改查我们不只是一次接触到了。 在最先接触的场景层次窗口中&#xff0c;我们是对 GameObject 进行增删改查。 在 Project 文件窗口中&#xff0c;我们是对文件&文件夹进行增删…

Elasticsearch —索引性能技巧

目录 一、科学的测试性能 二、使用批量请求并调整其大小 三、存储 四、段和合并 五、其他 如果你是在一个索引负载很重的环境&#xff0c;比如索引的是基础设施日志&#xff0c;你可能愿意牺牲一些搜索性能换取更快的索引速率。在这些场景里&#xff0c;搜索常常是很少见的…

数据结构题型17-树、森林

文章目录 1 树转换为二叉树2 森林转换为二叉树3 二叉树转换为树4 二叉树转换为森林 1 树转换为二叉树 参考博客&#xff1a;如何将一棵树转化成二叉树 2 森林转换为二叉树 参考博客&#xff1a;树、森林与二叉树的转换 3 二叉树转换为树 参考博客&#xff1a;树、森林与…

开山之作 | YOLOv1算法超详细解析(包括诞生背景+论文解析+技术原理等)

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。目标检测是计算机视觉领域的一项重要研究方向&#xff0c;它在许多应用领域中都得到了广泛应用&#xff0c;如人脸识别、物体识别、自动驾驶、视频监控等。在过去&#xff0c;目标检测方法主要采用基于RCNN、Fast R-CNN等深…

软件工程与计算总结(九)软件体系结构基础

目录 ​编辑 一.体系结构的发展 二.理解体系结构 1.定义 2.区分体系结构的抽象与实现 3.部件 4.连接件 5.配置 三.体系结构风格初步 1.主程序/子程序 2.面向对象式 3.分层 4.MVC 一.体系结构的发展 小规模编程的重点在于模块内部的程序结构非常依赖于程序设计语言…

学网络安全的过程 ,差点要了我的命

我真的好像感慨一下&#xff0c;这个世界真的给计算机应届生留活路了吗&#xff1f; 看着周围的同学&#xff0c;打算搞前端、JAVA、C、C的&#xff0c;一个两个去跑去应聘。你以为是00后整治职场&#xff1f; 真相是主打一个卑微&#xff1a;现阶段以学习为主&#xff08;工资…

在Linux中掌握不同的命令,让创建文件变得易如反掌

在Linux中创建一个新文件很简单,但也有一些令人惊讶和灵巧的技术。​在本教程中,学习如何从Linux终端创建文件。​ 先决条件 访问命令行/终端窗口(Ctrl-Alt-F2或Ctrl-Alt-T) 具有sudo权限的用户帐户(对于某些文件/目录是可选的) 从命令行创建新的Linux文件 Linux的设计…

TXT文件恢复,简单3招,快速恢复文件!

“由于工作需要&#xff0c;我的电脑中保存了很多的TXT文件&#xff0c;但是在清内存时&#xff0c;我不小心删除了一些比较重要的文件&#xff0c;请问有什么方法可以恢复吗&#xff1f;” TXT文件是一种普通的文本文件格式&#xff0c;它包含了纯文本信息&#xff0c;没有任何…

股票价格预测 | Python基于RNN及股票预测实战

循环神经网络(RNN)是基于序列数据(如语言、语音、时间序列)的递归性质而设计的,是一种反馈类型的神经网络,其结构包含环和自重复,因此被称为“循环”。它专门用于处理序列数据,如逐字生成文本或预测时间序列数据(例如股票价格)。 (1)one to one:其实和全连接神经网络…

Pycharm 2023 设置远程调试

pycharm 版本 &#xff1a; 2023.2.1 整体流程参考&#xff1a;https://blog.csdn.net/xuanhaolaile/article/details/128293254 首先确定远程服务器上已经安装好 requirements.txt 中所需的依赖包。 1、SSH Configurations 添加远程服务器 2、Python Interpreter 注意&…

别再使用循环的方式筛选元素了!开发常用的Stream流+Lambda表达式过滤元素了解过吗?10000字超详细解析

目录 1. Stream 流的简单展示 1.1 抛出问题 1.2 传统解决问题的编码方式 1.3 Stream 流的方式过滤元素 2. Stream 流的核心思想 3. Stream 流的使用 3.1 获取 stream 流 3.1.1 单列集合获取 stream 流 3.1.2 双列集合获取 stream 流 3.1.3 数组获取 stream 流 3.1.4…

AD20统一修改相同元器件的名称和标号的方法

如图所示&#xff0c;我们原理图中有很多开关&#xff0c;比如说名字乱七八遭&#xff0c;想要整体快速修改应该怎么办呢&#xff1f; 解决方法&#xff1a;把鼠标指针放到原理图的空白处单击鼠标右键 点击查找相似对象之后鼠标变成了一个十字状&#xff0c;用十字状中心点击要…

凉鞋的 Godot 笔记 108. 第二个通识:增删改查

在这一篇&#xff0c;我们来学习此教程的第二个通识&#xff0c;即&#xff1a;增删改查。 增删改查我们不只是一次接触到了。 在最先接触的场景窗口中&#xff0c;我们是对 Node 进行增删改查。 在文件系统窗口中&#xff0c;我们是对文件&文件夹进行增删改查&#xff1…

Linux工具-远程登录/访问

测试环境&#xff1a;ubuntu 20.04 一、ssh服务 SSH&#xff08;Secure Shell Protocol&#xff0c;安全的壳程序协议&#xff0c;基于tcp协议默认使用22端口&#xff09;&#xff0c;它可以通过数据包加密技术将待传输的数据包加密后再传输到网络上。通过ssh协议/服务&#…

ros之乌龟做圆周运动and订阅乌龟的位姿信息

一 .基于乌龟显示节点&#xff0c;通过话题发布&#xff0c;编码实现控制小乌龟做圆周运动 打开终端1&#xff0c;进入工作空间 ros_ws cd ros_ws启动节点(ros服务器) roscore新开终端2&#xff0c;启动乌龟节点&#xff08;turtlesim &#xff09; rosrun turtlesim turtl…

企业数字化营销策略如何制定?企业开展数字化营销有的关键步骤?

​制定数字化营销策略是建立数字化营销体系的关键步骤&#xff0c;想要建立好的数字化营销策划&#xff0c;需要企业明确目标客户群体&#xff0c;通过了解他们的需求和行为&#xff0c;来制定相应的营销策略。例如&#xff0c;通过数据分析手段&#xff0c;企业可以确定目标客…

#JavaScript教程:循环遍历@FDDLC

一、普通的for循环&#xff08;当然还有while循环和do while循环&#xff09; 二、for of 遍历 三、for in 遍历 四、forEach 五、map方法 六、reduce方法 输出&#xff1a;543 七、filter方法 八、some方法

TensorFlow入门(二十三、退化学习率)

学习率 学习率,控制着模型的学习进度。模型训练过程中,如果学习率的值设置得比较大,训练速度会提升,但训练结果的精度不够,损失值容易爆炸;如果学习率的值设置得比较小,精度得到了提升,但训练过程会耗费太多的时间,收敛速度慢,同时也容易出现过拟合的情况。 退化学习率 退化学…