什么是滑动窗口?
窗口是操作系统开辟的一块缓存空间,发送方在收到接收方ACK应答之前,必须在缓冲区保留已发送的数据,如果按期收到确认应答,数据就可以从缓冲区移除。
什么是滑动窗口大小?
窗口大小就是指无需等待ACK,可以继续发送数据的最大值。
什么是累计确认?
假设发送方发送了100-199、200-299、300-399的数据包,接收方都收到了,但此时200-299的ACK发生了丢失,但是发送方依然可以通过300-399的数据包的ACK 400知道200-299的数据包已被发送方接收,这种模式就叫做累计确认。
窗口大小由谁决定?
TCP首部中的窗口大小是接收方告诉发送方自己还有多少缓冲区可以接收,发送端会根据这个值来发送数据,避免接收端处理不过来。
窗口大小由接收方的窗口大小决定,通常情况下发送方发送的数据大小不能超过接收方的窗口大小。
发送方滑动窗口
发送方的窗口主要分为四部分:
发送窗口需要借助三个指针来实现:
可用窗口的大小为:SND.WIND - (SND.NXT - SND.UNA)
接收方的滑动窗口
接收方窗口分为三部分:
接收窗口需要借助两个指针实现:
接收窗口和发送窗口大小相等么?
接收方窗口约等于发送窗口大小。