Cómo calcular el tráfico de una red de alta velocidad en Linux
Existen muchas herramientas de monitoreo de tráfico en Linux que pueden monitorear y clasificar el tráfico de la red y proporcionar datos en tiempo real en una hermosa interfaz gráfica de usuario. informe de análisis. La mayoría de estas herramientas (como ntopng, iftop) se basan en la biblioteca libpcap, que es una biblioteca de funciones que intercepta paquetes que fluyen a través de la tarjeta de red y puede usarse en el espacio del usuario para monitorear y analizar el tráfico de la red. Si bien estas herramientas son completamente funcionales, las herramientas de monitoreo de tráfico basadas en la biblioteca libpcap no pueden manejar interfaces de red de alta velocidad (Gb+) debido a la alta sobrecarga de la interceptación de paquetes en el espacio del usuario.
En este artículo, presentamos un script de shell simple que puede monitorear el tráfico de la red sin depender de la biblioteca libpcap, que es más lenta. Estos scripts admiten interfaces de red de alta velocidad de hasta un tamaño de Gb+ y también pueden calcular el tráfico en cada interfaz de red si está interesado en "agregar" el tráfico de red.
Estos scripts se basan principalmente en el sistema de archivos virtual sysfs, que el kernel utiliza como mecanismo para enviar información relacionada con el dispositivo o el controlador al espacio del usuario. Los datos relacionados con el análisis de la interfaz de red se generan a través de "/sys/class/net/
Por ejemplo, el informe de análisis para el puerto de red eth0 se enviará al siguiente archivo:
/sys/class/net/eth0/statistics/rx_packets: Datos del paquete recibido
/sys/class/net/eth0/statistics/ tx_packets: Número de paquetes transmitidos
/sys/class/net/eth0/statistics/rx_bytes: Número de bytes recibidos
/sys/class/net/eth0/statistics/tx_bytes: Número de bytes transferidos
/sys/class/net/eth0/statistics/rx_dropped: Paquetes descartados en paquetes entrantes
/ sys/class/net/eth0/statistics/tx_dropped: paquetes descartados en paquetes salientes
Estos datos se actualizan automáticamente en función de los datos del kernel cuando se producen cambios. Por tanto, puedes escribir una serie de scripts para analizar y calcular estadísticas de tráfico. Aquí hay un guión de este tipo (gracias a joemiller por proporcionarlo). El primer script cuenta la cantidad de datos recibidos (RX) o enviados (TX) por segundo. El siguiente script describe el ancho de banda de recepción (RX) y transmisión (TX) de la transmisión de red. No se requieren herramientas para instalar estos scripts.
Medición del número de paquetes por segundo en un puerto de red:
#! /bin/bash
INTERVAL="1" #Intervalo de actualización (segundos)
if [ -z "$1" ] entonces
echo
echousage: $0 [interfaz de red]
echo
echoe.g.$0 eth0
echo
echoshows paquetes -por segundo
salirsegundo
salir
fi
IF=$1
mientras es verdadero
do
R1=`cat/sys/class/net/$1/statistics/rx_packets`
T1=`cat/sys/class/net/$1/statistics /tx_packets`
sleep$INTERVAL
R2=`cat/sys/class/net/$1/statistics/rx_packets`
T2=`cat/sys /class/net/$1/statistics/tx_packets`
TXPPS=`expr$T2 - $T1`.$T1`.
RXPPS=`expr$R2 - $R1`
echo "TX $1: $TXPPS paquetes/s RX $1: $RXPPS paquetes/s"
hecho
Medición del ancho de banda de la red
#! /bin/bash
INTERVAL="1" #Intervalo de actualización (segundos)
si [ -z"$1" ]; entonces
echo
echousage: $0 [interfaz de red]
echo
echoe.g.$0 eth0
echo
salir
fi
IF=$1
mientras es verdadero
hacer
R1=`cat/sys/class/ net/$1/statistics/rx_bytes`
T1=`cat/sys/class/net/$1/statistics/tx_bytes`
dormir$INTERVAL
R2 =`cat/sys/class/net/$1/statistics/rx_bytes`
T2=`cat/sys/class/net/$1/statistics/tx_bytes`
TBPS=` expr$T2 - $T1$T1`
RBPS=`expr$R2 - $R1`
TKBPS=`expr$TBPS / 1024`
RKBPS =`expr$RBPS / 1024`
echo "TX $1: $TKBPS kb/s RX $1: $RKBPS kb/s"
hecho
A continuación La captura de pantalla muestra el resultado de los dos scripts anteriores.