Continguts
Principis de transmissió fiable
A les classes de pràctiques s'ha dissenyat un protocol RDT (Reliable Data Transfer) en la capa d'enllaç. No obstant, cal saber que el problema d'implementar una comunicació fiable també apareix en la capa de transport.
La responsabilitat d'aquest protocol és simular que la capa de transport o d'enllaç tenen, per sota, un canal de comunicació fiable en el qual s'asseguren que les dades enviades són correctes. En el cas de la capa d'enllaç, per sota només hi haurà un enllaç físic i en el cas de la capa de transport hi haurà tota una interxarxa global.
Implementant un Protocol RDT
Hi ha tres nivells de complexitat que cal conèixer i saber identificar alhora d'implementar un protocol RDT.
rdt1.0 : Canal Fiable
- El transmissor i el receptor només tenen un estat.
- No és necessari empaquetar les dades ni tampoc comprobar errors,ja que el canal és fiable.
- Res pot anar malament.
- No cal tenir feedback del receptor al transmetre.
rdt2.0 : Canal amb errors de bit
- Tots els paquets que es reben en el mateix ordre que s'envien.
- Cal comprovació d'errors.
- Necessitem feedback del receptor i implementar un sistema de retransmissió de paquets. ACK i NAK amb checksum.
- Cal identificar cada trama amb un número de seqüència.
- El transmissor no enviarà dades fins que no ha rebut confirmació de les anteriors.
- Stop-and-wait protocol.
rdt3.0 : Canal amb errors de bit i pèrdues
- El canal pot tenir pèrdues i perdre paquets sencers, és a dir el transmissor envia algo i el receptor no rep absolutament res.
- Com podem detectar aquestes pèrdues en el transmissor, per tal de retransmetre? amb un TIMEOUT.
Pipelined RDT Protocols
El principal inconvenient del protocol que s'acaba de descriure en l'apartat anterior és que és del tipus stop-and-wait. L'alta velocitat de les xarxes d'avui en dia fan que aquest protocol no sigui massa útil.
Amb un Pipelines protocol es soluciona aquest problema i el transmissor pot enviar múltiples paquets sense esperar tots els reconeixements del transmissor.
Veurem dues tècniques bàsiques de pipelining protocols: Go-Back-N i Selective Repeat.
Go-Back-N (GBN)
Les característiques d'aquest sistema són:
- El transmissor pot enviar múltiples paquets però no pot tenir més de N paquets no-confirmats al buffer.
Definim base com el número de seqüència del paquet no-confirmat més antic i nextseqnum som el número de seqüència no utilitzat més petit, és a dir, el número de seq. del següent paquet a enviar.
- L'interval [0, base-1] : paquets enviats i reconeguts
- [base, nextseqnum-1] : paquets enviats però no reconeguts
- [nextseqnum, base+N-1] : paquets que poden ser enviats immediatament.
- La resta no són utilitzables
- Si tenim k bits per adreçar el número de seqüencia, podem adreçar fins a 2^{k}-1 seqüències.
El comportament del transmissor és el següent: Quan té dades per enviar, consulta si la finestra N d'enviament hi ha seqüències lliures. En cas afirmatiu, envia i passa a l'estat inicial. Si rep confirmació del paquet "n", assumeix que els paquets anteriors també s'han rebut amb èxit i aleshores base = n, és a dir, la finestra avança. S'inicia un timer per al primer paquet que s'envia i encara no es té confirmació. Quan es rep la confirmació, el timer es reseteja. Si s'arriba a un TIMEOUT, el transmissor torna a enviar tots els paquets pendents de confirmació.
El comportament del receptor és el següent: Si es rep un paquet amb num de sequencia n, i l'ultim que s'havia rebut era el n-1, aleshores es confirma ACK. En qualsevol altre cas, s'envia ACK a n-1. L'últim que el receptor coneix és l'últim numero de sequencia del paquet rebut en ordre, expectedseqnum.
Selective Repeat
Les característiques d'aquest sistema són:
- Quan el transmissor té dades per enviar, comprova que el num de sequencia seguent estigui dins la finestra. Si és així l'envia, en cas contrari es fica en un buffer o s'entrega a la capa superior un altre cop.
- S'engega un timer per a cada paquet que s'envia. Si un timer salta, només es reenvia aquell paquet.
- La finestra del transmissor sempre està anclada a l'últim número de sequencia no reconegut. Quan es reconeix, avança fins al següent paquet no reconegut.
- Si quan la finestra avança hi havia paquets a la espera de num de sequencia, aquest s'envien instantaniament.
- En recepció, si es rep un paquet n però no s'ha rebut en n-1, es confirma ACK però no s'entrega encara a la capa superior.
- S'entregarà quan es rebi la confirmació del n, aleshores els dos paquets aniran cap a la capa superior.
Per no tenir problemes, si tenim $k$ bits per adreçar el num de sequencia, la finestra cal que sigui N <= 2^{k-1}