收藏本页 电工之家 - 电工学习网站
当前位置:电工之家 > 计算机 > 正文

计算机网络TCP滑动窗口协议详解

时间:2016-12-09 15:44 来源:电工之家 作者:编辑部

计算机网络中,最常拿来问的就是TCP协议了。而最常遇到的一个问题?非TCP的三次握手魔术,这个我相信,每一位有心找工作的猿兄媛妹肯定滚瓜烂熟。今天我们来讲另外一个常见的面试问题,TCP滑动窗口协议。
大家应该知道一份数据使用TCP发送是切成连续的TCP包,而发送者并不是一口气也不可能一口气将所有的数据都发给接受者。这里我们要考虑到带宽缓冲区等因素,如果一下子发送所有的数据只会加大网络压力,造成丢包重试,轻则传输更慢,重则网络奔溃。
TCP将这些连续的TCP包一段一段地发给接受者,我们称之为“窗口”。因为TCP的顺序发送的,所以这个窗口是不停往后移动,于是我们又称之为滑动窗口。

需要注意的是,窗口的大小并不是固定的。在TCP三次握手之后,接收端就会告诉发送者自己的接受窗口rwnd,这个rwnd的大小每次TCP传输都会动态变化。

对于发送端来说,TCP包分为4种,在“窗口”之前的是已发送并确认送达,在“窗口”中分为已发送未确认送达以及允许发送但未发送,而在窗口之后的,则是不允许发送。
对于服务端来说,也分为4种,在窗口之前的称之为已接受并确认,在窗口内有未按序收到及允许接收未收到,还有窗口外的不允许接收。
相信细心的朋友已经发现,为什么发送端没有窗口内的“已经发送并确认收到”,接收端没有窗口内的“已经确认收到”。这是因为一旦满足了这个条件,窗口就会向后滑动,让更多原来处于第四状态的TCP包进入窗口。如下图所示,但P1,P2确认收到之后,窗口立马就往后滑动,P1,P2就变成了已发送并收到确认态了。

那么这个有什么意义呢?沙茶敏教大家一个方法。在面试中遇到TCP类似的问题,无非这么几个:1.可靠性、2.传输效率、3.稳定性等等等。。这里大家可以跟据自己的理解进行分析。