网络层TCP机制

1.确认应答机制

由于发送信息的距离可能较远,可能出现后发的信息先到的情况,怎么办?

TCP将每个字节的数据都进行了编号,即为序列号

如何分辨一个数据包是普通数据还是应答数据呢

2.超时重传

由于丢包是一个随机的事件,因此在上述tcp传输的过程中,丢包就存在两种情况

但是在发送方的角度,无法区分这两种情况

无论出现哪种情况,发送方都会进行"重新传输"

所以udp一般延迟比较低

如果a给b发了消息,而b回复的数据丢了,那a就会超时重传一条一样的数据过去

3.连接管理机制

3.1 建立连接,TCP三次握手

TCP在建立连接的过程中,需要通信双方一共"打三次招呼",才能发完成连接建立的

ack和syn同时为一,此时就是三次握手了

3.2 连接断开,四次挥手

建立连接一般是客户端主动发起

断开连接,客户端和服务器都可以主动发起

和三次握手不同,此处的四次握手,不一定能把中间的两次交互合并

不能的原因:ack和第二个fin的触发时机是不同的

ack是内核响应,b收到fin,就会立即返回ack

第二个fin是应用程序的代码触发,b这边调用了close方法才会触发fin

可以的原因:

3.3 问题

3.3.1 怎么判断报文是不是同步报文段?

3.3.2 三次握手要解决什么问题? (核心作用)

这种设定,是避免前朝的剑斩本朝的官

3.3.3 两次,三次握手是否可行?

两次不行,四次可以,但没必要,两个数据合并成一个数据更高效\

4.滑动窗口机制

4.1丢包如何重传

  

这种情况不用任何重传,因为有确认序号机制

TCP前提是可靠性,在可靠性的前提上,再提高传输效率

5.流量控制

站在接收方的角度,反向制约发送方的传输速率

6.拥塞控制

6.1过程

在指数增长的过程中,如果达到阈值,就从指数增长,变成线性增长

线性增长也是增长,如果传输速率越来越快增长到一定程度,网络上就可能会出现丢包了(网络堵塞)

一旦触发丢包,就把窗口大小缩小,重新进行前面的慢开始 - 指数增长 - 线性增长

并且会根据当前丢包的窗口大小,重新指定线性增长阈值(为了避免指数增长一下就达到丢包阈值)

这是经典版本的拥塞控制,后面tcp又进行了改进

最终时机发送的窗口大小,是取流量控制和拥塞控制中窗口的较小值

7.延时应答

8.捎带应答

在延时应答的基础上,进一步提高效率

9.面向字节流

相比之下,UDP这样的面向数据报的通信方式就没有这样的问题

如何解决粘包问题?

前面写的回显服务器,就是这样的方式

10.异常情况处理

10.1 进程崩溃

10.2 主机关机(正常流程)

10.3 主机掉电

10.4 网线断开

11.TCP的心跳机制

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

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

相关文章

【一起来学AI大模型】微调技术:LoRA(Low-Rank Adaptation) 的实战应用

LoRA(Low-Rank Adaptation) 的实战应用,使用 Hugging Face 的 peft (Parameter-Efficient Fine-Tuning) 库对大型语言模型进行高效微调。LoRA 因其显著降低资源消耗(显存和计算)同时保持接近全量微调性能的特点&#x…

RedisJSON 内存占用剖析与调优

一、基础内存模型指针包装 所有 JSON 值(标量、对象、数组、字符串等)至少占用 8 字节,用于存储一个带类型标记的指针。标量与空容器 null、true、false、小整数(静态缓存)、空字符串、空数组、空对象 均不分配额外内存…

【LeetCode 热题 100】23. 合并 K 个升序链表——(解法一)逐一合并

Problem: 23. 合并 K 个升序链表 题目:给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 文章目录整体思路完整代码时空复杂度时间复杂度:O(K * N)空间复杂度:O(1…

垃圾收集器-Serial Old

第一章 引言1.1 JVM 中垃圾收集的简要概述JVM(Java Virtual Machine)作为 Java 程序的运行时环境,负责将字节码加载至内存并执行,同时也承担着内存管理的重任。垃圾收集(Garbage Collection,简称 GC&#x…

Docker(02) Docker-Compose、Dockerfile镜像构建、Portainer

Docker-Compose 1、Docker Desktop 在Windows上安装Docker服务,可以使用Docker Desktop这个应用程序。 下载并安装这样的一个安装包 安装好后:执行命令 docker --version 从Docker Hub提取hello-world映像并运行一个容器: docker run h…

大数据时代UI前端的用户体验设计新思维:以数据为驱动的情感化设计

hello宝子们...我们是艾斯视觉擅长ui设计和前端数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩!一、引言:从 “经验设计” 到 “数据共情” 的体验革命传统 UI 设计常陷入 “设计师主观经…

TypeScript 学习手册

1.TypeScript 概念 TypeScript(简称 TS,静态类型)是微软公司开发的一种基于 JavaScript (简称 JS,动态类型)语言的编程语言。TypeScript 可以看成是 JavaScript 的超集(superset)&a…

掌握现代CSS:变量、变形函数与动态计算

CSS近年来发展迅速,引入了许多强大的功能,如变量、高级变形函数和动态计算能力。本文将深入探讨如何在CSS中设置并使用变量,以及如何有效利用translate3d、translateY和translateX等变形方法。我们还将解析var()和calc()函数的关键作用。一、…

贝尔量子实验设想漏洞

1 0 1 0 1 1 0 1 0 1 1 1 0 0 1 0 带墨镜如果先上下交换再左右交换,很可能不一样的概率是2%,但是因为交换诞生了一个与之前序列相同的所以不一样概率变成1%,我们在测的时候不能这么测啊,你得看序列完…

在 Android 库模块(AAR)中,BuildConfig 默认不会自动生成 VERSION_CODE 和 VERSION_NAME 字段

为什么AAR库模块的 BuildConfig 没有 versionCode 和 versionName? aar库模块的 BuildConfig 默认不包含版本信息 应用模块(com.android.application)会自动生成 versionCode 和 versionName 到 BuildConfig。但库模块(com.androi…

强化学习 (11)随机近似

计算均值的新方法有两种方法。第一种方法很直接,即收集所有样本后计算平均值;但这种方法的缺点是,若样本是在一段时间内逐个收集的,我们必须等到所有样本都收集完毕。第二种方法可避免此缺点,因为它以增量迭代的方式计…

PHP `implode` 深度解析:从基础到高阶实战指南

文章目录一、基础语法与底层原理执行过程解析:二、性能关键:避免隐含陷阱1. 类型转换黑盒2. 大数组内存优化3. 关联数组处理三、高阶应用场景1. SQL语句安全构建2. CSV文件生成3. 模板引擎实现四、多维数组处理方案1. 递归降维2. JSON转换桥接五、性能对…

开发语言中关于面向对象和面向过程的笔记

开发语言中关于面向对象和面向过程的笔记市面主流语言分类面向过程面向对象市面主流语言分类 面向过程编程(Procedural Programming):C语言;面向对象编程语言(Object-Oriented Programming, OOP) &#xf…

AI产品经理面试宝典第3天:技术分层、边界与市场全景系列面试题

面试指导 面试官:请从技术实现效果的角度,解释AI技术分层。 你的回答: AI技术分为三层。 第一层是认知层:通过图像处理、语音识别、自然语言理解等技术,让机器感知环境。比如摄像头识别行人动作,麦克风捕捉用户指令。 第二层是预测层:基于行为数据预判下一步需求。例如…

Intel英特尔ICH7R/ICH8R/ICH9R/ICH10R系列下载地址--intel_msm_8961002 下载 Version 8.9.6.1002

Intel英特尔ICH7R/ICH8R/ICH9R/ICH10R系列下载地址intel_msm_8961002 下载 Version 8.9.6.1002https://xiazai.zol.com.cn/detail/66/653449.shtml通过网盘分享的文件:intel_msm_8961002.zip 链接: https://pan.baidu.com/s/13N9ZLXWkaWaEHQ5P90Jt0g?pwd3790 提取码…

AI(学习笔记第五课) 使用langchain进行AI开发 load documents(web)

文章目录AI(学习笔记第五课) 使用langchain进行AI开发 load documents(web)学习内容:1.load documents(web)1.1 学习url1.2 提前安装python的package1.2 使用WebBaseLoader进行webpage的load1.3 使用BeautifulSoup4进行webpage的部分截取1.4 …

使用macvlan实现容器的跨主机通信

使用环境: 两台运行docker的服务器 A机器网段:192.168.86.61 B机器网段:192.168.86.62 运行的容器需装有ping指令, 实验参数解释: -d macvlan 指定创建网络驱动类型 --subnet 指定子网范围 -gateway 指定网关地址 -o p…

深度学习_全连接神经网络

1.什么是神经网络神经网络中信息只向一个方向移动,即从输入节点向前移动,通过隐藏节点,再向输出节点移 动,网络中没有循环或者环。其中的基本构件是: 输入层:即输入x的那一层 输出层:即输出y的那…

OpenLayers使用

初学ol,实现了高德地图不同图层的切换、交互性地图飞行以及加载本地JSON数据。说一下不同图层切换的想法:1.对于标准地图和卫星地图:二者最初便挂载到map上,两个图层是叠加显示的;当点击按钮时,其实是使用 …

day4--上传图片、视频

1. 分布式文件系统 1.1 什么是分布式文件系统 文件系统是负责管理和存储文件的系统软件,操作系统通过文件系统提供的接口去存取文件,用户通过操作系统访问磁盘上的文件。 下图指示了文件系统所处的位置: 常见的文件系统:FAT16/FA…