SWS(silly window syndrome)糊涂窗口综合症
当发送端应用进程产生数据很慢、或接收端应用进程处理接收缓冲区数据很慢,或二者兼而有之;就会使应用进程间传送的报文段很小,特别是有效载荷很小。 极端情况下,有效载荷可能只有1个字节;而传输开销有40字节(20字节的IP头+20字节的TCP头) 这种现象就叫糊涂窗口综合症。
SWS避免算法
接收方
David D Clark算法:窗口边界移动值小于min(MSS,缓存/2)时,通知窗口为0
发送方
Nagle算法(TCP_NODELAY用于关闭Nagle算法):
1)没有已发送未确认报文段时立刻发送数据
2)存在未确认报文段时,直到:1-没有已发送未确认报文段,或2-数据长度达到MSS时, 再发送
TCP delayed acknowledgment 延迟确认
当有响应数据要发送时,ack会随着响应数据立即发送给对方;
如果没有响应数据,ack的发送将会有一个延迟,以等待看是否有响应数据一起发送;
如果再等待ack期间,对方的第二个数据段又到达了,这是就要立即发送ack;
Nagle 和 delayed ACK 冲突时,发送方或接收方的一方需要关闭对应设置