Outline
1.对比了拥塞控制和流量控制
2.拥塞控制的细节
tcp概念
TCP四元组:[源ip,源端口号,目的ip,目的端口号]
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
三个概念:面向连接
:必须在建立连接前确认对方链路可达并准备好才开始通信,建立后对状态的保持。(udp直接通信,不会询问接收端是否可达并准备接收数据)
字节流
:tcp传输的是byte类型数据。
可靠
:保证数据报能够到达接收端(超时重传机制、丢包重传及数据顺序一致)
拥塞控制和流量控制对比
拥塞控制 | 流量控制 | |
---|---|---|
窗口 | 拥塞窗口(cwnd) | 滑动窗口(rwnd) |
窗口大小定义者 | 发送方 | 接收方 |
目的 | 为了在网络通畅的时候多发送一些数据,在网络堵塞的时候少发一些数据 | 为了防止发送端发送数据过快(字节/时间),导致数据丢失 |
控制范围 | 是一个全局性的过程,涉及到所有的主机、路由器,以及与降低网络传输性能有关的所有因素 | 点对点通信量的控制,是端到端的问题 |
单位 | 报文段 | 字节 |
最早先有滑动窗口,接收方告知发送方当前可以接收的量,这在局域网一般没问题,但是一旦到网络中可能因为每个连接发送的数据量过大而导致出现堵塞的状况,而且如果再有重试机制可能会导致雪崩。为此引入了拥塞窗口,发送端根据当前的网络状况决定发送数据的多少。
Ps滑动窗口和拥塞窗口接收发送两端都有
拥塞控制的一些细节
拥塞控制的几种算法:慢开始( slow-start )、拥塞避免( congestion avoidance )、快重传( fast retransmit )和快恢复( fast recovery )
最开始指数增长阶段就是慢开始算法、而线性增长阶段是拥塞避免算法
Ps:更新后的ssthresh值变为出现超时时的拥塞窗口数值的一半
快重传算法
1)首先要求接收方每收到一个失序的报文段
后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方)而不要等到自己发送数据时才进行捎带确认。
2)算法还规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段Mx,而不必继续等待Mx设置的重传计时器到期。由于发送方尽早重传未被确认的报文段,因此采用快重传后可以使整个网络吞吐量提高约20%。
与快重传配合使用的还有快恢复算法
1)当发送方连续收到三个重复确认,就执行“乘法减小”算法,把慢开始门限ssthresh减半(当前cwind的一半)。这是为了预防网络发生拥塞(这里想想就清楚了,因为接下来要进行重传再加上正常的传输可能会发送拥塞)。请注意:接下去不执行慢开始算法。
2)由于发送方现在认为网络很可能没有发生拥塞,因此与慢开始不同之处是现在不执行慢开始算法(即拥塞窗口cwnd现在不设置为1),而是把cwnd值设置为慢开始门限ssthresh减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。
总结
发送方窗口的上限值 = Min [ rwnd, cwnd ]
当rwnd < cwnd 时,是接收方的接收能力限制发送方窗口的最大值。
当cwnd < rwnd 时,则是网络的拥塞限制发送方窗口的最大值。
参考链接:https://blog.csdn.net/yechaodechuntian/article/details/25429143