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

这篇具有很好参考价值的文章主要介绍了八股文——TCP四大机制!小白也能懂!(重传机制、滑动窗口、流量控制、拥塞控制)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引言

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 时的数据都已收到,该恢复过程已经结束,可以回到恢复之前的状态了,也即再次进入拥塞避免状态;

借用小林的图:

八股文——TCP四大机制!小白也能懂!(重传机制、滑动窗口、流量控制、拥塞控制),tcp/ip,网络协议,网络文章来源地址https://www.toymoban.com/news/detail-857550.html

到了这里,关于八股文——TCP四大机制!小白也能懂!(重传机制、滑动窗口、流量控制、拥塞控制)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 前端常见面试八股文

    前端常见面试八股文

    1、H5新增标签有哪些? 一、语义化标签 header、footer、nav、aside、section、article 语义化的意义? 1、更适合搜索引擎的爬虫爬取有效的信息,利于SEO。 2、对开发团队很友好,增加了标签的可读性,结构更加的清晰,便于团队的开发和维护。 二、多媒体标签 视频标签:video 属性

    2023年04月08日
    浏览(17)
  • 八股文之springboot

    主要简化了使用spring的难度,简省看繁重的配置,提供了各种启动器,开发者能快速上手。 容易上手,提升开发效率 ,为 Spring 开发提供一个更快、更广泛的入门体验。 开箱即用,远离繁琐的配置。 提供了一系列 大型项目通用的非业务性功能 ,例如:内嵌服务器、安全管

    2024年02月01日
    浏览(8)
  • Java八股文

    相似点 接口和抽象类都不能被实例化 实现接口或者抽象类的子类都必须实现这些抽象方法 不同点 抽象类可以包含普通方法和代码块, 接口里只能包含抽象方法, 静态方法和默认方法 抽象类可以有构造方法, 而接口没有 抽象类中的成员变量可以是各种类型, 接口中的成员变量

    2023年04月23日
    浏览(10)
  • 八股文(消息队列)

    八股文(消息队列)

    可靠性: RabbitMQ 使用一些机制来保证可靠性,如持久化、传输确认及发布确认等。 灵活的路由 : 在消息进入队列之前,通过交换器来路由消息。对于典型的路由功能, RabbitMQ己经提供了一些内置的交换器来实现。针对更复杂的路由功能,可以将多个交换器绑定在一起, 也可以

    2024年02月16日
    浏览(7)
  • 操作系统八股文

    1.操作系统概述 1.1 系统调用、用户态和核心态 根据进程访问资源的特点,我们可以把进程在系统上的运行分为两个级别: 用户态(user mode) : 用户态运行的进程可以直接读取用户程序的数据。 系统态(kernel mode):可以简单的理解系统态运行的进程或程序几乎可以访问计算机的任

    2023年04月09日
    浏览(9)
  • IC八股文

    IC八股文

    1、时序设计的实质 时序设计的实质就是满足每一个触发器的建立/保持时间的要求 2、建立时间与保持时间的概念? 建立时间:触发器在时钟上升沿到来之前,其数据输入端的数据必须保持不变的最小时间。 保持时间:触发器在时钟上升沿到来之后,其数据输入端的数据必须

    2024年02月11日
    浏览(7)
  • 前端八股文

    去掉ESLint校验: package.json 中的extends去掉eslint:commends 引入icon图标 state: 存放数据 mutations: 同步操作,写方法用于改变state里面的数据,vue可以监听数据的改变进行更新(相当于methods) actions:所有异步操作都放在这里,改变的数据不能够被vue监听 getters: 进行逻辑处理(相当于

    2024年02月16日
    浏览(11)
  • 前端面试八股文

    1.1、http和https的基本概念 http: 是一个客户端和服务器端请求和应答的标准(TCP),用于从 WWW 服务器传输超文本到本地浏览器的超文本传输协议。 https: 是以安全为目标的 HTTP 通道,即 HTTP 下 加入 SSL 层进行加密。其作 用是:建立一个信息安全通道,来确保数据的传输,确保

    2024年02月02日
    浏览(12)
  • C++八股文

    C++八股文

    ​ C++中,定义函数 int function(int a[], int b),这里数组a会不会在内存中拷贝(传递的是指针还是啥),什么情况下传递的是指针? ​ 不会,因为这里的 a 传递的是指针,和 int * 是一样的。 优先级:() [] * 数组指针 ​ 是一个指针,指向一个数组的起始地址。由于 [] 运算符的优

    2024年02月07日
    浏览(21)
  • Java 面试八股文

    参考: 2023年 Java 面试八股文(20w字)_json解析失败_leader_song的博客-CSDN博客

    2024年02月13日
    浏览(14)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包