ruteo y control de flujo

Anuncio
RUTEO Y CONTROL DE FLUJO
Los ruteadores son conmutadores de paquetes que operan al nivel de red del modelo de
protocolo de Interconexión de sistemas abiertos (OSI, Open Sistems InterConnect ion). Los
ruteadores interconectan redes tanto en las áreas locales como en las extensas, y cuando
existe más de una ruta entre dos puntos finales de la red, proporcionan control de tráfico y
filtrado de funciones. Los ruteadores son críticos en las redes interconectadas grandes y de
área extensa que usan enlaces de telecomunicación. Dirigen los paquetes a través de las
rutas más eficientes o económicas dentro de la malla de redes, que tiene caminos
redundantes a un destino. Un ruteador examina la información de dirección de los paquetes
y los envía hacia su destino a través de una ruta predeterminada. Los ruteadores mantienen
tablas de los ruteadores adyacentes y de las redes de área local (LAN) que hay dentro de la
red. Cuando un ruteador recibe un paquete, consulta dichas tablas para ver si puede enviarlo
directamente a su destino. En caso contrario, determina la posición de otro encaminador
que pueda hacerlo avanzar hacia su destino. El proceso de avance requiere la realización de
un cierto procesamiento. Cuando el ruteador ha recibido la totalidad de un paquete,
consulta lainformación de dirección y a continuación lo reenvía. Como consecuencia, el
rendimiento se verá influido por las diferencias en los componentes del ruteador y en la
arquitectura. Los ruteadores trabajan bien con un protocolo único como el Protocolo de
Control de Transmisión / Protocolo Internet (TCP/IP), o bien con múltiples protocolos
como Intercambio secuencial de paquetes / Intercambio de paquetes entre redes
(SPX/IPX).Los Ruteadores, Enrutadores o Routers son equipos de interconexión de redes
que actuán a nivel de los protocolos de red . Permite utilizar varios sistemas de
interconexión mejorando el rendimiento de la transmisión entre redes. Su funcionamiento
es más lento que los puentes pero su capacidad es mayor. Permiten, incluso, enlazar dos
redes basadas en un protocolo, por medio de otra que utilice un protocolo diferente. Los
enrutadores utilizan las cabeceras y una tabla de seguimiento para determinar la dirección
que seguirán lo paquetes, utilizando ICMP para comunicarse entre ellos para configurar la
mejor ruta entre dos anfitriones.
Al pasar los datos a través del enrutador es muy poco el filtrado. Para losenrutadores no es
relevante el tipo de datos que manejan.
El ruteador es responsable de crear y mantener tablas de ruteo para cada capade protocolo de red,
estas tablas son creadas ya sea estáticamente o dinámicamente. De esta manera el ruteador extrae
de la capa de red la dirección destino y realiza una decisión de envio basado sobre el contenido de la
especificación del protocolo en la tabla de ruteo.2. La inteligencia de un ruteador permite
seleccionar la mejor ruta, basándose sobre diversos factores, más que por la direccion MAC destino.
Estos factores pueden incluir la cuenta de saltos, velocidad de la linea, costo de transmisión,
retrazo y condiciones de tráfico. La desventaja es que el proceso adicional de procesado de
frames por un ruteador puede incrementar el tiempo de espera o reducir el desempeño del ruteador
cuando se compara con una simple arquitectura de switch.
ENCAMINAMIENTO O RUTEAMIENTO
- El subsistema de Comunicación de datos, proporciona la conexión entre dos puntos
terminales de la red y la distribución de datos o mensajes.



La conexión es encaminada (por la red) a través de diferentes puntos o nodos de
conmutación, dependiendo de la configuración de la red y del grado de ocupación
de cada camino.
la única excepción es el caso de las redes de difusión, aunque es interesante el
análisis cuando el origen y destino están en redes diferentes.
los algoritmos que seleccionan las rutas y las estructuras de datos que utilizan,
representan una de las áreas principales en el diseño de la capa de red.
modalidad de encaminamiento


encaminamiento
sub sistema de comunicaciones

- Fijo o no adaptativo

- Adaptativo


nodos o
centrales de conmutación


línea telefónica
microondas


enlaces
satélite


radio enlace
infrarrojos
ENCADENAMIENTO FIJO O NO ADAPTATIVO:

establece un camino físico fijo entre dos ECD en el subsistema de comunicación.

El mismo camino será usado para el intercambio de mensajes mientras dure la
conexión entre los ETD.
ENCAMINAMIENTO ADAPTATIVO
- El camino seguido por los mensajes se modifica dinámicamente.
6.3 Algoritmos de encaminamiento
- Cada nodo está controlado por un computador, recibe un paquete el cual debe ser enviado
al nodo vecino en el camino al destino.
- problema fundamental:
* Establecer un camino continuo (ruta), el cual incorpora nodos y enlaces, entre los ECD o
nodos terminales.
- Condiciones (alternativas):
* encontrar el camino más corto.
* minimizar número de nodos visitados.
* minimizar tiempo de transito.
- el procedimiento (algoritmo) seguido por el nodo para determinar por cual enlace enviará
el paquete, o sea, la selección del nodo vecino dependerá de la estrategia utilizada para
encaminamiento en la red.
- estrategia * deterministico o fijo
* estocástico o adaptativo
Algoritmo de retransmisión adaptativo [Ste94, Jac88]
El ajuste del temporizador de retransmisión, RTO (Retransmission Time Out), es
especialmente crítico en TCP, al actuar tanto en redes locales, en enlaces punto a punto o en
una red tan cambiante como Internet. Debe asegurarse un mecanismo que funcione
correctamente en entornos tan diferentes como en los que opera TCP. RTO debe ser
suficientemente pequeño como para responder rápidamente a las pérdidas, pero no tanto
como para forzar la retransmisión de datos que han sufrido un pico de retardo en la red sin
haber llegado a perderse, como sería el caso de congestión.
Para adaptarse a los retardos variables característicos de un entorno como Internet, TCP usa
un algoritmo de retransmisión adaptativo que monitoriza el retardo en cada conexión y
ajusta
el valor de RTO de acuerdo con ese valor. La especificación del protocolo sugiere tomar
muestras del tiempo de ida y vuelta, RTT (Round Trip Time), calculado como la diferencia
de
tiempo entre la emisión de un segmento y la recepción de su reconocimiento. Con esta
información, TCP puede ajustar dinámicamente una variable que identifique el tiempo
medio
de ida y vuelta, de la siguiente forma:
RTT= α ∗ RTTanterior + (1-α) ∗ RTTnuevo
2-4
Finalmente el tiempo de retransmisión, se ajusta a:
RTO= β ∗ RTT
Los valores recomendados de α y β son 0.9 y 2 respectivamente, para el caso de redes fijas.
Dado que estos valores han sido hallados experimentalmente, no se asegura el buen
funcionamiento del algoritmo en circunstancias muy particulares.
Esta estrategia, no obstante, no se adapta a fluctuaciones importantes en RTT provocando
retransmisiones innecesarias. Se hace necesario introducir una estimación, también, de la
varianza del tiempo de ida y vuelta, por lo tanto:
RTO= a + 4 ∗ d
a: RTT medio
d: estimador de la desviación media de RTT
Cada vez que se obtiene una nueva muestra del tiempo de ida y vuelta, m, los estimadores
se
actualizan así:
Err=m - a
a= a + g ∗ Err
d=d + h ∗
-d)
Los valores recomendados para g y h son 0.125 y 0.25 respectivamente, también obtenidos
experimentalmente.
Ruta más corta - Solución por el algoritmo de Dijkstra
Para solucionar el problema de la ruta más corta entre dos nodos de un grafo se puede
utilizar el Algoritmo de Dijkstra, el cual sigue el siguiente procedimiento para calcular la
ruta más corta desde el nodo origen hasta cada uno de los nodos del grafo:


Crea una listas de nodos para almacenar los nodos con distancia mínima ya
calculada
Crear una cola de prioridad para los nodos pendientes de evaluar



Inserta el nodo origen a la cola de prioridad
Mientras que haya nodos en la cola de prioridad
o Extrae el primer nodo de la cola de prioridad (tmp)
o Agrega el nodo tmp a la lista de nodos ya calculados
o Genera una lista de los nodos conectados al nodo tmp que no estén en la lista
de ya calculados
o Para cada nodo de la lista (nod)
 Calcula la distancia al origen con la distancia entre tmp y nod más la
distancia calculada entre el origen y tmp.
 Si el nodo nod no está en la cola de prioridad lo agrega
 Si el nodo nod ya está en la cola de prioridad y la distancia con la
que está guardado en la cola es menor, lo deja como está y sino, lo
actualiza con la distancia calculada
o Fin
Fin
Al finalizar este procedimiento se tiene una lista con la menor distancia desde el origen a
cada nodo.
La clase Grafo descrita en un post anterior se puede modificar para incluir un nuevo
método que calcula la menor ruta usando el algoritmo de Dijkstra con dos nuevos métodos:
uno para calcular la distancia entre el origen y todos lo nodos, guardando estos resultados
en una lista, y el segundo para mostrar la ruta entre el origen y el nodo destino tomando la
información de la lista de distancias calculadas. Se implementa también un método
adicional para verificar si un nodo ya está en la lista de terminados:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.util.*;
public class Grafo {
char[] nodos; // Letras de identificación de nodo
int[][] grafo; // Matriz de distancias entre nodos
String rutaMasCorta; // distancia más corta
int longitudMasCorta = Integer.MAX_VALUE; // ruta más corta
List<Nodo> listos=null; // nodos revisados Dijkstra
// construye el grafo con la serie de identificadores de nodo en una cadena
Grafo(String serieNodos) {
nodos = serieNodos.toCharArray();
grafo = new int[nodos.length][nodos.length];
}
// asigna el tamaño de la arista entre dos nodos
public void agregarRuta(char origen, char destino, int distancia) {
int n1 = posicionNodo(origen);
int n2 = posicionNodo(destino);
grafo[n1][n2]=distancia;
grafo[n2][n1]=distancia;
}
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// retorna la posición en el arreglo de un nodo específico
private int posicionNodo(char nodo) {
for(int i=0; i<nodos.length; i++) {
if(nodos[i]==nodo) return i;
}
return -1;
}
// encuentra la ruta más corta desde un nodo origen a un nodo destino
public String encontrarRutaMinimaDijkstra(char inicio, char fin) {
// calcula la ruta más corta del inicio a los demás
encontrarRutaMinimaDijkstra(inicio);
// recupera el nodo final de la lista de terminados
Nodo tmp = new Nodo(fin);
if(!listos.contains(tmp)) {
System.out.println("Error, nodo no alcanzable");
return "Bye";
}
tmp = listos.get(listos.indexOf(tmp));
int distancia = tmp.distancia;
// crea una pila para almacenar la ruta desde el nodo final al origen
Stack<Nodo> pila = new Stack<Nodo>();
while(tmp != null) {
pila.add(tmp);
tmp = tmp.procedencia;
}
String ruta = "";
// recorre la pila para armar la ruta en el orden correcto
while(!pila.isEmpty()) ruta+=(pila.pop().id + " ");
return distancia + ": " + ruta;
}
// encuentra la ruta más corta desde el nodo inicial a todos los demás
public void encontrarRutaMinimaDijkstra(char inicio) {
Queue<Nodo> cola = new PriorityQueue<Nodo>(); // cola de prioridad
Nodo ni = new Nodo(inicio); // nodo inicial
listos = new LinkedList<Nodo>();// lista de nodos ya revisados
cola.add(ni); // Agregar nodo inicial a la cola de prioridad
while(!cola.isEmpty()) { // mientras que la cola no esta vacia
Nodo tmp = cola.poll(); // saca el primer elemento
listos.add(tmp); // lo manda a la lista de terminados
int p = posicionNodo(tmp.id);
for(int j=0; j<grafo[p].length; j++) { // revisa los nodos hijos del nodo tmp
if(grafo[p][j]==0) continue; // si no hay conexión no lo evalua
if(estaTerminado(j)) continue; // si ya fue agregado a la lista de terminados
Nodo nod = new Nodo(nodos[j],tmp.distancia+grafo[p][j],tmp);
// si no está en la cola de prioridad, lo agrega
if(!cola.contains(nod)) {
cola.add(nod);
67 continue;
68 }
69 // si ya está en la cola de prioridad actualiza la distancia menor
70 for(Nodo x: cola) {
71 // si la distancia en la cola es mayor que la distancia calculada
72 if(x.id==nod.id && x.distancia > nod.distancia) {
73 cola.remove(x); // remueve el nodo de la cola
74 cola.add(nod); // agrega el nodo con la nueva distancia
75 break; // no sigue revisando
76 }
77 }
78 }
79 }
80 }
81 // verifica si un nodo ya está en lista de terminados
82 public boolean estaTerminado(int j) {
83 Nodo tmp = new Nodo(nodos[j]);
84 return listos.contains(tmp);
85 }
86 // encontrar la ruta mínima por fuerza bruta
87 public void encontrarRutaMinimaFuerzaBruta(char inicio, char fin) {
88 int p1 = posicionNodo(inicio);
89 int p2 = posicionNodo(fin);
90 // cola para almacenar cada ruta que está siendo evaluada
91 Stack<Integer> resultado = new Stack<Integer>();
92 resultado.push(p1);
93 recorrerRutas(p1, p2, resultado);
94 }
95 // recorre recursivamente las rutas entre un nodo inicial y un nodo final
96 // almacenando en una cola cada nodo visitado
97 private void recorrerRutas(int nodoI, int nodoF, Stack<Integer> resultado) {
98 // si el nodo inicial es igual al final se evalúa la ruta en revisión
99 if(nodoI==nodoF) {
100int respuesta = evaluar(resultado);
101if(respuesta < longitudMasCorta) {
102longitudMasCorta = respuesta;
103rutaMasCorta = "";
104for(int x: resultado) rutaMasCorta+=(nodos[x]+" ");
105}
106return;
107}
108// Si el nodoInicial no es igual al final se crea una lista con todos los nodos
109// adyacentes al nodo inicial que no estén en la ruta en evaluación
110List<Integer> lista = new Vector<Integer>();
111for(int i=0; i<grafo.length;i++) {
112if(grafo[nodoI][i]!=0 && !resultado.contains(i))lista.add(i);
113}
114// se recorren todas las rutas formadas con los nodos adyacentes al inicial
115for(int nodo: lista) {
116resultado.push(nodo);
117recorrerRutas(nodo, nodoF, resultado);
118resultado.pop();
119}
120}
121// evaluar la longitud de una ruta
122public int evaluar(Stack<Integer> resultado) {
123int resp = 0;
124int[] r = new int[resultado.size()];
125int i = 0;
126for(int x: resultado) r[i++]=x;
127for(i=1; i<r.length; i++) resp+=grafo[r[i]][r[i-1]];
128return resp;
129}
130public static void main(String[] args) {
131Grafo g = new Grafo("abcdef");
132g.agregarRuta('a','b', 3);
133g.agregarRuta('a','e', 6);
134g.agregarRuta('a','f',10);
135g.agregarRuta('b','c', 5);
136g.agregarRuta('b','e', 2);
137g.agregarRuta('c','d', 8);
138g.agregarRuta('c','e', 9);
139g.agregarRuta('c','f', 7);
140g.agregarRuta('d','f', 4);
141g.agregarRuta('e','f', 4);
142char inicio = 'a';
143char fin = 'd';
144String respuesta = g.encontrarRutaMinimaDijkstra(inicio, fin);
145System.out.println(respuesta);
146}
147}
Esta clase requiere del uso adicionalmente de la clase Nodo, que va a servir para la cola de
prioridad y para llevar registro de la distancia mínima desde el origen a un nodo, así como
la
referencia
al
nodo
inmediatamente
anterior:
?
1
2
3
4
5
6
public class Nodo implements Comparable<Nodo> {
char id;
int distancia = Integer.MAX_VALUE;
Nodo procedencia = null;
Nodo(char x, int d, Nodo p) { id=x; distancia=d; procedencia=p; }
Nodo(char x) { this(x, 0, null); }
7 public int compareTo(Nodo tmp) { return this.distancia-tmp.distancia; }
8 public boolean equals(Object o) {
9 Nodo tmp = (Nodo) o;
10if(tmp.id==this.id) return true;
11return false;
12}
13}
El algoritmo de encaminamiento
El método utilizado por un router o un host para averiguar la siguiente máquina a la que
debe enviar un determinado datagrama se denomina genéricamente como el “algoritmo de
encaminamiento”.
La gran mayoría de algoritmos de encaminamiento utilizan “tablas de encaminamiento”. En
las tablas de encaminamiento de cada hosto router se almacena información sobre los
posibles destinos y sobre cómo alcanzarlos. La información que contienen las tablas de
encaminamiento debe ser mínima, ya que si cada tabla de encaminamiento contuviera
información sobre cada posible dirección destino sería imposible mantener actualizadas las
tablas. Además, las máquinas no tendrían suficiente espacio ni capacidad de proceso para
manejarlas.
Se trata de minimizar la información que deben guardar las tablas aplicando un esquema de
ocultación de información global, manteniendo sólo la información local mínima necesaria.
Afortunadamente el esquema de direccionamiento IP permite realizar esto de forma fácil:
como se mencionó en la sección 3.2, la dirección IP se divide en número de red y en
número de host. Mediante este esquema es posible almacenar números de red en las tablas
de encaminamiento en lugar de direcciones IP completas. De esta forma se ocultan los
detalles de qué hosts y cómo están conectados a las diferentes redes y se minimiza el
tamaño de las tablas de encaminamiento.
El contenido de las tablas de encaminamiento suelen ser pares del tipo <N,R>. Donde N es
un número de red y R es la dirección IP delrouter en el siguiente salto para alcanzar dicha
red (por tanto el router debe estar conectado a la misma red física).
Para simplificar más las tablas de encaminamiento aparece el concepto de “ruta por
defecto”. La ruta por defecto contiene la dirección del router del siguiente salto al que se
deben enviar los datagramas (también denominado routerpor defecto) si tras recorrer la
tabla de encaminamiento no se encontró ninguna ruta específica para el número de red al
que va dirigido el datagrama.
Aunque se ha comentado la conveniencia de encaminar en base al número de red destino, la
tabla de encaminamiento permite especificar una ruta especial para un host en particular.
De esta forma el algoritmo básico de encaminamiento de un datagrama IP es el siguiente:
1. Extraer la dirección IP destino D.
2. Computar el prefijo de red N con la máscara local.
3. Si N se corresponde con alguna red física a la que estamos conectados se realiza
entrega directa (realizando ARP).
4. Si no se puede realizar entrega directa, se comprueba si hay ruta específica para D y
en caso afirmativo se envía el datagrama al routerdel salto siguiente especificado en
la tabla.
5. Si no hay ruta específica, se comprueba si hay una ruta para la red N y en caso
afirmativo se envía el datagrama al router del salto siguiente especificado en la
tabla.
6. Si no hay ruta para N, se envía el datagrama al router por defecto especificado en la
tabla.
7. Si no hay ruta por defecto y el software de encaminamiento IP ha llegado a este
punto se produce un error (que se puede reportar mediante ICMP).
Como conclusiones importantes del algoritmo de encaminamiento IP podemos destacar
que:
1. En la mayor parte de implementaciones, el tráfico dirigido a una determinada red
desde un host origen va a seguir el mismo camino aunque existan diversas
posibilidades.
2. Sólo el último router de la ruta puede determinar si el hostdestino está disponible
(estas situaciones se reportan mediante ICMP). Además también necesitamos
reportes de los routers intermedios si sucede algún problema.
3. Los datagramas que viajen de A a B pueden seguir rutas diferentes a los datagramas
que viajen de B a A.
La figura 3.11 muestra 4 redes interconectados a través de 2 routers y la tabla de rutas del
routerR1.
Figura 3.11: Ejemplo de encaminamiento
Es importante entender que a excepción de la disminución del campo TTL el software de
encaminamiento no modifica la cabecera del datagrama original. En particular, las
direcciones IP origen y destino permanecen inalteradas durante toda la ruta6.
Por lo que respecta a los datagramas entrantes:

Cuando un datagrama llega a un host el driver del dispositivo de red lo entrega al
software IP para su procesamiento. Elsoftware IP determina si el datagrama es para
el propio hosten cuyo caso lo pasa al software del protocolo de nivel alto apropiado.
El datagrama se descarta si no es para el propio host.

En el caso de los routers, estos deben encaminar el datagrama si no va dirigido hacia
ellos.
Decidir si una máquina es o no la destinataria de un datagrama no es una tarea tan trivial
como a simple vista pueda parecer. En primer lugar pueden haber muchos interfaces de red
cada uno de ellos con su correspondiente dirección IP, se debe comprobar la
correspondiente identificación de subred (si la red está dividida) y además se deben
reconocer los mensajes de broadcast y los de multicast.
LA CONGESTIÓN DE REDES
es el fenómeno producido cuando a la red (o parte de ella) se le ofrece más tráfico del que
puede cursar.
Causas de la congestión
Hay varias causas de congestión. Las más importantes son:

La Memoria insuficiente de los conmutadores.
Los paquetes se reciben demasiado deprisa para ser procesados (lo que produce que
se llene la memoria de entrada). Además puede ser que en la memoria de salida
haya demasiados paquetes esperando ser atendidos, entonces se llena memoria de
salida.

Insuficiente CPU en los nodos.
Puede que el nodo sea incapaz de procesar toda la información que le llega, con lo
que hará que se saturen las colas.

Velocidad insuficiente de las líneas.
Control de una congestión
Comprende todo un conjunto de técnicas para detectar y corregir los problemas que surgen
cuando no todo el tráfico de una red puede ser cursado.
Mecanismos de control de una congestión
El problema del control de congestión puede enfocarse matemáticamente desde el punto de
vista de la teoría de control de procesos, y según esto pueden proponerse soluciones en
bucle abierto y en bucle cerrado.
Soluciones
Soluciones en bucle abierto
También llamadas soluciones pasivas. Combaten la congestión de las redes mediante un
adecuado diseño de las mismas. Existen múltiples variables con las que el diseñador puede
jugar a la hora de diseñar la red. Estas variables influirán en el comportamiento de la red
frente a la congestión. Las resumiremos en función del nivel del modelo OSI al que hacen
referencia:

Nivel de enlace.
Variables de diseño:




Diseño de temporizadores y política de retransmisiones: Cuando los
temporizadores agotan su cuenta, los paquetes afectados serán
retransmitidos por la fuente. Si este tiempo es muy pequeño, habrá gran
cantidad de retransmisiones. Por el contrario, si es grande, habrá menos
congestión, pero el retardo medio aumentará. Además, podemos controlar lo
que se retransmite cuando el temporizador se agota.
Política de descartes y almacenamiento de paquetes que llegan fuera de
orden: El rechazo puede ser simple, que origina más retransmisiones, o bien
selectivo, obligando a un almacenamiento temporal de los paquetes que
llegan fuera de orden y mejorando la congestión.
Política de asentimientos: El piggybacking, o utilización de parte de un
paquete de datos para enviar asentimientos de paquetes anteriormente
recibidos, reduce, en principio, el tráfico, pero puede dar lugar a
retransmisiones que contribuyan a la congestión.
Política de control de flujo: Parando a una fuente que vierte mucho tráfico
podemos reducir el riesgo de congestión.

Nivel de Red.
Variables de diseño:






Circuitos Virtuales frente a datagramas: Muchos algoritmos de control de
congestión funcionan sólo en modo circuito virtual.
Política de colas (Teoría de colas) y de servicio: Los routers pueden
diseñarse con una cola por línea de entrada, una cola por línea de salida, o
ambos. Además, puede jugarse con el orden en que los paquetes son
procesados, dando más prioridad a los paquetes de control, que contienen
información útil desde el punto de vista de la congestión.
Política de descarte de paquetes: De nuevo, la correcta elección de los
paquetes que se descartan puede disminuir el riesgo de congestión.
Algoritmo de enrutamiento: Es bueno desde el punto de vista de la
congestión el balanceo del tráfico entre todas las líneas de la red.
Tiempo de vida de los paquetes: La correcta elección de esta variable
permite reducir el número de retransmisiones, mejorando así el
comportamiento de la red desde el punto de vista de la congestión.
Nivel de transporte.
Análogo al nivel de enlace, pero entre sistemas finales.
Soluciones en bucle cerrado
También llamadas soluciones activas. Actúan cuando se detectan problemas.
Tienen tres fases:
a) Monitorización de parámetros. Se vigilan los siguientes parámetros:
1. Ocupación de los enlaces y de los buffers (colas de espera en los nodos).
2. Porcentaje de descartes.
3. Número de retransmisiones.
4. Retardos y jitters.
Los jitters son oscilaciones de la separación temporal entre paquetes. En
aplicaciones que requieren sincronización (videoconferencia, sincronizar audio con
vídeo), es muy importante que esas oscilaciones sean pequeñas.
b) Reacción: envío de información a los puntos necesarios. La comunicación se
realiza gracias a:
1. Paquetes especiales.
No están sometidos a control de congestión y se saltan las colas de espera en los
nodos. Los envía el nodo que, gracias a la monitorización, ha detectado la
congestión.
2. Bits de cabecera.
En los paquetes enviados, indico en la cabecera que empieza a haber congestión.
(Ejemplo: Frame Relay).
3. Información específica.
Si se recibe una alerta de congestión (mediante bits de cabecera de paquetes que
circulan por la red), se solicita más información.
c) Ajuste del sistema. Hay varias medidas:
1. Reducir la velocidad de envío
2. Control de acceso. No se permiten más conexiones.
3. Tirar paquetes. Controlar ráfagas de paquetes que llegan.
Algoritmos de control de congestión
Se describen dos algoritmos en bucle cerrado: el algoritmo de descarte de paquetes, y un
algoritmo de paquetes reguladores, así como un algoritmo en bucle abierto llamado
mecanismo de Traffic Shaping.
Algoritmo de descarte de paquetes
Es un algoritmo de control de congestión en bucle cerrado. Se basa en que los nodos
descartan paquetes cuando su ocupación es alta. Para esto los nodos han de conocer sus
recursos (CPU y memoria). Hace una asignación dinámica de los buffers en base a las
necesidades de cada línea.
Sin embargo, cada línea necesita al menos una (o más) posiciones de memoria para
gestionar información relevante, tal como asentimientos, que permite la liberación de
posiciones de memoria ocupadas por paquetes que estaban esperando por si necesitaban
retransmitirse.
Si a la línea llegan datos (no asentiminentos u otra información relevante) y el buffers de
salida de la línea correspondiente está lleno, se descarta el paquete. Hay varias formas de
hacer la asignación de buffers:
a) En base al uso.
No es muy eficiente, porque cuando una línea se empieza a cargar acapara todos los
recursos.
b) Asignación fija.
Tampoco es muy buena, ya que desaprovecha recursos.
c) Asignación subóptima (de Irland).
Algoritmo de paquetes reguladores
En terminología inglesa, al paquete regulador se le llama choke packet. Se hace en bucle
cerrado. Asocia un peso a cada línea que cambia con el tiempo.
Si el peso supera un cierto umbral, se pone la línea en estado de alerta y se considera que
puede haber congestión.
Si pasa un determinado tiempo sin recibir notificaciones de congestión, se vuelve a subir el
flujo que puede cursar el origen. Si por el contrario se supera un umbral mayor, se pasa
directamente a hacer descarte de paquetes.
Se fundamenta en la siguiente función: Un=a·Un-1 + (1-a)·f donde:



Un es una función del peso que depende del instante actual a través de f y del
instante anterior a través de Un-1
f tiene el valor 0 si no se transmite en el instante actual y 1 si se trata del instante
actual.
a es una constante, cuyo valor debe estar entre 0 y 1 y que debe de asignarse según
la importancia dada a cada enlace.
En el momento en que Un alcanza el primer valor umbral asignado, la línea se colca en
alerta, por lo que se envía un paquete regulador hacia atrás. En los sucesivos paquetes que
el nodo anterior envía hacia adelante se coloca un flag a 1 que indica que el enrutador
anterior está avisado. Este enrutador reduce su flujo de trasmisión y si, en un tiempo
estipulado, no vuelve a recibir un paquete regulador aumenta de nuevo su flujo de
transmisión. Si se alcanza el segundo valor umbral asignado, se pasa a descartar paquetes.
Variaciones de este algoritmo:


Pueden mandarse paquetes reguladores con información de estado (grave, muy
grave, etc.) .
En vez de monitorizar las líneas de salida pueden medirse otros parámetros, tales
como el tamaño de las colas en los nodos.
Mecanismo de Traffic Shaping
Traffic Shaping significa conformado de tráfico. Es un mecanismo en bucle abierto.
Conforma el tráfico que una fuente puede inyectar a la red. Se usa en redes ATM
(Asynchronous Transfer Mode) con una tecnología de red orientada a conexión.
Si se tiene una ráfaga lista para transmitir, el sistema obliga a no transmitir todo seguido
(porque conforma el tráfico). Requiere un acuerdo entre proveedor y cliente.
El proveedor garantiza que se cursa el tráfico si se transmite a una tasa determinada y tira el
tráfico si se supera. Esto puede realizarse mediante un algoritmo de Leaky Bucket (cubo
agujereado), cuyo nombre se debe a que el sistema se comporta como un bidón que se va
llenando con un caudal determinado y por el que sale el líquido con otro caudal (menor)
distinto. Si llenamos muy deprisa el bidón acabará llenándose y vertiéndose por arriba, lo
que asemeja una pérdida de paquetes en una red.
Descargar