首页 > 其他分享 >八股文——TCP四大机制!小白也能懂!(重传机制、滑动窗口、流量控制、拥塞控制)

八股文——TCP四大机制!小白也能懂!(重传机制、滑动窗口、流量控制、拥塞控制)

时间:2024-03-31 19:29:33浏览次数:34  
标签:窗口 重传 ACK TCP 发送 拥塞 机制 cwnd

引言

TCP巨复杂!同时在八股计算机网络中也经常被问到,必须会!这篇文章将让小白有个大体框架,知道怎么个事,面试中可以有话说,也能让佬更加巩固知识点。

TCP是一个可靠的传输协议,为了保证它的可靠性,出现七七八八的机制,它可能有数据的破坏、丢包、重复以及分片顺序混乱等问题,TCP通过序列号、确认应答、重发控制、连接管理以及窗口控制等机制来实现可靠性传输。

有什么问题,或者疑惑,欢迎评论留言,开始进入正题

重传机制

简要:针对数据包丢失进行重传

在网络传输的过程中,难免有包丢失情况,这时就需要重传,也就是重传机制去管控。

TCP实现可靠传输的方式之一就是通过序列号确认应答保证。

常见的重传机制有:超时重传、快速重传、SACK、D-SACK

超时重传:数据包丢失或者确认信息丢失,超过一定时间后进行数据重传。

快速重传:在接收到三次相同的ACK值,就找到对应位置进行重传后面发送的报文,但是会导致发送已经接收到的数据,做了无用功浪费资源。

SACK方法:选择性确认,需要在TCP头中加入SACK的东西,可以将已收到的数据信息发送给发送方,就可以知道哪些数据没传,只重传丢失的数据

DSACK:直接发送SACK信息来告诉发送方有哪些数据被重复接受了。

滑动窗口

简:在接收窗口大小内不断发数据,避免发一个等确认信息才能再发

发送方每次等待一个确认消息才能继续发送,效率太低,于是采用滑动窗口,在接收窗口大小内可以不断发送数据。无需等待确认信息。通常窗口是由接收方决定的,告诉发送方自己有多少缓冲区来接收数据。一般发送窗口约等于接收窗口,因为传输过程存在时延

TCP头中有个window字段(表示窗口大小),告诉发送端自己还有多少缓冲区可以接收数据。于是发送端根据接收端处理能力发送数据,不会到时接受端处理不过来

流量控制

简:控制发送数据速率,避免对方处理不过来

让发送方根据接收方的实际接受能力控制发送的数据量的机制

栗子:

A对B发送数据,B对A进行流量控制(下面数据为举例)

发送窗口范围(4条,一条100字节)内发送3条数据,就收到B的累计确认,并发送rwnd=300 进行流量控制(接受窗口改成3条,发送窗口相应变成3条)。

A收到累计确认会删除前面三条缓存(如果有丢失,后面继续传丢失文件)然后在窗口范围(3条)内发送3条。收到B累计确认,并发送rwnd=100进行流量,(接受窗口改成3条,发送窗口相应变成3条)。

反复,若rwnd=0,A不能再发送,等B有缓存处理时,又会发送rwnd=300(有三条缓存)然后A再发送数据,但如果A没收到,AB无线等待对方,会有持续计时器,一定时间发送1字节探测,等待B回应 。

拥塞控制

简:面对网络中发生拥塞的机制

在网络出现拥堵时,如果继续发送大量数据包,可能会导致数据包时延、丢失,这时重传只会加重网络负担,导致更大延迟和包丢失,就陷入二性循环,发生超时重传就认为网络出现堵塞。

拥塞控制主要包括四个算法:慢启动,拥塞避免,拥塞发生,快速恢复

慢启动

TCP刚刚建立有个慢启动的过程,就是一点点提高发送数据包的数量,当发送方每收到一个ACK,拥塞窗口(cwnd)的大小就会1表示可以比之前多发1个,cwnd数量呈指数倍增加,1248。当cwnd>= 慢启动门限ssthresh就会使用拥塞避免算法。

指数倍增加:

初始cwnd若为1,加1,为2.,可以发两个ACK,(cwnd两个,最多发2个)。

收到两个ACK,加2,为4,可以发四个ACK。

收到四个ACK,加4,为8,可以发八个ACK。

拥塞避免算法

每当收到一个ACK时,cwnd增加1/cwnd。因为可以发cwnd个,所以cwnd*(1/cwnd)=1个,这样cwnd数量就会变成线性增长。我们可以看到前面两种算法都是让他增加,网络慢慢进入拥塞状态,于是出现丢包现象,需要对丢失的包重传,进入拥塞发送算法

拥塞发生算法

发生后进行数据包重传

超时重传:门限变成cwnd/2,再重置cwnd为初始值

快速重传:认为只是少部分数据丢失,cwnd设置原来一半,门限=cwnd。进入快速恢复算法

快速恢复算法

  • 拥塞窗口 cwnd = ssthresh + 3 ( 3 的意思是确认有 3 个数据包被收到了);

  • 重传丢失的数据包;

  • 如果再收到重复的 ACK,那么 cwnd 增加 1;

  • 如果收到新数据的 ACK 后,把 cwnd 设置为第一步中的 ssthresh 的值,原因是该 ACK 确认了新的数据,说明从 duplicated ACK 时的数据都已收到,该恢复过程已经结束,可以回到恢复之前的状态了,也即再次进入拥塞避免状态;

借用小林的图:

标签:窗口,重传,ACK,TCP,发送,拥塞,机制,cwnd
From: https://blog.csdn.net/qq_62097431/article/details/137206136

相关文章

  • Matlab构建上位机:TCP/IP测试
    版本更新:Matlab代码经历过更新,其中Buffer这类属性都不再被支持使用。WhichistheBufferSizeofaTCP/IPsocket(tcpclient)?-MATLABAnswers-MATLABCentral(mathworks.cn)作为取代的新代码参考:TransitionYourCodetotcpclientInterface-MATLAB&Simulink-......
  • 神经网络算法:一文搞懂Attention(注意力)机制
    本文将从Attention的本质、Attention的原理、Attention的应用三个方面,带您一文搞懂Attention(注意力)机制。Attention的本质核心逻辑:从关注全部到关注重点Attention机制处理长文本时,能从中抓住重点,不丢失重要信息。Attention机制像人类看图片的逻辑,当我们看一张图片的......
  • 详解MQTT(Message Queuing Telemetry Transport)通信机制
    目录概述1认识MQTT1.1MQTT的定义1.2MQTT实现原理1.3MQTT架构的几个概念1.3.1MQTTBroker1.3.2MQTTClient1.3.3发布消息1.3.4订阅消息2认识MQTT报文结构2.1MQTT消息体结构2.1.1认识主题(Topic)2.1.2认识QoS(QualityofServicelevels)2.1.3保留标志......
  • 阻塞外挂 TCP 端口 让外挂服务器做附加处理
    //UDPER.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。//usingnamespacestd;#include<stdlib.h>#pragmacomment(lib,"WS2_32.lib")#include<iostream>#include<Windows.h>SOCKETg_socket;SOCKETg_socket2;SOCKETg_socket3;SOCKET......
  • 【即插即用】SE通道注意力机制(附源码)
    原文地址:Squeeze-and-ExcitationNetworks源码地址:GitHub-hujie-frank/SENet:Squeeze-and-ExcitationNetworks摘要简介:卷积神经网络建立在卷积操作的基础上,它通过融合局部感受野内的空间信息和通道信息来提取有用的特征。近年来,为了提高网络的表示能力,多种方法显示出......
  • Java基础 TCP协议下,收发数据代码实现
     --------------------------------------------------------------------------------------------------------------------------------- 代码实现:1.发送数据:publicstaticvoidmain(String[]args)throwsException{//1.创建Socket对象。细节:在创建对象的同......
  • STP 的机制
    什么是STP协议?STP在最初被设计出来的时候,主要是用于防止二层环路导致的广播风暴,是一个破环协议。最初是在IEEE802.1d中被定义。STP的三种计时器hello:hello时间是在端口上发送的每个BPDU之间的时间。默认情况下,此时间为2秒。Forwarddelay:Forwarddelay是在List......
  • 【Java系列】-- 双亲委派机制
    原创:mikechen双亲委派机制......
  • openGauss 数据库认证机制
    数据库认证机制可获得性本特性自openGauss1.1.0版本开始引入。特性简介提供基于客户端/服务端(C/S)模式的客户端连接认证机制。客户价值加密认证过程中采用单向Hash不可逆加密算法PBKDF2,有效防止彩虹攻击。特性描述openGauss采用基本的客户端连接认证机制,客户端发起连接请......
  • openGauss 动态数据脱敏机制
    动态数据脱敏机制可获得性本特性自openGauss1.1.0版本开始引入。特性简介数据脱敏是行之有效的数据库隐私保护方案之一,可以在一定程度上限制非授权用户对隐私数据的窥探。动态数据脱敏机制是一种通过定制化制定脱敏策略从而实现对隐私数据保护的一种技术,可以有效地在保留原始......