TCP流量控制(滑动窗口)

滑动窗口协议允许发送方在停止并等待确认前发送多个数据分组。由于发送方不必每发一个分组(IP数据包或TCP报文段)就停下来等待确认,因此该协议可以加速数据的传输,增大了吞吐量。并且该协议可以控制流量,下面讲解。

停止等待协议是最简单但也是最基础的数据链路层协议。与滑动窗口协议不同的是停止等待协议就是每发送完一个分组就停止发送,等待对方的确认,在收到确认后再发送下一个分组。当发送窗口和接收窗口的大小都等于 1时,就是停止等待协议。

TCP流量控制(滑动窗口)

TCP在IP不可靠服务的基础上建立了可靠的数据传输服务。TCP的可靠数据传输服务确保进程从接收缓冲区中读出的数据流是正确地,有序的,不重复的,即读出的字节流与连接的另一方系统发送的字节流是完全一样的,但是实际上接收方应用进程不一定时刻都在读数据,那么如果应用进程读取数据相当慢,而发送方发送的数据太多、太快,就很容易使接收方的接收缓冲区溢出。所以TCP采用大小可变的滑动窗口给应用程序提供流量控制服务,用以消除接收缓冲区溢出的可能。实际上TCP报文段头部的16位窗口字段写入的数值就是接收方当前给对方设置的发送窗口的上限,发送窗口在连接建立时由双方商定,但是在通信过程中,接收方根据自己的接收缓冲区资源大小随时动态的调整对方发送窗口的上限(滑动窗口即可以滑动滴)。

即流量控制(用滑动窗口实现)就是让发送方的发送速率不要太快,要让接收方来得及接收

我们知道TCP连接发送方发送一个数据报,对端会进行确认在发送下一个数据包。

举个例子:TCP通信是全双工的,这里为了方便理解,就以一个方向为例,假设A为发送方,B为接收方。A会有一个发送窗口,B有一个接收窗口。在连接建立的时候B告诉A其接收窗口是400字节,因此发送方的发送窗口不能超过接收方给的接收窗口大小。(假设一个报文段100字节,报文段序号初始值为1.图中大写ACK表示头部中的确认位ACK,小写ack表示确认字段的值)

为了便于大家看,我们采用另一种方式描述发送窗口,假设A现在收到B的确认报文段,窗口是20字节,确认号是31(表示B期望收到的下一个序号是31,而序号30为止的数据已经收到了),根据此条件,A构造出自己的发送窗口,如下图

发送窗口表示在没有收到B确认的情况下,A也可以连续把发送窗口的数据发送出去。但是已经发送过的数据在未收到确认之前,它还需要暂时保留,以便于超时重传时使用。发送窗口越大,它就可以在收到对方确认之前发送更多的数据,因而获得更高的传输效率。(但是接收方要来得及处理之前的数据)

发送窗口的位置由窗口前沿和后沿的位置共同确定。

它后沿变化有两种,(1)不动(没有收到新的确定)(2)前移(收到新的确认);

前沿是不断向前移动的,但也可能不动(1)不动(没有收到新确认,对方窗口也不变)(2)不动(收到新的确认,对方的应用层没有读取数据,接收窗口缩小了,使前沿正好不变,后沿前移窗口就变小了)

前沿不赞成向后收缩,有可能会发生错误。

接着上图继续给大家讲解这个栗子

假定A发送了序号为31~41的数据。这时,发送窗口的位置并未改变,发送窗口内靠后的11个字节(黑色部分)表示 已发送但未收到确认。

即小于P1的是已发送并收到确认的序号,而大于P3的是不允许发送的部分。

P3-P1=A的发送窗口

P2-P1=已发送但是未接收到确认的字节数

P3-P2=允许发送但是未发送的字节数(可用窗口或有效窗口)

再看B的接收窗口大小是20,在接收窗口外面到30号位置的数据是接收并确认的,因此可以丢弃。在接收窗口中,B收到了32和33的数据(白色的是没有接收到的),但它们不是按序到达的,因为并没有收到31号数据。B只能对按序达收到的数据中的最高序号给出确认,因此B发送的确认报文字段的确认号依然是31号(确认号就是告诉发送方期望下一次收到数据包的序号)。

现在假定B收到了序号为31的数据,并把31~33的数据交付主机,然后B删除这些数据。接着把窗口向前移动3个序号,如下图,同时给a发送确认,其中的窗口值仍为20,但确认号变为34。表明B已经收到序号33为止的数据。

当A发送完窗口内的所有数据后,未收到任何确认时,窗口内就没有可发送的数据。经过一段时间后(超时计时器),若仍未收到确认,A将会重新发送。

此外发送方和接收方都有自己的缓冲区

发送缓冲区存放:

1、发送发TCP准备发送的数据

2、TCP已发送但尚未收到确认的数据(为超时重传准备)

接收缓冲区存放:

1、按序到达但未被应用程序读取的数据

2、未按序到达的数据

实际上发送窗口大小不仅仅是由接收端决定的,其还受网络的拥塞程度决定。发送窗口=MIN{接收窗口,拥塞窗口}

猜你喜欢

转载自blog.csdn.net/Eunice_fan1207/article/details/84330580
今日推荐