RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1590284
Accepted
videxerion
videxerion
Asked:2024-08-11 23:38:30 +0000 UTC2024-08-11 23:38:30 +0000 UTC 2024-08-11 23:38:30 +0000 UTC

当加载许多小数据包时评估网络接口上的负载

  • 772

问题描述

我正在编程一个批量端口扫描器。当尝试由于线程数量而提高速度时,我预料到会遇到这样的事实:在某个时刻,延迟 (ping) 达到了 300-800 毫秒的极高值。当然,很可能这可能与我的电脑没有直接关系,而是会让我的路由器超载,但我想确定一下。这就是问题所在。我只是不知道如何评价这种超载。我之前问过类似的问题,但是通过比较每秒流量和接口吞吐量来估算的方法并没有显示拥塞(网络负载标记保持在5%左右)。我认为重点是 TCP 连接的批量创建/关闭不会占用大量流量,因为我没有发送任何内容,只是检查连接是否成功。有一个想法是使用每秒数据包进行评估,但我面临的事实是,我根本不知道如何找出接口在开始过载之前每秒可以通过多少个数据包,从而增加延迟。

我的应用程序如何工作的描述

为了简化答案的工作,有必要稍微介绍一下应用程序本身。它是用 Golang 编写的,正如已经提到的,该应用程序的目的是大规模扫描端口并将结果输入数据库(尚未完成)。它创建了许多 goroutine(根据经验,500 个扫描线程只会稍微增加延迟 20-30 毫秒,当 600 个线程将延迟增加到 300 毫秒)尝试创建 TCP 连接,如果成功,则认为端口打开。下面您可以看到代码,其中有两个函数ScannerThread,scanHost第一个是聚合器(获取 IP 地址,运行扫描函数,获取结果),第二个按顺序迭代端口以检查它们。

// ScannerThread является сканирующей горутиной, сюда попадают адреса после пингования
func ScannerThread(IPChannel chan string) {
    defer WorkWG.Done()

    for {
        ip, ok := <-IPChannel
        if ok {
            ports := scanHost(ip)
            if len(ports) != 0 {
                for _, port := range ports {
                    println(ip, port)
                }
            }
        } else {
            break
        }
    }
}

// Функция сканирует порты конкретного адреса
func scanHost(ip string) []int {
    openPorts := make([]int, 0)

    for port := 1; port <= 1024; port++ {
        d := net.Dialer{Timeout: time.Millisecond * 100}
        conn, err := d.Dial("tcp", ip+":"+strconv.Itoa(port))

        if err == nil {
            conn.Close()
            openPorts = append(openPorts, port)
        }
    }

    return openPorts
}

我想收到什么

我需要一种方法来估计此类流量的网络接口拥塞情况。即使最终发现超载的不是我设备的网络接口,而是沿途的节点,我仍然想确保这不是我的设备的问题。然而,我仍然很乐意接受其他想法和解释,解释为什么这项任务的延迟会增加这么多。

请,如果您想提供某种可以测量某些参数的实用程序,请尝试还包括对该实用程序测量哪些参数的解释,因为我需要在我的程序中实现这一点,并且使用控制台输出解析是不礼貌的。

附加信息

  1. 我使用的是主板内置的 Realtek RTL8118AS 网卡,标称带宽为 1 Gbps。
  2. 在整个本地网络中,我使用 UTP cat 5e。
  3. 我使用 Linux,或者更确切地说是 Arch Linux。
  4. 我用不同的工具测试了处理器负载,负载平均增加了10-15%,即处理器没有过载。
linux
  • 1 1 个回答
  • 84 Views

1 个回答

  • Voted
  1. Best Answer
    eri
    2024-08-12T05:30:09Z2024-08-12T05:30:09Z

    查看 /proc/interrupts- 硬件和/proc/softirqs软件中断(IRQ 计数器)。它们不会显示在处理器负载中,这大大降低了整个系统的速度。

    不同型号的网卡一次能承受的中断次数不同。很难以百分比来估计,但你可以估计它们的数量是多还是少。

    文章中写了它的工作原理以及如何调整它https://habr.com/ru/companies/vk/articles/314168/#5

    • 0

相关问题

  • 如果 fuser -k number/tcp 没有帮助,如何在 Debian 中释放端口?

  • Ubuntu。startx 不起作用。黑屏

  • --syn 在 iptables 中有什么作用?

  • 为什么需要iso格式?

  • C程序中没有密码的sudo

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5