Sie sind auf Seite 1von 7

3.

3 Protocolo simple de enlace de datos (cdigo de


ejemplo)
Ejemplo de cdigo en C.

Cdigo de ejemplo del simulador de protocolo para la capa de enlace


de datos

Mquina A enva a B. Servicio confiable, orientado a la conexin .

NA = capa de red en A.
DA = capa de enlace de datos en A.

NB = capa de red en B.
DB = capa de enlace de datos en B.

Definiciones para el cdigo de ejemplo de Tanenbaum.

DA recibe paquetes de NA. Los pone en el


marco. Llamadas to_physical_layer para enviar el marco. El hardware calcula la
suma de comprobacin, anexa y enva.

DB espera los datos: wait_for_event. En lugar del bucle de ocupado se


suspendera pendiente de interrupcin.

Cuando llega el marco, el hardware calcula la suma de comprobacin. Si el


error genera event = cksum_err . Si ok, event = frame_arrival y DB pueden
entonces usar from_physical_layer para adquirir frame. Despegue hasta el
paquete. Pase el paquete slo a NB. NB nunca se le da ninguna informacin
de cuadro. El formato del marco se puede cambiar sin saber de la capa de la
red.

numera los marcos 0 .. MAX_SEQ y luego de nuevo a 0 de nuevo


Seq_nr
Paquete aqu es de longitud fija MAX_PKT
Marco tiene 3 campos de control (encabezado) y 1 campo de datos
(paquete).
Encabezado = (tipo de trama, secuencia no, ack no) Tipo de
trama - algunos fotogramas slo contienen informacin de control. Su campo
de datos no se utiliza.

Para la recuperacin de errores, necesitamos acks y timeouts .


Necesidad de inicio, detener el temporizador.
Si el temporizador ya est en ejecucin, start_timer lo restablece para causar el
siguiente tiempo de espera despus de otro perodo completo.
Si no hay respuesta despus del tiempo de espera, event = timeout

NA puede no tener paquetes listos para enviar o DA puede no estar listo para
procesarlos
enable_network_layer - NA puede interrumpir cuando tiene un paquete para enviar
disable_network_layer - NA no puede interrumpir, no puede enviar paquetes hasta
que DA est listo y vuelva a habilitarlo
3.3.1 Protocolo de simplex sin
restricciones
Simplex - Unidireccional .
NA y NB siempre estn listos. Sin errores. No acks o secuencia no.
3.3.2 Simplex detener y esperar
NB no puede procesar los datos entrantes de forma infinita.
An unidireccional. Sin errores.
Simplemente detener y esperar.

Control de flujo - Cmo detener el remitente rpido Un receptor lento de inundacin


B? No se puede fijar la velocidad por adelantado - La velocidad requerida puede
cambiar segn los cambios de trfico y carga.
B proporciona retroalimentacin. Una vez que ha pasado el paquete a NB, devuelve
el marco ficticio para dar permiso para el siguiente.
A tiene que esperar este ack antes de enviar siguiente.
1-way en trminos de datos reales, pero de 2 vas en trminos de marcos, por lo que
necesitan lnea de 2 vas. Pero estricta, alternando. As que el medio dplex
funcionar.El cdigo de remitente ahora tiene wait_for_event
Note el remitente ni siquiera mira el frame entrante - es siempre un ack.
El receptor de la nota no pone ninguna informacin particular en marco ack. Su
existencia es suficiente.
3.3.3 Simplex con recuperacin de errores
Si el error, asume detectado va la suma de control.

Posible solucin a los errores: Aadir temporizador. El receptor slo enva ack si no
hay error. Si no hay ack, el remitente vuelve a enviar.
Problema: Buen marco enviado y recibido, pasado a NB. Ack envi,
pero ack perdido. El remitente enva el mismo marco de nuevo. No quiero
que esto pase a NB - NB ya lo tengo.
Solucin: Secuencia no. Puede decir el marco original aparte de re-transmit.

La nica ambigedad es entre un marco m y su sucesor m + 1 El


remitente sigue enviando m hasta que se obtiene ack
Entonces, dependiendo de si ack ha conseguido, enva m o m + 1
Por lo tanto, slo necesita 1 bit secuencia no. Y girarla entre 0 y 1 para expresar el
marco no. Estamos esperando en este momento.

Esperar ack antes de enviar el siguiente elemento: PAR (confirmacin positiva con
retransmisin) o ARQ (peticin de repeticin automtica).

Simplex con recuperacin de errores (re-transmit).

El remitente mantiene next_frame_to_send El


receptor mantiene frame_expected

1. Mire al remitente:
o If event = tiempo de espera
Slo vueltas, enviar ste de nuevo ms:
Si ack = next_frame_to_send
A continuacin, configurar el siguiente, la vuelta del lazo, lo
enviar

Else (incorrecto o daado ack)

Slo vueltas, enviar ste de nuevo


2. Mira el receptor:
o dejar que frame_expected = m
o Si frame = m
Luego pasar a NB, incrementar a m + 1, ack m, y esperar a que m + 1
venga

De lo contrario no obtener m, consigui m-1 de nuevo

Ack m-1, y esperar m

Por ejemplo:

o Si seq = esperado = 0
Esperado = 1
Ack = 0
o ms
Esperado = 0 (sin cambios)
Ack = 1 (re-ack anterior)
Servicio de capa de enlace de
datos a capas superiores
NB nunca ve duplicados o cuadros daados. La capa de enlace de
datos oculta por completo los errores de la capa de red y le
proporciona un servicio fiable para enviar paquetes a la capa
de red de otra mquina.

Tiempo de espera debe ser elegido con la lnea en mente (permitir


suficiente tiempo para el marco para llegar a B y ACK para
volver). Nuevamente vemos: La mayora de la capa de enlace de
datos es especfica del hardware, y oculta los detalles del
hardware de la red y capas superiores.

Das könnte Ihnen auch gefallen