网络原理TCP/IP(2)
文章目录
- TCP协议
- 确认应答
- 超时重传
- 连接管理
- 断开连接
TCP协议
TCP全称为"传输控制协议(Transmission Control Protocol").⼈如其名,要对数据的传输进⾏⼀个详细
的控制;
TCP协议段格式

• 源/目的端口号:表⽰数据是从哪个进程来,到哪个进程去;
• 32位序号/32位确认号:后⾯详细讲;
• 4位TCP报头⻓度:表⽰该TCP头部有多少个32位bit(有多少个4字节);所以TCP头部最⼤⻓度是15*4=60
• 6位标志位:
◦ URG:紧急指针是否有效
◦ ACK:确认号是否有效
◦ PSH:提⽰接收端应⽤程序⽴刻从TCP缓冲区把数据读⾛
◦ RST:对⽅要求重新建⽴连接;我们把携带RST标识的称为复位报⽂段
◦ SYN:请求建⽴连接;我们把携带SYN标识的称为同步报⽂段
◦ FIN:通知对⽅,本端要关闭了,我们称携带FIN标识的为结束报⽂段
• 保留(六位)reserved保留位:UDP协议长度受到2个字节的限制,想要进行扩展,发现扩展不了,一旦改变报头长度,就会使机器发送的UDP数据报和其他机器不兼容,TCP在设定报头的时候就提前准备了几个保留位,后续一旦需要扩展功能,使用保留位就可以实现,就可以避免TCP的扩展不兼容的问题
• 16位校验和:发送端填充,CRC校验.接收端校验不通过,则认为数据有问题.此处的检验和不光包含TCP⾸部,也包含TCP数据部分.
• 16位紧急指针:标识哪部分数据是紧急数据;
确认应答
网络传输过程中,经常会出现后发先至的情况,原因是:一个数据包从发送方到接收方传输过程中走的路径可能不一样,导致先发后至。
为了解决上述问题,引入了序号和确认序号,对数据进行编号,应答报文告诉发送方我应答是哪个数据

TCP将每个字节的数据都进⾏了编号.即为序列号
主机B收到1-1000这些字节数据之后反馈一个应答报文,应答报文中的确定序号的值就是1001,
1001的含义:
1.小于1001的数据都已经收到了
2.发送方接下来要给我发1001开始的数据了
TCP的确认应答是确保TCP可靠性的最核心机制

每⼀个ACK都带有对应的确认序列号,意思是告诉发送者,我已经收到了哪些数据;下⼀次你从哪⾥开始发.
超时重传
超时重传是确认应答的补充,如果一切顺利,通过应答报文就可以告诉发送方当前数据是不是成功收到,但是网络上可能存在丢包的情况,如果数据包丢了没有到达对方,对方自然也就没有ack报文,这种情况下就需要超时重传,当认为丢包之后,就会把刚才的数据包再传输一次,等待的过程有一个时间的阈值,就是“超时”。

• 主机A发送数据给B之后,可能因为⽹络拥堵等原因,数据⽆法到达主机B;
• 如果主机A在⼀个特定时间间隔内没有收到B发来的确认应答,就会进⾏重发;但是,主机A未收到B发来的确认应答,也可能是因为ACK丢失了;

TCP socket在内核中存在接收缓冲区(一块内存空间),发送方发来的数据是要先放到接收缓冲区的然后应用程序调用read/scanner.next才能读到数据,当数据再次接收到缓冲区时候,接收方首先会先判定是否存在,如果存在就会丢弃重复数据。
接收方如何判定这个数据是否是“重复数据” ? 核心判定依据是根据数据的序号
1.数据还在接收缓冲区里,没被read走,此时就拿着新接收的数据序号和缓冲区中的所有数据的序号核对
2.数据在接收缓冲区外,已经被应用程序read走了,此时新来的数据序号直接无法再接收缓冲区查到(注意:应用程序读取数据的时候是按照序号的先后顺序连续读取的,一定是先读序号小的数据后读序号大的数据
超时重传不是无限的重传,重传过程也是有一定策略的
1.重传次数是有上限的,重传到一定程度还没有ack应答就尝试重置连接,如果重置也失败了,就直接放弃连接
2.重传的超时时间阈值也不是固定不变的,随着重传的次数的增大,而增大(重传的频率越来越低)
连接管理
建立连接和断开连接是网络原理中高频的问题
在内核中是如何建立连接的?
TCP要经过 三次握手 建⽴连接,目的就是让通信双方都能保存对方的相关信息

上述的流程上讲,是有四次交互,但是实际过程中,其中的两次交互可以合二为一,最终形成了“三次握手”,所谓的建立连接过程,本质上就是通信双方各自给对方发起一个syn,各自给对方回应一个ack
注意:
- 客户端是主动的一方,第一次交互一定是客户端主动发起的
- 所谓的syn是一个特别的TCP数据报,没有载荷,不会携带应用层数据,六个标志位中的第五位,为1

三次握手的意义是什么?
- 三次握手,可以先针对通信路径,进行投石问路,初步的确定一下通信链路是否畅通
- 三次握手也是在验证通信双方发送能力和接受能力是否正常
断开连接
断开连接的本质目的就是为了把对端的信息从数据结构中删除掉/释放掉
四次挥手也是存在确认应答和超时重传

四次挥手,断开连接的第二次和第三次操作不能合二为一,因为在实际通信过程中,ack和第二个fin时间间隔比较长,此时就无法进行合并了,就要分成两次来传输
三次握手和四次挥手
相似之处:
都是通信双方各自给对方发起一个syn/fin,各自给对方返回ack
数据传输的顺序,syn/ack/syn/ack fin/ack/fin/ack
不同之处:
三次握手中间两次一定能合并,四次挥手则不一定
三次握手必须是客户端主动,四次挥手,客户端/服务器都可以主动
连接管理过程中涉及到的TCP状态转换
TCP服务器和客户端都有一定的数据结构来保存这个连接的信息
在这个数据结构中其中就有一个属性叫做“状态”
操作系统内核根据状态的不同,决定了当前应该干什么


LISTEN状态,表示服务器这边创建好了serverSocket了,并且绑定端口号完成
ESTABLISHED状态,表示客户端和服务器连接已经建立完毕(三次握手完成)
CLOST WAIT状态,表示收到对方的fin之后进入这个状态(谁被动断开连接谁进入CLOSE WAIT)
TIME WAIT状态,表示本端给对方发起FIN之后,对端也给本端发FIN,此时本端进入TIME WAIT(谁主动断开连接谁进入TIME WAIT)
TIME_WAIT 存在的意义,主要是防止,最后一个ACK丢包。客户端如果在这个环节,把TCP连接释放掉,此时意味着重传的FIN就无法被返回ACK了(保存对端信息的数据结构存在,才能给这个连接提供各种操作,才能返回ACK)
此时的TIME_WAIT等待也不是无休止的等待,最多等2MSL(MSL是一个系统内核的配置项,表示客户端到服务器之间,消耗的最长时间,这个时间一般是一个非常大的时间,常见的设置值是1min)
相关文章:
网络原理TCP/IP(2)
文章目录 TCP协议确认应答超时重传连接管理断开连接 TCP协议 TCP全称为"传输控制协议(Transmission Control Protocol").⼈如其名,要对数据的传输进⾏⼀个详细 的控制; TCP协议段格式 • 源/目的端口号:表⽰数据是从哪个进程来,到哪个进程去; • 32位序号/32位确认…...
Echars3D 饼图开发
关于vue echart3D 饼图开发 首先要先下载 "echarts-gl", 放在main.js npm install echarts-gl --save <template><div class"cointan"><!-- 3d环形图 --><div class"chart" id"cityGreenLand-charts"><…...
【PaddleSpeech】语音合成-男声
环境安装 系统:Ubuntu > 16.04 源码下载 使用apt安装 build-essential sudo apt install build-essential 克隆 PaddleSpeech 仓库 # github下载 git clone https://github.com/PaddlePaddle/PaddleSpeech.git # 也可以从gitee下载 git clone https://gite…...
AI-数学-高中-17-三角函数的定义
原作者视频:三角函数】4三角函数的定义(易)_哔哩哔哩_bilibili 初中: 高中:三角函数就是单位圆上的点的横纵坐标(x0,y0)。 示例1: 规则: 示例2: 示例3.1: 示例3.2 示例4…...
centOS/Linux系统安全加固方案手册
服务器系统:centos8.1版本 说明:该安全加固手册最适用版本为centos8.1版本,其他服务器系统版本可作为参考。 1.账号和口令 1.1 禁用或删除无用账号 减少系统无用账号,降低安全风险。 操作步骤 使用命令 userdel <用户名> 删除不必要的账号。 使用命令 passwd…...
编程实例分享,眼镜店电脑系统软件,配件验光管理顾客信息记录查询系统软件教程
编程实例分享,眼镜店电脑系统软件,配件验光管理顾客信息记录查询系统软件教程 一、前言 以下教程以 佳易王眼镜店顾客档案管理系统软件V16.0为例说明 如上图, 点击顾客档案,在这里可以对顾客档案信息记录保存查询,…...
完整的 HTTP 请求所经历的步骤及分布式事务解决方案
1. 对分布式事务的了解 分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西, 特别是在微服务架构中,几乎可以说是无法避免。 首先要搞清楚:ACID、CAP、BASE理论。 ACID 指数据库事务正确执行…...
SpringMVC请求和响应
文章目录 1、请求映射路径2、请求参数3、五种类型参数传递3.1、普通参数3.2、POJO类型参数3.3、嵌套POJO类型参数3.4、数组类型参数3.5、集合类型参数 4、json数据传递4.1、传递json对象4.2、传递json对象数组 5、日期类型参数传递6、响应6.1、响应页面6.2、文本数据6.3、json数…...
AIGC实战——深度学习 (Deep Learning, DL)
AIGC实战——深度学习 0. 前言1. 深度学习基本概念1.1 基本定义1.2 非结构化数据 2. 深度神经网络2.1 神经网络2.2 学习高级特征 3. TensorFlow 和 Keras4. 多层感知器 (MLP)4.1 准备数据4.2 构建模型4.3 检查模型4.4 编译模型4.5 训练模型4.6 评估模型 小结系列链接 0. 前言 …...
Django_基本增删改查
一、前提概述 通过项目驱动来学习,以图书管理系统为例,编写接口来实现对图书信息的查询,图书的添加,图书的修改,图书的删除等功能。(不包含多重信息的校验,只为了熟悉增删改查接口的实现流程&a…...
数仓治理-存储资源治理
目录 一、存储资源治理的背景 二、存储资源治理的流程及思路 三、治理前如何评估 3.1 无用数据表/临时数据表下线评估 3.2 表及分区的生命周期评估 3.3 存储及压缩格式评估 3.4 根据业务场景实现节省存储评估 四、治理后的成效如何评估 一、存储资源治理的背景 由于早…...
Linux系统安全:安全技术 和 防火墙
一、安全技术 入侵检测系统(Intrusion Detection Systems):特点是不阻断任何网络访问,量化、定位来自内外网络的威胁情况,主要以提供报警和事后监督为主,提供有针对性的指导措施和安全决策依据,类 似于监控…...
3dmatch-toolbox详细安装教程-Ubuntu14.04
3dmatch-toolbox详细安装教程-Ubuntu14.04 前言docker搭建Ubuntu14.04安装第三方库安装cuda/cundnn安装OpenCV安装Matlab 安装以及运行3dmatch-toolbox1.安装测试3dmatch-toolbox(对齐两个点云) 总结 前言 paper:3DMatch: Learning Local Geometric Descriptors from RGB-D Re…...
Hadoop与Spark横向比较【大数据扫盲】
大数据场景下的数据库有很多种,每种数据库根据其数据模型、查询语言、一致性模型和分布式架构等特性,都有其特定的使用场景。以下是一些常见的大数据数据库: NoSQL 数据库:这类数据库通常用于处理大规模、非结构化的数据。它们通常…...
软件工程知识梳理5-实现和测试
编码和测试统称为实现。 编码:把软件设计结果翻译成某种程序设计语言书写的程序。是对设计的进一步具体化,是软件工程过程的一个阶段。 测试:单元测试和集成测试,软件测试往往占软件开发总工作量的40%以上。 编码:选…...
WebRTC系列-自定义媒体数据加密
文章目录 1. 对外加密接口2. 对外加密实现前面的文章都有提过WebRTC使用的加密方式是SRTP这个库提供的,这个三方库这里就不做介绍,主要是对rtp包进行加密;自然的其调用也是WebRTC的rtp相关模块;同时在WebRTC里也提供一个自定义加密的接口,本文将围绕这个接口做介绍及分析;…...
golang的sqlite驱动不使用cgo实现 更换gorm默认的SQLite驱动
golang的sqlite驱动不使用cgo实现 更换gorm默认的SQLite驱动 最近在开发一个边缘物联网程序时使用Golang开发,用到GORM来操作SQLite数据库,GORM默认使用gorm.io/driver/sqlite这个库作为SQLite驱动,该库用CGO实现,在使用过程中遇…...
Linux 系统 ubuntu22.04 发行版本 固定 USB 设备端口号
前言: 项目中为了解决 usb 设备屏幕上电顺序导致屏幕偏移、触屏出现偏移等问题。 一、方法1:使用设备 ID 号 步骤: 查看 USB 设备的供应商ID和产品ID Bus 001 Device 003: ID 090c:1000 Silicon Motion, Inc. - Taiwan (formerly Feiya Te…...
Vue - 面试题持续更新
1.Vue路由模式 总共有Hash和History两种模式 Hash模式:在浏览器里面的符号 “#”,以及"#"后面的字符称之为Hash,用window.location.hash读取。 Hash模式的特点:hash是和浏览器对话的,和服务器没有关系&…...
Django的web框架Django Rest_Framework精讲(二)
文章目录 1.自定义校验功能(1)validators(2)局部钩子:单字段校验(3)全局钩子:多字段校验 2.raise_exception 参数3.context参数4.反序列化校验后保存,新增和更新数据&…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
