TCP_NODELAY在延迟敏感的场景下适合设置

结论先行

TCP发送报文有时比较短,但又对延迟比较敏感的场景,例如,应用控制信令,非常适合启用TCP_NODELAY套接字选项。

现象

  • 发送者在TCP链路上连续发送两条请求,第一条请求立即发送出去了,而第二条要等到TCP Ack后,才能再次发送出去

TCP存在随路Ack确认和延迟Ack确认,TCP对端在没有报文发送时,会出现延迟回复Ack确认

启用代码

c 复制代码
  int enable = 1;
  // 注意使用第二个参数特别需要注意,需要设置为SOL_TCP
  setsockopt(fd, SOL_TCP, TCP_NODELAY, &enable, sizeof(enable));

拷贝粘贴代码易错提示

笔者曾出现设置第二个参数为SOL_SOCKET级别,但TCP_NODELAY特性不生效的情况

后记

后来回想了下,setsockopt第二个参数选项,体现为套接字的协议工作层次,与网络协议栈的层次划分有一定的对应关系。

所以,对于TCP_NODELAY套接字选项,应该设置在传输层上!

猜测TCP_NODELAY默认不启用原因

  • 吞吐量因素

Nagle算法的优化场景

  • 避免发送过多未经确认的数据

工具小贴士

  • putty小程序在配置中提供了TCP_NODELAY的选项控制,以利于界面交互的及时性
相关推荐
醇氧8 小时前
【学习】IP地址:数字世界的“门牌号”怎么读?
网络协议·学习·tcp/ip
Hello_Embed8 小时前
嵌入式上位机开发入门(三):TCP 编程 —— Server 端实现
笔记·单片机·网络协议·tcp/ip·嵌入式
NiKick9 小时前
在Linux系统上使用nmcli命令配置各种网络(有线、无线、vlan、vxlan、路由、网桥等)
linux·服务器·网络
带娃的IT创业者9 小时前
WeClaw_42_Agent工具注册全链路:从BaseTool到意图识别的标准化接入
大数据·网络·人工智能·agent·意图识别·basetool·工具注册
zt1985q10 小时前
本地部署开源元搜索引擎 SearXNG 并实现外部访问
服务器·网络协议·开源
摇滚侠11 小时前
系统工作台待办实时提醒,取代五分钟刷新一次,判断有没有新的待办,利用 WebSocket 实现
网络·websocket·网络协议
猩猩—点灯12 小时前
部署远程利器-RustDesk
运维·服务器·网络
半壶清水12 小时前
[软考网规考点笔记]-局域网之以太网标准
网络·笔记·网络协议·考试
ringking12312 小时前
Linux 主机通过 Wi-Fi 上网,并将网络通过网口共享给交换机下游设备
linux·服务器·网络
123过去12 小时前
rcracki_mt使用教程
linux·网络·测试工具