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

TCP协议的可靠性保障

目录

1.TCP 重传、滑动窗口、流量控制、拥塞控制

2.TCP重传

3.滑动窗口

4.拥塞控制


1.TCP 重传、滑动窗口、流量控制、拥塞控制

TCP 重传、滑动窗口、流量控制、拥塞控制是保障TCP可靠性的机制,理解TCP的可靠性可以帮助我们更好的理解何为可靠。

2.TCP重传

TCP重传分为超时重传和快重传,超时重传是在发出请求后,开始计时,一定时间后如果收不到应答,就会进行重传,每次重传的时间间隔乘以2倍,然后一定次数后如果还是收不到应答,就认为连接失效,关掉连接,发送RST。

快重传是在发送报文的时候,不是串行的,你发送5个报文,不是收到第一个报文的应答才可以发送第二个报文,而是一下就把5个报文发过去,然后对方一个一个的发应答,我们知道发过来的应答报文的报头有确认序号,确认序号的含义是该序号之前的报文全部收到了,如果连续收到三次相同的应答序号,就确认丢包,进行快重传,之所以叫快重传,是因为它比超时重传所需的时间少,丢包之后可以更快的进行重传。

还是一样的,如果多次重传没有效果后,认为连接失效,发RST报文,关闭连接。

3.滑动窗口

我们知道TCP的发送一个报文都要有应答,但是如果要等你应答到了,我再发送下一个报文,这样会造成大量的资源浪费,因为大部分时间都浪费在路上了,而不是数据的发送和接收上,我们是不希望TCP的发送是下面这种方式的。

那么什么办法能够让我们发送完一个包之后不用等待下一个包的应答,然后继续发送下一个包呢?答案是滑动窗口,滑动窗口是什么?具象出来就是一个滑动的窗口,好像又说了一句废话。

有了滑动窗口之后,就可以无需等待报文的应答到来,才可以发送下一个报文,它的大小是无需等待应答可以发送数据的最大值

那么窗口的大小是如何决定的,我们先来说一个因素,就是缓冲区大小,对端缓冲区大小是决定窗口大小的一个因素,对方的接收缓冲区大了,你的滑动窗口就大点,多发点,如果对方接受缓冲区很小,你就少发点,别撑着了!

TCP三次握手的时候双方就会确定了双方的接收缓冲区大小了。之后每次发送报文里面都会携带对方接受缓冲区的大小。所以滑动窗口的大小是动态变化的。

之所以发送出去的数据还要在窗口里面是因为,还没有收到应答,万一丢包了还要进行重发,收到应答后就确认对方收到报文了,就把这些序号滑出去了!

发送方有滑动窗口,接收方也有。

接收方的滑动窗口和发送方的滑动窗口并不完全相等,有的时候,我接收方应用层刚刚还很忙,你的数据取的就少,但是突然就闲了,你的数据就被取走的多了,这个时候,接收方的滑动窗口就会变大。

4.拥塞控制

滑动窗口考虑的是双方的实际接受能力,那么拥塞窗口是为了解决网络拥塞的问题,就好比你谈一个女朋友,你们要结婚,你们双方要愿意,双方的父母一般也要同意吧。

如果现在网络都十分拥堵了,即使你们双方的滑动窗口都很大,那你一个劲的发,也到不了呀,反而加重网络的负担,所以TCP同时考虑了双方意愿和环境的影响。

拥塞控制就是根据网络做出的算法。

拥塞窗口一句话就是网络通畅,它增大,网络阻塞,它减小。

拥塞窗口具体实现的算法有

慢启动

开始的时候每收到一个报文,拥塞窗口的大小就会+1。

所以只考虑拥塞窗口,刚开始发一个报文,收到一个应答,第二次就发2个报文,收到2个应答,可以发现是以次方的形式增加的,发不了多少次,它的报文数量就会非常大,还记得那个你今天给我1粒米,第二天给我2粒,第三天给我4粒,第四天给我8粒,第五天给我16粒的故事吗?不出一个月,这个数字就会变的非常巨大,所以增大到了一定的程度之后,就会增加减慢。

当到了规定的指数增长上限之后,就会进入拥塞避免算法:

进入拥塞避免之后,每次就只会增加一个报文了。

但是即使增长的速度减慢了,但是还是增长的,总会有拥塞的时候,所以就有了拥塞发生算法:

拥塞发生算法是发生了丢包就会进入这个算法,

拥塞发生的时候进行报文重传,重传有超时重传和快重传,这两种重传对应的拥塞发送不一样

先来超时重传吧

指数增长上限变为cwnd的一半,恢复cwnd的初始值,cwnd也就是一次发出报文的数量(拥塞窗口报文的数量)。

下面是快重传发生的拥塞避免算法

cwnd变为原来的一半,指数增长上限变为cwnd,然后进入快回复算法,快回复算法就是cwnd=指数增长的上限+3。

所以滑动窗口的大小应该是取缓冲区大小和拥塞窗口的最小值,因为你要同时考虑环境和双方接受能力。

http://www.dtcms.com/a/465407.html

相关文章:

  • ktv支付订房网站模板商业策划书范文6篇
  • 十一、OpenCV中图形的绘制
  • 用户中心网站设计北京社保网址
  • 安卓13_ROM修改定制化-----如何给安卓手机里安装或者内置数字证书文件 cer类型的证书文件如何转换为可内置文件
  • 仿mudou——Connection模块(连接管理)
  • vue3 + el-upload组件集成阿里云视频点播从本地上传至点播存储
  • 外贸网站是用什么软件做的法制教育网站
  • c/c++字符串比较
  • 国外建站公司上海企业自助建站系统
  • AI 生产工艺参数优化:中小型制造企业用 “智能调参“ 提升产品合格率与生产效率
  • 《Linux基础入门指令》:从零开始理解Linux系统
  • NVIDIA HGX H100 GPU 服务器现已在 DigitalOcean 欧洲数据中心上线
  • 工程师招聘网站住建局网站官网
  • SAP-ABAP:SAP中的用户确认对话框:深入理解与实践POPUP_TO_CONFIRM
  • 购物网站上分期怎么做的广东移动手机营业厅网站
  • 云辉泵阀通过订单日记实现流程重构之路
  • 黑马商城微服务项目准备工作并了解什么是微服务、SpringCloud
  • 濮阳市城乡建设管理局网站怎么建网站
  • 腾讯云网站建设教学视频免费行情软件有哪些
  • 电子商务网站建设技术解决方案别人给公司做的网站字体侵权吗
  • 软考软件设计师常考知识点:(三)数据结构
  • 双向链表----“双轨联动,高效运行” (第九讲)
  • CEX-DEX 稳定币套利模型
  • 【C++STL :list类 (一) 】C++98 完全指南:std::list 详解与源码剖析
  • shell脚本02
  • 【PM2】PM2 集群模式适用的场景
  • 保定网站建设方案外包南宁网站建设哪
  • 做网站建设费用预算百度贴吧网站开发需求分析
  • Docker 仓库详解与实战配置
  • dockerfile实操案例