参考

https://www.cnblogs.com/biyeymyhjob/p/4670502.html
https://stackoverflow.com/questions/3761276/when-should-i-use-tcp-nodelay-and-when-tcp-cork
https://www.zhuxiaodong.net/2018/tcp-nagle-tcp_nodelay-tcp_nopush-instruction/

总结

TCP_NODELAY(直接发送)和TCP_CORK(使用cork算法,是nagle的增强版)都是关闭nagle算法。
nagle算法的思想都是累积大的数据包,避免网络中有过多的小数据包。但是有种情况是,收到了所有ACK,就发送,不管现在的数据包大不大。
cork算法就是改良这个地方,也是它们之间的区别,虽然收到了全部ACK,但不发送,继续累积到大的数据包。

题外话, TCP_CORK和TCP_NOPUSH的关系,区别

参考:
http://dotat.at/writing/nopush.html
https://imququ.com/post/my-nginx-conf-for-wpo.html

一般来说,TCP_NOPUSH(BSD)和TCP_CORK(Linux)是一样的。
来看一下Nginx文档,只有TCP_NOPUSH这个指令

05-11 16:07