【网络】TCP协议通信的重要策略——滑动窗口,快重传,流量控制,拥塞控制,延时应答

news2025/1/11 1:22:31

目录

MSS值

滑动窗口

滑动窗口与重发机制

快重传机制

滑动窗口与流量控制

滑动窗口与拥塞控制

延时应答


个人主页:东洛的克莱斯韦克-CSDN博客

相关文章

【网络】传输层TCP协议的报头和传输机制-CSDN博客

【网络】详解TCP协议通信时客户/服务端的状态-CSDN博客

【网络】IP分片与路径MTU发现-CSDN博客

MSS值

由于底层(数据链路层)在发送数据时有最大长度限制,所以TCP在发送数据时,为了尽量避免IP分片,TCP一段为单位发送数据。

MSS值表示最大消息长度,正好是不用进行IP分片的最大长度。而MSS值会在三次握手时进行协商。

滑动窗口

如果每发一个段,就要等待一个ACK应答,会让传输数据的效率变得低下

窗口的概念是发送完一个段后无需应答,继续发送。在一个时间节点内发送一批数据,这一批已经发送但未收到应答的数据就用窗口维护起来。

在TCP维护的缓冲区中分为四块,发送以收到应答的数据,发送未收到应答的数据,未发送的数据,剩余空间,而整个缓冲区在逻辑上也是一个环形缓冲区。窗口就是那块发送未收到应答的数据的缓冲区。

上图中,窗口大小也是根据应答的序号动态调整的。

滑动窗口与重发机制

窗口的存在允许部分应答丢失。即使部分应答丢失也不会触发重发机制。

快重传机制

那如果是报文丢失呢?

如上图所示。当某一报文段丢失后,发送端会一直收到序号为1001的确认应答,这个确认应答好像在提醒发送端“我想接收的是从1001开始的数据”。因此,在窗口比较大,又出现报文段丢失的情况下,同一个序号的确认应答将会被重复不断地返回。而发送端主机如果连续3次收到同一个确认应答·,就会将其所对应的数据进行重发。这种机制比之前提到的超时管理更加高效,因此也被称作高速重发控制。

滑动窗口与流量控制

所谓流量控制就是接收端在应答时在报头中填充窗口字段的大小,大小就填自己剩余缓冲区的空间。滑动窗口的大小就和接收端缓冲区起来,这样发送端就知道自己下一次发送多大的数据。

如上图所示,当接收端收到从3001号开始的数据段后其缓冲区即满,不得不暂时停止接收数据。之后,在收到发送窗口更新通知后通信才得以继续进行。如果这个窗口的更新通知在传送途中丢失,可能会导致无法继续通信。为避免此类问题的发生,发送端主机会时不时的发送一个叫做窗口探测的数据段,此数据段仅含一个字节以获取最新的窗口大小信息。

滑动窗口与拥塞控制

上述情况都只是考虑双方主机的问题,但网络通信中不可忽视的一个因素就是网络环境。如果发送出去的数据总是收不到应答,可能是网络本身出问题了。

在一个共享的网络环境中,可能某个时间段发送的数据的高峰期,让网络变得特别拥塞,这是就要对发送的数据量进行控制,这种控制就叫做拥塞控制。

此处引入一个概念称为拥塞窗口,发送开始的时候, 定义拥塞窗口大小为 1;  每次收到一个 ACK 应答, 拥塞窗口加 1;  每次发送数据包的时候, 将拥塞窗口和接收端主机反馈的窗口大小做比较, 取较 小的值作为实际发送的窗口

像上面这样的拥塞窗口增长速度, 是指数级别的. "慢启动" 只是指初使时慢, 但是增长速 度非常快.  为了不增长的那么快, 因此不能使拥塞窗口单纯的加倍. 此处引入一个叫做慢启动的阈值 当拥塞窗口超过这个阈值的时候, 不再按照指数方式增长, 而是按照线性方式增 长

当 TCP 开始启动的时候, 慢启动阈值等于窗口最大值; 在每次超时重发的时候, 慢启动阈值会变成原来的一半, 同时拥塞窗口置回 1; 少量的丢包, 我们仅仅是触发超时重传; 大量的丢包, 我们就认为网络拥塞; 当 TCP 通信开始后, 网络吞吐量会逐渐上升; 随着网络发生拥堵, 吞吐量会立刻下降; 拥塞控制, 归根结底是 TCP 协议想尽可能快的把数据传输给对方, 但是又要避免给网络 造成太大压力的折中方案

理解拥塞控制要站在全网的角度。由于使用TCP协议的主机多,这种拥塞控制的机制实际上就是一种共识。

网络越拥塞检测到网络拥塞的主机就越多,那么参与到拥塞控制的主机就越多,这样网络才可能或者说有较大概率让网络畅通起来。(不考虑网络的设计本身就有问题)

延时应答

延时应答(Delayed Acknowledgment)是指TCP接收方在接收到数据包后,并不立即发送确认(ACK)消息,而是等待一段时间,以期望在该时间段内收到更多的数据包。如果在这段时间内确实收到了更多的数据包,接收方会将多个ACK消息合并为一个进行发送,从而减少网络中的确认消息数量,提高网络利用率。

 假设接收端缓冲区为 1M. 一次收到了 500K 的数据; 如果立刻应答, 返回的窗口 就是 500K;  但实际上可能处理端处理的速度很快, 10ms 之内就把 500K 数据从缓冲区消费 掉了; 在这种情况下, 接收端处理还远没有达到自己的极限, 即使窗口再放大一些, 也 能处理过来; •如果接收端稍微等一会再应答, 比如等待 200ms 再应答, 那么这个时候返回的 窗口大小就是 1M;

得, 窗口越大, 网络吞吐量就越大, 传输效率就越高. 我们的目标是在保证网络 不拥塞的情况下尽量提高传输效率。

具体的数量和超时时间, 依操作系统不同也有差异; 一般 N 取 2, 超时时间取 200

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

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

相关文章

「MyBatis」数据库相关操作2

🎇个人主页 🎇所属专栏:Spring 🎇欢迎点赞收藏加关注哦! #{} 和 ${} 我们前面都是采用 #{} 对参数进行赋值,实际上也可以用 ${} 客户端发送⼀条 SQL 给服务器后,大致流程如下: 1.…

图像识别,图片线条检测

import cv2 import numpy as np # 读取图片 img cv2.imread(1.png)# 灰度化 gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 边缘检测 edges cv2.Canny(gray, 100, 200) 当某个像素点的梯度强度低于 threshold1 时,该像素点被认为是非边缘;当梯度强度…

代码随想录——无重复字串的最长子串(Leetcode hot8)

题目链接 滑动窗口(双指针) 思路: 初始化: 检查字符串的长度。如果长度为0或1,则直接返回长度,因为这样的字符串本身就是无重复的。初始化两个指针 slow 和 fast,分别代表当前最长无重复子字符串的起始…

Django 数据库迁移:makemigrations 和 migrate 命令详解及常见问题解决

目录 1. 问题所示2. python manage.py makemigrations3. python manage.py migrate4. 拓展 1. 问题所示 最初始的状态是遇到这个问题 由于刚开始跑python web项目,开源项目附带的Readme,个别命令不太懂,对此详细研究其基本知识 最终的解决方…

高清无损,尽在掌握:2024年电脑录屏新标准

随着科技的飞速发展和数字化生活的普及,电脑录屏已经成为了我们日常工作、学习、娱乐中不可或缺的一部分。本文将带你一起探索电脑如何录屏操作。 1.福昕REC大师 链接:www.foxitsoftware.cn/REC/ 这款软件的便捷性令人赞叹不已。其体积小巧&#xff0…

谷歌发布会现场尴尬瞬间:AI助手Gemini展示挑战苹果

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

软件开发者的首选:最佳Bug测试工具Top 10

本篇文章介绍了以下软件bug测试管理工具:PingCode、Worktile、Test360、禅道、码云Gitee、优云测试、Jira、GitHub、Axosoft、Bugzilla。 在开发过程中,Bug的管理往往是最让人头疼的问题之一。小问题积累起来不仅会拖延项目进度,还可能影响到…

Win10下载安装Mysql服务

Win10下载安装MySQL 一、官网下载MySQL 1.官网地址: https://www.mysql.com/ 2.在官网首页拉到最下方,点击MySQL Community Server: 3.根据个人电脑的操作系统选择,此处以Windows x64为例,选择第2个,点击…

Nature:7个提升科研产出的实用建议

我是娜姐 迪娜学姐 ,一个SCI医学期刊编辑,探索用AI工具提效论文写作和发表。 一个值得思考的问题是:层出不穷的效率工具到底是提升还是降低了科研产出? 大学教授萨拉 (Sara) 描述了她典型的工作日场景:"…

【博客23】缤果Android_XXX调试助手模板(3款)V1.0(中级篇)

超级好用的Android_XXX调试助手模板 ( Android Studio Java) 备注: 仅模板无通信协议 开发工具: android-studio-2024.1.1.12-windows.exe 目录 一、软件概要: 二、软件界面: 1.App演示 2.其他扩展展示 2.1 自定义指令集 2.2 修改自定义指令集 …

实用技巧分享:笔记本和台式电脑传输文件!

现在,一个人拥有两台电脑已变得十分普遍,通常是一台笔记本和一台台式机的组合。它们各有优势,比如台式机在价格相同的情况下,性能超过笔记本,还能随意更换CPU、显卡、主板等硬件,且使用自由。而笔记本因其便…

JAVA web项目转客户端(nativefier)(url打包客户端)

1.环境: windows 2.下载 node.js 3.安装node.js;记住安装目录 4.命令行进入安装目录 5.执行语句: npm install nativefier –g 进行安装 6.新建空文件夹用于存放生成的客户端 7.命令行进入该文件夹 8.执行语句: nativefier &quo…

【秋招笔试】8.11大疆秋招(第二套)-测开岗

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收…

谷粒商城实战笔记-190-192商城业务-检索服务-面包屑导航

文章目录 一,什么是面包屑导航1,京东商城的面包屑2,面包屑是怎么产生的 二,面包屑导航的后台实现 这三节的主要内容是开发面包屑的前后端功能。 190-商城业务-检索服务-面包屑导航191-商城业务-检索服务-条件删除与URL编码问题192…

【Verilog HDL 入门教程】 —— 学长带你学Verilog(基础篇)

文章目录 一、Verilog HDL 概述1、Verilog HDL 是什么2、Verilog HDL产生的背景3、Verilog HDL 和 VHDL的区别 二、Verilog HDL 基础知识1、Verilog HDL 语言要素1.1、命名规则1.2、注释符1.3、关键字1.4、数值1.4.1、整数及其表示1.4.2、实数及其表示1.4.3、字符串及其表示 2、…

Spire.PDF for .NET【文档操作】演示:检测 PDF 文件是否为 PDF/A

Spire.PDF 为开发人员提供了两种方法来检测 PDF 文件是否为 PDF/A。一种是使用 PdfDocument.Conformance 属性,另一种是使用 PdfDocument.XmpMetaData 属性。以下示例演示了如何使用这两种方法检测 PDF 文件是否为 PDF/A。 Spire.PDF for .NET 是一款独立 PDF 控件…

详细分析JWT的基本知识(附Demo)

目录 前言1. 基本知识2. JWT验证过程3. Demo 前言 对于Java的基本知识推荐阅读: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)【Java项目】实战CRUD的功能整理(持续更新) 1. 基本知识 紧凑的、U…

机器学习回归分析系列2-二项回归模型

04 二项回归模型 4.1 简介 二项回归模型用于处理二元响应变量,即因变量是0或1的分类变量。最常见的二项回归模型是逻辑回归,它可以用来预测事件发生的概率。 逻辑回归模型假设: 其中,p 是事件发生的概率,x1,x2,…,x…

allegro PCB设计心得笔记(四) -- 显示坐标原点和更改默认产品选项

一、修改坐标原点 Allegro PCB设计过程中,有时需要修改坐标原点,但是PCB文件不显示坐标原点,无法确认已修改的坐标原点是否已经修改好。 显示PCB原点的设置方法如下: Setup -> Design Parameter Editor,如下图所示&…

Kafka系统及其角色

Apache Kafka系统介绍 Apache Kafka 是由 LinkedIn 公司最初开发的一个高性能、分布式的消息传递系统。它被设计为一个可扩展、持久、分布式的流式处理平台,以满足 LinkedIn 在实时数据处理方面的需求 。Kafka 的诞生源于 LinkedIn 需要处理海量数据时现有消息队列系…