前言:本文转载于TCP滑动窗口协议 - 简书 (jianshu.com),仅对文章做了排版和总结,转载请表明真正原文地址。
一、发送方数据可分为四类:
①已发送并得到确认的
②已发送未得到确认的
③未发送但接收方允许发送的
④未发送且接收方不允许发送的
接收方允许发送方一次能容纳的未确认的字节数。这称为发送窗口,有时也称为窗口。该窗口决定了发送方允许传输的字节数,即中间两部分。
当收到接收方新的ACK对于发送窗口中后续字节的确认时,窗口滑动。
每一次确认接受以后,这一过程都会发生,从而让窗口滑动整个数据流以传输。
二、接收方数据可分为三类:
①已经接收
②未接收准备接收
③未接收并未准备接收
(由于ACK由TCP协议栈回复,默认无应用延迟,不存在已经接收未回复)
其中“未接收准备接收”的就称为接收窗口。
三、实际举例说明:
假设发送方窗口大小为2,接收方窗口大小为1。一个窗口发送或接收一个帧,共有八帧需要通过。
1、初始态,发送方没有帧发出,发送窗口前后沿相重合。接收方0号窗口打开,等待接收0号帧;
2、发送方打开0号窗口,表示已发出0帧但尚确认返回信息。 此时接收窗口状态不变;
3、发送方打开0、1号窗口,表示0、1号帧均在等待确认之列。至此,发送方打开的窗口数已达规定限度,在未收到新的确认返回帧之 前,发送方将暂停发送新的数据帧。接收窗口此时状态仍未变;
4、接收方已收到0号帧,0号窗口关闭,1号窗口打开,表示准备接收1号帧。此时发送窗口状态不 变;
5、发送方收到接收方发来的0号帧确认返回信息,关闭0号窗口,表示从重发表中删除0号帧。此时接收窗口状态仍不变
6、发送方继续发送2号帧,2号窗口 打开,表示2号帧也纳入待确认之列。至此,发送方打开的窗口又已达规定限度,在未收到新的确认返回帧之前,发送方将暂停发送新的数据帧,此时接收窗口状态 仍不变;
7、接收方已收到1号帧,1号窗口关闭,2号窗口打开,表示准备接收2号帧。此时发送窗口状态不变;
8、发送方收到接收方发来的1号帧收毕的确认信 息,关闭1号窗口,表示从重发表中删除1号帧。此时接收窗口状态仍不变。
总结:
发送方先打开所有发送窗口,在发送窗口占满时,接收端开始接收窗口,按最大容量接收并返回确认给发送窗口,此时发送窗口继续发送下一帧。发送-收到-返回确认-继续发送依次循环。
四、发送窗口和接收窗口的关系:
TCP是全双工协议( 三种通信方式——单工、半双工和双工通信),双方可同时发送同时接收。
因此TCP双方各自维护一个“发送窗口”和“接收窗口”。
其中各自的“接收窗口”大小取决于应用、系统、硬件的限制(TCP传输速率不能大于应用的数据处理速率)。各自的“发送窗口”则要求取决于对端通告的“接收窗口”,要求相同。