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的选项控制,以利于界面交互的及时性
相关推荐
半路_出家ren1 分钟前
路由综合实验RIP,OSPF,BGP
网络·网络协议·rip·ospf·ebgp·ibgp
最好的药物是乌梅28 分钟前
OSI参考模型&TCP/IP模型 二三事
tcp/ip·计算机网络·408·流量控制·osi模型·计算机考研·拥塞控制
张太行_2 小时前
网络SSL/TLS协议详解
网络·web安全·ssl
重启的码农2 小时前
NAT穿透技术:原理、实现与应用全景解析
网络协议
zhysunny2 小时前
Day22: Python涡轮增压计划:用C扩展榨干最后一丝性能!
c语言·网络·python
hhzz2 小时前
重温 K8s 基础概念知识系列八( K8S 高级网络)
网络·容器·kubernetes
VVVVWeiYee4 小时前
TCP/UDP详解(一)
运维·网络·tcp/ip·udp·信息与通信
Xの哲學5 小时前
Linux PCI 子系统:工作原理与实现机制深度分析
linux·网络·算法·架构·边缘计算
weixin_449173657 小时前
WiFi有网络但是电脑连不上网是怎么回事?该怎么解决?
网络
熬夜苦读学习7 小时前
Reactor 反应堆模式
运维·服务器·网络·网络协议·http·智能路由器·php