滑动窗口
滑动窗口
接收窗口相关的字段中,"!, 是自己期望收到的下一个字节编号,"! 表示接收窗口的大小,"!!!
表示将向对方通告的窗口大小值,这个值在报文发送时会被填在首部中的窗口大小字段,"!!## 记录
了上一次窗口通告时窗口右边界取值。上面这四个字段都会随着数据的发送和接收动态地改变,如图所示。
接收窗口
发送窗口中, 记录了被接收方确认的最高序列号,!!, 表示自己将要发送的下一个数据的起始编号 ,
!! 记录了当前的发送窗口大小,它常被设置为接收方通告的接收窗口值,! 22 记录了下一个被应用程序
缓存的数据的起始编号,如图所示。
上面这四个字段的值也是动态变化的,每当收到接收方的一个有效 %K 后, 的值就做相应的增加,指向下
一个待确认数据的编号,当发送一个报文后, !!, 的值就做相应的增加,指向下一个待发送数据,!!, 和
之间的差值不能超过 !! 的大小。
由于实际数据发送时是按照报文段的形式组织的,因此可能存在这样的情况:即使发送窗口允许,但并不是窗口
内的所有数据都能发送以填满窗口,如图中编号为 ~ 的数据,可能因为它们太小不能组织成一个有效的报文
段,因此不会被发送。发送方会等到新的确认到来,从而使发送窗口向右滑动,使得更多的数据被包含在窗口中 ,
这样再启动下一个报文段的发送。
发送窗口
tcp_recved(pcb, p->tot_len);
评论0
最新资源