TCP阻塞控制
来源:互联网 发布:手机原创歌曲软件 编辑:程序博客网 时间:2024/06/03 21:35
1.概述
2.慢启动
3.阻塞避免
4.快速重传与快速恢复
1.概述
TCP拥塞控制能够提高网络利用率,降低丢包率,并保证网络资源对每条数据流的公平性。拥塞控制主要有几种:慢启动,阻塞避免,快速重传 以及快速恢复。
拥塞控制的最终受控变量是发送端向网络一次连续写入的数据量(即收到其中第一个数据的确认应答之前的所有数据),称为发送窗口(send window, SWND)。但是发送端往往最终已TCP报文段来发送数据,所以SWND限定了发送端能够连续发送TCP报文段的数量。发送端应该合理地选择SWND的大小,若该值太小,会引起网络延迟,若太大,则容易导致网络拥塞。前面中我们知道,接收端可通过其接收通过窗口(RWND)来控制发送端SWND大小,但是发送端应该引入一个拥塞端口(Congestion Window, CWND)的状态量。实际的SWND值就是RWND和CWND的较小值。
2.慢启动
为了防止网络拥塞,TCP采用可一种慢启动算法,对发送数据量进行控制,为了调节发送端的数据发送量,引入了拥塞窗口,在慢启动时,将这个拥塞窗口设为1个报文段发送数据。之后每收到一次确认应答,拥塞窗口就加1和报文段。在发送数据包时,将拥塞窗口的大小与接收端主机通知的窗口大小进行比较,然后选择较小的值来控制数据量的发送。拥塞窗口是发送端使用的流量控制,而通告窗口则是接收端使用的流量控制。
慢启动算法的步骤如下(cwnd全程Congestion Window):
1.初始化cwnd=1,表示可以传一个MSS大小的数据;
2.每收到一个ACK,cwnd++,即增加1,呈线性上升;
3.每当过了一个RTT,cwnd = cwnd * 2,呈指数上升;
4.ssthresh(slow start threshold 慢开始门限),是一个上限,当cwnd>=ssthresh时,就会进入拥塞避免算法。
3.拥塞避免
拥塞避免算法是让拥塞窗口缓慢地增大,收到每一轮的确认后,将拥塞窗口的值加1,而不是加倍,这样拥塞窗口的值按照线性规律缓慢增长。在慢启动中,当cwnd>=ssthresh时,就会进入“拥塞避免算法”。一般来说ssthresh的值是65535,单位是字节,当cwnd达到这个值后,算法如下:
1.收到一个ACK时,cwnd=cwnd+ 1/cwnd;
2.当没过一个RTT时,cwnd=cwnd+1;
4.快速重传与快速恢复
块重传算法要求接收方每收到一个失序的报文段后就立即发出重复确认(重复发送对前面有序部分的确认),而不是等到自己发送数据时才进行捎带确认,也不是累计收到的报文发送累计确认,如果发送方连续收到三个重复确认,就应该立即重传对方未收到的报文段(有收到重复确认,说明后面的报文段都到达了,只有中间丢失的报文段没送达)。
快恢复算法与快重传算法配合使用:
1.当发送方连续收到三个重复确认时,就把慢开始门限ssthresh设置为当前拥塞窗口cwnd的一半,重传丢失的报文段。设置cwnd为ssthresh加上三倍的报文段大小;
2.每次收到另一个重复的ACK时,cwnd增加1个报文段大小并发送1个分组;
3.当下一个确认新数据的ACK到达时,设置cwnd为ssthresh(跟第1步一样设置方法)。这个ACK应该是在进行重传之后的一个往返时间内对步骤1中重传的确认。另外,这个ACK也应该是对丢失的分组和收到额第一个重复的ACK之间的中间报文段的确认。这一步采用的是拥塞避免算法。
- TCP阻塞控制
- TCP阻塞控制详解
- TCP阻塞控制
- TCP实现阻塞控制
- TCP/IP阻塞控制机制
- 【面经笔记】TCP流量控制、阻塞控制
- TCP协议详解(慢启动,流量控制,阻塞控制之类)
- Linux TCP/IP编程之超时控制、多路复用和非阻塞
- TCP的阻塞机制
- TCP阻塞模式开发
- TCP的阻塞机制
- TCP socket 非阻塞
- TCP客户端阻塞方式
- TCP.普通socket(阻塞/非阻塞)模型
- TCP send 阻塞与非阻塞
- tcp socket阻塞与非阻塞
- TCP非阻塞socket编程
- 阻塞式TCP 接收方式
- ZooKeeper集群管理
- 知名技术团队博客
- bing和on的绑定事件的区别小结
- bootstrap源码jQuery插件之button.js源码分析笔记
- SpringMVC注解(二)
- TCP阻塞控制
- 线程安全杂谈之ThreadLocal
- js内置对象之Number
- Hadoop集群安装步骤
- LeetCode Algorithms 7. Reverse Integer 题解
- 父类到子类的转换(向下转型)and instanceof 运算符
- 动态规划系列(2)——找零钱问题
- CSS的继承、层叠、特殊性、权值、重要性(!important)
- NLP summary tool 笔记