tcp在处理交互数据流时会采用delay ack与nagle算法
Delay Ack
在接收到数据时,并不立刻发送ACK,而将ACK的发送推迟到下一次与该方向要发送的数据一起发送或是达到最大时延(大多数为200ms)
可以通过TCP_QUICKACK选项设置
Nagle算法
该算法要求一个TCP连接上最多只能有一个未被确认的未完成的小分组(小于MSS的数据块),该分组的确认到达之前不能发送其他的小分组。TCP收集这些小分组,并在确认到来时以一个分组一起发出去。
nagle算法规则:
- 如果改包长度达到MSS,则允许发送
- 如果改包含有FIN,则允许发送
- 设置了TCP_NODELAY,则允许发送
- 未设置TCP_CORK选项时,若所有包都被发出去,或者小数据包(小于MSS)均被确认,则允许发送
TCP_NODELAY:无论数据包大小,都立即发送
TCP_CORK:只有数据量达到MSS时,才会被发送