接收能力与网络承载能力分开

TCP接收端通告窗口,表示它目前愿意接收的序号范围。发送端按已经发出而未确认的数据及窗口位置判断还能发送多少,避免持续压入对方无法接纳的数据;接收应用读取缓冲又会影响后续可用空间。

拥塞控制处理的则是共享网络路径上的负载与反馈,可能依据丢失、延迟或显式拥塞标记调节发送。两种约束可同时存在,不能因接收窗口很大,就把发送速率无限提高,也不能只调拥塞算法来解决接收程序长期不读数据的问题。

参考:[1]

窗口为零与连接失效不同

接收端可暂时通告零窗口,表示当前不能接纳更多常规数据。TCP仍保留零窗口探测,让发送端能发现后来重新开放的窗口;否则一次窗口更新丢失就可能让双方一直等待。

窗口缩放扩展改变窗口字段的解释尺度,让较大接收窗口能够表示,并在建立连接时协商相应参数。它不会凭空增加内存、取消探测或让每个窗口字段都任意改变含义;接收能力的通告与实际资源承诺仍须一致。

参考:[1] [2]

信用额度也可按流和连接分层

QUIC同时限制单条流及整个连接可发送的累计流数据量,接收端用MAX_STREAM_DATA和MAX_DATA等帧提高额度。发送方必须同时遵守两级限制,不能用许多单独合规的流绕过连接总额度。

这些额度基于字节偏移等累计边界,不是每收到一次额度通知就额外加上一份同样大小的缓冲。流量控制还与并发流数量限制区分;一个应用可继续打开更多流,并不证明它拥有无限的数据发送额度。

参考:[3]