【网络协议】TCP的拥塞控制机制
前言
计算机网络中的带宽、交换节点中的缓存和处理机等,都是网络的资源,在某段时间内,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏,这样的情况就叫做拥塞。
所谓拥塞控制,就是防止过多的数据注入到网络中,从而使网络中的路由器或链路不致过载。要注意用拥塞控制与流量控制的差别,拥塞控制是一个全局性的过程,涉及到全部的额主机、路由器,以及与减少网
拥塞控制的算法有:慢開始、拥塞避免、快重传、快恢复四种。
慢開始和拥塞避免
发送方维持一个拥塞窗体的状态变量,其大小取决于网络的拥塞程度,动态地变化,而发送窗体一般取拥塞窗体和对方给出的接收窗体的最小值(为了便于描写叙述,后面的分析中假定对方给出的接收窗体足够大,这样将发送窗体等于拥塞窗体就能够了)。
慢開始算法的核心是从小到大逐渐增大发送窗体,也就是说,从小到大逐渐增大拥塞窗体的数值。通常在刚開始发送报文段时,先把拥塞窗体设置为一个最大报文段MSS的数值,而在每收到对上一轮报文段(,每次加倍后的报文段的个数,可能不止一个报文段)的确认后,就把拥塞窗体的数值加倍。
为了防止拥塞窗体增长过大引起网络拥塞,还须要维护一个慢開始门限的状态变量,当拥塞窗体的值小于慢開始门限时,使用慢開始算法,一旦拥塞窗体的值大于慢開始门限的值,就改用拥塞避免算法。
拥塞避免算法的思路是让拥塞窗体缓慢地增大,收到每一轮的确认后,将拥塞窗体的值加1,而不是加倍,这样拥塞窗体的值依照线性规律缓慢增长。
不管是在慢開始阶段还是在拥塞避免阶段,仅仅要发送方推断网络出现拥塞(没有按时收到确认),就把慢開始门限设置为出现拥塞时发送窗体值的一般,但最小不能小于2个MSS值,而后把拥塞窗体的值又一次设置为1个MSS,运行慢開始算法。
快重传和快恢复
快重传算法首先要求接收方每收到一个失序的报文段后就马上发出反复确认(反复发送对前面有序部分的确认),而不是等待自己发送数据时才进行稍待确认,也不是累积收到的报文发送累积确认,假设发送方连续收到三个反复确认,就应该马上重传对方未收到的报文段(有收到反复确认,说明后面的报文段都送达了,仅仅有中间丢失的报文段没送达)。
快恢复算法与快重传算法配合使用,其过程有例如以下两个要点:
1、当发送方连续收到三个反复确认时,就把慢開始门限减半,这是为了预防网络发生拥塞。注意,接下来不运行慢開始算法。
2、因为发送方如今觉得网络非常非常可能没有发生特别严重的堵塞(假设发生了严重堵塞的话,就不会一连有好几个报文段到达接收方,就不会导致接收方连续发送反复确认),因此与慢開始不同之处是如今不运行慢開始算法(即拥塞窗体的值不设为1个MSSS),而是把拥塞窗体的值设为慢開始门限减半后的值,而后開始运行拥塞避免算法,线性地增大拥塞窗体。
【网络协议】TCP的拥塞控制机制的更多相关文章
- 网络协议TCP、Http、webservice、socket区别
网络协议TCP.Http.webservice.socket区别 http 和 webservice 都是基于TCP/IP协议的应用层协议 webservice是基于http的soap协议传输数据 w ...
- python网络编程--socket,网络协议,TCP
一. 客户端/服务端架构(用到网络通信的地方) 我们使用qq.微信和别人聊天,通过浏览器来浏览页面.看京东的网站,通过优酷.快播(此处只是怀念一下)看片片啥的等等,通过无线打印机来打印一个word文档 ...
- 网络体系结构的概念 - 网络协议TCP - 红黑联盟
https://i.cnblogs.com/EditPosts.aspx?opt=1 网络体系结构的概念 计算机网络就是一组通过一定形式连接起来的计算机系统,它需要四个要素的支持,即通信线路和通信设 ...
- 网络协议TCP/IP、IPX/SPX、NETBEUI简介
网络中不同的工作站,服务器之间能传输数据,源于协议的存在.随着网络的发展,不同的开发商开发了不同的通信方式.为了使通信成功可靠,网络中的所有主机都必须使用同一语言,不能带有方言.因而必须开发严格的标准 ...
- Go语言学习之9 网络协议TCP、Redis与聊天室
主要内容 1. Tcp编程2. redis使用 1. Tcp编程 (1)简介 Golang是谷歌设计开发的语言,在Golang的设计之初就把高并发的性能作为Golang的主要特性之一,也是 ...
- [网络协议]TCP粘包分析
关于socket粘包,socket缓冲区设置的问题,记录一下: 一 .两个简单概念长连接与短连接: 长连接 Client方与Server方先建立通讯连接,连接建立后不断开, 然后再进行报文发送 ...
- 【网络】TCP的拥塞控制
一.拥塞控制的一般原理 拥塞:对网络中某一资源的需求超过了该资源所能提供的可用部分 拥塞控制是防止过多的数据注入到网络,这样可以使网络中的路由器或链路不致过载,拥塞控制是一个全局性的过程. 流量控制往 ...
- 网络协议TCP
TCP:传输控制协议 tcp的特点:面向连接(打电话模型),可靠传输 tcp通信的三个步骤: 1.通信双方建立连接 2.收发收据 3.关闭连接 tcp客户端实现流程 """ ...
- 31.网络协议介绍tcp/udp
网络协议 TCP:网络中传输数据的协议,打电话 解决了我可能在网络中找不到别人(数据无法传输到) 保证数据传输的稳定性,可靠性 保证数据的安全性,完整性 对方要有响应 尝试重新发送 UDP:传输数据的 ...
随机推荐
- 二分图带权最大独立集 网络流解决 hdu 1569
方格取数(2) Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- SDP简要解析
1.概述SDP也是MMUSIC工作组的一个产品,在MBONE内容中用得很多.其目的就是在媒体会话中,传递媒体流信息,允许会话描述的接收者去参与会话.SDP基本上在internet上工作.他定义了会话画 ...
- 在php添加mongo过程中出现的mongo.so: > undefined symbol: php_json_encode in Unknown on line 0. After installation mongo driver for php 的错误
3 down vote my system is centos 6.3. I got the problem solved. vim /etc/php.ini then add extension=j ...
- 被Oracle全局暂时表坑了
今天凌晨4点多钟,在客户现场的负责人打电话给我,说非常奇怪,下载功能时快时慢.此下载功能非常复杂,之前一直是我优化,在半梦半醒中打开电脑,通过远程看着现场同事在PL/SQL developer中操作. ...
- error: ‘for’ loop initial declarations are only allowed in
使用gcc,出现如下错误: thread_join.c:7:5: error: 'for' loop initial declarations are only allowed in C99 mode ...
- 移动平台前端开发总结(针对iphone,Android等手机)
移动平台前端开发是指针对高端智能手机(如Iphone.Android)做站点适配也就是WebApp,并非是针对普通手机开发Wap 2.0,所以在阅读本篇文章以前,你需要对webkit内核的浏览器有一定 ...
- CentOS Apache服务器安装与配置
原文地址:http://www.linuxidc.com/Linux/2014-01/95256.htm 一.安装Apache程序,一般有三种安装方式: Apache在centos下httpd1.直接 ...
- Servlet开发(一)
一.Servlet简介 Servlet是sun公司提供的用于开发动态web资源的技术.Sun公司在其API中提供了一个Servlet接口,用户若想开发一个动态web资源(即开发一个java程序向浏览器 ...
- Go 语言读写 Excel
Excelize 是 Golang 编写的一个用来操作 Office Excel 文档类库,基于微软的 Office OpenXML 标准.可以使用它来读取.写入 XLSX 文件.相比较其他的开源类库 ...
- AngularJS:何时应该使用Directive、Controller、Service?【新手必看】
(这篇文章你们一定要看,尤其初学的人,好吗亲?) 大漠穷秋 译 AngularJS是一款非常强大的前端MVC框架.同时,它也引入了相当多的概念,这些概念我们可能不是太熟悉.(译者注:老外真谦虚,我大天 ...