Content #
第一部分:接受并且确认过的。第二部分:还没接收,但是马上就能接收的。第三部分:还没接收,也没法接收的。也即超过工作量的部分,实在做不完。
- MaxRcvBuffer:最大缓存的量;
- LastByteRead 之后是已经接收了,但是还没被应用层读取的;
- NextByteExpected 是第一部分和第二部分的分界线。
第二部分的窗口有多大呢?
NextByteExpected 和 LastByteRead 的差其实是还没被应用层读取的部分占用掉的 MaxRcvBuffer 的量,我们定义为 A。
AdvertisedWindow 其实是 MaxRcvBuffer 减去 A。
AdvertisedWindow=MaxRcvBuffer-((NextByteExpected-1)-LastByteRead)。
那第二部分和第三部分的分界线在哪里呢?NextByteExpected 加 AdvertisedWindow 就是第二部分和第三部分的分界线,其实也就是 LastByteRead 加上 MaxRcvBuffer。
其中第二部分里面,由于受到的包可能不是顺序的,会出现空档,只有和第一部分连续的,可以马上进行回复,中间空着的部分需要等待,哪怕后面的已经来了。
Viewpoints #
From #
第12讲 | TCP协议(下):西行必定多妖孽,恒心智慧消磨难