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 客户端 网络 网络连接和文件共享

锁定的问题。 此问题已从 Microsoft 支持社区迁移。 你可投票决定它是否有用,但不能添加评论或回复,也不能关注问题。 为了保护隐私,对于已迁移的问题,用户个人资料是匿名的。

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 个注释 无注释