禁用 Nagle 算法
有没有发现一个很奇怪的组合,即 Nagle 算法和延时 ACK 的组合。这个组合为什么奇怪呢?
我举一个例子你来体会一下。比如,客户端分两次将一个请求发送出去,由于请求的第一部分的报文未被确认,Nagle 算法开始起作用;
同时延时 ACK 在服务器端起作用,假设延时时间为 200ms,服务器等待 200ms 后,对请求的第一部分进行确认;
接下来客户端收到了确认后,Nagle 算法解除请求第二部分的阻止,让第二部分得以发送出去,服务器端在收到之后,进行处理应答,同时将第二部分的确认捎带发送出去。
你从这张图中可以看到,Nagle 算法和延时确认组合在一起,增大了处理时延,实际上,两个优化彼此在阻止对方。
从上面的例子可以看到,在有些情况下 Nagle 算法并不适用, 比如对时延敏感的应用。幸运的是,我们可以通过对套接字的修改来关闭 Nagle 算法。
int on = 1;
setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (void *)&on, sizeof(on));
值得注意的是,除非我们对此有十足的把握,否则不要轻易改变默认的 TCP Nagle 算法。因为在现代操作系统中,针对 Nagle 算法和延时 ACK 的优化已经非常成熟了,有可能在禁用 Nagle 算法之后,性能问题反而更加严重。
禁用 Nagle 算法相关推荐
- 使用setsockopt TCP_NODELAY禁用 Nagle算法
Nagle算法用于对缓冲区内的一定数量的消息进行自动连接.该处理过程(称为Nagling),通过减少必须发送的封包的数量,提高了网络应用 程序系统的效率.(Nagle虽然解决了小封包问题,但也导致了较 ...
- java settcpnodelay_Python Twisted TCP socket如何设置TCP的NODELAY(禁用Nagle算法)?
我有一个正在继续开发的实时多人游戏(它目前在app store:https://itunes.apple.com/us/app/blewp!-eat-or-be-eaten-mmo/id9961226 ...
- TCP/IP学习笔记(六)Nagle算法
在TCP传输数据流中,存在两种类型的TCP报文段,一种包含成块数据(通常是满长度的,携带一个报文段最多容纳的字节数),另一种则包含交互数据(通常只有携带几个字节数据). 对于成块数据的报文段,TCP采 ...
- 网络协议:TCP保活机制和Nagle算法
一 Nagle算法背景 有时候,我们可能会遇到一些很小的分组,比如,20字节的IP首部,20字节的TCP首部和1字节的数据,如果很多这样的小分组数据,在局域网一般不会出现拥塞,但是在广域网就可有可能. ...
- 如何关闭和启用Nagle算法
如果各位读者在搜索如何关闭的话,那么我有理由相信各位对想要解决的问题已经算是比较清楚了,废话不多数. 什么是nagle算法,它是干嘛用的,请自行google or 百度 Step1 Open regr ...
- TCP-IP详解:Nagle算法
参考书籍:TCP/IP详解,卷1:协议 Small Packet Problem 在使用一些协议通讯的时候,比如Telnet,会有一个字节字节的发送的情景,每次发送一个字节的有用数据,就会产生41个字 ...
- socket属性心跳、Nagle 算法
Nagle 算法 为防止因数据包过多而发生网络过载, Nagle算法在1984年诞生了.它应用于TCP层,非常简单.其使用与否会导致如图所示差异 Nagle算法:"只有收到前一数据的ACK消 ...
- 【计算机网络】2、TCP:四次挥手与TIME_WAIT、shutdown() 优雅关闭 server、探活、拥塞窗口与 Nagle 算法、端口占用、tcp 的流式协议、可靠性
文章目录 六.四次挥手 与 TIME_WAIT 6.1 TIME_WAIT 的作用 6.2 TIME_WAIT 的危害和方案 七.server 用 shutdown() 优雅关闭 7.1 close( ...
- TCP/IP卷一:80---TCP数据流与窗口管理之(延时确认(延迟ACK)、Nagle算法)
一.延迟确认(延迟ACK) 在许多情况下,TCP并不对每个到来的数据包都返回ACK,利用TCP的累积ACK字段(参见TCP报文格式https://blog.csdn.net/qq_41453285/a ...
最新文章
- 解决360浏览器兼容模式的页面显示问题
- 图形界面不卡的linux,图形化界面linux(linaro)的安装小结
- webpack4.x Loaders
- Google服务你都用了哪些?
- JavaScript 循环
- mp4视频转gif图片
- java递归mysql生成树_java递归生成树结构的数据
- 微型计算机系统的几个指标课件,[计算机基础课件67.ppt
- assigning the result of this type assertion to a variable could eliminate the followin assertion解决
- GetDC()没有释放造成的后果
- 3dmark压力测试 linux,压榨你的电脑潜能:3DMark压力测试正式发布
- July大神交大读书会子atoi
- 自带流量的免费微信编辑器推荐
- Latex使用本地字体
- amd服务器主板文件,支持AMD Opteron的主板_服务器解决方案-中关村在线
- vue和socket.io开发简单web聊天室
- FS61C低电压检测IC芯片 series Low Power Voltage Detector
- js中的repeat()
- openid和unionid的区别
- 统一身份认证实现,推广的可能性及优缺点?