V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
huangya
V2EX  ›  宽带症候群

有什么工具可以模拟大量 tcp 连接吗?

  •  
  •   huangya · 2022-11-22 11:01:52 +08:00 · 4705 次点击
    这是一个创建于 736 天前的主题,其中的信息可能已经有所发展或是发生改变。
    就是有个 client 和 server ,client 主动向 server 发起大量连接。要求是能跑完 3 次握手,握手之后的数据流可跑或不跑。但是不能结束连接。相当于压力测试。linux 和 windows 都行,有 linux 下面的免费工具更好。

    补充一下:client 和 server 之间有个路由器,我的目的是测试路由器能支持多少个连接。所以 client 和 server 都需要。
    21 条回复    2022-11-23 17:33:58 +08:00
    lzj724
        1
    lzj724  
       2022-11-22 11:02:48 +08:00
    jmeter
    vhysug01
        2
    vhysug01  
       2022-11-22 11:27:24 +08:00 via iPhone
    用 go 写过一个,直接起 1w 个 goroutine ,简单无脑
    ttvast
        3
    ttvast  
       2022-11-22 11:40:36 +08:00   ❤️ 1
    import socket
    v=[]
    for i in range(10000):
    s=socket.socket()
    s.connect(("192.168.1.1",80))
    v.append(s)

    input("Press any key to exit")

    server 端也不难,谁有空补上吧。
    huangya
        4
    huangya  
    OP
       2022-11-22 11:51:48 +08:00
    @vhysug01 没深入了解 go ,不知道直接起 1w 个 goroutine ,对测试机要求高不高,怕把电脑搞死
    huangya
        5
    huangya  
    OP
       2022-11-22 11:55:55 +08:00
    @lzj724 我主贴补充了测试目的。下载了 jmeter ,这玩意感觉有点杀鸡用牛刀的感觉。我在看这玩意怎么用。
    ALXG
        6
    ALXG  
       2022-11-22 12:07:17 +08:00
    一个进程能搞多少连接? 一个操作系统能容纳几个这种进程? 一个物理机能带几个操作系统? 要几个物理机才能满足你的需要?
    changnet
        7
    changnet  
       2022-11-22 12:58:43 +08:00
    像楼上的,用自己熟悉的语言随便 for 循环一下即可。比如 c 的话直接异步,都不用处理异常。1W 个连接不跑逻辑随便一颗 x86 cpu 都行,怎么会把电脑搞死,内存也用不了几 M

    另外路由器没有多少个连接的概念的吧。路由器只管收数据包,然后根据包地址转发,只要收到的包数量能处理得过来路由器就没问题。不是每个 tcp 连接在路由器那里都有一个连接
    cdlnls
        8
    cdlnls  
       2022-11-22 13:08:37 +08:00
    我之前写了一个,有兴趣可以看看 https://github.com/ttgml/c1k
    当时制作的时候目的也是为了模拟大量 TCP 连接

    利用 libpacp 抓包发包实现的,配置需求很低,1c1g 的虚拟机就能模拟出上百万的 TCP 连接,只要心跳时间够长,理论上应该是可以模拟出千万级别的连接。

    本身不是做开发的,写这个项目也是做着玩的,所以代码写得很 low
    jousca
        9
    jousca  
       2022-11-22 13:13:32 +08:00
    楼上这个有意思。
    jousca
        10
    jousca  
       2022-11-22 13:14:35 +08:00
    想测试路由器 NAT 能力? 只有 NAT 才存在这个并发连接数问题。否则对于路由器来说只有包转发效率问题。
    cdlnls
        11
    cdlnls  
       2022-11-22 13:14:35 +08:00
    这里推荐百度开源的一个项目: https://github.com/baidu/dperf
    原理也应该差不太多,基于 DPDK 实现的,没用用过,需要硬件支持才行
    huangya
        12
    huangya  
    OP
       2022-11-22 13:39:33 +08:00
    @changnet
    @jousca
    准确来说是家用路由器的 nat 转发能力。
    jiangzm
        13
    jiangzm  
       2022-11-22 14:55:14 +08:00
    路由设备应该有支持的并发连接数吧, 而且会给出理论上能同时负载的客户端数(最大并发连接数 /终端日常连接数),不过家庭带宽本身也限制了账号的最大连接数。
    jiangzm
        14
    jiangzm  
       2022-11-22 14:57:22 +08:00
    jiangzm
        15
    jiangzm  
       2022-11-22 15:01:34 +08:00
    忽略上面链接,是测试 DNS 的非并发连接数
    dingwen07
        16
    dingwen07  
       2022-11-22 15:07:25 +08:00 via iPhone
    @changnet #7 路由器 NAT 是要保存映射的
    WangRicky
        17
    WangRicky  
       2022-11-22 15:36:12 +08:00
    gatling
    9544
        18
    9544  
       2022-11-22 15:44:34 +08:00
    在内网服务器开几个网心云服务跑几天,实测晚上一台设备的连接数都能上 1w 。
    jousca
        19
    jousca  
       2022-11-22 16:36:42 +08:00
    13 楼说得对,其实家宽本身限制连接数的,很多运营商都这么干的。超过之后不允许新增连接数。你路由器再强也不行。

    除非你用专线(政企宽带)
    artnowben
        20
    artnowben  
       2022-11-23 17:30:36 +08:00
    @cdlnls 我是 dperf 作者,非常谢谢推荐
    artnowben
        21
    artnowben  
       2022-11-23 17:33:58 +08:00
    dperf 可以满足需求,他可以测试网卡、交换机、防火墙、四层负载,支持 DPDK 的网卡就可以运行,可以支持几十亿并发。
    参考:
    1. dperf: 100Gbps 开源压力测试工具 https://zhuanlan.zhihu.com/p/459529429
    2. 项目主页: https://github.com/baidu/dperf
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3433 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 436ms · UTC 11:12 · PVG 19:12 · LAX 03:12 · JFK 06:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.