最近在项目中引入了HPSocket网络框架,但是在测试过程中发现网络始终延迟200ms,最终查找到问题原因是未启用Socket的TCP_NODELAY。

在以下地址也有相关的讨论:https://serverfault.com/questions/834326/questions-about-nagle-vs-delayed-ack


TCP/IP协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,对方接收到数据,也需要发送ACK表示确认。为了尽可能的利用网络带宽,TCP总是希望尽可能的发送足够大的数据。(一个连接会设置MSS参数,因此,TCP/IP希望每次都能够以MSS尺寸的数据块来发送数据)。

Nagle算法就是为了尽可能发送大块数据,避免网络中充斥着许多小数据块。

Nagle算法的基本定义是任意时刻,最多只能有一个未被确认的小段。 所谓“小段”,指的是小于MSS尺寸的数据块,所谓“未被确认”,是指一个数据块发送出去后,没有收到对方发送的ACK确认该数据已收到。

举个例子,比如之前的blog中的实验,一开始client端调用socket的write操作将一个int型数据(称为A块)写入到网络中,由于此时连接是空闲的(也就是说还没有未被确认的小段),因此这个int型数据会被马上发送到server端,接着,client端又调用write操作写入‘/r/n’(简称B块),这个时候,A块的ACK没有返回,所以可以认为已经存在了一个未被确认的小段,所以B块没有立即被发送,一直等待A块的ACK收到(大概40ms之后),B块才被发送。整个过程如图所示:

这里还隐藏了一个问题,就是A块数据的ACK为什么40ms之后才收到?这是因为TCP/IP中不仅仅有nagle算法,还有一个ACK延迟机制 。当Server端收到数据之后,它并不会马上向client端发送ACK,而是会将ACK的发送延迟一段时间(假设为t),它希望在t时间内server端会向client端发送应答数据,这样ACK就能够和应答数据一起发送,就像是应答数据捎带着ACK过去。在我之前的时间中,t大概就是40ms。这就解释了为什么'/r/n'(B块)总是在A块之后40ms才发出。

如果你觉着nagle算法太捣乱了,那么可以通过设置TCP_NODELAY将其禁用 。当然,更合理的方案还是应该使用一次大数据的写操作,而不是多次小数据的写操作。

解决网络延迟200ms问题相关推荐

  1. oracle DNS解析_DNS优选解决网络延迟

    DNS优选-解决网络延迟 DNS 是域名系统 (Domain Name System) 的缩写,它是由解析器和域名服务器组成的,又称"域名解析服务器".大家都知道,当我们在上网的时 ...

  2. wifi丢包率高怎么解决_网络延迟高怎么办(家里WIFI延迟高,教你几招搞定网络延迟)...

    网络延迟,是现在困扰所有用户的一大难题,为了解决,可能我们装了光纤,换了路由,可是当我们玩游戏.看视频的时候还是卡的不行,为什么我们连WIFI的时候会有这么高的延迟呢?应该怎样解决这个问题,今天小编教 ...

  3. 网通服务器网站电信打开卡顿,网络延迟 - 卡饭网

    windows7系统中网络延迟问题的多种解决方法 windows7系统中网络延迟问题的多种解决方法 网络延迟的现象不知道在大家的电脑里频不频繁,如果很频繁出现这个问题的话,那就要动手来解决了,那么肯定 ...

  4. 手机游戏降低游戏延迟的软件_《和平精英》手游怎么降低网络延迟 降低网络延迟的方法攻略...

    导 读 <和平精英>手游中有很多的小伙伴们都比较好奇怎么才能快速解决网络延迟的问题了,用什么方法才可以解决的了网络延迟的问题了,有几种方法才可以解决网络延迟的问题了,相信这些都是各位小伙伴 ...

  5. 连接游戏服务器网络延迟高,网络延迟_连wifi玩游戏网络延迟高-太平洋IT百科

    网络延迟是游戏玩家最不能忍的,为了解决网络延迟的问题,玩家们装了光纤,换了路由,然而"为你我用了半年的积蓄,玩个农药还跳ping."开局两分钟,延迟400ms,网络延迟在王者荣耀中 ...

  6. 手游如何克服网络延迟问题?《天天酷跑》同步机制解析

    本文节选自<2018腾讯移动游戏技术评审标准与实践案例>手册,由腾讯互娱高级工程师周长寿分享<天天酷跑>手游如何做同步机制的设计,解决网络延迟.渲染延迟等问题,以提高玩家实时P ...

  7. OpManager 帮助排查网络延迟问题

    什么是网络延迟 网络中的延迟是指数据通过网络传输到其预期目的地所需的时间.它通常表示为往返延迟,即数据从一个位置传输到另一个位置所需的时间. 什么原因导致网络延迟 有四个主要原因会影响网络延迟.其中包 ...

  8. 计算机网络处理延时是什么原因,电脑网络延迟的解决方法是什么

    今天小编就要跟大家讲解下电脑网络延迟的解决方法~那么对此感兴趣的网友可以多来了解了解下.下面就是具体内容!!! 电脑网络延迟怎么办,小编这就给你提供个解决办法 首先你要考虑到你的网络运营商给你提供的是 ...

  9. 因网络延迟造成数据库插入相同记录,如何解决.

    场景:导入会员数据,出现了重复数据在库里面.导入过程中有身份证号的唯一检查,怎么还会重复呢.百思不得其解... 万恶的网络延迟.... 仔细查了遍代码,发现身份证号检查速度特别慢,造成了网络阻塞... ...

最新文章

  1. 算法设计与分析之循环与递归
  2. 大专生质问马云:你说招聘从不看文凭,为什么我投阿里石沉大海
  3. python程序员一天写多少行代码-程序员写Python时的5个坏习惯,你有几条?
  4. 中国电信在青岛率先商用NB-IoT 投入30亿推进信息化建设
  5. 防止程序启动两次的方法CreateMutex()
  6. 【NLP】人大团队研究:面向文本生成,预训练模型进展梳理
  7. 通过组策略禁止用户安装任何软件
  8. 【题解】弃疗Nim (2019,5.23)
  9. 《影响力》6个使人顺从的武器之一互惠原理深入剖析
  10. 【M25】将构造方法和非成员方法虚化
  11. 【PostgreSQL-9.6.3】事件触发器
  12. 破解并配置WebStorm
  13. php调用声卡,利用vb测声卡_visualbasic教程
  14. oracle odac 配置,.Net項目中通過ODAC方式鏈接Oracle數據庫相關配置
  15. 【mmdetection3d】——3D 目标检测 KITTI 数据集
  16. 2008年七月七日,按照要求我提前进入中心,今天就是我博士的第一天
  17. 仿b站的动漫视频网站
  18. C语言求一元二次方程根
  19. 2021水利水电安全员模拟考试多选题库及答案
  20. SCJP认证复习——经典题库

热门文章

  1. 大连东软信息学院c语言重修,嵌入式系统工程系举办第二届C语言编程大赛
  2. 做PHP爬虫之QUERYLIST库(PHP爬虫插件)
  3. c语言程序填空题库,C语言程序设计题考试题库选择填空题完整答案精美篇
  4. 【学相伴】狂神说 RabbitMQ笔记(简单使用RabbitMQ)
  5. Xshell配色方案(舒服)
  6. matlab雨流计数,雨流计数法matlab程度源代码
  7. Proteus安装后点击“ISIS 7 professional”报错:cannot find a valid licence key for ISIS Professional on this co
  8. 扬州市计算机职业学校名称,扬州市职业学校2019对口高考班适应性考试计算机试卷.doc...
  9. vue生成二维码带图标
  10. rocks集群_.NET Rocks! -PDC版