TC que es: La Profundidad y Utilidad del Control de Tráfico en Redes Linux

Imagínate por un momento a nuestro amigo Juan, un emprendedor digital con su propio servidor web. Un día, sus clientes empiezan a quejarse: la página carga lenta, las videollamadas con sus proveedores se cortan, y enviar archivos grandes es un auténtico suplicio. Juan está desesperado, ha revisado la conexión a internet, los recursos del servidor, todo parece estar bien, pero el caos en la red persiste. De repente, su viejo mentor, un gurú del mundo Linux, le da un consejo casi susurrando: «Juan, lo que necesitas es entender TC que es y cómo dominarlo». ¿TC? ¿Qué demonios es eso? Juan, como muchos en su momento, estaba a punto de descubrir una de las herramientas más potentes y a la vez enigmáticas del ecosistema Linux para gestionar redes.

Así que, vamos a despejar la incógnita. TC, o Traffic Control, es una utilidad de línea de comandos fundamental en los sistemas operativos Linux que permite a los administradores de red manipular y gestionar el tráfico de datos a un nivel increíblemente granular. Su principal función es implementar políticas de Calidad de Servicio (QoS), limitación de ancho de banda, modelado de tráfico y control de congestión, asegurando que los recursos de red se utilicen de manera eficiente, justa y, sobre todo, inteligente. En esencia, tc es la navaja suiza que te permite ser el «sheriff» de tu red, decidiendo quién pasa primero, quién va más lento y quién tiene prioridad cuando la cosa se pone fea.

Por Qué es TC tan Crucial en la Gestión de Redes Modernas

En el mundo digital de hoy, donde la demanda de ancho de banda no para de crecer y la calidad de la experiencia del usuario (UX) es primordial, la gestión del tráfico de red no es un lujo, sino una necesidad. Sin una herramienta como tc, una red puede volverse caótica rápidamente. Piensa en una autopista con un montón de coches: si no hay carriles, límites de velocidad o peajes para desviar el tráfico, al final se forma un atasco monumental. tc es el ingeniero de tráfico que puede diseñar esa autopista virtual para evitar el colapso.

Aquí te explico por qué tc es un auténtico salvavidas para el administrador de sistemas y redes:

  • Optimización de la experiencia del usuario: Al priorizar el tráfico sensible a la latencia (como las videollamadas o los juegos online), tc asegura que la experiencia del usuario final sea fluida y sin interrupciones, aunque la red esté saturada.
  • Equidad en el uso del ancho de banda: Evita que un solo usuario o servicio acapare todo el ancho de banda, garantizando que todos tengan una parte justa de los recursos. Imagina un servidor con muchos usuarios; tc puede asegurar que nadie se quede sin conexión decente.
  • Modelado de tráfico para cumplir SLAs: Permite a las empresas cumplir con sus Acuerdos de Nivel de Servicio (SLAs) al garantizar una cierta calidad o velocidad para aplicaciones críticas.
  • Reducción de la congestión y el «bufferbloat»: Implementa algoritmos de cola inteligentes que minimizan la latencia y la pérdida de paquetes durante periodos de alta demanda, combatiendo ese molesto «bufferbloat» que hace que todo vaya a trompicones.
  • Seguridad y control: Aunque no es una herramienta de firewall per se, tc puede complementar a iptables al permitirte modelar el tráfico que coincide con ciertas reglas, añadiendo una capa extra de control sobre cómo se mueven los datos.

Desentrañando la Anatomía de TC: Conceptos Clave

Para «pillarle el truco» a tc, es fundamental entender sus componentes principales. No te asustes, al principio puede parecer un lío, pero una vez que entiendes la lógica, todo cobra sentido. Piénsalo como construir una red de tuberías: necesitas las tuberías (qdiscs), los grifos que abren o cierran el paso (clases) y los detectores que identifican el líquido (filtros).

1. Qdiscs (Disciplinas de Cola – Queuing Disciplines)

Las Disciplinas de Cola son el corazón de tc. Son algoritmos que determinan cómo se encolan, procesan y envían los paquetes de red. Cada interfaz de red tiene un qdisc principal (root qdisc) adjunto. Si no configuras nada, Linux usa por defecto pfifo_fast, que es una cola FIFO (First In, First Out) con tres bandas de prioridad. Pero la gracia de tc es que puedes elegir otras disciplinas mucho más sofisticadas. Aquí te nombro algunas de las más populares y sus características:

  • pfifo_fast: La cola por defecto. Sencilla, rápida, pero sin garantías de servicio. Procesamiento de tres bandas de prioridad (0-2), donde la banda 0 es la más alta. Si una banda superior tiene paquetes, los de las inferiores esperan.
  • TBF (Token Bucket Filter): Un filtro de «cubo de tokens». Ideal para limitar el ancho de banda a una velocidad específica. Imagina un cubo que se llena de tokens a una velocidad constante; cada paquete necesita un token para pasar. Si no hay tokens, el paquete espera o se descarta. Es genial para establecer límites de velocidad máximos (burst).
  • HTB (Hierarchical Token Bucket): ¡Aquí la cosa se pone seria! HTB es una disciplina de cola jerárquica, lo que significa que puedes crear árboles de clases, asignando ancho de banda garantizado (rate) y un máximo (ceil) a cada una. Es la elección preferida para escenarios complejos de QoS donde necesitas un control granular y prioridades escalonadas.
  • SFQ (Stochastic Fair Queuing): Una disciplina de cola justa y probabilística. Intenta asegurar que cada «flujo» de conexión (por ejemplo, una conexión TCP/IP) obtenga una porción justa del ancho de banda disponible, evitando que un flujo grande ahogue a los más pequeños. Combate el efecto «Mala Leche» (Mickey Mouse effect) de TCP.
  • FQ_Codel (Fair Queuing CoDel): Una joya moderna diseñada para combatir el «bufferbloat». Combina Fair Queuing con el algoritmo CoDel (Controlled Delay) para mantener las latencias bajas y el rendimiento alto, incluso bajo congestión. Es una excelente opción para qdisc raíz en muchas configuraciones.
  • PRIO (Priority): Similar a pfifo_fast pero con la posibilidad de definir tus propias bandas de prioridad y dirigir el tráfico a ellas mediante filtros.
  • CBQ (Class Based Queuing): Una de las primeras qdiscs jerárquicas. Aunque sigue siendo funcional, HTB es generalmente preferida por su implementación más sencilla y eficaz.

2. Clases

Dentro de un qdisc jerárquico (como HTB o PRIO), puedes crear «clases». Piensa en ellas como subdivisiones dentro de tu autopista. Cada clase puede tener sus propias reglas, límites de ancho de banda y prioridades. Por ejemplo, en un qdisc HTB, podrías tener una clase para el tráfico web, otra para el tráfico de voz y otra para las descargas. Las clases son identificadas por un «handle» o ID numérico.

3. Filtros

Los filtros son la magia que te permite dirigir paquetes específicos a las clases adecuadas. Son como los guardias de tráfico que examinan cada coche y lo mandan por el carril que le corresponde. Un filtro analiza los paquetes basándose en criterios como:

  • Dirección IP de origen o destino.
  • Número de puerto de origen o destino.
  • Protocolo (TCP, UDP, ICMP).
  • Flags TCP (SYN, ACK).
  • Marcas de paquetes (`fwmark`) establecidas por iptables.
  • Interfaz de entrada.

El filtro más común y potente es el u32, que te permite hacer coincidir casi cualquier campo en el encabezado de un paquete. También existe el filtro fw, que utiliza marcas (`fwmark`) que previamente iptables ha asignado a los paquetes, lo cual es la mar de útil para integrar tc con tu firewall.

4. Handles (Identificadores)

Cada qdisc y cada clase dentro de un qdisc jerárquico tienen un «handle» o identificador único. Estos handles suelen tener el formato `X:Y`, donde `X` es el número mayor (identificador del dispositivo o qdisc raíz) e `Y` es el número menor (identificador de la clase o qdisc hijo). Por ejemplo, `1:0` podría ser el qdisc raíz de una interfaz, y `1:10` una clase bajo ese qdisc.

Manos a la Obra: Comandos Básicos de TC

Ahora que tenemos la teoría, vamos a la práctica. La sintaxis de tc puede ser un poco intimidante al principio por su verbosidad, pero con unos pocos ejemplos, le pillarás el truco. Recuerda que necesitas privilegios de root para ejecutar estos comandos.

1. Añadir un Qdisc Raíz

Antes de poder hacer cualquier control de tráfico, necesitas adjuntar una disciplina de cola a una interfaz de red. El qdisc raíz es el punto de entrada para todo el tráfico que sale por esa interfaz.


sudo tc qdisc add dev eth0 root handle 1: htb default 10

Esto añade un qdisc htb (Hierarchical Token Bucket) a la interfaz eth0. Le damos el handle 1: (la `X` de `X:Y`) y designamos la clase 10 como la clase por defecto. Cualquier tráfico que no coincida con ningún filtro, irá a la clase 1:10.

2. Añadir Clases (para Qdiscs jerárquicos como HTB)

Una vez que tienes tu qdisc raíz, puedes empezar a crear clases. Aquí es donde defines los anchos de banda y las prioridades.


sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit
sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 50mbit ceil 80mbit prio 1
sudo tc class add dev eth0 parent 1:1 classid 1:20 htb rate 20mbit ceil 50mbit prio 2
  • La primera línea crea una clase padre `1:1` bajo el qdisc raíz `1:`. Esta clase tiene un `rate` (ancho de banda garantizado) y `ceil` (ancho de banda máximo) de 100 Mbps. Es decir, el total de la interfaz.
  • La segunda línea crea una clase `1:10` bajo la clase `1:1`. Le da un `rate` garantizado de 50 Mbps y un `ceil` (máximo) de 80 Mbps. También le asigna una `prio` (prioridad) de 1, siendo menor el número, mayor la prioridad.
  • La tercera línea crea otra clase `1:20` bajo `1:1`, con 20 Mbps garantizados y 50 Mbps de máximo, con prioridad 2.

3. Añadir Filtros

Ahora que tenemos clases, necesitamos dirigir el tráfico a ellas. Aquí usamos los filtros.


# Filtro para tráfico SSH (puerto 22) a la clase de mayor prioridad
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \
    match ip dport 22 0xffff \
    flowid 1:10

# Filtro para tráfico web (puerto 80 y 443) a la clase de prioridad media
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 2 u32 \
    match ip dport 80 0xffff \
    match ip dport 443 0xffff \
    flowid 1:20

Analicemos un poco:

  • `dev eth0`: La interfaz de red.
  • `protocol ip`: Indica que el filtro es para tráfico IP.
  • `parent 1:0`: El punto de anclaje del filtro. `1:0` se refiere al qdisc raíz.
  • `prio 1`: La prioridad del filtro (no de la clase). Los filtros de menor número se evalúan primero.
  • `u32`: El tipo de filtro, que permite hacer coincidir bits específicos en el encabezado del paquete.
  • `match ip dport 22 0xffff`: Coincide con el puerto de destino 22 (SSH). `0xffff` es la máscara que indica que se debe coincidir el valor completo.
  • `flowid 1:10`: Cuando el paquete coincide con el filtro, se envía a la clase `1:10`.

4. Mostrar la Configuración Actual

Para ver qué reglas de tc están activas en una interfaz, puedes usar estos comandos:


sudo tc qdisc show dev eth0
sudo tc class show dev eth0
sudo tc filter show dev eth0

5. Borrar la Configuración

Si quieres empezar de cero o eliminar una regla, puedes borrar el qdisc raíz (lo que eliminará todas las clases y filtros asociados a él):


sudo tc qdisc del dev eth0 root

¡Ojo! Borrar el qdisc raíz es la forma más fácil de limpiar una interfaz. Si solo quieres borrar una clase o un filtro específico, la sintaxis es similar a `add`, pero usando `del` y especificando el `handle` o `classid`.

Casos Prácticos: ¿Para qué me sirve TC en el día a día?

Aquí te doy algunos ejemplos concretos donde tc se convierte en un aliado insustituible. ¡Estos son los escenarios donde Juan, el de nuestra historia, hubiera querido conocer tc antes!

1. Limitar el Ancho de Banda para Usuarios o Servicios Específicos

Imagina que tienes un servidor con varios usuarios y uno de ellos se dedica a descargar archivos gigantes, ralentizando la experiencia de los demás. Con tc puedes limitar su ancho de banda de salida (egress).


# Añadir un qdisc raíz HTB
sudo tc qdisc add dev eth0 root handle 1: htb default 10

# Clase padre (total disponible)
sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit

# Clase para el usuario "problemático" (IP 192.168.1.100), limitado a 5 Mbps
sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 5mbit ceil 5mbit
# Clase para el resto del tráfico (por defecto)
sudo tc class add dev eth0 parent 1:1 classid 1:20 htb rate 95mbit ceil 95mbit

# Filtro para dirigir el tráfico del usuario a su clase limitada
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \
    match ip src 192.168.1.100/32 \
    flowid 1:10

Con esto, el usuario con la IP `192.168.1.100` nunca podrá exceder los 5 Mbps de salida, garantizando que el resto de los 95 Mbps estén disponibles para los demás.

2. Priorizar Tráfico Crítico (VoIP, SSH, DNS)

En un entorno empresarial, el tráfico de voz (VoIP), las sesiones SSH de administración o las consultas DNS son mucho más importantes que las descargas de archivos grandes o la navegación web casual. tc te permite darles «preferencia» en la autopista de red.


# Qdisc raíz FQ_Codel para una buena base contra el bufferbloat
sudo tc qdisc add dev eth0 root handle 1: fq_codel

# ¡Espera! FQ_Codel es una disciplina de cola 'leaf' (hoja) que no soporta clases directamente.
# Para priorizar con FQ_Codel, se suele combinar con Prio o con marcas de iptables.
# Veamos un ejemplo con PRIO para priorizar:

# Primero, borramos el qdisc anterior si lo hay:
sudo tc qdisc del dev eth0 root

# Añadimos un qdisc PRIO raíz con 3 bandas
sudo tc qdisc add dev eth0 root handle 1: prio bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1

# Explicación del priomap: Asigna los valores de prioridad de TOS (Type of Service)
# a las bandas. Aquí, los valores 6 (voz) y 7 (control) van a la banda 0 (la más alta).
# Los valores 4 (video) y 5 (ejecución rápida) van a la banda 1.
# El resto va a la banda 2.

# Filtro para tráfico VoIP (usando el rango de puertos RTP) a la banda 0
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \
    match ip dport 5000 0xfc00 \
    flowid 1:1 # Banda 0 (la primera banda es 1:1, 1:2, 1:3 para bands 3)

# Filtro para SSH (puerto 22) a la banda 0
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \
    match ip dport 22 0xffff \
    flowid 1:1

# Filtro para HTTP/HTTPS a la banda 2 (menor prioridad)
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 3 u32 \
    match ip dport 80 0xffff \
    flowid 1:3
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 3 u32 \
    match ip dport 443 0xffff \
    flowid 1:3

Este ejemplo con `PRIO` asegura que el tráfico de VoIP y SSH tenga la máxima prioridad, mientras que el tráfico web se maneja con menor urgencia.

3. Modelado de Tráfico de Entrada (Ingress)

Una peculiaridad de tc es que por defecto controla el tráfico de salida (egress). Controlar el tráfico de entrada (ingress) es más complicado porque el kernel de Linux ya ha aceptado el paquete antes de que tc pueda actuar. Para esto, se suele usar un dispositivo virtual llamado `ifb` (Intermediate Functional Block) o el qdisc `ingress`.


# Cargar el módulo IFB
sudo modprobe ifb

# Levantar las interfaces IFB
sudo ip link set dev ifb0 up

# Redirigir el tráfico de entrada de eth0 a ifb0
sudo tc qdisc add dev eth0 handle ffff: ingress
sudo tc filter add dev eth0 parent ffff: protocol ip u32 \
    match u32 0 0 \
    action mirred egress redirect dev ifb0

# Ahora, aplicar las reglas de modelado a ifb0 como si fuera una interfaz de salida
# Por ejemplo, limitar el total de entrada a 50 Mbps
sudo tc qdisc add dev ifb0 root handle 1: tbf rate 50mbit burst 10kbit latency 70ms

Con este truco del `ifb`, puedes aplicar las mismas técnicas de modelado de tráfico de salida al tráfico que entra en tu sistema. Es una «currada» pero la mar de útil para controlar el ancho de banda que tu servidor consume, por ejemplo.

TC y la Persistencia: Que tus reglas no se esfumen al reiniciar

Una de las cosas que más mosquea a los que empiezan con tc es que sus reglas, tan cuidadosamente configuradas, ¡desaparecen después de un reinicio! Claro, tc trabaja en la memoria del kernel. Para que persistan, hay varias maneras:

  • Scripts de Inicio: La forma más común es crear un script de shell (`.sh`) que contenga todos tus comandos tc y configurarlo para que se ejecute al inicio del sistema. Puedes guardarlo en `/etc/network/if-pre-up.d/` (para antes de que las interfaces suban) o `/etc/rc.local` (en sistemas más antiguos) o como un servicio `systemd` moderno.
  • Archivos de Configuración de Distribución: Algunas distribuciones de Linux, como Debian/Ubuntu, tienen mecanismos para configurar `tc` a través de sus archivos de configuración de red (e.g., `/etc/network/interfaces`). Puedes añadir comandos `post-up` para ejecutar scripts de tc.
  • Herramientas Específicas: Existen herramientas como `netplan` (en Ubuntu moderno) o la configuración de `NetworkManager` que a veces permiten integrar reglas de `tc`, aunque suelen ser para casos más sencillos. Para configuraciones complejas, un script personalizado es lo más flexible.

Aquí un ejemplo de cómo sería un script simple para cargar tus reglas:


#!/bin/bash

# Limpiar reglas existentes en eth0
/sbin/tc qdisc del dev eth0 root 2>/dev/null

# Añadir qdisc raíz HTB
/sbin/tc qdisc add dev eth0 root handle 1: htb default 10

# Clase padre
/sbin/tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit

# Clase para prioridad alta (puerto 22 SSH)
/sbin/tc class add dev eth0 parent 1:1 classid 1:10 htb rate 20mbit ceil 100mbit prio 1
/sbin/tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \
    match ip dport 22 0xffff \
    flowid 1:10

# Clase para el resto (por defecto)
/sbin/tc class add dev eth0 parent 1:1 classid 1:20 htb rate 50mbit ceil 100mbit prio 2
/sbin/tc filter add dev eth0 protocol ip parent 1:0 prio 2 u32 \
    match ip dst 0.0.0.0/0 \
    flowid 1:20

Guarda este script como, por ejemplo, `/etc/network/if-up.d/tc-rules` y dale permisos de ejecución (`sudo chmod +x /etc/network/if-up.d/tc-rules`). De esta forma, cada vez que la interfaz `eth0` suba, se aplicarán tus reglas.

Análisis Profundo: HTB vs. FQ_Codel como Qdisc Raíz

Cuando te metes de lleno con tc, una de las primeras decisiones importantes es qué disciplina de cola usar como raíz. Hay dos contendientes fuertes para el título de «mejor qdisc raíz»: HTB (Hierarchical Token Bucket) y FQ_Codel (Fair Queuing Controlled Delay).

Aquí te presento una pequeña tabla comparativa para que pilles las diferencias:

Característica HTB (Hierarchical Token Bucket) FQ_Codel (Fair Queuing Controlled Delay)
Objetivo Principal Control granular de ancho de banda, garantía de servicio (SLA), creación de jerarquías de clases. Minimizar latencia, combatir «bufferbloat», asegurar equidad entre flujos.
Complejidad de Configuración Alta. Requiere definir qdiscs raíz, clases, tasas, techos y filtros. Baja. Generalmente se aplica directamente como qdisc raíz.
Capacidad Jerárquica Sí, permite una estructura de árbol con clases anidadas. No, es una qdisc «hoja» (leaf) que trata todos los flujos como iguales dentro de sí misma.
Control de Ancho de Banda Preciso. Permite garantizar (`rate`) y limitar (`ceil`) el ancho de banda para grupos específicos de tráfico. Indirecto. Distribuye el ancho de banda disponible de manera justa entre los flujos, pero no establece límites estrictos por tipo de tráfico sin ayuda de otros mecanismos.
Combate de Bufferbloat Puede mitigar, pero no es su propósito principal. Depende de cómo se configuren las colas internas de las clases. Excelente. Diseñado específicamente para reducir la latencia de la cola y la pérdida de paquetes bajo congestión.
Caso de Uso Típico ISP, hosting, entornos multi-inquilino donde se necesita asignar ancho de banda específico a clientes/servicios. Routers domésticos, servidores de aplicaciones donde la baja latencia y la fluidez son críticas.
Integración con Firewall Muy común usar `iptables` para marcar paquetes (`fwmark`) y luego `tc` con `fw` filter para asignar a clases. Menos directo. Se puede combinar con `iptables` y `PRIO` para dirigir ciertos flujos, pero la equidad de FQ_Codel opera a un nivel más bajo.

Mi humilde opinión es que si tu principal preocupación es la latencia y la equidad general para un conjunto diverso de tráfico sin necesidad de anchos de banda garantizados para subconjuntos específicos (como en un router doméstico o un servidor con muchos servicios variados), FQ_Codel es a menudo la mejor opción por su sencillez y su eficacia contra el bufferbloat. Es un chollazo de configuración con un impacto enorme. Si, por el contrario, necesitas un control quirúrgico, asignar anchos de banda mínimos y máximos a diferentes departamentos, clientes o tipos de tráfico, entonces HTB es tu herramienta, aunque requiere una «currada» de configuración considerable.

Preguntas Comunes sobre TC que es

Es normal que surjan un montón de dudas al adentrarse en el mundo de tc. Aquí te respondo a algunas de las más frecuentes que me he encontrado en mi camino y que a veces, ¡vaya quebradero de cabeza suponen!

¿Cuál es la diferencia principal entre tc e iptables?

Esta es una pregunta clásica. La diferencia es fundamental: iptables es un firewall. Su propósito principal es filtrar paquetes (permitir o denegar) basándose en reglas, realizar NAT (Network Address Translation) y marcar paquetes para procesamiento posterior. No gestiona directamente el ancho de banda o la latencia. En cambio, tc, el control de tráfico, no filtra paquetes. Su misión es manipular la forma en que los paquetes ya aceptados por el firewall se encolan y se transmiten a través de la red. Es decir, iptables decide si un paquete puede pasar o no, y tc decide cómo de rápido y en qué orden lo hace. A menudo trabajan juntos, donde iptables marca un paquete, y tc usa esa marca para dirigirlo a una clase específica con ciertas características de ancho de banda o prioridad.

¿Cómo puedo estar seguro de que mis reglas tc están funcionando correctamente?

Verificar la efectividad de tus reglas tc requiere un poco de «ojo clínico» y herramientas adecuadas. Primero, siempre puedes usar `sudo tc -s qdisc show dev eth0` para ver las estadísticas de tu qdisc raíz, incluyendo el número de paquetes y bytes procesados, y los paquetes caídos. Esto te da una pista si el tráfico está llegando a la cola. Luego, para ver el impacto real en el tráfico, puedes usar herramientas de monitorización de red como iperf3 para generar tráfico artificial y medir el rendimiento con y sin tus reglas aplicadas. También puedes usar ping con paquetes grandes para ver la latencia, o mtr para un análisis más detallado. Es crucial medir antes y después de aplicar las reglas para tener una base de comparación clara. Además, siempre es bueno verificar los logs del sistema por si hay algún error en la configuración de tc.

¿Es tc solo para Linux? ¿Existen equivalentes en otros sistemas operativos?

Sí, tc es una herramienta nativa y específica del kernel de Linux. Es la forma en que Linux implementa las funcionalidades de control de tráfico y QoS. Otros sistemas operativos tienen sus propias implementaciones. Por ejemplo, en sistemas Windows, hay opciones de QoS basadas en políticas de grupo, que funcionan de manera diferente. En BSD (como FreeBSD u OpenBSD), se utilizan herramientas como pf o ipfw que, además de firewall, pueden incluir capacidades de control de tráfico (ej. altq en pf). En el ámbito de hardware de red, los routers y switches profesionales tienen sus propias implementaciones de QoS, a menudo mucho más robustas y con interfaces gráficas, pero la flexibilidad y el control a nivel de kernel que ofrece tc en Linux es algo muy particular y potente.

¿Qué es el «bufferbloat» y cómo ayuda tc a combatirlo?

El «bufferbloat» es un problema bastante molesto en las redes modernas. Se produce cuando los dispositivos de red (como routers o tarjetas de red) tienen buffers de memoria excesivamente grandes para almacenar paquetes. En lugar de descartar paquetes cuando hay congestión, lo que señalaría a los remitentes que deben reducir la velocidad, estos buffers enormes simplemente acumulan los paquetes. Esto resulta en un aumento masivo de la latencia (retraso), haciendo que la red parezca lenta incluso si tiene un gran ancho de banda. Las videollamadas se pixelan, los juegos online tienen lag, y la navegación web se siente pesada. tc ayuda a combatirlo mediante disciplinas de cola activas, como FQ_Codel o CAKE (una evolución de FQ_Codel). Estos algoritmos están diseñados para monitorear activamente la longitud de las colas y la latencia, descartando selectivamente paquetes o señalando a los remitentes que disminuyan la velocidad antes de que los buffers se llenen por completo. Así se mantiene la latencia bajo control, mejorando enormemente la experiencia del usuario final incluso bajo estrés de red.

¿Se puede usar tc para gestionar el tráfico de VPN o túneles?

¡Claro que sí! tc puede gestionar el tráfico que pasa a través de interfaces de VPN o túneles de la misma manera que lo hace con interfaces de red físicas. Por ejemplo, si tienes una interfaz `tun0` o `tap0` para tu VPN, puedes aplicar reglas tc directamente a esa interfaz. Esto es súper útil para, por ejemplo, priorizar el tráfico dentro de tu túnel VPN, o limitar el ancho de banda total que esa VPN puede consumir. Es una forma muy efectiva de asegurar que el tráfico crítico (como SSH o RDP) a través de la VPN siempre tenga suficiente «aire» incluso si otros servicios dentro del túnel están usando mucho ancho de banda. La clave es identificar la interfaz virtual correcta y aplicar los qdiscs y filtros apropiados.

Reflexiones Finales: Un Aliado Poderoso para tu Red

Como habrás podido comprobar, TC que es va mucho más allá de ser un simple comando; es una filosofía de control sobre cómo fluyen los datos en tus sistemas Linux. Aunque su curva de aprendizaje puede ser un poco empinada al principio, la inversión de tiempo en comprenderlo se traduce en redes más estables, eficientes y con una experiencia de usuario notablemente superior. Desde un pequeño servidor casero hasta complejos entornos de centros de datos, tc te da el poder de moldear el tráfico a tu antojo, asegurando que tus aplicaciones más críticas siempre tengan el camino despejado y que ningún usuario o servicio monopolice los recursos. Así que, la próxima vez que tu red empiece a dar problemas, o si simplemente quieres optimizarla al máximo, recuerda a nuestro amigo Juan y la sabiduría de su mentor: ¡echa un vistazo a tc! Podría ser la solución que estás buscando.

tc que es

Spread the love