结论先行
在TCP
发送报文有时比较短,但又对延迟比较敏感的场景,例如,应用控制信令,非常适合启用TCP_NODELAY
套接字选项。
现象
- 发送者在
TCP
链路上连续发送两条请求,第一条请求立即发送出去了,而第二条要等到TCP Ack
后,才能再次发送出去
TCP
存在随路Ack
确认和延迟Ack
确认,TCP
对端在没有报文发送时,会出现延迟回复Ack
确认
启用代码
int enable = 1;
// 注意使用第二个参数特别需要注意,需要设置为SOL_TCP
setsockopt(fd, SOL_TCP, TCP_NODELAY, &enable, sizeof(enable));
拷贝粘贴代码易错提示
笔者曾出现设置第二个参数为
SOL_SOCKET
级别,但TCP_NODELAY
特性不生效的情况
后记
后来回想了下,setsockopt
第二个参数选项,体现为套接字的协议工作层次,与网络协议栈的层次划分有一定的对应关系。
所以,对于TCP_NODELAY
套接字选项,应该设置在传输层上!文章来源:https://www.toymoban.com/news/detail-852402.html
猜测TCP_NODELAY默认不启用原因
- 吞吐量因素
Nagle
算法的优化场景文章来源地址https://www.toymoban.com/news/detail-852402.html
- 避免发送过多未经确认的数据
工具小贴士
-
putty
小程序在配置中提供了TCP_NODELAY
的选项控制,以利于界面交互的及时性
到了这里,关于TCP_NODELAY在延迟敏感的场景下适合设置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!