windows 中tcp 如何设置极低延时

匿名
2023-12-26T09:44:42+00:00

您好:

目前tcp基于本地回环地址(127.0.0.1)

需要在windows环境下实现tcp的数据收发,而且一轮收发耗时最好要在40us以内

目前使用系统的ping,然后wireshark抓包,发现每次耗时大概在30多us,但是也有100多us耗时出现

使用hrping工具,发现耗时大概在100us~600us,波动非常大

代码配置

1.设置socket属性NODELAY,SO_RCVBUF、SO_SNDBUF为65535

2.设置本地策略组中qos策略,dscp值设置为46且仅用于测试的客户端与服务端

通过代码测试

1.while循环中,如果一直send然后recv,每一轮收发大概在65us左右

2.但是如果我在每一轮收发后休眠1ms,那么实际耗时会翻好几倍,大概在130us~1000us左右

疑问:

1.能否有配置可以优化tcp传输性能

2.为什么加入延时以后会导致耗时变大,而且波动非常大

Windows 适用于 IT 专业人员的 Windows 客户端 网络 网络连接和文件共享

锁定的问题。 This question was migrated from the Microsoft Support Community. You can vote on whether it's helpful, but you can't add comments or replies or follow the question. To protect privacy, user profiles for migrated questions are anonymized.

0 个注释 无注释
{count} 票

2 个答案

排序依据: 非常有帮助
  1. 匿名
    2023-12-27T08:40:38+00:00

    你好,

    为了优化tcp传输性能,您可以尝试以下配置:

    1.禁用Nagle算法:Nagle算法是一种用于减少TCP/IP网络中需要发送的数据包数量,从而提高网络效率的方法。但是,在某些情况下,禁用Nagle算法可以提高TCP传输的效率。

    2.调整TCP窗口大小;调整TCP接收和发送缓冲区的大小,确保数据能够及时传输,提高TCP传输的效率。

    3.使用高性能网络适配器和网卡驱动程序,以确保网络传输速度最大化。

    4.调整TCP拥塞控制算法:TCP拥塞控制算法是一种用于控制网络拥塞的方法。通过调整TCP拥塞控制算法,可以提高TCP传输的效率。

    对于您的第二个问题,加入延时后导致耗时变大可能是因为在您的情况中,如果您在每一轮收发后休眠1ms,那么实际耗时会翻好几倍,大概在130us~1000us左右。这可能是由于休眠时间过长导致的。当您在每一轮收发后休眠1ms时,您的程序将会在1ms内等待,而不是继续发送和接收数据。这将导致您的程序在相同时间内发送和接收的数据量减少,从而增加了总延迟时间。此外,网络传输的延迟也可能会导致波动非常大。

    谢谢

    0 个注释 无注释
  2. 匿名
    2023-12-27T08:57:43+00:00

    你好

    我这里大概找到原因了。

    windows的接收发送是阻塞函数,好像windows中对阻塞函数的时效性不是很好,可能和进程调度有关系,只要有一边进行阻塞了就会导致这个延时非常不稳定。

    我换了一种方法,用了boost库中完成端口的asio,两边全部异步操作,延时降了不少,虽然在加了sleep休眠情况下还没满足我的需求,但是效果已经好很多了

    0 个注释 无注释