一、流量控制
什么是流量控制
Sender won’t overflow receiver’s buffer by transmitting too much, too fast. (防止发送方发的太快,耗尽接收方的资源,从而使接收方来不及处理)
流量控制的一些知识点
(1)接收端抑制发送端的依据:接收端缓冲区的大小
(2)流量控制的目标是接收端,是怕接收端来不及处理
(3)流量控制的机制是丢包
怎么样实现流量控制?
使用滑动窗口
滑动窗口是什么?
滑动窗口是类似于一个窗口一样的东西,是用来告诉发送端可以发送数据的大小或者说是窗口标记了接收端缓冲区的大小。(注:窗口指的是一次批量的发送多少数据)
为什么会出现滑动窗口?
在确认应答策略中,对每一个发送的数据段,都要给一个ACK确认应答,收到ACK后再发送下一个数据段,这样做有一个比较大的缺点,就是性能比较差,尤其是数据往返的时间长的时候。
使用滑动窗口,就可以一次发送多条数据,从而就提高了性能。
滑动窗口的一些知识点
(1)接收端将自己可以接收的缓冲区大小放入TCP首部中的“窗口大小”字段,通过ACK来通知发送端
(2)窗口大小字段越大,说明网络的吞吐率越高
(3)窗口大小指的是无需等待确认应答而可以继续发送数据的最大值,即就是说不需要接收端的应答,可以一次连续的发送数据
(4)操作系统内核为了维护滑动窗口,需要开辟发送缓冲区,来记录当前还有那些数据没有应答,只有确认应答过的数据,才能从缓冲区删掉
(ps:发送缓冲区如果太大,就会有空间开销)
(5)接收端一旦发现自己的缓冲区快满了,就会将窗口大小设置成一个更小的值通知给发送端,发送端收到这个值后,就会减慢自己的发送速度
(6)如果接收端发现自己的缓冲区满了,就会将窗口的大小设置为0,此时发送端将不再发送数据,但是需要定期发送一个窗口探测数据段,使接收端把窗口大小告诉发送端
ps:在TCP的首部中,有一个16为窗口字段,此字段就是用来存放窗口大小信息的
滑动窗口的优点
可以高效可靠的发送大量的数据
二、拥塞控制
什么是拥塞控制
too many sources sending too much data too fast for network to handle
防止发送方发的太快,使得网络来不及处理,从而导致网络拥塞
拥塞控制使用的机制:AIMD\slow start
slow start: 慢启动
A: additive(加法的)
I: increase(增加)
M: multiplicative(乘法的)
D: decrease(减少)
即就是加法增加,乘法减少---->加增乘减
加法增加
是指执行拥塞避免算法后,在收到对所有报文段的确认后(即经过一个往返时间),就把拥塞窗口cwnd增加一个MSS大小,使拥塞窗口缓慢增大,以防止网络过早出现拥塞
乘法减少
出现一次超时(即出现一次网络拥塞),就把慢开始门限值ssthresh设置为当前的拥塞窗口值乘以0.5
ps:当网络频繁出现拥塞时,ssthresh值就下降的很快,以大大减少注入到网络中的分组数
发送端如何知道已经丢包?
为什么会有拥塞控制?
流量控制虽然可以高效可靠的传送大量的数据,但是如果在刚开始阶段就发送大量的数据,可能会导致网络拥堵,因为网络上的计算机太多了
拥塞控制的表现?
丢包
延时变长
拥塞控制的工作过程
初始化阶段
慢开始阶段
阶段(一)
阶段(二)
阶段(三)
阶段(四)
拥塞避免阶段
拥塞调整阶段
阶段(一)
阶段(二)
阶段(三)
流量控制和拥塞控制的区别
相同点
(1)现象都是丢包;
(2)实现机制都是让发送方发的慢一点,发的少一点
相同点
(1)现象都是丢包;
(2)实现机制都是让发送方发的慢一点,发的少一点
不同点
(1)丢包位置不同
流量控制丢包位置是在接收端上
拥塞控制丢包位置是在路由器上
(2)作用的对象不同
流量控制的对象是接收方,怕发送方发的太快,使得接收方来不及处理
拥塞控制的对象是网络,怕发送发发的太快,造成网络拥塞,使得网络来不及处理
联系
拥塞控制
拥塞控制通常表示的是一个全局性的过程,它会涉及到网络中所有的主机、
所有的路由器和降低网络传输性能的所有因素
流量控制
流量控制发生在发送端和接收端之间,只是点到点之间的控制