现在假设,A收到了B发来的确认号为32(表明B期望收到的下一个报文段的开头序号为32),窗口为20字节的确认报文段,那么A便可以根据这两个数据构建出如下发送窗口:
A发送11个字节的数据后,发送窗口位置不变,可用窗口变小:
此时,B收到了前三个字节,向A发送确认号为35的确认报文字段(同时接收窗口向前移动三个字节);
A的发送窗口在收到B的确认报文后也向前移动三个字节。
这里,就需要引入“停止等待”和“累计确认”的概念了:
“停止等待”,顾名思义,就是每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。
而在TCP传输过程中,为了提高效率、节约资源,采用了“累计确认”的方式:即不必对收到的分组逐个发送确认,而是对按序到达的最后一个分组发送确认,表示到这个分组为止的所有分组都已正确收到了。
接着,A继续向B发送报文,但是B一直没有发回确认报文。
A在发送至可用窗口为零时便停止发送。
【后记】
运输层真的是承上启下的扛把子,这其中细节还有很多,今天挑了这两个是因为对于这部分的内容,“直观上的理解”比“文本上的记忆”更为重要。
TCP的拥塞避免也是个很重要的内容,会出现在下一篇文章中。
最后,你们的反馈就是我最大的动力啦(逃