TCP的确认延时机制及Windows系统的确认延时修改
TCP本身属面向链接的通讯协议。通讯双方的每一个收发动作,需要以通讯链路正常为前提。因此TCP协议内部提供了默认的ACK验证机制。
而ACK验证方式存又与操作系统有关,在TCP中,对数据的确认往往是延迟的,在时延定时器没有溢出的情况下,一般情况是两个TCP数据对应一个确认,如果时延定时器溢出了,那么自然也会发送确认报文。
但在某些系统中,会出现必须每次回复ACK包才继续发送TCP数据,这时就会出现以下问题:假定Server A、和Client B之间建立了一个TCP连接,某一时刻A第一次向B发送数据,发送完成后等待B回复的ACK包,而B认为收到第二个TCP数据包才回复ACK标记,则约200ms之后,B中的时延定时器溢出,B此时才向A回发一个长度为1的ACK确认包,因此B第二次收到数据时,会莫名其妙的产生一个约200ms的延时–这个延时不是别的,正是ACK确认包默认的发送时延。
当我们测试自行研发的服务端通讯框架时,一旦其发生广播,则此时处于接收方的客户端很有可能会因为通讯双方的收发不均而引发上述现象–这并非是由于你的服务端通讯框架性能不达标,而是由于TCP的内部机制导致的。
那么,我们应该如何避免这种情况呢?这里介绍一种最简单也最容易实现的方法–修改注册表,提高客户端ACK包默认的发送频率,也就是缩短ACK包的发送时延:
首先,点击你电脑屏幕左下角的”开始”菜单,打开”运行”,键入”regedit”打开你的注册表;
选择HKEY_LOCAL_MACHINE 项目开始一层层的往下点,一直到
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/services/Tcpip/Parameters/Interfaces
这里是关于你网卡的数据,有很多项,且它们都有类似{5F26EBBD-9CA6-4219-9DBD-54852364EA17}这样的名字,但是正确的那个会在右边窗口显示包括你的IP地址和你的服务器IP地址等等网络设定)。 你找到IPAddress项符合你的本机IP地址的那个,那么它就是你连接网络的那个网卡的设定项,我们的任务目标就是改动它来提高客户端ACK包的发送频率。
其次,右键点击窗口右边的空白处,”新建”-“DWORD值”;
给它改名成”TcpAckFrequency”,然后右键点击它 ,选择”修改”,然后再那个”数值数据”的空白处填”1”(不用管是16进制,还是10进制)
最后,关闭注册表,重启电脑,修改完成。
有关TcpAckFrequency的补充说明:
TcpAckFrequency 值这个值确定了windows用TCP/IP 发送应答消息的频率,也就是决定了在发送”命令正确应答”之前将等候几个数据包;
默认值为 2,这时TCP/IP 将在接收到 2 个分段后发送应答,或是在接收了 1 个分段但在 200 毫秒内没有接收到其他分段的情况下发送应答
如果值为 3,则 TCP/IP 将在接收到 3 个分段后发送应答,或是在接收了 1 个或 2 个分段但在 200 毫秒内没有接收到其他分段的情况下发送应答,以此类推。
如果需要通过消除 TCP/IP 应答延迟来缩短响应时间,则将该值设为 1.在这种情况下,Windows将每收到一个TCP数据包就回送一个”命令正确应答”.
该值的有效范围是 0 到 255,其中 0 表示使用缺省值(2)。
采用Delayed ACK机制后,通常是服务端发送2个数据包后,客户端再进行确认,这样将极大的减少不必要的ACK数据包,同时也能提高访问速度,减少带宽浪费。
修改方法:
在注册表中添加键值进行修改;
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/TcpipParameters/InterfacesAdapter/ GUID
值名称:TcpDelAckTicks(不同的操作系统该值的名称不尽相同)
数据类型:REG_DWORD
值数据:将该值设置为 0 到 6 之间的值
默认情况下,延迟 ACK 计时器值为 200 毫秒。如果将 TcpDelAckTicks 值设置为 0,则禁用延迟确认。
TCP的确认延时机制及Windows系统的确认延时修改相关推荐
- 如何消除USB共享网络导致的Windows系统中自动增加的网络设备序列号?
本人经常用usb共享网络给主机上网,但是每次重新插上线后,windows系统就会弹出确认连接网络X的提示信息,问题就出在这个序列号X上,每次都会自动加一,从2,3,4 ... 一直增长下去,作为一个强 ...
- Windows系统安全风险-本地NTLM重放提权
经我司安全部门研究分析,近期利用NTLM重放机制入侵Windows 系统事件增多,入侵者主要通过Potato程序攻击拥有SYSTEM权限的端口伪造网络身份认证过程,利用NTLM重放机制骗取SYSTEM ...
- TCP重传与超时机制:解锁网络性能之秘
目录标题 一.TCP重传(TCP Retransmission) 1.1 重传原理与机制(Retransmission Principles and Mechanisms) 二.TCP超时(TCP T ...
- 查看和修改Windows系统的端口范围
一.实现效果 1.1.查看Windows系统当前[TCP.UDP]端口范围 1.2.设置Windows系统当前[TCP.UDP]端口范围 1.3.重新设置Windows系统[TCP.UDP]端口起始和 ...
- TCP/IP卷一:80---TCP数据流与窗口管理之(延时确认(延迟ACK)、Nagle算法)
一.延迟确认(延迟ACK) 在许多情况下,TCP并不对每个到来的数据包都返回ACK,利用TCP的累积ACK字段(参见TCP报文格式https://blog.csdn.net/qq_41453285/a ...
- Windows系统安全机制
1.IIS服务安全配置 禁用或删除所有的示例应用程序 在默认情况下,并不安装它们,且从不在生产服务器上安装.请注意一些示例安装,它们只可从http://localhost 或 127.0.0.1 访问 ...
- Windows系统下的TCP参数优化(注册表\TCPIP\Parameters)
Windows系统下的TCP参数优化 TCP连接的状态与关闭方式及其对Server与Client的影响 http://www.2cto.com/net/201304/206071.html 通常会采用 ...
- 【TCP/IP】Windows系统下的TCP参数优化
通常会采用修改注册表的方式改进Windows的系统参数.下面将为大家介绍Windows系统下的TCP参数优化方式,适用于Windows 2003.Windows XP.Windows 7以及Serve ...
- Windows系统下的TCP参数优化
Windows系统下的TCP参数优化 1. TCP连接的状态 首先介绍一下TCP连接建立与关闭过程中的状态.TCP连接过程是状态的转换,促使状态发生转换的因素包括用户调用.特定数据包以及超时等,具体状 ...
最新文章
- python中平均值函数_python自定义函数ma(x,y)求简单平均值输出结果到列表
- Epic苹果诉讼案,却把索尼微软Steam都拉下水,网友忙吃瓜
- mysql备份数据库命令
- ubuntu 安装 Sublime Text 2
- linux中的ip地址范围,linux – ip地址范围参数
- split 中文 java_Java String[] split() 方法
- 注册围框html,一种可调模具围框的制作方法
- python ctypes 回调函数_如何用Python中的ctypes创建回调函数?
- [码海拾贝 之TC] 使用View 定义动态的Class
- linux的用户和组管理(第五讲)
- 黑群晖nas安装保姆级教程
- Mac翻译系列软件推荐二:人人译视界 for Mac
- 小米8鸿蒙系统,小米手机刷鸿蒙系统
- Python-OpenCV4中的阈值二值化函数threshold(),要特别注意其返回值有两个
- 400+条实用C/C++框架、库、工具整理 ,你能想到的都在这里了
- linux下 oracle怎么导入dmp文件
- 计算机毕业设计JAVA企业售后服务管理系统mybatis+源码+调试部署+系统+数据库+lw
- java转go之初体验(一)
- 【python脚本】linux中编写运行python脚本
- 基于MQ-135传感器和Arduino开发板的烟雾探测器
热门文章
- CIDR地址块及其子网划分(内含原始IP地址分类及其子网划分的介绍)
- php qqwry.dat_php读取qqwry.dat ip地址数据库文件程序
- 13年12月CCF计算机软件能力认证
- 手机计算机的游戏怎么玩,电脑玩手机游戏,教您电脑怎么玩手机游戏
- CSI笔记【7】:Crowd Vetting: Rejecting Adversaries via Collaboration with Application to......论文阅读
- 【常考】408快排单函数简单模板(附注释+测试代码)
- T28,烤面包片+酸牛奶+芝士+苹果片 = ???
- php 调用 chatterbot,ChatterBot聊天机器人初体验
- 音频出现Xrun(underrun或overrun)的原因与解决办法
- Java 核心技术总结出 PDF 版本了!!!