2.TCP流量控制与拥塞控制
滑动窗口机制
流量控制的含义:
所谓流量控制就是调整发送信息的速率,接收结点能够及时处理它们的一个过程。
流量控制的目的:
流量控制是为了防止网络出现拥挤及死锁而采取的一种措施。当发至某一接收结点的信息速率超出该结点的处理或转换报文的能力时,就会出现拥挤现象。因此,防止拥挤的问题就简化为各结点提供一种能控制来自其他结点的信息速率的方法问题。
流量控制的另一目的是使业务量均匀地分配给各个网络结点。因此,即使在网路正常工作情况下,流量控制也能减少信息的传递时延,并能防止网络的任何部分(相对于其余部分来说)处于过负荷状态。
TCP使用窗口机制进行流量控制
连接建立时,各端分配一块缓冲区用来存储接收的数据,并将缓冲区的尺寸发送给另一端。接收方发送的确认信息中包含了自己剩余的缓冲区尺寸。
剩余缓冲区空间的数量叫做窗口
TCP的流量过程
发送窗口和接收窗口
发送窗口是指发送方允许连续发送分组的序号表。发送方在不等待应答而连续发送的最大分组数称为发送窗口的尺寸。
接收窗口是指接收方允许接收分组的序号表。凡是发送到接收窗口内的分组,才能被接收方所接收,在窗口外的其它分组将被丢弃。
窗口滑动:发送方每发送一分组,窗口便向前滑动一个格,直到发送分组数等于最大窗口数目时便停止发送。
发送窗口的大小(宽度)规定了发送方在未接到应答的情况下,允许发送的数据单元数。也就是说,窗口中能容纳的逻辑数据单元数,就是该窗口的大小。
TCP 为每一个连接设有一个持续计时器。只要 TCP 连接的一方收到对方的零窗口通知,就启动持续计时器。若持续计时器设置的时间到期,就发送一个零窗口探测报文段(仅携带 1 字节的数据),而对方就在确认这个探测报文段时给出了现在的窗口值。若窗口仍然是零,则收到这个报文段的一方就重新设置持续计时器。若窗口不是零,则死锁的僵局就可以打破了。
TCP的拥塞控制
发送端的主机在确定发送数据段的速率时,既要根据接收端的接收能力,又要从全局考虑不要使网络发生拥塞。
TCP的流量控制防止了发送方过快地传输数据使得接收方来不及处理的情形,但是网络容量有限,这时必须通过拥塞控制来防治网络过载。
什么是网络的拥塞
当大量分组进入通信子网,超出了网络的处理能力时,就会引起网络局部或整体性能下降,这种现象称为拥塞。
路由器的队列溢出,分组丢失 (路由器的缓冲区溢出)
长延迟 (在路由器的缓冲区排队)
拥塞会导致什么后果
拥塞使许多分组重传
导致更多的业务量,直至崩溃
出现资源拥塞的条件:对资源需求的总和 > 可用资源
产生拥塞的两种原因
接收方的处理能力不足:接收容器小
网络不够通畅:传输管道细、网络节点队列溢出
拥塞的解决办法
发送方保持两个窗口:接收窗口rwnd、拥塞窗口cwnd
取两者的最小值为发送的字节数
如何确定拥塞窗口的大小?
慢速启动算法
拥塞控制算法
当 TCP 连接进行初始化时,将拥塞窗口置为 1。图中的窗口单位不使用字节而使用报文段。
慢开始门限的初始值设置为 16 个报文段,即 ssthresh = 16。
发送端的发送窗口不能超过拥塞窗口 cwnd 和接收端窗口 rwnd 中的最小值。我们假定接收端窗口足够大,因此现在发送窗口的数值等于拥塞窗口的数值。
在执行慢开始算法时,拥塞窗口 cwnd 的初始值为 1,发送第一个报文段 M0。
发送端收到 ACK1 (确认 M0,期望收到 M1)后,将 cwnd 从 1 增大到 2,于是发送端可以接着发送 M1 和 M2 两个报文段。
接收端发回 ACK2 和 ACK3。发送端每收到一个对新报文段的确认 ACK,就把发送端的拥塞窗口加 1。现在发送端的 cwnd 从 2 增大到 4,并可发送 M4 ~ M6共 4个报文段。
发送端每收到一个对新报文段的确认 ACK,就把发送端的拥塞窗口加 1,因此拥塞窗口 cwnd 随着传输次数按指数规律增长。
当拥塞窗口 cwnd 增长到慢开始门限值 ssthresh 时(即当 cwnd = 16 时),就改为执行拥塞避免算法,拥塞窗口按线性规律增长。
更新后的 ssthresh 值变为 12(即发送窗口数值 24 的一半),拥塞窗口再重新设置为 1,并执行慢开始算法。
当 cwnd = 12 时改为执行拥塞避免算法,拥塞窗口按按线性规律增长,每经过一个往返时延就增加一个 MSS 的大小。