当前位置: 首页 > news >正文

计算机网络之快重传和快恢复以及TCP连接与释放的握手

快重传和快恢复

快重传可以让发送方尽早得知丢失消息,

当发送消息M1,M2,M3,M4,M5后,假如消息M2丢失,那么按照算法会发送对M2报文前一个报文M1的重复确认(M1正常接受到,已经发送了确认),然后之后收到M4,M5,也会发送两个重复确认,这样,规定只要收到3次重复确认,立即重传下一消息M3;

54b2e8655b1847b89b46f72c7f2c00d4.png

然后执行快恢复算法,发送方调整门限值为原来拥塞窗口值的一半,然后拥塞窗口值等于门限值,开始执行慢开始算法。这叫做乘法减少MD(multiplicative decrease),之前拥塞避免阶段拥塞窗口逐个增加一个报文段大小,叫做加法增大AI(addition increase),l两者合称AIMD算法。

之前假设接收方缓存足够大,接收方窗口rwnd(render window)实际有限,又叫做通知窗口.发送方发送窗口大小一定不能超过拥塞窗口和接收窗口大小。

d7c57edb57dc42e080f5f73cf25ebc45.png

 

即 发送窗口上限值=min(rwnd,cwnd)

主动队列管理AQM

路由器按照先进先出的队列处理分组,当队列满时候,后序排在队列尾部的分组会被丢弃,叫做尾部丢弃策略。

尾部丢弃会导致数据丢失,产生丢失重传现象,这时进入慢开始阶段,由于多条连接在IP层的复用,所以会让许多TCP连接同时进入慢开始状态。叫做全局同步。

主动队列管理AQM(active queue management)是在队列长度达到某个警戒值即开始丢弃新到达分组,提醒对方放慢发送速率。

fe9606f7b2e34eb9b6d1e9ae98e5a89a.png

 

实现方法可以采用随机早期检测RED(eandom early detection)法,路由器维持最小门限和最大门限两个参数。

按算法计算出平均队列长度,

平均队列长度小于最小门限,新到达分组排队。

平均队列长度大于最大门限,新到达分组丢弃。

平均队列长度在最小门限和最大门限之间,按照概率P丢弃新到达分组。

TCP连接的建立

采用客户服务器模式,主动发起连接一方叫客户,另一方叫服务器。

该过程也叫做握手,需要客户和服务器交换三个TCP报文段。

140a11dbec7147f4aa5d58080274ee95.png

开始时候,服务器创建传输控制块TCB,准备接收客户请求,服务器进入LISTEN状态,等待客户连接。

三次握手:

(1)客户端创建传输控制块TCB,向服务器发出请求报文段,首部确认位SYN=1,同时选择一个初始序号seq=x;

SYN=1的报文段不带数据,消耗一个序号,

客户进入SYN-SENT(同步已发送)状态。

(2)服务器收到后,如果同意建立连接,发送确认,报文段中SYN同步位和ACK确认位都为1,并且选择一个初始序号y,这时进入服务器进入SYN-RCVD同步收到状态。

(3)客户端收到后,发出确认报文,ACK位为1,确认号ack=y+1;(服务器发送来的报文序列号加一)ACK报文段可以携带数据,如果不懈怠数据就不消耗序号,这样下一个数据序号seq=x+1;这样客户端进入established(已连接)状态,服务器收到确认报文后也进入(established)已连接状态

TCP的连接释放

60eb53add27b45d28d881b138c895fab.png

(1)请求释放链接的一方A先发出连接释放报文段,该报文段FIN终止位为1,序号设为seq=u,u为已传输过的数据最后一个字节➕1,然后再停止发送数据,本身进入FIN-WAIT-1状态,等待接收方确认,规定FIN报文段即使不携带数据,也要好一个序列号。

(2)另一B方收到后发出确认,确认号ack=u+1;报文段序号为发送方前面传输的最后一个数据序号加1,接着TCP连接进入半关闭状态,即发起断开A到另一方B的发送已经被关闭。但B到A方向的发送还没有被关闭。

(3)发起断开一方A收到确认后,进入终止等待2状态(FIN-WAIT-2),等待另一方B释放连接。

(4)另一方如果不再发送数据,发出连接释放报文,将报文FIN终止位设为1,序号为问,(可能又崽半关闭期间发送了数据),而且要重复上次发送过的确认报文确认号ack=u+1;这时自身进入last-ack(最后确认状态),等待对方确认。

(5)A收到后,发出确认报文,确认位ACK为1,确认号ack=w+1,自身序号seq=u+1(前面的FIN报文消耗品个序号,进入时间等待(time-wait)阶段,经过时间等待计时器设置时间的2MSL后,A进入CLOSED状态,MSL叫做最长报文寿命,

b8bb6c43ccf8405ba19be43d6b4ab9ce.png

 

设置时间2MSL原因:

(1)超时重传:丢失最后发出的确认报文段后,在2MSL时间内重传,

(2)本持续时间内所有报文都吃网络中消失。

TCP还设置了保活计时器,时间为2小时,如果建立TCP连接后出现了故障,无法响应,由于设置在每次收到消息后等待2H,之后如果还没有收到消息,发送探测报文段,以后每隔75秒发送一次,如果10次没有响应就关闭连接。

相关文章:

计算机网络之快重传和快恢复以及TCP连接与释放的握手

快重传和快恢复 快重传可以让发送方尽早得知丢失消息, 当发送消息M1,M2,M3,M4,M5后,假如消息M2丢失,那么按照算法会发送对M2报文前一个报文M1的重复确认(M1正常接受到,已经发送了确认),然后之后收到M4,M5,也会发送两…...

vue 引用第三方库 Swpier轮播图

本文全程干货,没有废话 1.使用 npm 安装 swiper,使用 save 保存到 packjson 中 npm install --save swiper 2、把 swiper看成是第三方库或者是组件,然后按照,引用,挂载组件,使用组件三步法。 3、在 script…...

RabbitMQ-直连交换机(direct)使用方法

RabbitMQ-默认读、写方式介绍 RabbitMQ-发布/订阅模式 目录 1、概述 2、直连交换机 3、多重绑定 4、具体代码实现 4.1 生产者部分 4.2 消费者部分 5、运行代码 6、总结 1、概述 直连交换机,可以实现类似路由的功能,消息从交换机发送到哪个队列…...

942. 增减字符串匹配 - 力扣

1. 题目 由范围 [0,n] 内所有整数组成的 n 1 个整数的排列序列可以表示为长度为 n 的字符串 s &#xff0c;其中: 如果 perm[i] < perm[i 1] &#xff0c;那么 s[i] I 如果 perm[i] > perm[i 1] &#xff0c;那么 s[i] D 给定一个字符串 s &#xff0c;重构排列 pe…...

2024华为OD机试真题-机器人搬砖-C++(C卷D卷)

题目描述 机器人搬砖,一共有N堆砖存放在N个不同的仓库中,第i堆砖中有bricks[i]块砖头, 要求在8小时内搬完。机器人每小时能搬砖的数量取决于有多少能量格, 机器人一个小时中只能在一个仓库中搬砖,机器人的能量格每小时补充一次且能量格只在这一个小时有效,为使得机器人损…...

【DevOps】深入了解RabbitMQ:AMQP协议基础、消息队列工作原理和应用场景

目录 一、核心功能 二、优势 三、核心概念 四、工作原理 五、交换机类型 六、消息确认 七、持久性和可靠性 八、插件和扩展 九、集群和镜像队列 十、客户端库 十一、管理界面 十二、应用场景 RabbitMQ是一个基于AMQP协议的消息队列中间件&#xff0c;提供高可用、可…...

Mysql 技术实战篇

命令行 导出 - -h localhost&#xff1a;指定MySQL服务器的主机地址为本地主机。如果MySQL服务器在其他主机上&#xff0c;请将localhost替换为相应的主机地址。 - -u username&#xff1a;指定连接MySQL服务器的用户名。将username替换为您的有效用户名。 - -p&#xff1a;提…...

App自动化测试_Python+Appium使用手册

一、Appium的介绍 Appium是一款开源的自动化测试工具&#xff0c;支持模拟器和真机上的原生应用、混合应用、Web应用&#xff1b;基于Selenium二次开发&#xff0c;Appium支持Selenium WebDriver支持的所有语言&#xff08;java、 Object-C 、 JavaScript 、p hp、 Python等&am…...

k8s-部署对象存储minio

环境信息 minio版本 :最新 k8s 版本1.22 使用nfs作为共享存储 一.单节点安装包部署 脚本部署&#xff0c;一键部署&#xff0c;单节点应用于数据量小&#xff0c;一些缓存存储&#xff0c;比如gitlab-runner的产物数据&#xff0c;maven的打包依赖数据 #!/bin/bash# 步骤…...

go常用命令

创建一个module(逻辑概念) #The go mod init command initializes and writes a new go.mod file in the current directory, in effect creating #a new module rooted at the current directory. #specify a module path that serves as the module’s name. go mod initclon…...

【中年危机】程序猿自救指南

中年危机&#xff0c;一个听起来就充满挑战的词汇&#xff0c;它不仅仅是一个年龄的标记&#xff0c;更是一个个人成长和职业发展的转折点。 构架个人品牌&#xff1a; 学会打造IP个人品牌是职业生涯中的重要资产。在中年时期&#xff0c;你已经积累了丰富的经验和知识&#x…...

vueRouter路由总结

https://blog.csdn.net/qq_24767091/article/details/119326884...

算法工程师需要学习C++的哪些知识?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「C的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;以下是算法工程师需要学习的一些…...

CTF网络安全大赛简单的web抓包题目:HEADache

题目来源于&#xff1a;bugku 题目难度&#xff1a;简单 题目 描  述: > Wanna learn about some types of headache? > Lets dig right into it! 下面是题目源代码&#xff1a; <!DOCTYPE html> <html> <head><meta charset"utf-8"&…...

Qt Creator创建Python界面工程并打包为可执行exe文件

Qt Creator创建Python界面工程并打包为可执行exe文件_qtcreator创建python工程-CSDN博客...

基于单片机的步进电机控制系统的研究

摘要: 步进电机控制作为一种电机控制系统的重要模式,属于现代数字化控制的重要手段,其应用已经相当广泛。步进电机属于感应电机类,利用电子电路将直流电分为分时供电、多相时序供电控制电流,利用这种电流为电机供电,驱使电机工作。步进电机不能够在常规模式下使用,必须通过双环…...

BioPorto胰高血糖素样肽-1抗体(GLP-1)

丹麦BioPorto Diadnostics公司致力于提供世界领先的GLP-1抗体。基于结合GLP-1位点的不同&#xff0c;他们筛选出了不同的抗GLP-1抗体。有的抗体可以同时结合GLP-1的活性形式和非活性形式&#xff0c;有的专门结合生物活性形式的GLP-1。在开发和检测GLP-1相关治疗的过程中&#…...

Go 语言字符串及 strings 和 strconv 包

在 Go 语言编程中&#xff0c;字符串是最基本、最常用的数据类型之一。无论是处理用户输入、读取文件内容&#xff0c;还是生成输出&#xff0c;字符串操作无处不在。为了方便开发者对字符串进行各种操作&#xff0c;Go 语言提供了强大的 strings 包和 strconv 包。strings 包包…...

政府窗口服务第三方评估报告如何写

撰写政府窗口服务第三方评估报告需要结构清晰、内容详实&#xff0c;并包含对评估过程和结果的详细描述以及改进建议。以下是第三方评估机构民安智库&#xff08;第三方社会评估调研公司&#xff09;给出的一个政府窗口服务第三方评估报告简单的示例&#xff1a; 一、封面 报…...

若依前后端分离Spring Security新增手机号登录

备忘贴 转自&#xff1a;【若依RuoYi短信验证码登录】汇总_数据库_z_xiao_qiang-RuoYi 若依 配置Security: 按照Security的流程图可知&#xff0c;实现多种方式登录&#xff0c;只需要重写三个主要的组件&#xff0c;第一个用户认证处理过滤器&#xff0c;第二个用户认证tok…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...