Charla divertida sobre protocolos de red-Conferencia 27 | QoS de red en la nube: vecinos Películas locas, ¿qué debo hacer?

Esta serie de blog relacionado, de referencia frikis tiempo - Algo sobre protocolo de red

En la comunidad, ¿los inquilinos a menudo ocupan pasajes públicos sin darse cuenta? Si lo buscas en teoría, sus palabras son como una "carretera" de interferencia que dice: "Público y público, me usas, todos me usan a mí". ¿Por qué no se puede usar? ".

Además, cuando alquiló una casa, ¿se encontró con una situación así: originalmente compartió el uso compartido de WIFI, una persona locamente haciendo pequeñas películas para que no pueda conectarse en línea, es molesto?

Este fenómeno también existe en las plataformas en la nube. Afortunadamente, existe una tecnología de control de flujo que puede implementar QoS (Quality of Service) para garantizar la calidad del servicio de la mayoría de los usuarios.

Para controlar la QoS de la red de una máquina, hay dos direcciones, una es la dirección de entrada y la otra es la dirección de salida.
Inserte la descripción de la imagen aquí
De hecho, solo podemos controlar la dirección de salida . A través de Shaping , podemos controlar el flujo de salida de la manera que queremos. La dirección no puede ser controlada para entrar , sólo paquetes descartados por la Política .

¿Cuáles son las formas de controlar la QoS de la red?

En Linux, puede controlar la QoS de la red a través de TC , principalmente a través de la cola .

Reglas de colas sin clase

Disciplinas de cola sin clases

La primera categoría se llama Disciplinas de cola sin clases . Recuerde el pfifo_fast del que hablamos cuando hablamos de ip addr , esta es una tecnología que no clasifica los paquetes de red .
Inserte la descripción de la imagen aquí
pfifo_fast se divide en tres colas de primero en entrar, primero en salir, llamadas tres bandas . De acuerdo con los TOS en el paquete de red , vea en qué cola debe ingresar este paquete. TOS tiene cuatro dígitos en total, y cada dígito T tiene un significado diferente. Hay dieciséis tipos en total.

A través de la línea de comando tc qdisc show dev eth0, puede generar el resultado priomap, que también es dieciséis números. Entre 0 y 2, correspondiente a los dieciséis tipos de TOS, lo que indica diferentes colas correspondientes a diferentes TOS. Entre ellos, la Banda 0 tiene la máxima prioridad, y es el turno de la Banda 1 para enviar después del envío, y la Banda 2 es la última.

Colas justas estocásticas

Otro tipo de regla de cola sin clases se llama Stochastic Fair Queuing .
Inserte la descripción de la imagen aquí
Se establecerán muchas colas FIFO, TCP Session calculará el valor hash y lo asignará a una determinada cola a través del valor hash. En el otro extremo de la cola, el paquete de red se sacará de cada cola y se enviará a través de una estrategia de sondeo. De esta manera, ninguna sesión individual ocupará todo el tráfico.

Por supuesto, si el hash de las dos sesiones es el mismo, compartirá una cola y también puede afectarse entre sí. La función hash cambia con frecuencia para que las sesiones no siempre se afecten entre sí.

Reglas del depósito de fichas (TBF, filtro de depósito de fichas)

También hay una regla de cola sin clases llamada TBF (Token Bucket Filte) . 
Inserte la descripción de la imagen aquí
Todos los paquetes de red están en cola para ser enviados, pero no en la parte superior de la cola para enviar, pero necesitan obtener el token para enviar.

El token se genera a la velocidad establecida, por lo que incluso si la cola es muy larga, se envía a una velocidad determinada.

Cuando no hay un paquete en la cola, el token todavía se genera a una velocidad predeterminada, pero no se acumula indefinidamente, sino hasta que el depósito esté lleno. El tamaño del depósito se establece para evitar la siguiente situación: cuando no se envía un paquete de red durante mucho tiempo, se acumula una gran cantidad de tokens y, de repente, llega una gran cantidad de paquetes de red, y cada uno puede obtener un token, lo que provoca un aumento instantáneo del tráfico.

Reglas de cola basadas en clases

Otra gran categoría son las Disciplinas de Colas con Clase (Disciplinas de Colas con Clase) , que generalmente son Contenedores de Token Jerárquicos (HTB) .

Cubo de token jerárquico (HTB)

HTB es a menudo un árbol. A continuación, daré un ejemplo específico para mostrarle cómo construir un árbol HTB por TC.
Inserte la descripción de la imagen aquí
Use TC para crear una regla de cola HTB para una tarjeta de red eth0, debe pagar un identificador de (1 :).

Este es el nodo raíz de todo el árbol, y habrá ramas a continuación. Por ejemplo, hay tres ramas en la figura, los controladores son (: 10), (: 11), (: 12). El último parámetro, predeterminado 12, significa que se envía a 1:12 de forma predeterminada, es decir, a la tercera rama.

tc qdisc add dev eth0 root handle 1: htb default 12

Para esta tarjeta de red, debe especificar la velocidad de envío. En general, existen dos velocidades pueden ser configurados, se trata de una Tasa , mostrando una velocidad general; es un ceil , que muestra la situación a la velocidad más alta. Para el nodo raíz, las dos velocidades son las mismas, por lo tanto, cree una clase raíz con una velocidad de (tasa = 100 kbps, ceil = 100 kbps).

tc class add dev eth0 parent 1: classid 1:1 htb rate 100kbps ceil 100kbps	

El siguiente paso es crear ramas, es decir, crear varias subclases. Cada subclase tiene dos velocidades. Las tres ramas son (tasa = 30 kbps, ceil = 100 kbps), (tasa = 10 kbps, ceil = 100 kbps), (tasa = 60 kbps, ceil = 100 kbps).

tc class add dev eth0 parent 1:1 classid 1:10 htb rate 30kbps ceil 100kbps
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 10kbps ceil 100kbps
tc class add dev eth0 parent 1:1 classid 1:12 htb rate 60kbps ceil 100kbps

Encontrará que las tres tasas se suman a la velocidad máxima permitida para toda la tarjeta de red.

HTB tiene una característica muy buena. Las subclases bajo la misma clase raíz pueden tomar prestado tráfico entre sí. Si no crea una clase raíz directamente bajo la regla de la cola, pero crea directamente tres clases, no puede tomar prestado tráfico entre ellas. . La estrategia de pedir prestado tráfico permite prestar a otra sucursal cuando el tráfico de esta sucursal no se utiliza actualmente, de modo que el ancho de banda no se desperdicia y el ancho de banda se maximiza.

Finalmente, cree reglas de cola de hoja, fifo y sfq , respectivamente .

tc qdisc add dev eth0 parent 1:10 handle 20: pfifo	limit	5
tc qdisc add dev eth0 parent 1:11 handle 30: pfifo	limit	5
tc qdisc add dev eth0 parent 1:12 handle 40: sfq perturb 10

En base a esta regla de cola, también podemos establecer la regla de envío a través de TC: los paquetes de 1.2.3.4, enviados al puerto 80, van desde la primera rama 1:10; otros paquetes enviados desde 1.2.3.4 desde Dos ramas toman 1:11; la otra toma la rama predeterminada.

tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src 1.2.3.4 match ip dport 80 0xffff flowid 1:10
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src 1.2.3.4 flowid 1:11

¿Cómo controlar la QoS?

Hemos hablado sobre cómo usar OpenvSwitch para conectar las tarjetas de red en la nube, ¿cómo controlar la QoS?

Como dijimos anteriormente, OpenvSwitch admite dos tipos:

  • Para el tráfico entrante, puede establecer la política Política de ingreso;
ovs-vsctl set Interface tap0 ingress_policing_rate=100000
ovs-vsctl set Interface tap0 ingress_policing_burst=10000
  • Para el tráfico saliente, puede establecer las reglas de QoS Egress shaping para admitir HTB.

Construyamos un diagrama de topología para ver cómo funciona la QoS de OpenvSwitch. 
Inserte la descripción de la imagen aquí
Primero, se pueden crear reglas de QoS en el puerto, y una regla de QoS puede tener múltiples colas. 
Inserte la descripción de la imagen aquí

ovs-vsctl set port first_br qos=@newqos -- --id=@newqos create qos type=linux-htb other-config:max-rate=10000000 queues=0=@q0,1=@q1,2=@q2 -- --id=@q0 create queue
other-config:min-rate=3000000 other-config:max-rate=10000000 -- --id=@q1 create queue other-config:min-rate=1000000 other-config:max-rate=10000000 -- --id=@q2
create queue other-config:min-rate=6000000 other-config:max-rate=10000000

El comando anterior crea una regla de QoS correspondiente a tres colas. la tasa mínima es la tasa anterior, la tasa máxima es el límite superior. Los paquetes de red que pasan por el conmutador deben pasar las reglas de la tabla de flujo e ingresar diferentes colas después de la coincidencia. Luego podemos agregar la regla de la tabla de flujo Flow (first_br es el puerto 5 en br0).

ovs-ofctl add-flow br0 "in_port=6 nw_src=192.168.100.100 actions=enqueue:5:0"
ovs-ofctl add-flow br0 "in_port=7 nw_src=192.168.100.101 actions=enqueue:5:1"
ovs-ofctl add-flow br0 "in_port=8 nw_src=192.168.100.102 actions=enqueue:5:2"

Luego, cuando probamos individualmente el ancho de banda de 192.168.100.100, 192.168.100.101, 192.168.100.102 a 192.168.100.103, cada uno de ellos puede llenar el ancho de banda.

Si los tres se prueban juntos y los paquetes de red se envían juntos, encontrará que se llevan a cabo de acuerdo con la proporción de 3: 1: 6, que se asigna de acuerdo con la proporción de ancho de banda configurada de la cola.

Si 192.168.100.100 y 192.168.100.101 se prueban juntas, se encuentra que la relación de ocupación de ancho de banda es 3: 1, pero ocupa el tráfico total, es decir, 192.168.100.102 que no envió paquetes tiene 60% del ancho de banda prestado.

Si 192.168.100.100 y 192.168.100.102 se prueban juntas, la relación de ocupación de ancho de banda es 1: 2. Si 192.168.100.101 y 192.168.100.102 se prueban juntas, la relación de ocupación de ancho de banda es 1: 6.

Resumen

Bien, eso es todo por esta sección, resumámoslo.

  • El control de flujo en la nube se realiza principalmente a través de colas, que se dividen en dos categorías: reglas de cola sin clases y reglas de cola basadas en categorías.
  • En el Openvswitch en la red de la nube, el uso principal es la Regla jerárquica de depósito de tokens (HTB), que asigna el ancho de banda total a un árbol de acuerdo con la relación configurada, y cuando una rama no está en uso, se puede prestar a otra Ramificación, mejorando así la utilización del ancho de banda.

Finalmente, te dejaré dos preguntas de reflexión.

  1. Como se menciona en esta sección, en realidad no hay forma de controlar el tráfico de entrada, y el tráfico de salida se puede controlar bien. ¿Se le ocurre una forma de controlar el tráfico de entrada de máquinas virtuales en la nube?
  2. La seguridad y el control de flujo probablemente estén resueltos, pero el aislamiento de diferentes usuarios en la red física aún no está resuelto. ¿Sabes cómo resolverlo?
Publicado 40 artículos originales · ganado elogios 1 · vistas 5348

Supongo que te gusta

Origin blog.csdn.net/aha_jasper/article/details/105575721
Recomendado
Clasificación