LINUX网络编程:Tcp(2)

news2024/9/25 20:01:56

目录

1.Tcp流量控制

2.滑动窗口

2.1滑动窗口的更新

 2.2滑动窗口的丢包问题

1.报文丢失的情况

2.ACK丢失的情况

3.拥塞控制

3.1慢启动

3.2拥塞窗口的增长


1.Tcp流量控制

为什会有流量控制?

1.在网络通信中,假如发送方的发送能力特别的强,接受方的接受缓冲区都满了,发送方还在继续发,这些多余的报文就会被丢弃,这就造成了网络资源的浪费。

2.接受方的接受能力特别强,接受方的接受缓冲区,一直是空的,接收方都快饿死了,

所以接收方需要告知发送方自己的接受能力

当接受方对发送方进行 ACK时,Tcp报头中是有一个16位窗口大小的,16位窗口大小就是接受缓冲区剩余的大小,当接受缓冲区满了,16位窗口大小就为0。

2.滑动窗口

在tcp在发送消息的时候,不是一条一条的发送的,这样数据往返时间太长了,效率太低了。

Tcp会一口气发送多条消息,在一起收到多条应答。

那这时候就会有个问题,到底一次发送多少消息合适呢?

在tcp缓冲区中存在一个窗口,在这个窗口内的数据,不用收到任何ACK,直接就可以发送给对方。

滑动窗口本质就是 两个数组的下标,一个指向窗口的开始,一个指向窗口的结束。

 int win_begin  = 2001 , int win_end = 6001。

2.1滑动窗口的更新

滑动窗口的大小是根据ACK应答中的16位窗口大小和确认序号,实时更新的。

确认序号就是下次该发送数据的下标。

例:收到的ACK确认序号是3001,16位窗口大小是 5000,那么滑动窗口该如何更新呢?

win_begin = 确认序号, win_end = 确认序号 + 16位窗口大小。(暂时这样认为)

 2.2滑动窗口的丢包问题

1.报文丢失的情况

例:1001 - 2001 这个报文丢失

1001 - 2001 这个报文丢失所以1001 - 2001 这段报文是没有返回ACK的,根据确认序号的定义,确认序号保证确认序号之前的数据已经被收到因为1001丢失,所以剩下所有报文ACK的确认序号都是1001,因为只有1001之前的所有数据被主机B收到了

这里不得不提到Tcp的快重传机制

连续3个ACK确认序号都是相同的时候,这时候需要迅速对其进行补发,不用等待超时重传

当主机B收到1001-2001的这个数据时候,7001之前的所有数据都被收到了,补发报文ACK的确认序号不就是7001吗。

2.ACK丢失的情况

先说结论:少量的ACK丢失并不影响正常的通信。

一切原因都是因为确认序号的定义,因为确认序号之前的数据全都被收到了

1001的ACK丢失了,但是主机A2001的ACK收到了,这个ACK的确认序号是2001,这代表着2001之前的所有数据主机B已经收到了,虽然1001的ACK丢失了,但是并不妨碍主机A知道1-1000的数据主机B已经收到了。

3.拥塞控制

Tcp虽然拥有的滑动窗口这个大杀器,可以有效的提高数据发送的效率,但是滑动窗口只是限定双方主机,并没有考虑网络,假如现在的网络已经很拥堵了,还向网络中发送大量的数据,数据不仅发送不出去,还会加重网络的拥堵,所以就有了网络的拥塞控制。

3.1慢启动

慢启动就是先向网络中发送少量的信息,探测一下当前网络的拥塞状态,如果网络通畅在发送大量的数据

这里引入拥塞窗口的概念,拥塞窗口告诉当前主机网络的拥塞状态,拥塞窗口越大,能发送的数据越大。

拥塞窗口一开始的值为1.

在这里重谈一下,滑动窗口大小的计算。

int win_begin  = 确认序号, int win_end = 确认序号 + min(拥塞窗口大小,16位窗口大小);

3.2拥塞窗口的增长

1.ssthresh是造成网络拥堵窗口大小的一半。

2.在到达ssthresh之前拥塞窗口是指数级增长。

3.ssthresh之后是线性增涨的直到发生网络拥塞,拥塞窗口的值变为1.

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

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

相关文章

支付宝沙箱环境 支付

一 什么是沙箱: 沙箱环境是支付宝开放平台为开发者提供的安全低门槛的测试环境 支付宝正式和沙箱环境的区别 : AI: 从沙箱到正式环境: 当应用程序开发完成后,需要将应用程序从沙箱环境迁移到正式环境。 这通常涉及…

opencv图像增强十四:opencv两种白平衡介绍及实现

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、白平衡介绍二、灰度世界法三、完美反射法 前言 在摄影与影像领域,白平衡是一个至关重要的概念。它直接影响着画面的色彩表现,关系到…

构建网络遇到的问题-AlexNet

1.对模型进行初始化采用的一般代码 def _initialize_weights(self):for m in self.modules(): # 遍历模型每一层if isinstance(m, nn.Conv2d): # 判定m层是否属于nn.Conv2d类型nn.init.kaiming_normal_(m.weight, modefan_out, nonlinearityrelu)if m.bias is not None:nn.in…

从自动化到智能化:AI如何推动业务流程自动化

引言:从自动化到智能化的必然趋势 在当今数字化时代,企业为了提升效率、降低成本,纷纷采用自动化技术来简化重复性任务。然而,传统自动化仅限于标准化操作,无法应对复杂的决策和多变的市场环境。随着人工智能&#xff…

基于springboot垃圾分类网站

基于springboot垃圾分类网站 摘 要 本论文主要论述了如何使用JAVA语言开发一个垃圾分类网站 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述垃圾分类网站的当…

Android开发拍身份证带人像框和国徽框效果

Android开发拍身份证带人像框和国徽框效果 拍身份证时往往要带上外框辅助用户拍照,这也是很常见的需求。 一、思路 自定义Camera和自定义拍照的界面,把外框画上去,做个遮罩 二、效果图: Android开发教程实战案例源码分享-拍身…

深入理解计算机系统-Bomb Lab

使用 头歌 平台 GDB 调试器 反汇编函数

动力锂电池电芯壳体市场前景:预计2030年全球市场规模将达到49.2亿美元

动力锂电池罐起着传输能量、承载电解液、保护安全等重要作用,是锂电池的重要组成部分。 据QYResearch调研团队最新报告“全球动力锂电池电芯壳体市场报告2024-2030”显示,预计2030年全球动力锂电池电芯壳体市场规模将达到49.2亿美元,未来几年…

分布式算法

分布式场景下的核心问题 分布式场景下困扰我们的3个核心问题(CAP):一致性、可用性、分区容错性。 1、一致性(Consistency):无论服务如何拆分,所有实例节点同一时间看到是相同的数据。 2、可用性…

开源链动 2+1 模式 S2B2C 商城小程序:社交电商团队为王的新引擎

摘要:本文深入探讨在社交电商领域中,团队的重要性以及如何借助开源链动 21 模式 S2B2C 商城小程序,打造具有强大竞争力的团队,实现个人价值与影响力的放大,创造被动收入,迈向财富自由之路,同时为…

从汽车高速线束角度浅谈中控屏黑屏、闪屏及信号阈值低故障-之AEM线束测试仪应用案例

故障成因和解决方案 随着车载信息娱乐技术的迅速发展,中控屏已经成为现代汽车的标配。然而,许多主机厂和消费者在车辆使用过程中常常遇到中控屏出现黑屏、闪屏以及信号阈值低等问题,给使用带来了诸多困扰。本文将从汽车高速线束的角度&#…

GPU服务器本地搭建Dify+xinference实现大模型应用

文章目录 前言一、显卡驱动配置1.检测显卡2.安装驱动 二、安装nvidia-docker二、安装Xinference1.拉取镜像2.运行Xinference3.模型部署 三、安装Dify1.下载源代码2.启动 Dify3.访问 Dify 四、Dify构建应用1.配置模型供应商2.聊天助手3.Agent 前言 本文使用的GPU服务器为UCloud…

MySQL: 数据类型介绍

文章目录 数据类型数值类型字符串类型日期类型 数据类型 数值类型 分为整型和浮点型: BIT类似于数据结构中的位图,BIT可以认为是一组二进制bit位. BIT(10)表示这个类型里就存最多10个bit位. 虽然TINYINT和SMALLINT更节省空间,但是还是更推荐使用INT或者BIGINT. 如果存储空间…

MySql语言操作数据库---增删改查数据库,表,数据

思维导图 SQL语言共分为四大类: 数据定义语言DDL:数据定义语言DDL用来创建数据库中的各种对象-----[库]、[表]、[视图]、[索引]、 数据操纵语言DML:(1) 插入:INSERT (2) 更新:UPDATE (3) 删除:DELETE 数据查询语言DQL:数据查询语…

Android 深层链接利用

为了能够从我们的应用程序打开另一个应用程序,我们通常通过声明我们想要访问的 Activity 类的名称来实现这一功能。但是,如果我们要打开的 Activity 在其清单文件中设置了android:exported"false" ,则无法使用此方法。而其中一种替…

人工智能有助于解决 IT/OT 集成安全挑战

思科的一项研究表明,信息技术 (IT) 和运营技术 (OT) 融合所带来的安全问题可以通过人工智能 (AI) 解决,尽管该技术也可能被恶意行为者利用。 该报告由思科和 Sapio Research 联合发布,对 17 个国家的 1,000 名行业专业人士进行了调查&#x…

基于Java,SpringBoot和Vue的仓库管理商品管理电商后台管理系统

摘要 基于Java、Spring Boot和Vue的仓库管理系统是一个现代化的库存管理解决方案,旨在提高仓库运营效率和准确性。系统采用Java作为后端开发语言,结合Spring Boot框架简化配置和部署过程,实现业务逻辑和数据处理。前端使用Vue.js构建用户界面…

2024.9.25 数据分析学习

资料: 【开课吧哩堂】数据挖掘项目之用户流失预警系统_哔哩哔哩_bilibili 五万字 | Spark吐血整理,学习与面试收藏这篇就够了!-腾讯云开发者社区-腾讯云 (tencent.com) 黑马程序员Spark全套视频教程,4天spark3.2快速入门到精通…

**CentOS7安装配置mysql**

CentOS7安装配置mysql 首先先将mysql57-community-release-el7.rpm解压出来 rpm -ivh mysql57-community-release-el7.rpmls /etc/yum.repos.d/ -l // 检查是否解压成功安装mysql yum install -y mysql-community-server可能会出现 GPG 密钥过期 rpm --import https://r…

一个可以免费上传样本图册的网站

在数字化时代,图像和样本图册的重要性不言而喻。无论是设计师、摄影师、艺术家还是普通用户,都需要一个可靠的平台来上传、分享和存储自己的作品。今天,给大家推荐一个可以免费上传样本图册的网站——【FLBOOK】,它为用户提供了无…