TCP相关内容 | 青训营
继续总结一点关于TCP滑动窗口、流量控制的内容。
滑动窗口
TCP的数据包传输是对应的,但不能是你一句我一句的依次对应。窗口就是:在发送信息时,先不管有没有回复,把一部分数据包先发出去再说。它实际上是一块缓存空间,发送方把已经发送但是没有收到回复的信息暂存在此处,在期限内收到一条回复,就删除对应的信息。窗口的大小就是可以连续发送的最大值。一般接收方的窗口要大于发送方。窗口是可以滑动的,因为数据不断的被处理完成,窗口的范围会排除处理好的数据,把待处理的数据容纳进来。
发送方的滑动窗口根据数据的情况分为四个部分:1、已发送并收到ACK的数据。2、已发送但没有收到ACK的数据(发送窗口)。3、没有发送但在接受范围内的数据(可用窗口)。4、未发送且咋i接受范围之外的数据。
程序通过两个指针来区分这四个区域:SND.UNA 是一个绝对指针,指向已发送但没有收到ACK的数据的第一个字节。SND.UNA 绝对指针,指向没有发送但在接受范围内的数据的第一个字节。窗口的大小用SND.WND表示。
接收方的滑动窗口根据数据的情况主要分为两个部分:1、接受并确认的数据,2、没有收到但是可以接受的数据。同样使用指针区分不同区域。RCV.WND表示接受窗口大小,RCV.NXT指向期望发送方发来的下一个数据的第一个字节。
流量控制
流量控制是一种可以根据接收方实际接受能力来控制发送方发送数据量的机制。可有效避免发送方发送数据过多对方不能处理导致的重发,减少资源浪费。
比如在接收方十分繁忙的情况下,虽然接受了数据,但只处理很少的一部分数据,或者干脆不做任何处理,那这些数据就存放在缓存区里面,会导致接收方的可接受窗口越来越小,直到变为0。而发送方收到确认报文,发现可接受窗口大小为0,那么发送窗口也会变为0。也就是窗口关闭了(关闭后发送方会定时发送探测报文,用来调整窗口大小)