vuoi
o PayPal
tutte le volte che vuoi
RIPETIZIONE SELETTIVA
I protocolli a ripetizione selettiva permettono di far ritrasmettere solo quei pacchetti su cui ci sono sospetti di errore, in modo da costringere il destinatario a mandare acknowledgment specifici per i pacchetti ricevuti in modo corretto. Anche qui viene usata una finestra di dimensione N per limitare il numero di pacchetti privi di acknowledgment nella pipeline.
Nella SR il destinatario invia un riscontro per qualsiasi pacchetto ricevuto, anche quelli fuori sequenza: questi verranno memorizzati in un buffer e, una volta ricevuti tutti i pacchetti, verranno inviati in ordine al livello superiore. Anche in SR vengono usati i contatori per cautelarsi contro la perdita di pacchetti. Ogni pacchetto deve avere un proprio timer poiché, quando avverrà l'evento di time-out, verrà ritrasmesso un solo pacchetto. In questo protocollo vi sono differenze fra mittente e destinatario, per esempio le loro finestre non sempre coincidono.
TCP è un protocollo
Il TCP (Transmission Control Protocol) è un protocollo di trasporto che è orientato alla connessione internet. Una connessione TCP offre un servizio "full-duplex", cioè un movimento che può avvenire in entrambe le direzioni da un host all'altro. La connessione avviene tramite un handshake a tre vie, ovvero: il client manda uno speciale segmento TCP al server, il server risponde con un altro segmento TCP, il client invierà un terzo segmento TCP speciale, quest'ultimo può trasportare informazioni utili. La dimensione massima del segmento è definita dall'unità di misura MSS; quest'ultima viene impostata quando si determina la MTU, l'unità trasmissiva massima.
Il segmento TCP è strutturato nel seguente modo:
- Intestazione del TCP include numeri di porta di origine e di destinazione, 16 e 16 bit
- Il campo numero di sequenza e numero di acknowledgement: entrambi di 32 bit, vengono usati dal mittente e dal destinatario per il trasferimento dati affidabile.
Il numero di sequenza per un segmento è il numero nel flusso di byte del primo byte del segmento.
Il campo finestra di ricezione: di 16 bit, viene usato per il controllo di flusso.
Il campo lunghezza d'intestazione: di 4 bit, specifica la lunghezza d'intestazione del TCP in multipli di 32 bit. L'intestazione tcp ha lunghezza variabile a causa del campo delle opzioni.
Il campo flag: è di 6 bit. Il bit ACK viene utilizzato per vedere se il valore trasportato nel campo di acknowledgement è valido. Il bit PSH se ha valore 1, il destinatario deve subito mandare i dati al livello superiore. I bit FIN, SYN, RST vengono utilizzati per impostare e chiudere la connessione. Il bit URG per indicare nel segmento la presenza di dati che l'entità mittente a livello superiore ha marcato come urgenti. La posizione dell'ultimo byte di dati urgenti viene denotata dal campo puntatore ai dati urgenti, di 16 bit. Quando ci sono dati urgenti TCP deve
informare l'entità destinataria al livello superiore e passarle un puntatore alla fine dei dati urgenti.
Checksum: 16 bit.
- Il campo opzioni: facoltativo e di lunghezza variabile, viene utilizzato quando mittente e destinatario negoziano la dimensione massima del segmento o come fattore di scala per la finestra nelle reti ad alta velocità.
RDT è usato dal protocollo TCP per un trasferimento dati affidabile.
Rdt 1.0: se livello sottostante è affidabile esistono 2 macchine finite, mittente e ricevente dove l'unità pacchetto o dati (nessuna differenza) confluiscono in canale affidabile. Il lato mittente del protocollo sarà invocato da una chiamata rdt_send e trasferirà i dati da consegnare al livello superiore sul lato ricevente creando un pacchetto con l'azione make_pkt(data). Il lato ricevente, rdt raccoglie i pacchetti dal sottostante canale tramite la chiamata rdt_rcv(packet), rimuove i dati dai pacchetti tramite l'azione
extract(packet,data)
e li passa al livello superiore con la chiamata deliver_data(data)
. Rdt 2.0: scambio messaggio come umano. I protocolli di trasferimento basati su ritrasmissioni sono noti come protocolli ARQ. I protocolli ARQ devono avere 3 funzionalità aggiuntive: infatti si ha: il rilevamento da parte del destinatario dell'errore con un bit extra. Feedback destinatario, positivo ACK o negativo NAK. Ritrasmissione di un pacchetto ricevuto con errore. RDT 2.1: usa acknowledgement positivi e negativi dal destinatario verso il mittente, positivo quando riceve pacchetto fuori sequenza e negativo quando alterato, ma il destinatario continua a non avere il numero di sequenza. RDT 2.2: ha più funzioni del 2.1, il destinatario deve includere ora il numero di sequenza del pacchetto di cui invia l'acknowledgement all'interno del messaggio ack, e il mittente deve controllare il numero di sequenza. RDT 3.0: Upgrade dei precedenti, si occupa dello smarrimento dei pacchetti.Per implementare un meccanismo di ritrasmissione basato sul tempo, sarà necessario un timer per il conto alla rovescia in grado di interrompere il mittente dopo che è trascorso un determinato periodo di tempo.
Il mittente dovrà quindi essere in grado di:
- Avviare il timer ogni volta che viene inviato un pacchetto (un primo pacchetto o una ritrasmissione)
- Rispondere a un interrupt del timer (prendendo le azioni appropriate)
- Interrompere il timer.
L'esistenza di perdita di pacchetti e pacchetti (dati, ACK) duplicati generati dal mittente complica anche l'elaborazione del mittente di qualsiasi pacchetto ACK che riceve. La soluzione è di aumentare il pacchetto ACK con un campo di riconoscimento. Quando il ricevitore genera un ACK, copierà il numero di sequenza del pacchetto di dati che viene riconosciuto in questo campo di riconoscimento. Esaminando il contenuto del campo di riconoscimento, il mittente può determinare il numero
La sequenza del pacchetto che viene riconosciuto positivamente. Controllo di flusso TCP offre un servizio di controllo di flusso alle proprie applicazioni per evitare che il mittente riempia il buffer del destinatario. Quindi, il controllo di flusso è un servizio di confronto sulla velocità, dato che paragona la frequenza di invio del mittente con quella di lettura dell'applicazione ricevente. TCP offre un controllo di flusso facendo mantenere al mittente una variabile, chiamata finestra di ricezione, che fornisce al mittente lo spazio disponibile nel buffer del destinatario. In sostanza, l'host di ricezione, alloca un buffer di ricezione per la connessione, memorizzando la dimensione in una variabile RcvBuffer. Inoltre, avremmo altre due variabili: LastByteRead, cioè il numero dell'ultimo byte letto nel flusso di dati che il processo applicativo nell'host ricevente ha letto dal buffer, e LastByteRcvd, cioè il numero dell'ultimo byte che
è stato copiato nel buffer dell’host ricevente. Quindi avremmo chela dimensione RcvBuffer ≥ LastByteRcvd - LastByteRead. La finestra di ricezione rwndsarà data da RcvBuffer - (LastByteRcvd - LastByteRead). Inoltre, la finestra di ricezioneè dinamica.
CONTROLLO DI CONGESTIONE Quando il traffico in rete diventa eccessivo vipossono essere delle perdite di pacchetti, e se la connessione è affidabile, nonricevendo il feedback di consegna avvenuta, invia nuovamente un pacchettorischiando di causare un overflow dei buffer nei router. La ritrasmissione di pacchettitratta quindi un sintomo della congestione di rete ma non le cause della congestionedi rete: il tentativo da parte di troppe sorgenti di inviare dati a ritmi troppo elevati. Peradeguare l’attività dei mittenti i due principali orientamenti al controllo dicongestione utilizzati sono: controllo end-to-end e il controllo assistito dallarete. Il controllo di congestione end-to-end, il
Il livello di rete non fornisce supporto esplicito al livello di trasporto per il controllo di congestione, la cui presenza deve essere dedotta dai sistemi periferici sulla base dell'osservazione del comportamento della rete. La perdita di segmenti TCP viene considerata una chiara indicazione di congestione di rete e TCP diminuisce l'ampiezza della propria finestra. Il controllo di congestione assistito dalla rete non è altro che il router che fornisce un feedback esplicito al mittente sullo stato di congestione della rete. Questo avviso può essere un bit che indica traffico su un collegamento. TCP deve usare il controllo di congestione end-to-end anziché quello assistito dalla rete, dato che il livello IP non offre ai sistemi periferici un feedback esplicito. TCP impone ad ogni mittente un limite alla velocità di invio. Infatti, se il mittente TCP si accorge che c'è poco traffico in rete, incrementa il proprio tasso trasmissivo; quando invece si accorge che c'è congestione, diminuisce il proprio tasso trasmissivo.congestione può aumentare rapidamente, consentendo al mittente di inviare più dati. Tuttavia, se si verificano perdite di pacchetti o ritardi nella ricezione degli ack, la finestra di congestione può diminuire per evitare ulteriori congestioni nella rete. Il controllo di congestione di TCP è quindi fondamentale per garantire un flusso efficiente dei dati in una rete congestionata.congestione verrà ampliata rapidamente; caso contrario se gli ack arrivano con frequenza bassa. Dato che TCP utilizza gli ack per temporizzare gli incrementi dell'ampiezza della finestra di congestione, possiamo dire che TCP è auto-temporizzato. Inoltre, se i mittenti TCP contemporaneamente trasmettessero troppo velocemente, potrebbero congestionare la rete. Per evitare questi problemi viene usato l'algoritmo di congestione TCP, caratterizzato da tre fasi: slow start, congestion avoidance e fast recovery. Nella fase di slow start, il valore di cwnd parte da 1 e si incrementa di 1 MSS ogni volta che un segmento riceve acknowledgment. Questo meccanismo però non continua in modo esponenziale, infatti, si interrompe se si verifica una perdita, indicata da un evento di time-out, qui il mittente pone cwnd uguale ad 1 e ricomincia il processo. Il secondo modo in cui la fase di slow start può terminare è legato al valore di ssthresh, questo inizialmente.viene impostato a metà del valore