接收端缓存结构

接收端缓存结构

Content #

第一部分:接受并且确认过的。第二部分:还没接收,但是马上就能接收的。第三部分:还没接收,也没法接收的。也即超过工作量的部分,实在做不完。

  1. MaxRcvBuffer:最大缓存的量;
  2. LastByteRead 之后是已经接收了,但是还没被应用层读取的;
  3. NextByteExpected 是第一部分和第二部分的分界线。

第二部分的窗口有多大呢?

NextByteExpected 和 LastByteRead 的差其实是还没被应用层读取的部分占用掉的 MaxRcvBuffer 的量,我们定义为 A。

AdvertisedWindow 其实是 MaxRcvBuffer 减去 A。

AdvertisedWindow=MaxRcvBuffer-((NextByteExpected-1)-LastByteRead)。

那第二部分和第三部分的分界线在哪里呢?NextByteExpected 加 AdvertisedWindow 就是第二部分和第三部分的分界线,其实也就是 LastByteRead 加上 MaxRcvBuffer。

其中第二部分里面,由于受到的包可能不是顺序的,会出现空档,只有和第一部分连续的,可以马上进行回复,中间空着的部分需要等待,哪怕后面的已经来了。

Viewpoints #

From #

第12讲 | TCP协议(下):西行必定多妖孽,恒心智慧消磨难