Subsecciones

- 3.2.1 La importancia del sistema de comunicación
- 3.2.2 Topologías de red
  - 3.2.2.1 Redes estáticas
  - 3.2.2.2 Redes dinámicas
- 3.2.3 Tecnologías de red
- 3.2.4 Protocolos utilizados a nivel de red
- 3.2.5 Protocolos utilizados a nivel de transporte (UDP/TCP)
  - 3.2.5.1 Protocolos de transporte
  - 3.2.5.2 UDP
  - 3.2.5.3 TCP
- 3.2.6 Diseño de redes
  - 3.2.6.1 Factores a tener en cuenta al diseñar una red
- 3.2.7 Conclusiones

# 3.2 LA IMPORTANCIA DE LA RED

## 3.2.1 La importancia del sistema de comunicación

En los clusters la eficacia del sistema de comunicación es crítica. Si las comunicaciones fallan el cluster dejará de ser un cluster y se convertirá en un conjunto de máquinas que no cooperarán, algo lejos del objetivo. Por lo tanto es usual disponer en sistemas cluster de alta disponibilidad de una red alternativa por si la red principal fallara. Cabe decir que una red es un elemento bastante fiable a nivel físico: es difícil que una vez instalada y probada, falle. Sobre las topologías y tecnologías de red que existen se hablará en las próximas secciones.

Otro tema importante de la red es la eficiencia: de nada sirve una red si está congestionada. Hay que tener en cuenta que todas las comunicaciones entre nodos pasan a través de la red; dependiendo de la cantidad de nodos la red puede ser la culpable directa de mermar la eficacia computacional del cluster. Es por esta razón que la inversión en una red tecnológicamente moderna es habitual en estos sistemas.

## 3.2.2 Topologías de red

Existen muchas topologías de red que se han impuesto en diversos entornos, cada una de estas topologías tienen sus propios puntos fuertes.

Las topologías estáticas son topologías donde una vez hechas las conexiones, éstas no cambian. Las redes dinámicas están construidas con elementos que se pueden conectar entre varios caminos, esto hace que si un camino está siendo usado se pueda usar otro, permitiendo más paralelismo. La topología de la red influye mucho en el grado de paralelismo que se pueda alcanzar.

### 3.2.2.1 Redes estáticas

Las redes estáticas fueron las primeras en aparecer. En estas redes se distingue entre redes punto a punto y redes con acceso a medio compartido. Van a verse los ejemplos más usados, explicando las ventajas y los inconvenientes de cada una de ellos. Entre las redes punto a punto destacan:

- Lineal.

  Todos los nodos están conectados de forma lineal; como la comunicación es de punto a punto el peor caso es cuando un nodo de una esquina quiera conectar con un nodo que esté en la otra esquina. En este caso se necesitan `N-1` pasos para llegar hasta el destino, siendo `N` el número de nodos en la red.

- Anillo.

  Es similar al caso de la red lineal pero los nodos de las esquinas están unidos entre sísto tiene la ventaja que añadiendo un solo enlace más se consigue que el diámetro de la red pase de `N-1` a pues ahora los dos nodos más alejados son los que estén en dos puntos extremos de un anillo con la mitad de los nodos en cada lado hasta llegar hasta ellos.

- Estrella.

  Hay un nodo central que se conecta con todos los demás nodos. Todos los nodos sólo se conectan al nodo central. Esto tiene la ventaja de que en 2 pasos se llega desde cualquier nodo a cualquier otro (excepto el central que solo necesita uno). Pero la desventaja que el nodo central tiene que soportar mucha sobrecarga, pues tiene que llevar todas las comunicaciones que están ocurriendo. Además si ese nodo central cayera, la red dejaría de funcionar.

- Árbol.

  Cada nodo puede tener unido a él varios nodos hijos y está unido a un nodo padre, menos el nodo raíz y los nodos hoja.

  Una variante muy usada es el árbol binario en el que cada nodo tiene como máximo 2 nodos hijos. Esto hace que se puedan hacer varios cálculos (recorridos, ...) de forma más efectiva.

  Una mejora de este árbol es el árbol jerárquico que consta de más enlaces según se sube en las ramas del árbol, esto es así porque los padres tienen que llevar a cabo todas las comunicaciones que quieran hacer sus hijos que no tengan como destinatarios a sus hermanos y como a cuanta más altura más hijos tiene cada padre (entendiendo por hijos: hijos, nietos, bisnietos, etc.) hay más comunicaciones de las que el padre se tiene que hacer cargo por lo que se necesitan más posibilidades de comunicación. Los pasos que tiene que seguir un dato de uno de los nodos para que llegar a su nodo más lejano es .

- Malla.

  Los nodos están conectados en una red 2D. Cada uno se conecta con otros cuatro nodos excepto los nodos que están en los bordes de la malla que se conectan a 2 o 3 nodos. El aspecto que tiene esta forma de conectar una red es como un tablero de ajedrez donde los puntos donde se cruzan las líneas son los nodos y las líneas son los medios de comunicación. Los pasos que se tienen que seguir para que un dato llegue de un nodo a su nodo más alejado son siendo `r` el número de nodos por lado que hay. Suele implementarse en circuitos para soportar multiprocesadores.

- Sistólica.

  Muy parecida a la malla 2D pero existen más conexiones entre los elementos: 6 conexiones. Es una red más cara de construir pero que necesita menos pasos para llegar los datos de un nodo a otro nodo.

- Totalmente conectada.

  Esta red es la más cara de construir porque cada nodo está conectado a todos los demás. Esto permite que un dato llegue de un nodo a cualquier otro en 1 paso, minimizándose al máximo el tiempo gastado en el traspaso de información. Esta configuración sólo es viable para un número de nodos pequeño.

- Hipercubo.

  Es una malla de `N` dimensiones, este número de dimensiones es el grado del hipercubo. En esta malla cada nodo conecta con un número de nodos igual al grado del hipercubo, el número de nodos del que dispone el hipercubo es . En esta configuración todos los nodos son iguales, conectan con el mismo número de nodos.

  Aunque es un poco difícil de visualizar con grados mayor que el grado tres, es una configuración bastante usada (Intel hizo en su día una red de este tipo con procesadores 286).

Figura: La importancia de la red. Topología de redes estáticas

### 3.2.2.2 Redes dinámicas

Estas redes cambian su topología dinámicamente: cuando dos nodos necesitan conectarse la red puede cambiar de tal forma que se puedan conectar, así no se necesita pasar por todos los nodos o crear una complicada estructura de conexión. En el caso anterior los nodos tenían que proveer de las capacidades que necesitaba la red (por ejemplo el nodo central de una red tipo estrella tenía que tener características especiales) . Este es el caso donde la red es controlada por los nodos. La red está formada de cajas de conmutación: cambiando las cajas de conmutación se cambia la red.

Hay dos tipos de redes dinámicas:

- Redes monoetapa: sólo necesitan un paso para conectar dos nodos diferentes (una sola etapa).

- Redes multietapa: realizan las conexiones entre los nodos en más de un paso.

En las redes monoetapa si no se puede acceder desde cualquier elemento a otro cualquiera se necesita recircular la información.

Dentro de este tipo de redes es de especial interés el caso de la red de barras cruzadas: los procesadores tanto formando una linea en horizontal como en vertical y unas vias los conectan; cuando un procesador se quiere comunicar con otro, la posición (proc X, proc Y) se activa con lo que se hace una conexión.

Esto permite que todos los procesadores puedan mantener conexiones independientes. Mientras que no haya dos procesadores que quieran comunicarse con un mismo procesador no habrá ningún problema. Este esquema es bastante caro y no merece la pena si no se hacen muchas conexiones simultáneas.

Figura: La importancia de la red. Barras cruzadas

Las redes multietapa son más complejas. Para comprenderlas primero tenemos que comprender las cajas de conmutación. Las cajas de conmutación tienen dos entradas y dos salidas. Para un ejemplo las entradas se llamaran `e1` y `e2` y las salidas `s1` y `s2`. Se pueden formar cuatro posibles configuraciones, según se relacionan las entradas con las salidas:

- Paso directo: las dos entradas pasan directamente a las 2 salidas. La entrada `e1` sale por la salida `s1` y la entrada `e2` sale por la entrada `s2`.

- Cruce: las salidas salen en sentido inverso a las entradas. La entrada `e1` se conecta con la salida `s2` y la entrada `e2` se conecta con la salida `s1`.

- Difusión inferior: ésta y la siguiente configuración se usan para hacer broadcast. En esta configuración la entrada `e1` se conecta a la salida `s1` y `s2` y la entrada `e2` se deja sin conectar. Por lo tanto se asegura que por `e2` no está pasando una comunicación para realizar esta operación.

- Difusión superior: similar al caso anterior, pero ahora es la entrada `e2` la que se conecta a las salidas `s1` y `s2` y la entrada `e1` la que no se conecta a nada.

Se pueden dividir las redes multietapa en tres tipos:

- Con bloqueo: en estas redes para llegar de un nodo a otro solo hay un camino, para ahorrar conexiones, gracias a las cajas de conmutación varios caminos van a una caja por lo que puede ocurrir que la conexión simultánea de varios nodos produzca conflictos. Tras realizar una asociación entre dos nodos, intentar hacer otra asociación puede bloquear.

  Figura: La importancia de la red. Red dinámica con bloqueo

  En este ejemplo si los dos primeros nodos quieren conectar con el primer nodo, tendrán que esperar porque los dos necesitan el mismo enlace.

- Reordenables: existen varios caminos para llegar al mismo lugar, siempre se puede conectar otro camino, pero quizás habría que reordenar la situación. Estas redes son más complejas pero aunque se necesite reordenación, podemos conectar simultáneamente los nodos. Además estas redes se pueden construir de un tamaño arbitrario usando el método de red de benes, solo hay que unir redes de este tipo de potencia de 2 para conseguirlo.

  Figura: La importancia de la red. Red dinámica reordenable

- Sin bloqueo: estas redes pueden manejar todas las conexiones posibles sin que se produzcan bloqueos, para conseguir esto, todas las cajas de conmutación de un nivel (una columna) se conectan a todas las cajas de conmutación de la siguiente columna.

## 3.2.3 Tecnologías de red

Van a verse las tecnologías de red más usadas en el clustering. Estas tecnologías son las mismas que imperan en el mundo de las redes locales de medio y alto rendimiento y son:

- Serie
- Ethernet
- Fast Ethernet
- Gigabit Ethernet
- ATM

Por supuesto estas no son las únicas tecnologías existentes, pero si que son las más comunes. Las comunicaciones a través de Token Ring o sus derivados quedan fuera de este tema.

- Serie: puede ser un poco sorprendente ver este método de comunicación aquí pero al menos una aplicación muy importante puede usarlo por lo que puede ser un buen método de comunicación si se necesita una forma sencilla de comunicarse con otro nodo.

  La aplicación que usa este método es Heartbeat del que se habla con más detalle en el capítulo de clusters HA. La comunicación serie es perfecta para esta aplicación pues sus pequeños pulsos no necesitan gran ancho de banda pero en un medio compartido como Ethernet pueden ocasionar colisiones que afecten en gran medida al rendimiento de otras comunicaciones que se lleven a cabo en el cluster.

- Ethernet: la velocidad máxima teórica es de 10 Mb/segundo y aunque hace pocos años era un estandar y estaba muy extendido el uso de esta tecnología en redes locales, la caída de los precios de los equipos de 100 Mb/segundo (Fast Ethernet) ha hecho que esta tecnología quede desfasada.

  Ethernet está especificado en el estandard IEEE 802.3, es half duplex. Existe un medio compartido que físicamente puede ser topología tipo bus (por ejemplo de cable coaxial) o en topología tipo estrella con un hub o un switch como elemento central. El acceso al medio compartido se gestiona con CSMA/CD (Carrier Sense Medium Access/Colision Detection) Esto quiere decir que la tarjeta de red antes de enviar la información escucha la linea mirando el voltaje de la línea sabe si hay datos o no en ella.

  Si no hay datos, envía sus datos y se pone a escuchar la línea, si el voltaje es superior a un determinado umbral, más de una tarjeta está intentando enviar datos a la línea a la vez. En este caso, se considera que los datos que se enviaron se enviaron con errores y se vuelve a intentar enviarlos tras un tiempo aleatorio (, siendo el número de intento). Este método de acceso al medio impone ciertas condiciones a las redes Ethernet. Por ejemplo tiene que haber un tamaño mínimo de paquete (46 bytes) y una longitud máxima de segmento.

  Es de especial mención la gran diferencia que existe entre usar un hub y un switch. El hub simplemente conecta todos los cables que le entran con todos, sirve pues para tener una topología física de estrella. A su vez pero se obtiene una topología lógica de bus; esto tiene la ventaja de que si se corta un cable sólo se incomunica un ordenador, no todos. El switch en cambio, a parte de tener la misma función que el hub, sólo conecta los cables de los ordenadores que se están comunicando.

  Hay 2 tipos de switch:

  - Cut-through (al vuelo): en cuanto lee la dirección de destino del paquete lo reenvía por el cable adecuado, así varios ordenadores pueden estar comunicándose simultáneamente siempre que las parejas de ordenadores que se comunican sean distintas.

  - Almacenamiento y reenvío: similar al anterior pero no envía un paquete hasta que lo tiene completo. Esto evita algunas colisiones y elimina los paquetes erróneos lo antes posible, además aporta mejora en la gestión de la red, como conteo de paquetes, filtros y otras opciones que dependen de cada fabricante en cuestión, el problema es que la latencia de la red aumenta.

- Fast Ethernet: Utiliza la misma técnica que Ethernet pero con velocidades de 100 Mb/segundo, puede usar el cableado existente por lo que los cambios se reducen a las tarjetas de red (hoy en día las mismas tarjetas de 10 Mb/segundos también tienen soporte para esta tecnología) y a los concentradores (en los que sí que hay que hacer mayores inversiones pues son bastante más caros). Existen concentradores con puertos 10/100 para facilitar la migración a esta tecnología.

  Como la trama mínima sigue del mismo tamaño, el tamaño máximo de estas redes tiene que ser 10 veces inferior para poder detectar cualquier colisión. Está normalizado en el 802.3u.

- Gigabit Ethernet: esta es la tecnología Ethernet de más reciente aparición, que consigue velocidades de 1 Gbps o superiores y es compatible con las dos tecnologías anteriores. Se disminuye la distancia para detectar colisiones. Se puede usar cables de categoría 5 pero para grandes distancias se recomienda el uso de fibra óptica. Cuando lo que se necesita es una red LAN de altísimas prestaciones (como la que puede necesitar un cluster) y se dispone del dinero necesario, la elección está entre esta tecnología y ATM.

- ATM: se basa en una tecnología de conmutación de celdas. Las celdas son de un tamaño fijo (53 bytes, 5B cabecera + 48B datos), esto simplifica en gran medida el procesamiento de las celdas, acelerando la conmutación y disminuyendo el retardo. Da muchos servicios de valor añadido de los que no dispone Ethernet, por ejemplo permite que la velocidad de transferencia sea fijada dinámicamente bajo demanda.

  No sólo eso, sino que puede garantizar otros factores, como el retardo, por lo que la gran ventaja es el QoS (calidad de servicio) que de forma inherente proporciona. Es una red orientada a conexión y tiene un control del tráfico y de la congestión muy eficiente. Los problemas que plantea frente a otras soluciones es que es una alternativa muy cara: la tecnología es compleja y aún no existen muchas aplicaciones desarrolladas.

## 3.2.4 Protocolos utilizados a nivel de red

Otro tema importante aparte de las topologías o tecnologías de red utilizadas son los protocolos que se adaptan mejor a sistemas cluster. Generalmente la tecnología de red de cluster más utilizada suele ser ATM o Ethernet y dado el precio de los dispositivos ATM suele ser normalmente la segunda.

En cualquier caso, el protocolo más extendido en el uso de las redes de cualquier tipo actualmente es IP (Internet Protocol). IP permite trabajar sobre cualquier tecnología de red, ya que es independiente del medio de comunicación físico. IP es un protocolo no orientado a conexión y no fiable que se basa en técnicas de el mejor esfuerzo (best effort) para encaminar sus paquetes. Esto es en cierto modo una ventaja, en el caso de que se utilice sobre redes no conectivas como pueden ser Ethernet, o una desventaja en redes ATM. En cualquier caso la adaptabilidad del protocolo IP a cualquier red mediante capas que actúan de interfaz permite situar este protocolo por encima de ATM, Frame Relay, Ethernet o redes LAN en general e incluso sobre líneas serie o paralelo.

El protocolo IP se encarga de cumplir los siguientes objetivos en una comunicación:

- Definir el formato de bloques de datos que será enviado, para evitar errores de cabecera o tipo de archivos.

- Esquema de direccionamiento.

- Movimiento de datos entre nivel de transporte y nivel de red, dependiente de cada implementación.

- Encaminamiento de los datagramas.

- Fragmentación y agrupación de los datagramas en el caso de que sea necesario al pasar el paquete por redes de MTU más pequeña.

Es un protocolo ampliamente utilizado y con muchos años de uso. La práctica totalidad de los sistemas que se conectan a redes tienen alguna implementación IP ya sea completa o incompleta, lo que nos permite tener redes de equipos hetereogéneos. IP no es sólo un protocolo aislado, sino que trabaja en conjunto con otros protocolos como TCP para realizar transmisiones. Estos protocolos son ICMP e IGMP en el nivel de red3.9 y TCP y UDP en el nivel de transporte.

El protocolo ICMP (Internet Control Message Protocol) se encarga de mandar mensajes de control: errores en host, fallos de encaminamiento y mensajes similares, entre los host de la red. IGMP (Internet Group Message Protocol) se encarga de mantener actualizada la información relativa a la creación de grupos para la multidifusión, broadcast o multicast. El conjunto de estos protocolos dotan a la solución de una completa solidez en uso y funcionamiento.

El formato de bloques de IP no interviene en el factor de diseño de clusters, además, en el caso de IP, permite reducir bastante el tamaño de los paquetes que hay que enviar o ampliarlos al máximo de lo que nos permita la red. El esquema de direccionamiento tampoco es un problema para los clusters, aunque empieza a serlo a nivel mundial por la escasez de direcciones. Se espera que en poco tiempo la red vaya migrando a IPv6, en cualquier caso desde el punto de vista particular de los clusters el uso de IPv6 o IPv4 no tiene por que ser drástico e incluso puede favorecernos esta migración por hacer que los paquetes sean más configurables.

Respecto al encaminamiento y la fragmentación de los datagramas, permiten tener clusters diseminados por una geografía más extensa. Generalmente los clusters suelen localizarse en un mismo aula, edificio o entorno, pero existen problemas para los que pueden ser necesarias redes de área extensa para los que IP ya esta ampliamente comprobado y utilizado, como por ejemplo organizaciones internacionales o empresas multinacionales.

Este documento no pretende ser muy duro en cuanto a la teoría de redes. Lo básico para configurar la necesaria para interconectar nuestros nodos. Lo que sí es necesario es dar una explicación de porqué utilizar IP en clusters.

- Ampliamente utilizado, conocido y comprobado.
- Efectividad en la mayoría de las redes probadas.
- Perfecto para ambientes hetereogéneos.

El principal motivo para utilizar IP es que en la mayoría de los casos y a pesar de que pueda consumir en muchos casos demasiado ancho de banda o capacidad de proceso, es mejor utilizar un protocolo comprobado y válido que uno a desarrollar para un sistema concreto.

Existen otros protocolos de red que se han utilizado para entornos distribuidos como pueden ser IPX/SPX, Appletalk u otros; e incluso algunas soluciones se han basado directamente sobre capas de nivel de enlace para efectuar las comunicaciones entre los nodos. GNU/Linux soporta sin problemas todos estos protocolos.

Figura: La importancia de la red. Encapsulamiento IP

## 3.2.5 Protocolos utilizados a nivel de transporte (UDP/TCP)

### 3.2.5.1 Protocolos de transporte

Los protocolos de red están divididos por capas. En la subsección anterior se ha visto la capa de red, ahora se dará paso a las capas que existen a nivel de transporte: UDP y TCP.

La mayoría de los protocolos de transporte tienen elementos comunes. Los protocolos orientados a conexión deben tener mecanismos para establecer y liberar conexiones. Cuando hay múltiples conexiones abiertas en una misma máquina, las entidades de transporte tendrán que asignar un número a cada conexión y ponerlo en el mensaje.

En sistemas operativos UNIX y para la red ARPANET existen dos enfoques para saber a que puerto acceder a un servicio:

- Un servidor de puertos escuchando en el UDP/TCP 111 atendiendo solicitudes, los servidores registran el nombre del servicio y el puerto en donde está escuchando, permaneciendo dormidos hasta que les llega una solicitud.
- Los puertos los conocen los clientes que tienen el fichero /etc/services; hay un servidor (inetd o xinetd) que escucha en todos los puertos que se quieran mantener abiertos, cuando llega una solicitud crea un nuevo proceso que se encarga de atender la solicitud. Al cliente le da la impresión de que el servicio está siempre activo.

Otras de las características comunes de todos estos protocolos de nivel de red y que hacen este nivel tan útil es el control de flujo. Si por debajo del protocolo de red hay una red fiable (X.21) o nuestro protocolo no añade fiabilidad a la red (UDP) entonces no será necesario usar el control de flujo de la capa de transporte.

En otro caso el control de flujo es fundamental. El emisor tiene una copia local de cada mensaje que se envía por la red hasta el momento que es asentido, el receptor quizás no desee enviar un ACK (acknowledgement o asentimiento) de ese mensaje, o no recibió el mensaje correctamente; en esos casos el ordenador que está enviando los mensajes tiene que reenviar el mensaje, por ello la necesidad de tener una copia local.

Con este sistema el receptor puede limitar el tráfico que recibe simplemente tardando más tiempo en asentir los datos recibidos. Así cada uno de estos protocolos define unos temporizadores y unas reglas para no sólo controlar el flujo sino controlar que no se produzca congestión en la red.

Otro punto en común de todos los protocolos de transporte es que permiten la multiplexión y demultiplexión de las conexiones, para aumentar el ancho de banda y aprovechar mejor los recursos de los que se disponga.

### 3.2.5.2 UDP

Es el protocolo de transporte no fiable estándar en Internet. Como protocolo de transporte que es solamente está implementado en ordenadores finales, no en routers. Es un protocolo no orientado a conexión (de ahísu nombre, se envían datagramas) y no es fiable. La cabecera que incluye al mensaje es la mínima para poder distinguir a que puerto se dirige y un pequeño checksum de la cabecera. Es usado por las aplicaciones de los servicios no conectivos, para enviar pocos datos (se consigue más rendimiento puesto que no se necesita gastar tiempo en conectar y desconectar) y en multidifusión.

UDP al contrario de TCP no puede realizar fragmentaciones de los mensajes puesto que no tiene campos para ello. Por tanto es la aplicación quien debe dividir los mensajes como crea oportuno. Como la tecnología física de red también impone una restricción de tamaño máximo de paquete, otra división se realiza en el nivel IP; por tanto una aplicación que conociera la MTU evitaría esta segunda división. Cuando uno de los fragmentos de un mensaje UDP se pierde se tendría que retransmitir.

En el caso de UDP será la aplicación la encargada, gracias a unos temporizadores, de retransmitirlo. En el caso de TCP es él mismo el que detecta y soluciona e problema.

Como sabemos IP si no puede recomponer un datagrama, lo desecha, no tratando el problema y dejando la solución a capas superiores.

Algunos capas superiores que usan UDP son RPC y todos los aplicaciones que dependen de estos (DNS, NIS, etc.) y otras aplicaciones como pueden ser TFTP, BOOTP, DHCP.

### 3.2.5.3 TCP

Este protocolo junto con UDP son los dos protocolos de transporte estándar en Internet, es el protocolo fiable de la familia. Es un protocolo orientado a conexión. TCP recibe mensajes de cualquier tamaño y los divide en trozos de un máximo de 64KB se envía cada uno de estos trozos como un mensaje TCP separado. Para evitar fragmentaciones extra, TCP conoce la MTU de la red, con lo que se evita que el nivel de red tenga que dividir a su vez para acoplarse al MTU de la red.

También es misión de TCP ordenar todos los segmentos que hayan llegado separados y ensamblarlos para obtener el mensaje inicial. Tiene la ventaja de que las aplicaciones no tienen que preocuparse de tratar los errores de la comunicación puesto que para la aplicación el canal de comunicación es perfecto y siempre llega la información integra.

El que sea un servicio orientado a conexión quiere decir que hay 3 fases en la comunicación, que forman un mínimo de 7 mensajes sin contar los mensajes de datos:

- Establecimiento de la conexión: es la fase inicial, para conectarse los paquetes tienen un bit especial llamado SYN. Para conectarse se debe enviar un segmento con SYN activado y recibir una confirmación ACK. Se toman unos nuevos números de secuencia para enviar y para recibir que empiezan siendo un número muy superior al último número de secuencia recibido por si llegan segmentos de la conexión anterior y se empieza la conexión, esto son 3 mensajes.
- Traspaso de información: típicamente aquíse envían todos los datos que se quieren enviar, el nivel de aplicación verá como todos los datos que envía, llegan correctamente (si es físicamente posible) y en orden.
- Liberación de la conexión: se realiza gracias a un bit que indica que se desea finalizar con la conexión actual llamado FIN. Cuando un extremo activa su bit FIN, su interlocutor tiene que hacer un ACK y hasta que no lo desee puede posponer el cierre de la comunicación, cuando esté listo envía un paquete con el bit FIN activado y el primer ordenador realiza un ACK, liberando la conexión.

Figura: La importancia de la red. Conexión TCP

TCP cada vez que envía un segmento inicia un temporizador. Si este temporizador cumple y no se ha recibido confirmación se vuelve a enviar el mismo segmento suponiendo que el anterior segmento enviado no llegó o llegó con errores. Como no se puede saber a ciencia cierta cuánto tardará un segmento a llegar a su destino, pues dependiendo del paquete podría pasar por una redes u otras, haber congestiones momentáneas, etc. se implementa un temporizador variable que irá cambiando según lo que tardaron los ACK de los anteriores segmentos.

La peor situación que le puede ocurrir a una red físicamente bien es que tenga congestión, por eso esta situación se intenta evitar a toda costa, y los protocolos orientados a conexión son mejores para evitarla, por eso TCP intenta hacer un control de congestión en Internet. Quien más rápidamente puede reaccionar ante la congestión es el emisor, por tanto cuando según acabamos de ver se cumple el temporizador de retransmisión hay error o hay congestión, como las redes actuales son de muy buena calidad es muy difícil que el error sea a causa del medio de transmisión por lo tanto el emisor supone que existe congestión con lo que envía los datos de forma más lenta, siguiendo un algoritmo, con esto se intenta que se alivie la congestión de la red.

Para controlar el flujo y la congestión se usa la ventana deslizante que permite enviar varios paquetes antes de que se envíe un ACK, enviar un ACK por cada paquete es realmente lento por lo tanto cuando se quiere disminuir la velocidad por el peligro de congestión o porque el receptor no puede recibir tantos datos la ventana disminuye dejando enviar menos paquetes por ACK, pudiendo llegar a ser 0, lo que significa que el receptor no puede en esos momentos recibir nada más. Cuando se quiere más velocidad se deja enviar más paquetes antes de parar para esperar un ACK.

## 3.2.6 Diseño de redes

A la hora de poner en marcha un cluster ya sea a nivel de producción como a nivel de investigación, hemos de tener en cuenta que uno de los factores críticos a la hora de configurar dicho sistema va a ser la red.

Antes de comenzar a instalar el sistema propiamente dicho, se debe hacer un estudio de que servicios o programas debe correr, y tener en cuenta cómo éstas van a afectar a la carga en la red. Este apartado es bastante importante en la instalación de redes por los siguientes motivos.

1. El coste de instalacíon puede llegar a ser insignificante respecto al coste que puede llevar una ampliación en un sistema que ha sido mal diseñado desde un principio, tanto a nivel físico en la instalación (en la cual no entraremos) como a nivel de capacidad de la red.
2. La mayoría de los clusters están montados sobre redes LAN, con protocolos UDP/IP o TCP/IP, generalmente no tienen ninguna manera de controlar la congestión de la red, lo que implica que la red debe estar lo suficientemente bien diseñada y montada como para que se produzca congestión sólo en casos excepcionales.
3. Se debe tener en cuenta, que cuanto más acoplado sea un sistema en su funcionamiento, más crítica se vuelve la comunicación, por tanto mejor diseñada debe estar la red de comunicación.
4. El coste que se produce al escalar un cluster, tanto económicamente como en tiempo no debe estar muy ligado al coste de escalar la red.

Como se puede ver, a lo largo de todo el proceso el funcionamiento de la red es crítico en cualquier sistema de tipo cluster, es más, no sólo es necesario un entorno de red adecuado para el sistema, sino que este debe estar en cierta manera infrautilizado para poder asegurar que no se va a llegar a condiciones de congestionamiento.

### 3.2.6.1 Factores a tener en cuenta al diseñar una red

A la hora de diseñar una red tenemos que tener claros ciertos conceptos acerca del sistema que queremos instalar, el funcionamiento que éste debe tener, los servicios que debe tener y sobre todo, la funcionalidad que se le va a dar.

Hay que conocer la funcionalidad del sistema:

- Funcionalidad del sistema
  - Funcionalidad general para la que el sistema debe funcionar.
  - Servicios que deberá correr el sistema.
  - Factores que externos que pueden afectar a nuestro sistema.

Todos estos puntos quizá entren en el ámbito de la administración del sistema, pero son necesarios en el caso de partir de cero, con la primera instalación de un cluster. Lo que pretenden es que no haya problemas a la hora de tener claro que servicios o funcionalidades están por encima de que otras.

No existe ningún sistema cluster de carácter general, la mayoría de ellos se compone de varias aplicaciones trabajando juntas. Si estas aplicaciones deben acceder a recursos compartidos, hay que tener claras dos cosas: cuáles tienen más prioridad, y cómo obtener la prioridad. Por otro lado están los factores técnicos que afectan a los servicios que utilizará la red. Una vez que se sabe los servicios que poseerá el cluster es necesario describir el tipo de funcionamiento que tiene cada servicio y demás características.

- Factores técnicos de cada servicio relativos a la red.
  - Funcionalidad del servicio.
  - Prioridad del servicio en el sistema.
  - Rrioridad del servicio en la red.
  - Factor de carga del sistema.
  - Factor de carga de la red.
  - Características de la comunicación que realiza el servicio.
    - Tiempos de latencia
    - Tipo de protocolos UDP, TCP.
    - Carga sobre la red a nivel general.

Todos los factores técnicos deben estar referidos a cada servicio particular. Para usuarios expertos puede ser obvio que programas o servicios acaparan más la red o deben tener más prioridad, para alguien profano a ese servicio, o parte del sistema deberá rellenar solamente los factores teóricos que el crea oportunos.

A partir de este apartado, el diseñador de la red debe conocer cada uno de los servicios que la red va a utilizar tanto con conocimiento teórico como práctico para poder tener una visión generalizada. Esta visión debe ser tanto de como puede afectar este servicio a otros y al sistema en general como para tener los conocimientos necesarios para instalar el servicio sin que este provoque problemas de ningún tipo. Cuando un diseñador inexperto no haya instalado un sistema o un servicio de este tipo, lo conveniente es hacer uso de un entorno de simulación reducido en el cual hacer las instalaciones pruebas y verificaciones para después proceder a realizar extrapolaciones a un sistema grande, se ha de recordar siempre que la depuración de un error en un sistema distribuido crece exponencialmente con el número de nodos que tiene el sistema, y en el caso de que éste utilice varios servicios a la vez, el crecimiento de la complejidad crece más aún a medida que escala el cluster.

Cuando intervienen varios sistemas, todos ellos complejos y completos en un entorno distribuido, se debe tener el suficiente conocimiento de cada uno de los sistemas a montar como para asegurar que el conjunto de todos ellos no desestabilizara el funcionamiento de los otros.

El siguiente punto a tener en cuenta es hacer aproximaciones a las necesidades de red que se han extrapolado de cada servicio, y saber de que recursos se cuentan para satisfacer estas necesidades. En este punto, se debe exigir un equilibrio entre los recursos que se tienen y la efectividad de dicho funcionamiento.

Por ejemplo, en un entorno de trabajo con openMosix, NFSROOT y XWindow en un laboratorio de investigación científica probablemente se dé más importancia a la red openMosix que a el sistema de archivos NFS o XWindow. Así que probablemente se separen dichas dos redes como redes aisladas de manera que NFSROOT o X Window no interfieran sobre openMosix y al mismo tiempo openMosix esté aislado: sus paquetes de información de estado de cada nodo no interrumpirán las comunicaciones largas debido a colisiones cuando openMosix está en un estado sin migraciones.

- Localizar recursos de los que se dispone o saber con que medios se cuentan.
  - equipos o nodos
  - switches/hubs
  - routers
  - otros servicios como impresoras en red y demás que puedan afectar la carga de la red
- Estimar la carga de cada red que puede llegar cada servicio contando con los recursos que se poseen3.10.
- Equilibrar la carga dependiendo de:
  - prioridad
  - servicio
  - recurso

En este caso no cuenta tanto el conocimiento del sistema, una vez que se conoce como puede llegar a cargar un servicio y de los recursos que se posee, el diseñador, coloca cada servicio en redes aisladas o interconectadas, intentando que interfieran cuanto menos mejor los servicios entre sí, en este apartado, se evalúan las tecnologías de red aplicadas a cada servicio asícomo de los medios de que se dispone para asegurar el funcionamiento y disponibilidad de los servicios. Por ejemplo, en el caso de Heartbeat, se suele utilizar como ya hemos visto un cable de serie de modem nulo, para asegurar que se produce una doble vía de comunicación entre los dos ordenadores que se desea replicar o controlar, e incluso el propio Heartbeat se encarga de comprobar la vía secundaria periódicamente para asegurar que esta estará disponible en el caso de que el sistema principal caiga.

## 3.2.7 Conclusiones

Como conclusiones de este tema hay que el sistema de comunicación es crítico en cualquier sistema paralelo, ya que al tener varios elementos de proceso (entiéndase por elementos de proceso a los procesadores, nodos, procesos, módulos, etc. que componen el sistema paralelo o distribuido), es necesaria la comunicación entre los elementos de proceso para realizar un trabajo conjunto.

En el caso de sistemas implementados en el kernel de un sistema operativo el fallo del sistema puede provocar el malfuncionamiento de una máquina y por tanto se puede requerir del reseteo de la misma.

Por último se han dado los puntos necesarios para diseñar una red correctamente, ya que generalmente cuesta más escalar un sistema mal diseñado con fallos respecto a los requerimientos iniciales que un sistema que sea bien diseñado y quizá sobredimensionado desde el principio.