delayed ack : 当协议栈接受到TCP数据时,并不一定会立刻发送ACK响应,而是倾向于等待一个超时或者满足特殊条件时再发送。如果接收方有数据回写,则ACK也会搭车一起发送。
- 启动TCP_NODELAY选项后,socket增加两个标志位TCP_NAGLE_OFF和TCP_NAGLE_PUSH
- 关闭TCP_NODELAY选项后,socket仅关闭了TCP_NAGLE_OFF标志位
而发包时判断TCP_NAGLE_PUSH,导致TCP_CORK失效
解决方案:
- client端发送数据时,仅使用TCP_CORK选项,避免失效。
- server端开启TCP_QUICKACK,尽快ACK