滑动窗口协议
TCP发送数据时滑动窗口协议维护两个窗口结构,发送窗口结构和接收窗口结构(均为抽象结构 )
发送窗口结构如上,TCP通过字节大小维护窗口,即窗口大小(TCP头部中的窗口大小)和确认序号均为字节,SND.WND有接收方提供表示接受缓存区剩余大小(即当前能接受的数据大小),左边界SND.UNA为接收方最新确认序号大小, 右边界为左边界加上窗口大小, SND.NXT则记录下次发送的数据序列号
窗口移动的方式有以下几种:
1. 收到ACK通过确认序号左边界右移
2. 当已确认数据得到处理,接收端可用缓存变大,窗日也随之变大,此时发送方收到接受方发送的ACK中包含的窗口大小变大
3. 窗口收缩右边界向左移动
接受端窗口结构记录了已接收并确认的数据,以及它能够接收的最大序列号,该窗口可以保证其接收数据的正确性。特别是,接收端希望避免存储重复的已接收和确认的数据,以及避免存储不应接收的数据(大于能够接受的最大序列号)
零窗口和窗口探测
当左右边界相等时,称之为零窗口,此时发送方停止真正数据发送,进行窗口探测,发送端会采用一个持续计时器间歇性地查询接收端,看其窗口是否已增长,探测报文含一个字节数据,当接受方收到探测报文时,被强制要求回复ACK(其中包