(1) 窗口的介绍
窗口是缓存的一部分,用来暂时存放字节流。发送方和接收方各有一个窗口,接收方通过TCP报文段中的窗口字段告诉发送方自己的窗口的大小,放松方根据这个值和其他信息设置自己的窗口的大小。
发送窗口内的字节都允许被发送,接受窗口内的字节都允许被接收,如果发送窗口左部分的字节已经发送,并且受到了确认,那么就将发送窗口向右移动一段距离,直到左部的第一个字节不是已发送并且已经确认的状态,接受窗口和发送窗口相似
(2) TCP可靠传输
TCP使用超时重传实现可靠传输:如果一个已经发送的报文段在超时时间内没有收到确认,那么久重传这个报文段。
(3) TCP流量控制
流量控制是为了控制发送方发送速率,保证接收方来的即接收。接收方发送的确认报文中的窗口字段可以用来控制发送方窗口的大小,从而影响发送方的发送速率,例如将窗口字段设置为0,则发送方不能发送数据
(4) TCP拥塞控制
拥塞产生的条件:对资源的需求大于可用资源
如果网络出现拥塞,分组将会丢失,此时发送方会继续重传,从而导致网络拥塞程度更高,因此当出现拥塞的时候,应该控制发送方的速度,这一点和流量控制很像,但出发点是不一样的,流量控制是为了让接收方来的即接收接收,而拥塞控制是为了降低整个网络的拥塞程度。
TCP主要通过四个算法来进行拥塞控制:慢开始,拥塞避免,快重传,快恢复。发送方需要为回一个叫做拥塞窗口的状态变量 。注意拥塞窗口和发送窗口的区别,拥塞窗口只是一个状态变量,实际决定发送方能发送多少数据的是发送发送窗口。
为了方便讨论,我们做了如下的解释:
1. 接收方有足够大的接收缓存,因此不会发生流量控制
2. 虽然TCP的窗口基于字节,但是这里设窗口的大小单位为报文段
慢开始和拥塞避免
发送的最初执行的是慢开始,令cwnd=1(最大报文段的MSS的数值),发送方只能发送一个报文段,当收到确认后,将cwnd加倍,因此之后发送方能够发送的报文段为:2,4,8…
注意到慢开始每个轮次都会将cwnd加倍,这样会让cwnd增长速度过快,从而使得发送方发送的速度增长过快,网络拥塞的可能就更高了,设置一个慢开始门限ssthresh,当cwnd>=ssthresh时,进入拥塞避免,每个轮次cwnd加1.
如果出现了超时,责令ssthresh=cwnd/2,然后开始执行慢开始。
快重传和快恢复
在接收方要求每次接收到失序的报文段,就立即发出重复确认(为的就是使发送方及早知道有报文段没有到达对方),而不要等到自己发送数据时捎带确认。例如已经收到了m1,m2此时收到了m4,应当发送对m2的确认。
在发送方如果收到三个重复确认,那么可以确认下一个报文段丢失,例如收到三个m2的,则m3丢失。此时执行快重传,立即重传下一个报文段。
在这种情况下,只是丢失个别报文段,而不是网络拥塞,因此执行快恢复,令ssthresh=cwnd/2,cwnd=ssthresh,注意到此时直接进入拥塞避免。
(5) 后退N协议
在发送完一个帧后,不用停下来等待确认,而是可以连续发送多个数据帧。收到确认帧后,还可以继续发送数据,这样就减少了等候的事件,整个通信的吞吐量提高了。
如果前一个帧在超时时间内未收到确认,就认为丢失或被破坏,需要重新发送错误帧以及后面的所有帧。这样有可能把正确的数据帧重传一遍,降低了传送效率,在线路很差的时候,使用后退N的协议会浪费掉大量的带宽,会导致不停的重发。
(6) 拥塞控制有什么问题
拥塞控制的代价:需要控制网络内部流量的分布的信息,在实施拥塞控制之前,还需要在节点之间交换信息和各种命令,以便选择控制的策略和实施控制。这样就产生了额外的开销。拥塞控制还需要将一些资源分配给各个用户单独使用,使得资源网络不能更好的实现共享。
(7) 滑动窗口的两个作用就是:(1)提供TCP的可靠性(2)提供TCP的流控特性
(8) 拥塞控制是为了防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不至于过载