# 06- Capa de enlace.

Es la capa 2 de la arquitectura OSI. Se encarga de conseguir que la comunicación de datos se produzca correctamente a través de un medio físico de transmisión. Para lograr que dos dispositivos adyacentes se comuniquen, se necesita un control de intercambio de datos: el control del enlace.
La capa de enlace proporciona a la capa de Red un servicio de transporte de bits fiable(asegura que los bit se transmiten correctamente por el medio físico).
El bloque de datos transmitido se denomina trama.

## Funciones de la capa de enlace

Sincronización a nivel de trama.
Control de flujo: las estaciones deben ponerser de acuerdo en el ritmo de transmisión de datos.
Control de errores: los enlaces no son perfectos, hay que controlar que no haya errores en la transmisión.
Direccionamiento: si hay varios posibles destinos, es necesario identificar a quien va dirigida la trama.
Gestión del enlace:

- Inicio de la transmisión
- Mantenimiento de la transmisión
- Finalización de la transmisión

## MAC y LLC

En la arquitectura IEEE 802, el nicel de enlace se divide en dos subcapas:

- LLC: Se encarga de las funciones comunes de la capa independientemente del medio físico usando:
  - Control de errores
  - Direccionamiento
  - Sus funciones han sido definidas por el subgrupo 802.2
- MAC: Se encarga del acceso al medio (gestión del enlace).

## Tramas

Una trama es un bloque de bits agrupados que son enviados por la línea. El tamaño de la trama depende del tipo de red.
Agrupar los bits en tramas facilita:

- La detección y corrección de errores
- La compartición del medio

Una trama se compone de tres partes:

- información sobre la trama
- Datos
- Redundancia

## Control de flujo

Algunos protocolos de nivel 2 lo soportan. No es el caso de Ethernet.

## Acceso al medio

### Calsificación general

- Medio repartido:
  - FDM: Multiplexación en frecuencias. Cada vez menos usado: se puede infrautilizar el ancho de banda.
  - TDM: Multiplexación en tiempo
- Medio compartido:
  - Sin colisiones
    - Sondeo
    - Paso de testigo (Token Bus)
  - Con colisiones
    - CSMA/CD(Ethernet)
    - CSMA/CA(Wifi)

## FDM

Se multiplexa el canal por frecuencia. Cada canal se asigna a un nodo de la red. Usado en:

- Red telefónica(analógica)
- Radio FM/AM
- DSL

## TDM

Se multiplexa el canal por tiempo (a la Round Robin). Cada canal se asigna a un nodo de la red. Más común en transmisiones digitales:

- GSM
- SONET

## Paso de testigo

Cada nodo debe esperar a tener el turno de emisión. El turno se utiliza, y se cede al siguiente por un testigo.

- Un mensaje especial que indica que no se quiere emitir más
- Y señala el siguiente equipo que emitirá.

Ejemplos: Token Bus

## CSMA/CD

Carrier-sense multiple access with collision detection
Multiple access: Cualquiera puede emitir usando el mismo medio.
Carrier-sense: Antes de emitir, se comprueba que nadie más esté emitiendo.
Collision detection:

- Durante la transmisión, detecto si otro también emite
- si se produce una colisión, dejo de emitir
- Y espero un timepo aleatorio para volver a intentarlo.

## CSMA/CA

Carrier-sense multiple access with collision avoidance
Similar a CSMA/CD
Collision avoidance para evitar los nodos ocultos:

- Antes de emitir los datos se envían un RTS(request to send)

  Es un mensaje pequeño, con poca probabilidad de colisión

- Un nodo central recibe los RTS y determina quién recibe un CTS (clear to send)
- El que recibe el CTS puede enviar sus datos sin problema

## Control de errores

Consiste en enviar algunos bits añadidos a los datos con información que permita detectar o corregir los errores.
El procentaje de redundancia se calcula como:

                          bits_de_control
                        ___________________ x 100
                           bits_totales

Los errores pueden:

- Detectarse.
- Adicionalmente, corregirse.

## Errores

- Un único bit, más comunes en transmisiones en paralelo.
- Ráfaga de bits, una interferencia actúa sobre los medios de transmisión. Perturban varios bits seguidos. Afectan más a comunicaciones en serie.

## Detección de errores

### ECO

El recpetor envía una copia exacta de la información recibida al emisor.
El emisor confirma con otra trama que la información es correcta.

### Paridad lineal

Se añade un bit extra, indicando si el número de bits con valor a 1 es par o impar.

- 100100 - Con paridad par, se envía como 100100 0
- 100100 - Con paridad impar, se envía como 100100 1

### Paridad de bloque

                                Datos                Paridad lineal

                                1100 0 01                   0

                                0110 1 10                   0

                                1011 0 10                   0

                                1001 1 11                   1

                                0111 0 01                   0

                                1100 1 11                   1

                                1010 0 00                   0
                                ___________________________________
            Paridad de bloque   0001 0 00                   0

### Conclusión

- Si falla un bit, puedo arreglarlo
- Si fallan dos bits, lo detecto
- Si fallan más,

- Puedo no enterarme
- Puede parecer que ha fallado solo uno
- Puedo detectar el error

## Distancia de Hamming

Cuando se produce un error, cambian algunos bits.
Según la codificación utilizada, no todas las combinaciones de 0's y 1's son posibles. Ej: 4B/5B.
La distancia de Hamming de un código es la cantidad de bits que hay que cambiar en una combinación válida para llegar a otra combinación válida.
Cuanto mayor sea la distancia, más robusto es el código frente a errores.

- Si la distancia es d, se pueden detectar errores de hasta d-1 bits
- Si la distancia es d, se pueden corregir errores de hasta [(d-1)/2] bits.

## CRC

Al principio de la comunicación, emisor y recpetor acuerdad un Polinomio Generador. Al iniciar la transmisión se añaden un número predeterminado de ceros a la información a enviar y se divide utilizando el polinomio generador.
El receptor realiza nuevamente una división sobre los datos recibidos y si el resto es 0 indica que la trama se ha recibido sin errores.
Finalmente, se descartan los bits añadidos en el transmisor para quedarnos con el mensaje original.

### ¿Por qué CRC?

Hay versiones de CRC para diferentes longitudes de polinomio: CRC16, CRC32,...
Los errores se producen típicamente a ráfagas. Para un CRC de n bits:

- Se detectan todos los errores de ráfagas de menos de n bits incorrectos
- Se detecta una fracción de las ráfagas más largas. (1-2-n )

## Corrección de errores

La detección de errores es el principal paso, una vez detectado:

- Se puede ignorar ( las capas más altas deben arreglar el error)
- Se puede corregir

Ethernet no corrige errores, pero veremos algunas técnicas que pueden usar otras capas 2.

## Retransmisión

Es el método de corrección más sencillo. Se detecta el error y se pide al emisor que vuelva a enviar la trama.
Se tienen que memorizar las tramas enviadas hasta la recepción de un ACK que confirme que el envío de información fue exitosa.

## Corrección: Código Hamming

Codificación que permite la detección y la corrección de un bit. Tiene distancia 3.
Se influyen bits de paridad de la siguiente forma:

- Los bits de las posiciones s= 2 (p-1) son de paridad: 1,2,4,8,...
- El resto son de datos.
- El bit de la posición 's' se incluye en el bit de paridad 'p' si la expresión de 's'en binario tiene a 1 el bit 'p'.

Ejemplo Hamming(11,7). Para la transmisión de 0110101

                    p1  p2  d1  p3  d2  d3  d4  p4  d5  d6  d7
                    s1  s2  s3  s4  s5  s6  s7  s8  s9  s10 s11
            Datos           0       1   1   0       1   0   1
            p1              0       1       0       1       1
            p2              0           1   0           0   1
            p3                      1   1   0
            p4                                      1   0   1

## ¿Y si hay más de un error?

Su distancia de Hamming es 3, así que no se puede detectar.
En Hamming extendido se añade un bit de paridad adicional, permite detectar errores de dos bits, pero no corregirlos.