Vous êtes sur la page 1sur 65

Redes y Protocolos

S02: La capa de enlace – P1


Contenido
• 1. Introducción
• 2. Entramado (Framing)
• 3. Errores
1. Detección
2. Corrección
1. Introducción
• La capa de enlace (link layer)
• Estudia como transferir mensajes sobre uno o más
enlaces conectados
• Los mensajes son tramas (frames), con tamaño
limitado.
• Se construye sobre la capa física.
• Ya no hablaremos de señales sino de bits transmitidos
en tramas.
1. Introducción
• La capa de enlace.
Framing
2. Entramado (Framing)
• Tenemos un flujo de bits: ¿Cómo los interpretamos como una
secuencia ordenada? ¿Cómo entramamos ese flujo de bits para que
sean interpretados? (entramado = framing)
2. Framing
• Métodos:
A. Conteo de Bytes (Byte count)
B. Relleno de bytes (Byte stuffing)
C. Relleno de bits (Bit stuffing)

0 0 0 1 0 0 0 1 0 0 0 0 0 1 1 1
2. Framing ¿Qué problema
habría si usamos
este método?

A. Byte count
• El primer byte del frame indica el tamaño.
2. Framing
A. Byte count
• Difícil de re-sincronizar. Si perdemos la sincronización, nos perdemos por siempre.
2. Framing ¿Qué problema
habría si solo
hacemos lo
comentado?
B. Byte stuffing (Rellenado de bytes)
• Se tiene un byte especial (un FLAG) que significa el inicio/final de un frame
• Ejemplo de FLAG: 0111 1110 (0x7E)
2. Framing
B. Byte stuffing (Rellenado de bytes)
• Se tiene un byte especial (un FLAG) que significa el inicio/final de un frame
• En caso que exista este byte dentro del frame usamos otro byte para decir
que el FLAG encontrado es un dato y no un FLAG.
• Usamos un byte de escape (ESC).
• Ejemplo: 0111 1101 = 0x7D ¿Qué pasa si
encontramos un byte
• Tenemos que usar un byte ESC para escapar del ESC ESC dentro del
frame?
2. Framing
B. Byte stuffing (Rellenado de bytes)
• Si se encuentra un FLAG que no tiene asociado un
ESC, este será el inicio/final de un frame
2. Framing
B. Byte stuffing (Rellenado de bytes)
• Si se encuentra un FLAG que no tiene asociado un
ESC, este será el inicio/final de un frame
2. Framing
C. Bit stuffing (Rellenado de bits)
• Sea un FLAG seis 1s consecutivos, es decir: FLAG: 111111
• En la transmisión, cada cinco 1s en los datos, insertar un 0.
• En la recepción, un cero después de cinco 1s es eliminado.

Datos originales
2. Framing
C. Bit stuffing (Rellenado de bits)
• Sea un FLAG seis 1s consecutivos, es decir: FLAG: 111111
• En la transmisión, cada cinco 1s en los datos, insertar un 0.
• En la recepción, un cero después de cinco 1s es eliminado.

Datos originales

Bits Transmitidos con


Rellenado (stuffing)
2. Framing
• Ejemplo: (PPP)
• Se usa FLAG: 0111 1110 = 0x7E y ESC: 0111 1101 = 0x7D
• Para rellenar(stuff)/remover(unstuff) un byte:
1. Agregamos/removemos un byte ESC (0111 1101) antes del byte en
cuestión.
2. Modificamos byte: 𝑏𝑦𝑡𝑒 ← (𝑏𝑦𝑡𝑒) ⨁ (0x20)
La idea es eliminar
los bytes con forma
2. Framing de FLAG del
contenido del frame.
Así, solo tendremos
• Ejemplo: (PPP) que observar a los
FLAGS directamente.
• Se usa FLAG: 0111 1110 = 0x7E y ESC: 0111 1101 = 0x7D
• Para rellenar(stuff)/remover(unstuff) un byte:
1. Agregamos/removemos un byte ESC (0111 1101) antes del byte en
cuestión.
2. Modificamos byte: 𝑏𝑦𝑡𝑒 ← (𝑏𝑦𝑡𝑒) ⨁ (0x20)
Errores
3. Errores
• Algunos bits serán recibidos con errores debido al ruido en la capa física.
• Alternativas:
• Detectar errores usando unos procedimientos (códigos)
• Corregir errores usando otros procedimientos (códigos)
• Retransmitir el frame
3. Errores ¿Cómo podemos
corregir estos
errores?

• El receptor no sabe que pueden existir errores

SEÑAL

SEÑAL POCO
RUIDOSA
AQUÍ HAY UN
ERROR

SEÑAL MUY
RUIDOSA
3. Errores
• Podemos añadir redundancia
3. Errores
• Podemos añadir redundancia
1. Códigos para detección de errores
• Agregamos bits de chequeo (check bits) a los bits de los mensajes para poder
detectar algunos errores
2. Códigos para corrección de errores
• Agregamos check bits para corregir algunos errores
3. Errores
• Podemos añadir redundancia
1. Códigos para detección de errores
• Agregamos bits de chequeo (check bits) a los bits de los mensajes para poder
detectar algunos errores
2. Códigos para corrección de errores
• Agregamos check bits para corregir algunos errores

• El problema ahora es el de diseñar un código que detecte la mayor


cantidad de errores con el menor tamaño y con poco cálculo (que sea
rápido).
3. Errores
¿Qué problemas
• Una manera sencilla de manejar los errores: pueden existir?
• Envío 2 copias. Si son diferentes → hay error
• ¿Cuántos errores se pueden detectar?
• ¿Cuántos errores se pueden corregir?
• ¿Cuántos errores lo harán fallar?

• Necesitamos manejar códigos con menor overhead.


• Estos códigos son matemática aplicada
• No podrán manejar todos los errores
• Se enfocan en errores accidentales (no hash)
3. Errores
¿Qué problemas
• Una manera sencilla de manejar los errores: pueden existir?
• Envío 2 copias. Si son diferentes → hay error
• ¿Cuántos errores se pueden detectar? Rpta: ?
• ¿Cuántos errores se puede corregir? Rpta: 0
• ¿Cuántos errores lo harán fallar? Rpta: 2 (1 en la misma posición en
ambas)
• Necesitamos manejar códigos con menor overhead.
• Estos códigos son matemática aplicada
• No podrán manejar todos los errores
• Se enfocan en errores accidentales (no hash)
3. Errores
• Una palabra codificada (codeword) consiste de 𝑑 datos + 𝑟 checkbits
• El emisor:
• Calcula los 𝑟 checkbits basados en los 𝑑 bits
• Envía los 𝑑 + 𝑟 bits
• El receptor:
• Recibe 𝑑 + 𝑟 bits con errores desconocidos
• Recalcula un 𝑟 basado en los 𝑑 bits recibidos.
• Si 𝑟’ ≠ 𝑟 → hay error
3. Errores
• Una palabra codificada (codeword) consiste de 𝑑 datos + 𝑟 checkbits
• El emisor:
• Calcula los 𝑟 checkbits basados en los 𝑑 bits
• Envía los 𝑑 + 𝑟 bits
• El receptor:
• Recibe 𝑑 + 𝑟 bits con errores desconocidos
• Recalcula un 𝑟 basado en los 𝑑 bits recibidos.
• Si 𝑟’ ≠ 𝑟 → hay error
3. Errores CODEWORD

d r
• Se pueden enviar 2𝑑 codewords correctos
• Se pueden recibir 2𝑑+𝑟 codewords
• La posibilidad de que aleatoriamente escogamos un codeword
correcto es muy baja.
• Así que si los 𝑟 bits coinciden muy probablemente el mensaje recibido
es el enviado.
Envía Recibe
CODEWORD CODEWORD

d r d r
3. Errores
• Trabajo en códigos:
• “Error detecting and error correcting codes”, BSTJ, 1950
3. Errores
• Distancia de Hamming
• La distancia es el número de cambios de bits necesarios para cambiar de un
codeword a otro:
𝑑1 + 𝑟1 → 𝑑2 + 𝑟2

• La distancia de Hamming de un código es la mínima distancia entre cualquier


par de codewords
3. Errores
• Detección de errores
• Para un código de distancia “𝑛”, se pueden detectar hasta “𝑛 − 1” errores
• Corrección de errores
• Para un código de distancia “𝑛”, se pueden corregir hasta “(𝑛 − 1)/2”
errores, mapeando al codeword más cercano.
Detección de errores
3-1. Detección de errores
• Algunas técnicas para detección de errores:
A. Paridad
B. Checksums (sumas de verificación)
C. CRCs (Ciclic Redundancy Check/Verificación de redundancia cíclica)
• Detección no es corrección.
• Pero nos puede permitir corregir el error mediante retransmisiones.
3-1. Detección de errores
A. Paridad:
• Toma d bits de datos
• Añade 1 bit de verificación que es la suma de los d bits
𝑟 = XOR (𝑑)
• Ejemplo: 1001100 1
• Distancia de Hamming del código:
• Cuantos errores detecta:
• Cuantos errores corrige:

• Probabilidad:
3-1. Detección de errores
A. Paridad:
• Toma d bits de datos
• Añade 1 bit de verificación que es la suma de los d bits
𝑟 = XOR (𝑑)
• Ejemplo: 1001100 1
• Distancia de Hamming del código: 2 (d+1)
• Cuantos errores detecta: 1 (d)
• Cuantos errores corrige: 0
• Se puede detectar cada vez que haya un numero impar de errores
• Probabilidad: 1/2
3-1. Detección de errores
B. Checksums (Sumas de verificación):
• Suma los datos en palabras de N bits.
• Usado en TCP, IP,UDP
• Ofrece una mejor protección que el bit de paridad.
3-1. Detección de errores
B. Checksums en Internet
• Definido como los 16 bits producidos del complemento a
uno de la suma a complemento a uno de las palabras de 16
bits.
• En el emisor.
• 1) Reordenar data en palabras de 16 bits
• 2) Colocar ceros en la posición del checksum, sumar
• 3) Agregar “lo que se lleva” a la suma
• 4) Negar la suma obtenida
• Ejemplo: 0001F203F4F5F6F7
3-1. Detección de errores
B. Checksums en Internet
• Definido como los 16 bits producidos del complemento a
uno de la suma a complemento a uno de las palabras de 16
bits.
• En el emisor.
• 1) Reordenar data en palabras de 16 bits
• 2) Colocar ceros en la posición del checksum, sumar
• 3) Agregar “lo que se lleva” a la suma
• 4) Negar la suma obtenida
• Ejemplo: 0001F203F4F5F6F7
3-1. Detección de errores
B. Checksums en Internet
• En la recepción
• Llega: 0001F203F4F5F6F7220D
• 1) Reordenar data en palabras de 16 bits
• 2) Añadir el checksum, sumar
• 3) Agregar “lo que se lleva” a la suma
• 4) Negar la suma obtenida
3-1. Detección de errores
B. Checksums en Internet
• En la recepción
• Llega: 0001F203F4F5F6F7220D
• 1) Reordenar data en palabras de 16 bits
• 2) Añadir el checksum, sumar
• 3) Agregar “lo que se lleva” a la suma
• 4) Negar la suma obtenida
3-1. Detección de errores
B. Checksums en Internet
• Distancia de Hamming del código:
• Cuantos errores detecta (garantizado):
• Cuantos errores corrige:

• Probabilidad:
3-1. Detección de errores
B. Checksums en Internet
• Distancia de Hamming del código: 2
• Cuantos errores detecta (garantizado): 1
• Cuantos errores corrige: 0
• Podemos detectar errores de ráfaga de hasta 16 bits
• Probabilidad: 1/216
3-1. Detección de errores
C. Códigos de verificación cíclica (CRC – Cyclic Redundancy Check)
• Ofrece una mayor protección: Dado 𝑑 bits, genera 𝑟 bits de tal forma
que los bits totales (𝑑 + 𝑟) son uniformemente divisibles por un
generador 𝐶.
• Un ejemplo simple (toy example):
• d= 302, k=número de un digito, C=3
302_
3-1. Detección de errores
C. CRC
• CRC: Basado en matemáticas de campos finitos (Galois fields). Los bits
representan coeficientes de los polinomios.
7 4 3 1
10011010 = 𝑋 + 𝑋 + 𝑋 + 𝑋
3-1. Detección de errores
C. CRC
• En el emisor:
1. Dado los 𝑑 bits de los datos, se extiende con 𝑟 bits (todos ceros)
2. Se divide por el generador 𝐶
3. Mantenemos el resto ignorando el residuo
4. Ajustamos los 𝑟 bits usando el resto
• En el receptor
• Divide y verifica que no haya residuo (residuo = 0)
3-1. Detección de errores
C. CRC
• Ejemplo
• Datos: 1101011111
• 𝐶(𝑥) = 𝑥 4 + 𝑥 1 + 1
•C=
•r=4
3-1. Detección de errores
C. CRC
• Ejemplo
• Datos: 1101011111
• 𝐶(𝑥) = 𝑥 4 + 𝑥 1 + 1
• C = 10011
• K=4
3-1. Detección de errores
C. CRC: La protección depende del generador
• Usualmente se usa un CRC-32: 10000010 01100000 10001110 11011011

• Propiedades:
• Distancia de Hamming = 4 Detecta errores de hasta tres bits
• Robusto ante ráfagas de errores de hasta 𝑟 bits
• No es vulnerable a errores sistemáticos como los checksums
3-1. Detección de errores
C. CRC
• Usados en enlaces Ethernet, 802.11, ADSL, Cable
• Checksums usados en Internet
• IP, TCP, UDP
Corrección de errores
3-2. Corrección de errores
• Técnicas de corrección de errores
A. Códigos de Hamming
B. Otros códigos (convolucionales, LDPC,etc)
• ¿Porqué usar la detección cuando podemos usar corrección?
3-2. Corrección de errores
• ¿Porqué es difícil corregir errores?
• Los errores pueden estar solo en los datos, en los datos y en los
checkbits, e incluso solo en los checkbits
3-2. Corrección de errores
• Idea: Si se construyera un código con una
distancia de Hamming de al menos 3
• Se necesitaría más de 3 bit errados para cambiar
de un codework válido a otro
• Con un solo bit errado, sería posible mapearlo al
codework válido más cercano
• Si tenemos 𝑛𝑒 errores, podemos mapearlo al
codework más cercano, siempre que la
distancia de Hamming (𝐻𝑑 ) entre codeworks
validos sea.

𝐻𝑑 ≥ 2𝑛𝑒 + 1
3-2. Corrección de errores
• Visualización
• Rojo: Codework valido
• Blancos: Codeworks erroneos
3-2. Corrección de errores
A. Código de Hamming: Nos da un método para construir un código con
una distancia de 3
• Usa 𝑑 = 2𝑟 – 𝑟 – 1 . d = 4 , r = 3
• Coloca checksbits en posiciones 𝑝 que son potencias de 2 (empezando con
posición 1)
• El checkbit en la posición 𝑝 es un bit de paridad de las posiciones con un
“termino p” en sus valores
3-2. Corrección de errores
A. Código de Hamming: CODIFICACIÓN
• Ejemplo: data = 0101, 3 checkbits
• Código de 7 bits, posiciones de los check bits: ?
• Checkbit __, cubre las posiciones?
• Checkbit __, cubre las posiciones?
• Checkbit __, cubre las posiciones?
3-2. Corrección de errores
A. Código de Hamming: CODIFICACIÓN
• Ejemplo: data = 0101, 3 checkbits
• Código de 7 bits, posiciones de los check bits: 1, 2, 4
• Checkbit 1, cubre las posiciones 1,3,5 y 7
• Checkbit 2, cubre las posiciones 2, 3, 6 y 7
• Checkbit 4 cubre las posiciones 4, 5 ,6 y 7
3-2. Corrección de errores
A. Código de Hamming: DECODIFICACIÓN
• Se recalcula los checkbits (haciendo una suma de paridad que incluya el checkbit)
• Reordenamos los checkbits como un número binario
• El valor (síndrome) nos dice la posición del error
• Si el síndrome = 0, entonces no hay error
• De otro modo, se modifica el bit para corregir.
3-2. Corrección de errores
A. Código de Hamming: DECODIFICACIÓN
• Se recalcula los checkbits (haciendo una suma de paridad que incluya el checkbit)
• Reordenamos los checkbits como un número binario
• El valor (síndrome) nos dice la posición del error
• Si el síndrome = 0, entonces no hay error
• De otro modo, se modifica el bit para corregir.
3-2. Corrección de errores
B. Otros códigos para detección de errores:
• Códigos convolucionales
• Toman un stream de datos y la salida es un mix de los bits de entradas recientes
• Hace que cada salida sea menos frágil
• Su decodificación usa el algoritmo de Viterbi (que puede usar valores de
confidencia)
3-2. Corrección de errores
B. Otros códigos para detección de errores:
• Low Density Parity Check Codes (LDPC)
• Se basa en matrices sparse
• Se decodifican iterativamente usando “belief propagation algorithm”
3-2. Corrección de errores
• Detección vs Corrección (¿Cuál es mejor?)
• Dependerá del tipo de patrones de error y la cantidad de sobrecarga
(overhead)

• Ejemplo: Si tenemos mensajes de 1000 bits con un BER (Bit Error Rate)
de 1e-5 (1/10000)
3-2. Corrección de errores
• Detección vs Corrección (¿Cuál es mejor?)
• 1) Asumamos que los errores son aleatorios (BER=1e-5)
• Los mensajes tendrán 1 error o ninguno (la mayoría de veces no lo tendrán)
• Corrección de errores:
• Necesitará ~10 bits de verificación por mensaje (cada mensaje tiene d = 1000)
• Overhead: 10 checkbits (r=10) (𝑑 = 2𝑘 − 𝑘 − 1)
• Detección de errores:
• Necesitan ~1 bit de chequeo (si usaramos parity checkcode) por mensaje más
1000 bits de retransmisión la 1/10 parte del tiempo
• Overhead: 1+1000/10 = 101 bits
3-2. Corrección de errores
• Detección vs Corrección (¿Cuál es mejor?)
• 2) Asumamos que los errores vienen en “ráfagas” (bursts) de 100
(BER=1e-5)
• Solo 1 o 2 mensajes en 1000 tienen errores
• Corrección de errores:
• Necesitará >>100 bits de verificación por mensaje
• Overhead:
• Detección de errores:
• Necesita 32 checkbits por mensaje + 1000 bits reenviados 2/1000 ava parte del
tiempo
• Overhead: 32+1000/1000 x2 = 34bits
3-2. Corrección de errores
• Corrección de errores
• Necesaria cuando los errores son esperados
• O cuando no haya tiempo para retransmisiones
• Detección de errores
• Más eficiente cuando los errores no son esperados y cuando ocurren son
grandes (bursts)

Vous aimerez peut-être aussi