TCP的流量控制
-
如果发送方发送的速度太快,接收方来不及接收就会丢弃。所以要控制发送方的发送速度,让接收方来得及接收。
-
利用滑动窗口实现。
-
接收方告诉发送方自己的接收窗口大小,发送方的发送窗口大小不能超过这个值。
-
持续计时器。为了避免发送方在0发送窗口一直等,发送方在收到0接收窗口就启动持续计时器,时间到就发送零窗口探测报文,这个报文是接收方接受窗口为0也必须要处理的。
-
最大报文段MSS指一个报文段最大多少字节。抓包常见1460。
-
Nagle 算法:对按字节到达发送缓存的数据,先把第一个字节发送出去,把后面到达的字节缓存起来,收到第一个字节的确认后再把缓存的数据组装成报文段发送出去。之后也是缓存后到达的数据,收到确认再组装缓存的数据发送。另外还规定:当到达发送缓存的数据已经到窗口大小的一半或者报文段最大长度时,立即发送一个报文段。
-
糊涂窗口综合症:当TCP接收方缓存已满,应用进程每次只从缓存取1字节数据,这时缓存有1字节空闲,接收方就迫不及待的告诉发送方,于是发送方的发送窗口变为1,然后发送只包含1字节数据的报文,这就是糊涂窗口综合症。
-
解决办法:接收方等待,知道缓存可以容纳一个最大报文段或者缓存有一半空闲。也可以发送方等待,积累足够多的数据再发送。