如何处理 ifconfig 输出以确定我的链接速度?

如何处理 ifconfig 输出以确定我的链接速度?

这是我无聊写的脚本,用于测试下载速度:

#!/bin/bash

get_ispeed() {
    echo $(ifconfig eth0 | grep bytes | grep RX | cut -d ':' -f 2 | cut -d ' ' -f 1);
}

for((;;));
do
    s1=`get_ispeed`;

    sleep 1s;

    s2=`get_ispeed`;

    d=$(($s2-$s1));

    echo $(($d / 1000))" kB/s";
done

不确定它是否“完成工作”,尽管我不是真正的 bashist :p
由于 ifconfig 产生 RX 字节,我将它除以 1000 以获得 kB/s

答案1

链接速度

我认为您并不是真正在寻找链接速度,这是您连接的专用连接速度。如果您已经ethtool安装(在存储库中),您可以使用此命令来获取链接速度:

$ sudo ethtool eth0 | grep -i speed
    Speed: 100Mb/s

带宽(内核)

您想查看带宽速度。在给定的时间内,您使用了多少总速度。有几种方法可以获取接口读取的字节数eth0

$ cat /sys/class/net/eth0/statistics/rx_bytes 
3431530366

还有/proc/net/dev,我相信它是提供数据的内核结构ifconfig

$ cat /proc/net/dev
Inter-|   Receive                                                |  Transmit
 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
    lo:629956414  572909    0    0    0     0          0         0 629956414  572909    0    0    0     0       0          0
  eth0:3431888253 329701689    0    0    0     0          0    359127 831203319 353144288    0    0    0     0       0          0
  sit0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0

使用工具测量

更好的是使用实际的工具来测量带宽使用情况。这里有很多选择:

  1. 使用 wget/curl

    这些非常简单。选择一个大文件进行下载,并在完成后查看任一工具报告的统计信息。

    $ wget --output-document=/dev/null http://speedtest.wdc01.softlayer.com/downloads/test500.zip
    
    -or-
    
    $ curl -O /dev/null http://speedtest.wdc01.softlayer.com/downloads/test500.zip
    
  2. 使用cli监控工具

    此类别中有许多工具。这里有一些可以帮助您入门的方法。

  3. 使用速度测试-cli

    这利用了尊贵的速度测试网从命令行访问网站。

    $ ./speedtest-cli
    Retrieving speedtest.net configuration...
    Retrieving speedtest.net server list...
    Testing from Comcast Cable (x.x.x.x)...
    Selecting best server based on ping...
    Hosted by FiberCloud, Inc (Seattle, WA) [12.03 km]: 44.028 ms
    Testing download speed........................................
    Download: 32.29 Mbit/s
    Testing upload speed..................................................
    Upload: 5.18 Mbit/s
    
  4. 使用iperf

    为此,您将设置自己的服务器和客户端,然后测量两台计算机之间的带宽性能。从某种意义上说,与依赖特定互联网目标的性能相比,您可以更准确地了解计算机/网络性能,这是更好的选择。

    在服务器上:

    $ iperf -s
    

    在客户端:

    $ iperf -c myserver.mydom
     ------------------------------------------------------------
    Client connecting to 192.168.1.1, TCP port 5001
    TCP window size: 16.0 KByte (default)
    ------------------------------------------------------------
     [  3] local 192.168.1.3 port 52143 connected with 192.168.1.1 port 5001
     [ ID] Interval       Transfer     Bandwidth
     [  3]  0.0-10.0 sec    113 MBytes  94.7 Mbits/sec
    

参考

答案2

我真的同意你的问题和答案,因此,我真的可以用一行来完成此操作:

m1=`cat /sys/class/net/eth0/statistics/tx_bytes` ; sleep 10s ; m2=`cat /sys/class/net/eth0/statistics/rx_bytes` ; echo $((($m2-$m1)/10240))

而且打印得很好。

以更复杂的方式:

#!/bin/bash                                                                          

intervalo=3                                                                          
info="/sys/class/net/"                                                               
cd $info                                                                             
for interface in eth*                                                                
do                                                                                   
  rx1=`cat $info$interface/statistics/rx_bytes`                                      
  tx1=`cat $info$interface/statistics/tx_bytes`                                      
 `sleep $((intervalo))s`                                                            
  rx2=`cat $info$interface/statistics/rx_bytes`                                      
  tx2=`cat $info$interface/statistics/tx_bytes`
  echo $interface
  echo ----
  echo RX: $((($rx2-$rx1)/($intervalo*1024))) Kbps
  echo TX: $((($tx2-$tx1)/($intervalo*1024))) Kbps
done

这工作得很好,但可以使用数组来保存每个接口结果来改进,因此它只需要为所有接口进行睡眠,而不需要对其中任何一个接口进行睡眠。

答案3

链接的广告速度和实际速度可能不同

sudo ethtool enp1s0
Settings for enp1s0:
Supported ports: [ TP ]
Supported link modes:   10baseT/Half 10baseT/Full 
                        100baseT/Half 100baseT/Full 
                        1000baseT/Full 
Advertised link modes:  10baseT/Half 10baseT/Full 
                        100baseT/Half 100baseT/Full 
                        1000baseT/Full 

这会报告链路两端设备之间协商的实际链路速度。我的笔记本电脑网卡是我连接的本地交换机。

而这些工具报告的实际速度是

sudo mii-tool enp1s0
enp1s0: negotiated 100baseTx-FD flow-control, link ok

sudo ethtool enp1s0 | grep -i speed
Speed: 100Mb/s

只有当我以相同的速度下载在同一 LAN 中连接的内容时,我才会达到链接速度。

如果我从同一 LAN 上的服务器下载文件。我将获得完整的 100Mb/s。

因此,我连接的位置将会影响我获得的速度。

相关内容