Che materia stai cercando?

Architettura Internet - Concetti fondamentali riassunti

Il file contiene tutti gli argomenti trattati nel corso della materia. È stato scritto basandosi sul libro consigliato "Reti di Calcolatori e Internet - Un approccio top-down" di Kurose e Ross integrati alle spiegazioni del Prof. Malgeri dell'Università degli Studi di Catania.

Esame di Architettura Internet docente Prof. M. Malgeri

Anteprima

ESTRATTO DOCUMENTO

server, segmento server-client, conferma client-server con richiesta HTTP); le

prime due parti richiedono un RTT. Quando il messaggio di richiesta (ultima via

dell’handshake) arriva al server quest’ultimo inoltra il file HTML sulla

connessione TCP: la richiesta risposta consuma un altro RTT.

A questa stima va aggiunto il tempo di trasmissione da parte del server del file

HTML.

Le connessioni non persistenti presentano alcuni limiti: il primo è che per ogni

oggetto richiesto occorre stabilire e mantenere una nuova connessione e per

ciascuna connessione si devono allocare buffer e mantenere variabili TCP sia

nel client che nel server.

HTTP con connessioni persistenti

Nelle connessioni persistenti il server lascia la connessione aperta dopo l’invio

di una risposta, per cui le richieste e le risposte successive tra gli stessi client e

server possono essere trasmesse sulla stessa connessione. In generale HTTP

chiude la connessione quando essa rimane inattiva per un dato lasso di tempo.

Formato dei messaggi HTTP

Un tipico messaggio di richiesta HTTP consiste di 5 righe ognuna seguita da un

carattere di ritorno a capo e un carattere di nuova linea. L’ultima riga è seguita

da una coppia di caratteri di ritorno a capo e nuova linea aggiuntivi. In generale

i messaggi di richiesta possono essere costituiti da un numero indefinito di

righe, anche una sola.

La prima riga è detta riga di richiesta e presenta tre campi: metodo,

 URL e versione di HTTP.

Il metodo più utilizzato è GET ma si possono trovare anche POST, HEAD,

PUT e DELATE

La seconda riga è detta riga host e specifica l’host in cui risiede

 l’oggetto

La terza riga specifica il tipo di connessione (persistente o no)

 La quarta riga detta riga di intestazione User-agent specifica il tipo di

 browser che sta effettuando la richiesta al server

La quinta riga specifica (eventualmente) la lingua in cui vogliamo

 ricevere il determinato file.

Un tipico messaggio di risposta HTTP si compone invece di 3 sezioni: una

riga di stato iniziale, sei righe di intestazione e il corpo. La riga di

intestazione presenta tre campi che sono nell’ordine la versione del

protocollo, un codice di stato ed un corrispettivo del messaggio di stato; i

codici di stato possibile sono

200 OK: la richiesta ha avuto successo

 301 Moved Permanently: L’oggetto è stato trasferito in modo

 permanente; il client recupera autonomamente il nuovo URL

400 Bad Request: indica un errore generico

 404 Not Found: il documento non esiste più sul server

 505 HTTP Version Non Supported: il server non dispone della

 versione di protocollo HTTP richiesta

Le sei righe di intestazione esprimono invece nell’ordine:

1. Il tipo di connessione (persistente o no),

2. Data e ora di creazione e invio da parte del server della risposta HTTP

3. Il nome del server che genera il messaggio

4. La data di quando il file ha subito l’ultima modifica

5. La lunghezza in byte dell’oggetto

6. Il formato dell’oggetto

Interazione utente-server: i cookie

I cookie consentono al server di tener traccia degli utenti. La tecnologia dei

cookie presenta 4 componenti:

1. Riga di intestazione del messaggio di risposta HTTP

2. Riga di intestazione del messaggio di richiesta HTTP

3. Un file mantenuto sul sistema dell’utente gestito dal browser

4. Un database sul sito

Possono anche essere usati per creare un livello di sessione utente al di sopra

di HTTP che è privo di stato. Sono oggetto di controversie in quanto possono

essere considerati violazione della privacy

Web Caching

Una web cache, nota come proxy server, è un entità che soddisfa le richieste

HTTP al posto del web server effettivo. Il proxy ha una propria memoria su

disco in cui conserva copie di oggetti usualmente richiesti. Funziona nel

seguente modo:

1. Il browser stabilisce una connessione TCP con il proxy ed invia una

richiesta HTTP per un oggetto

2. Il proxy controlla la presenza di una copia dell’oggetto memorizzata

localmente e se trovata la inoltra in un messaggio di risposta HTTP al

browser

3. Se la cache non dispone dell’oggetto apre una connessione TCP verso il

server di origine. Il proxy invia una richiesta HTTP per l’oggetto e riceve

dal server l’oggetto all’interno di una risposta HTTP

4. Quando il proxy riceve l’oggetto ne salva una copia localmente e ne

inoltra un’altra copia all’interno di un messaggio di risposta HTTP al

browser

Il proxy è quindi contemporaneamente sia server che client e gli scopi principali

che spingono ad usarlo sono la riduzione dei tempi di attesta e la riduzione del

traffico sul collegamento di accesso ad internet.

Tuttavia ci potrebbe essere il problema che l’oggetto salvato nella cache possa

essere stato modificato nel corso del tempo che intercorre tra una prima

chiamata e un’altra dello stesso oggetto. Per ovviare a questo problema i

server proxy utilizzano un meccanismo chiamato GET condizionale: nel

messaggio di richiesta al server dell’oggetto viene inclusa una riga di

intestazione if-modified-since. Questo GET condizionale sta comunicando al

server di inviare l’oggetto solo se è stato modificato rispetto alla data

specificata. Trasferimento di file: FTP

In una tipica sessione FTP, l’utente utilizza un host locale per trasferire file da o

verso un host remoto. Per accedere ed essere autorizzato a scambiare dati è

necessario che l’utente si identifichi mediante un nome utente ed una

password.

FTP utilizza due connessioni TCP parallele dette connessione di controllo e

connessione dati: la prima viene usata per inviare informazioni di controllo tra

gli host; la seconda invece si utilizza per il vero e proprio invio dei file. Dato che

la connessione di controllo è separata si dice che tale protocollo invia le proprie

informazioni fuori banda.

Quando un utente inizia una sessione FTP con un host remoto, il lato client FTP

inizializza una connessione di controllo TCP con il lato server sulla porta 21 del

server, dove poi invia nome utente e password e sulla stessa connessione

spedisce dopo i comandi per cambiare la directory remota. Nella connessione

dati invece FTP invia esattamente un file e poi la chiude mentre la connessione

di controllo rimane aperta per l’intera durata della sessione utente.

Per tutto l’arco di una sessione FTP deve mantenere lo stato dell’utente

limitando così il numero di processi che può gestire in contemporanea

Posta elettronica in internet

La posta elettronica è un mezzo asincrono dove le persone inviano e leggono

messaggi nel momento a loro più opportuno. I tre componenti principali sono

gli user agent, i server di posta e il protocollo SMTP. I mail server costituiscono

la parte centrale dell’infrastruttura. Ciascun utente ha una propria mailbox

collocata all’interno di un mail server. SMTP rappresenta il principale protocollo

a livello di applicazione per la posta elettronica su internet, esso fa uso di

trasferimento dati affidabile TCP.

Uno scenario tipico è così formato:

Il mittente invoca il proprio user agent per posta elettronica, fornisce

 l’indirizzo di posta del destinatario, compone il messaggio e dà istruzione

allo user agent di inviarlo

Lo user agent del mittente invia il messaggio al suo mail server dove

 viene collocato in una coda di messaggi

Il lato client SMPT eseguito sul server del mittente vede il messaggio

 nella coda e apre una connessione TCP verso un server SMPT in

esecuzione sul mail server del destinatario

Dopo un handshaking SMTP, il client SMTP invia il messaggio su

 connessione TCP

Il lato server SMTP riceve il messaggio e lo posiziona nella mailbox del

 destinatario

Di solito SMTP non utilizza server intermedi per inviare la posta.

Nell’ipotesi in cui il destinatario esegua il proprio user agent sul proprio pc

verrebbe naturale pensare alla collocazione di un mail server sul pc locale che

però per funzionare dovrebbe restare sempre acceso. Per ovviare a questo

problema l’utente manda in esecuzione un user agent sul pc locale ma accede

alla propria casella memorizzata su un mail server condiviso con altri utenti e

sempre attivo generalmente gestito dall’ISP dell’utente. Per accedere così ai

messaggi si utilizzano protocolli speciali: il Post Office Protocol – Verisone 3

(POP3) e l’internet Mail Access Protocol (IMAP).

Il POP3 è un protocollo di accesso alla posta estremamente semplice. Agisce

quando il client apre una connessione TCP verso un mail server sulla porta 110,

stabilita la connessione TCP procede in tre fasi:

Autorizzazione – lo user agent invia nome utente e password in chiaro per

 identificare l’utente

Transazione – lo user agent recupera i messaggi

 Aggiornamento – questa fase ha luogo solo dopo che il client ha avviato il

 comando quit che conclude la sessione di POP3; il server di posta

rimuove i messaggi che sono stati marcati per la cancellazione.

A causa del metodo scarica e cancella non si possono vedere le mail scaricate

su un pc o da un altro pc. Per ovviare a questo problema nasce il ben più

complicato protocollo IMAP che associa a una cartella ogni messaggio arrivato

dal server. DNS

I nomi degli host essendo costituiti da un numero variabile di caratteri

alfanumerici, sarebbero difficilmente elaborati dal server. Per tali motivi, gli

host vengono identificati anche dagli indirizzi IP. Per conciliare i due approcci

serve un servizio di traduzione da una forma all’altra. Questo è il principale

compito dei Domain Name System (DNS) di internet. Il DNS è un database

distribuito implementato in una gerarchia di DNS server (generalmente

macchine UNIX che eseguono un software chiamato BIND) e un protocollo a

livello di applicazione che permette agli host di interrogare il database. Questo

protocollo utilizza UDP e la porta 53. Vediamo il funzionamento:

1. La stessa macchina utente esegue il lato client dell’applicazione DNS

2. Il browser estrae il nome dell’host dall’URL e lo passa al lato client

dell’applicazione DNS

3. Il client DNS invia una query contenente l’hostname a un DNS server

4. Il client DNS riceve una risposta che include l’indirizzo IP corrispondente

all’hostname

5. Ricevuto l’indirizzo IP il browser può instaurare una connessione TCP

verso il processo server HTTP collegato alla porta 80 di quell’indirizzo IP

Il DNS aggiunge quindi un ritardo aggiuntivo.

Oltre alla traduzione degli hostname in indirizzi IP, il DNS svolge anche altri

importanti servizi quali:

Host aliasing: un host dal nome complicato può avere un o più alias. Il

 DNS può essere invocato per ottenere anche dall’alias l’indirizzo IP

Mail server aliasing: un’applicazione di posta può invocare il DNS per

 ottenere il nome canonico di un sinonimo fornito, così come l’indirizzo IP

dell’host

Distribuzione del carico di rete tra i server replicati

 Funzionamento dei DNS

Il servizio di traduzione su molte macchine LINUX è gestito dalla chiamata di

funzione gethostbyname(); dopo la chiamata il DNS sull’host prende il controllo.

Tutte le richieste DNS ed i messaggi vengono inviati all’interno di datagrammi

UDP diretti alla porta 53.

Utilizzare un database centralizzato su un singolo DNS server non è in grado di

adattarsi alla crescita esponenziale della rete; tra i principali problemi vi sono il

volume di traffico, la manutenzione, la distanza rispetto a molti client ed infine

la possibilità di avere un solo punto di fallimento.

Il DNS utilizza un gran numero di server organizzati in maniera gerarchica.

Abbiamo:

Root server: in internet ne esistono 13 etichettati dalla A alla M. Ciascuno

 di essi è in realta un cluster di server replicati

Top-level domain server (TLD server): che si occupano dei domini di

 primo livello (.com, .org, ecc..) e tutti i domini di primo livello relativi ai

paesi

DNS server autoritativo: ogni organizzazione dotata di host

 pubblicamente accessibile tramite internet deve fornire record DNS

pubblicamente accessibili

Esiste un ulteriore tipo di DNS detto DNS server locale, che non appartiene

strettamente alla gerarchia di server, ma che è centrale nell’architettura DNS.

Ciascun ISP ha un proprio DNS server locale (default name server), quando un

host effettua una richiesta DNS, il DNS server locale si comporta da proxy e

inoltra la query alla gerarchia dei DNS server. Le richieste DNS possono essere

di due tipologie:

Ricorsiva: se non si conosce la corrispondenza chiediamo ad un altro DNS

 di ottenere l’associazione per conto del richiedente

Iterative: se non si conosce la corrispondenza si invia la richiesta ad un

 altro DNS e tutte le risposte sono restituite direttamente dal richiedente

DNS caching

Il DNS server che riceve una risposta DNS può mettere in cache le informazioni

ottenute. Se una coppia hostname/IP è presente nelle cache di un DNS server

che riceve una richieste con lo stesso hostname, il DNS server può fornire

l’indirizzo IP desiderato, anche se non è autoritativo per tale indirizzo.

I server che implementano il database distribuito di DNS memorizzano i record

di risorsa. Ognuno di essi contiene i seguenti campi: name, value, type e

TLL dove con TLL intendiamo Time to Live ossia il tempo residuo di vita di un

record. Il significato di name e value dipendono da type:

Se type=A allora name è l’hostname e value è l’IP

 Se type=NS allora name è un dominio e value è l’hostname del DNS

 server autoritativo che sa come ottenere il corrispondente indirizzo IP

Se type=CNAME allora value rappresenta il nome canonico dell’host

 per il sinonimo name

Se type=MX allora value è il nome canonico di un mail server che ha il

 sinonimo name

Possibili Attacchi

I DNS server possono essere attaccati:

Attacchi DDOS attraverso richieste iterative

 Redirect Attacks intercettando le query (ma si risolve con HTTPS)

 DNS Poisoning: chiedendo qualcosa al DNS locale che aspetta risposta

 ma riceve come risposta un DNS falso, salva la cache e infetta molti altri

host

Si può usare un DNS per effettuare un attacco DDOS in cui l’IP sorgente della

query è della macchina da attaccare.

Livello di trasporto

I protocolli a livello di trasporto sono implementati nei sistemi periferici ma non

nei router di rete. Lato mittente, il livello di trasporto converte i messaggi che

riceve da un processo applicativo in segmenti. Questo avviene spezzando, se

necessario, i messaggi applicati in parti più piccole e aggiungendo a ciascuna

di esse un’intestazione di trasporto; il livello di trasporto passa il segmento a

livello di rete dove viene incapsulato all’interno di un datagramma.

Una rete TCP/IP come Internet mette a disposizione due diversi protocolli a

livello di applicazione:

UDP (User Datagram Protocol) che fornisce un servizio non affidabile e

 non orientato alla connessione

TCP (Trasmission Control Protocol) che offre un servizio affidabile e

 orientato alla connessione; esso fornisce anche un controllo della

congestione di rete

Il protocollo a livello di rete di internet si chiama IP e fornisce comunicazione

logica tra gli host. Il suo modello prende il nome di best effort questo significa

che fa il suo meglio per consegnare i segmenti tra host comunicanti, ma non

offre garanzie per tanto svolge un servizio non affidabile.

Multiplexing e demultiplexing

Un processo può gestire una o più socket, attraverso le quali i dati fluiscono

dalla rete al processo e viceversa. Di conseguenza il livello di trasporto

nell’host di ricezione in realtà non trasferisce i dati direttamente a un processo,

ma piuttosto ad una socket che fa da intermediario. Ogni socket ha un

identificatore univoco il cui formato dipende dal fatto che si tratti di socket UDP

o TCP.

Il compito di trasportare dati dei segmenti a livello di trasporto verso la giusta

socket viene detto demultiplexing. Il compito di radunare frammenti di dati da

diverse socket sull’host di origine e incapsulare ognuno con intestazioni a

livello di trasporto per creare dei segmenti e passarli al livello di rete viene

detto multiplexing.

Il multiplexing a livello di trasporto richiede che le socket abbiano identificatori

univoci e che ciascun segmento presenti un campo che indichi la socket a cui

va consegnato il segmento. I campi in questione prendono il nome di campo

del numero di porta di origine e campo del numero di porta di destinazione. I

numeri di porta sono di 16 bit e vanno da 0 a 65535; quelli che vanno da zero a

1023 sono chiamati numeri di porta noti e sono riservati ai protocolli ben noti

Trasporto non orientato alla connessione: UDP

UDP fa il minimo che un protocollo di trasporto debba fare; a parte la funzione

di multiplexing/demultiplexing e una forma di controllo molto semplice degli

errori non aggiunge nulla a IP. UDP prende i messaggi dal processo applicativo,

aggiunge il numero di porta di origine e destinazione per il

multiplexing/demultiplexing, aggiunge altri due piccoli campi e passa il

segmento risultante al livello di rete.

In UDP non esiste handshaking per questo motivo si dice non orientato alla

connessione. I motivi per cui scegliere UDP sono:

Controllo più fine a livello di applicazione su quali dati sono inviati e

 quando: non appena un processo applicativo passa dei dati a UDP,

questo li impacchetta in un segmento e li trasferisce immediatamente a

livello di rete

Nessuna connessione stabilita: UDP spara i dati a raffica senza alcun

 preliminare formale, pertanto non introduce ritardi nello stabilire la

connessione

Nessuno stato di connessione

 Minor spazio usato per l’intestazione del pacchetto: UDP aggiunge

 soltanto 8 byte Struttura dei segmenti UDP

L’intestazione UDP presenta solo 4 campi da 2 byte ciascuno:

I numeri di porta consentono all’host di destinazione di trasferire dati

 applicativi al processo corretto

Il campo lunghezza specifica il numero di byte del segmento UDP

 Il checksum UDP serve per il rilevamento degli errori; viene utilizzato per

 determinare i bit del segmento UDP sono stati alterati durante il

trasferimento da sorgente a destinazione. Dato che non sono garantiti né

l’affidabilità del singolo collegamento né il rilevamento di errori in

memoria UDP deve mettere a disposizione a livello di trasporto un

meccanismo di verifica su base end-to-end se vuole che il trasferimento

dati sia in grado di rilevare eventuali errori (principio end-to-end).

Principi del trasferimento dati affidabile

Con un canale affidabile a disposizione nessun bit dei dati trasferiti è corrotto o

va perduto e tutti i bit sono consegnati nell’ordine di invio. Si tratta

precisamente del modello di servizio offerto da TCP alle applicazioni per

internet che ne fanno uso. Il compito dei protocolli di trasferimento dati

affidabile è l’implementazione di questa astrazione del servizio. Ciò è reso

difficile dalla inaffidabilità del livello al di sotto del protocollo di trasferimento

dati.

Assumiamo che i pacchetti vengano consegnati nell’ordine con cui sono stati

inviati, ma alcuni possono andare persi; vale a dire che il canale sottostante

non riordina i pacchetti.

Il lato mittente del protocollo di trasferimento dati sarà invocato tramite una

chiamata rdt_send() e trasferirà i dati da consegnare al livello superiore sul lato

ricevente; rdt sta per “reliable data transfer” e send indica la chiamata al lato

mittente di rtd. Quando un pacchetto raggiunge il lato ricevente del canale,

verrà chiamata rtd_rcv(). Nel momento in cui il protocollo rdt voglia consegnare

i dati ad un livello superiore, lo farà chiamando deliver_data().

Considerando solo il caso di trasferimento unidirezionale notiamo che i due lati

di rdt necessitano anche del reciproco scambio di pacchetti di controllo:

entrambi inviano pacchetti tramite una chiamata a udt_send() (unrealiable data

transfer).

Trasferimento dati affidabile su un canale perfettamente

affidabile: rdt 1.0

Nel caso più semplice il canale sottostante è completamente affidabile.

Chiameremo il protocollo rdt 1.0. Le definizioni della macchina a strati finiti

(FSM) sono poche pertanto definiamo tale protocollo banale.

Il mittente di rdt accetta semplicemente dati dal livello superiore tramite

 l’evento rdt_send(data), crea un pacchetto contenente dati con l’azione

make_pkt(data) e lo invia sul canale.

Il ricevente rdt raccoglie i pacchetti dal canale sottostante tramite

 l’evento rdt_rcv(packet), rimuove i dati dei pacchetti tramite l’azione

extract(packet, data) e li passa al livello superiore con l’azione

deliver_data(data)

Trasferimento dati affidabile su un canale con errori sui bit:

rdt 2.0

Un modello più realistico del canale sottostante è quello in cui i bit di un

pacchetto possono essere corrotti. Tali errori si verificano nei componenti fisici

delle reti quando il pacchetto viene trasmesso, propagato o inserito nei buffer.

Continuiamo a supporre che tutti i pacchetti vengano trasmessi in ordine ma

che i bit possano essere corrotti. Per sapere se il messaggio è corrotto si userà

un protocollo di dettatura dei messaggi che usa notifiche

(acknowledgement) positive e negative. Queste consentono al

destinatario di far sapere al mittente che cosa sia stato ricevuto correttamente

e cosa no. I protocolli di trasferimento affidabili sono basati su ritrasmissioni

noti come protocolli ARQ (automatic repeat request). I protocolli ARQ devono

avere tre funzionalità aggiuntive: rilevamento errori; feedback

destinatario e ritrasmissione. Vediamo il funzionamento:

Il lato mittente di rdt 2.0 presenta due strati.

 In quello sinistro il protocollo sta attendendo i dati da raccogliere

o dal livello superiore; quando si verigica l’evento rdt_send(data), il

mittente crea un pacchetto (sndpkt) contenente i dati da inviare,

insieme al checksum e infine spedisce il pacchetto tramite

l’operazione udt_send(sndpkt);

In quello di destra il protocollo mittente è in attesa di un paccheto

o ACK o NAK dal destinatario; se riceve un ACK [evento denotato da

rdt_rcv(rcvpkt) && isACK(rcvpkt)] il mittente sa che l’ultimo

pacchetto trasmesso è stato ricevuto correttamente e pertanto

ritorna in stato di attesa. Se riceve un NAK il protocollo ritrasmette

l’ultimo pacchetto e attende una risposta; quando il mittente è

nello stato di attesa di ACK o NAK non può recepire dati dal livello

superiore e non invia nuovi dati finché non è certo che i precedenti

siano arrivati correttamente. Per tale ragione i protocolli di questo

tipo prendono il nome di stop-and-wait

Il lato ricevente ha un solo strato: all’arrivo del pacchetto il destinatario

 risponde con un ACK o NAK

Questo protocollo presenta un grave difetto: non tiene conto che i pacchetti

ACK o NAK possano essere a loro volta alterati. Esistono due possibilità per

gestire ACK e NAK corrotti:

Aggiunta di bit al checksum sufficienti a consentire al mittente non solo

 di trovare ma anche di correggere errori sui bit

Rinvio del pacchetto di dati corrente a seguito della ricezione di un ACK o

 NAK alterato anche se così si introducono pacchetti duplicati nel

canale. Una soluzione a quest’ultimo problema è l’aggiunta nei pacchetti

da parte del mittente di un numero di sequenza grazie al quale al

destinatario basterà solo verificare questo numero per riconoscere se tale

pacchetto è una ritrasmissione o no.

La versione corretta di rdt 2.0 prende il nome di rdt 2.1 e usa ACK positivi e

negativi del destinatario verso il mittente: il destinatario manda un ACK

positivo quando riceve un pacchetto fuori sequenza; manda invece un ACK

negativo quando riceve un pacchetto alterato. Un mittente che riceve due ACK

per lo stesso pacchetto (ACK duplicati) sa che il destinatario non ha ricevuto

correttamente il pacchetto successivo a quello confermato due volte.

Il nostro protocollo di trasferimento dati affidabile e privo di NAK per un canale

sui bit è rdt 2.2 che si distingue dal precedente perché include il numero di

sequenza del pacchetto di cui invia l’ACK all’interno del messaggio ACK stesso

Trasferimento dati affidabile su un canale con perdite ed

errori sui bit: rdt 3.0

Supponiamo che il canale di trasmissione oltre che danneggiare i bit, possa

smarrire i pacchetti. Il protocollo deve ora preoccuparsi di come rilevare lo

smarrimento e cosa fare quando avviene. Per gestire il primo problema

introduce un nuovo meccanismo.

Supponiamo che il mittente spedisca un pacchetto dati e che questo o l’ACK

corrispondente del ricevente vada smarrito; in entrambi i casi il mittente non

riceverà alcuna risposta da parte del destinatario. L’approccio adottato nella

pratica è scegliere in modo assegnato un valore di tempo per cui la perdita di

pacchetti risulta probabile (ma non garantita), se non si riceve un ACK entro

questo tempo il pacchetto viene ritrasmesso. Ciò introduce la possibilità di

pacchetti duplicati sul canale mittente e destinatario.

Dal punto di vista del mittente la ritrasmissione è il rimedio universale; per

implementare un tale meccanismo è necessario introdurre un contatore in

grado di segnalare al mittente l’avvenuta scadenza di un dato lasso di tempo. Il

mittente dovrà quindi essere in grado di inizializzare il contatore ogni volta che

invia un pacchetto, di rispondere a un interrupt generato dal timer con l’azione

appropriata e di fermare il contatore

Protocolli per il trasferimento dati con pipeline

Il protocollo rdt 3.0 è corretto dal punto di vista funzionale ma ha scarse

prestazioni. In situazioni idilliache il ritardo di propagazione tra andata e ritorno

(RTT) è all’incirca 30 millisecondi e i tempi di trasmissione per ogni pacchetto

(L/R) generano ulteriore ritardo.

Se definiamo utilizzo del mittente o del canale come la frazione di tempo in

cui il mittente è stato effettivamente occupato nell’invio di bit sul canale; il

protocollo stop-and-wait presenta uno scarsissimo utilizzo del mittente pari

all’1% del tempo [Utilizzo= (L/R)/RTT + (L/R)].

La soluzione è non operare in modalità stop-and-wait ma consentire al mittente

di inviare più pacchetti senza aspettare gli ACK; nello specifico si consente al

mittente di mandare 3 pacchetti senza aspettare l’ACK in modo che l’utilizzo

viene triplicato.

Dato che molti pacchetti in transito possono essere visti come il riempimento di

una tubatura, questa tecnica è nota come pipelining. Le sue conseguenze

sono: L’intervallo dei numeri di sequenza deve essere aumentato

 I lati di invio e di ricezione dei protocolli possono dover memorizzare in

 un buffer più di un pacchetto: il mittente, quantomeno, dovrà

memorizzare i pacchetti trasmessi per i quali non ha ancora ricevuto ACK

La quantità di numeri di sequenza necessari e i requisiti di buffer

 dipendono dal modo in cui il protocollo di trasferimento dati reagisce ai

pacchetti smarriti, alterati o troppo in ritardo.

Si possono identificare due approcci: Go-Back-N e Ripetizione

Selettiva. Go-Back-N

In un protocollo GBN il mittente può trasmettere più pacchetti senza dover

attendere ACK; ma non può avere più di un dato numero di pacchetti N in

attesa di ACK nella pipeline.

Se definiamo base il numero di sequenza del pacchetto più vecchio che non ha

ancora ricevuto un ACK e nextseqnum il numero di sequenza del prossimo

pacchetto da inviare; possiamo identificare 4 intervalli di numeri di sequenza:

Intervallo [0, base-1] che rappresentano i pacchetti già trasmessi e

 confermati

Intervallo [base – nextseqnum-1] che rappresentano i pacchetti inviati in

 attesa di ACK

Intervallo [nextseqnum – base+N-1] che rappresentano i pacchetti pronti

 da inviare nel caso arrivassero dati dal livello superiore

Intervallo [da base+N in poi] che rappresentano i pacchetti che non

 possono essere utilizzati finché il mittente non riceve ACK relativo ad un

pacchetto che si trova nella pipeline.

Gli intervalli di sequenza ammissibili per i pacchetti trasmessi che non hanno

ricevuto ACK può essere visto come una finestra di dimensione N sull’intervallo

dei numeri di sequenza; per questa ragione N viene spesso chiamato widows

size (ampiezza della finestra) ed il protocollo GBN viene detto a finestra

scorrevole.

Il numero di sequenza di un pacchetto viene scritto in un campo a intestazione

di dimensione fissa; detto k il numero di bit in tale campo, l’intervallo di

possibili numeri di sequenza è [0, (2^k)-1]. Avendo un intervallo finito di

numeri di sequenza, tutte le operazioni aritmetiche che coinvolgono i numeri di

sequenza devono essere effettuate in modulo 2^k.

Il mittente GBN deve rispondere a tre tipi di evento:

Invocazione dall’alto – Quando dall’alto si chiama rdt_send() come prima

 cosa il mittente controlla se la finestra è piena; se non lo è crea e invia un

pacchetto aggiornando di conseguenza le variabili. Se è piena il mittente

restituisce i dati al livello superiore che verosimilmente proverà più tardi

Ricezione di un ACK – L’ACK del pacchetto con il numero di sequenza n

 verra considerato un ACK cumulativo che indica che tutti i pacchetti con

un numero di sequenza minore o uguale ad n sono statti correttamente

ricevuti dal destinatario

Evento di timeout – Come nei protocolli stop-and-wait si utilizzerà un

 contatore per risolvere il problema di pacchetti dati o ACK persi. Quando

si verifica un timeout il mittente reinvia tutti i pacchetti che non hanno

ancora ricevuto ACK

Per il destinatario è tutto più semplice in quanto se un pacchetto di sequenza n

viene ricevuto correttamente ed in ordine, questo manda un ACK e consegna il

pacchetto a livello superiore. In tutti gli altri casi scarta i pacchetti e manda un

ACK per il pacchetto in ordine ricevuto più recente.

Ripetizione Selettiva (SR)

Il Go-Back-N presenta problemi quando l’ampiezza della finestra e il prodotto

tra larghezza della banda e ritardo sono entrambi grandi in quanto nella

pipeline si potranno trovare numerosi pacchetti. Un errore su un solo pacchetto

può causare un elevato numero di ritrasmissioni causando una saturazione

della pipeline non necessaria. I protocolli a ripetizione selettiva evitano le

ritrasmissioni non necessario facendo ritrasmettere al mittente solo quei

pacchetti in cui esistono sospetti di errore. Questa forma di richiesta costringe il

destinatario a mandare ACK specifici per i pacchetti ricevuti in modo corretto.

Si userà un’ampiezza di finestra pari a N per limitare il numero di pacchetti

senza ACK nella pipeline però il mittente avrà ricevuto già gli ACK di qualche

pacchetto nella finestra.

Il destinatario SR invierà un riscontro per i pacchetti inviati correttamente

ricevuti sia in ordine che fuori sequenza; questi verranno memorizzati in un

buffer finche non sono stati ricevuti tutti i pacchetti mancanti, momento in cui

un blocco di pacchetti può essere trasportato in ordine a livello superiore. Se il

destinatario non invia un ACK per il pacchetto la finestra non scorre.

Trasporto orientato alla connessione: TCP

TCP viene detto orientato alla connessione in quanto prima di effettuare

scambio dati i processi effettuano handshake cioè si inviano reciprocamente

segmenti preliminari per stabilire i parametri del successivo trasferimento dati

inizializzando molte variabili di stato associate alla connessione. La

connessione TDP non è un circuito end-to-end TDM o FDM in quanto lo stato

della connessione risiede completamente nei due sistemi periferici. Router

intermedi sono completamente ignari di tali connessioni e vedono solo

datagrammi.

Una connessione TCP offre un servizio full-duplex (i dati possono muoversi

contemporaneamente ambo i lati della connessione) ed è anche detta

connessione punto a punto in quanto ha luogo tra un mittente ed un

destinatario. Il multicast (uno a molti) non è possibile.

Supponiamo che il processo di un host (client) voglia inizializzare una

connessione con il processo in un altro host (server). Il processo applicativo

client informa il livello di trasporto client di voler stabilire una connessione

verso il processo server; il quale risponde con uno speciale segmento TCP.

Infine il client risponde con un terzo segmento speciale. I primi due segmenti

non trasportano payload ossia non hanno dati a livello applicativo, il terzo li

può trasportare. Dato che i due host scambiano 3 segmenti per instaurare una

connessione questa procedura viene detta handshake a tre vie.

Struttura dei segmenti TCP

L’intestazione TCP include numeri di porta di origine e numeri di porta di

destinazione ed un campo chechsum. Troviamo poi i seguenti campi:

Campo numero di sequenza (32 bit) - implementa il trasferimento dati

 affidabile

Campo numero di acknowledgement (32 bit) - implementa il

 trasferimento dati affidabile

Campo finestra di ricezione (16 bit) - controlla il flusso

 Campo lunghezza dell’intestazione (4 bit) – specifica la lunghezza

 dell’intestazione TCP in multipli di 32 bit

Campo opzioni (lunghezza variabile) – facoltativo, viene usato per

 negoziare tra mittente e destinatario la dimensione massima del

segmento

Campo Flag (6 bit) – contiene una flag tra: ACK (indica che il valore del

 campo acknowledgement è valido), RST, SYN, FIN (impostano la chiusura

della connessione), PSH (se ha il valore uno il destinatario deve inviare

immediatamente i dati a livello superiore) e URG (dati urgenti). Nella

pratica PSH e URG non vengono usati

Numeri di sequenza e numeri di acknowledment

Questi due campi rappresentano una parte critica del servizio di trasferimento

dati affidabile TCP. Questo protocollo vede i dati come flusso di byte ordinati e

non come una struttura. L’uso dei numeri di sequenza riflette questa visione

dato che i numeri si applicano al flusso di byte trasmessi e non alla serie di

segmenti trasmessi. Il numero di sequenza per un segmento è pertanto il

numero nel flusso di byte del primo byte di segmento. Dato che TCP effettua

l’acknowledgement solo dei byte fino al primo byte mancante si dice che tale

protocollo offre acknowledgement cumulativi.

Timeout e stima del tempo di andata e ritorno

TCP utilizza un meccanismo di timeout e ritrasmissione per recuperare i

segmenti persi.

Il timeout dovrebbe essere più grande di un RTT ossia il tempo trascorso da

quando si invia un segmento e quando se ne riceve l’ACK, altrimenti ci

sarebbero ritrasmissioni inutili.

L’RTT misurato di un segmento prende il nome di SampleRTT ed è la quantità

che intercorre tra l’istante in cui il segmento viene mandato e quello in cui se

ne riceve l’ACK. La maggior parte delle implementazioni TCP effettua una

misurazione alla volta di SampleRTT il che comporta approssimativamente un

nuovo valore di SampleRTT ogni RTT. A causa di tale fluttuazione si effettua una

media dei valori di SampleRTT al fine di ottenere un EstimatedRTT. Per ogni

nuovo SampleRTT TCP aggiorna EstimatedRTT secondo la formula:

EstimatedRTT=(1-) x EstimatedRTT + x SampleRTT

EstimatedRTT è calcolato quindi secondo una media mobile esponenziale

ponderata; il valore raccomandato di è 0,125.

Oltre ad avere una stima di RTT è importante sapere quanto questo varia.

Definiamo tale variazione DevRTT. Questo valore viene calcolato secondo la

formula:

DevRTT = (1-) X DevRTT + x |SampleRTT – EstimatedRTT|

L’intervallo di timeout non può mai essere inferiore ad EstimatedRTT ma allo

stesso modo non può essere molto maggiore per tale ragione entra in gioco il

valore DevRTT. L’intervallo di timeout è ottenuto mediante la formula:

TimeoutInterval = EstimatedRTT + 4 x DevRTT

Trasferimento dati affidabile

TCP crea un servizio di trasporto dati affidabile al di sopra del servizio

inaffidabile e best-effort di IP, assicurando che il flusso di byte che i processi

leggono dal buffer di ricezione TCP non sia alterato, non abbia buchi, non

presenti duplicazioni e rispetti la sequenza originaria: il flusso di dati in arrivo è

esattamente quello spedito.

Esistono tre eventi principali relativi alla trasmissione e ritrasmissione dei dati:

Dati provenienti dall’applicazione – TCP incapsula i dati che giungono

 dall’applicazione in un segmento e lo passa a IP; inoltre se il timer non è

già in funzione per qualche altro segmento, TCP lo avvia nell’istante in cui

passa il segmento a IP.

Timeout – TCP risponde ritrasmettendo il segmento che lo ha causato e

 quindi riavvia il timer

Ricezione di un ACK – TCP confronta il valore y di ACK con la propria

 variabile SendBase (numero di sequenza del più vecchio byte che non ha

ancora ricevuto un ACK; di conseguenza SendBase – 1 è il numero di

sequenza dell’ultimo byte che si sa essere stato ricevuto). TCP utilizza

ACK cumulativi pertanto y conferma la ricezione di tutti i byte precedenti

al numero y. Confermati i dati TCP aggiorna la variabile SendBase e, se

non ci sono ancora segmenti che necessitano di ACK, riavvia il timer

Varianti TCP

Raddoppio dell’intervallo di timeout: in tutti i casi in cui si verifica un

 timeout, TCP, ritrasmette il segmento con il più basso numero di

sequenza che non abbia ancora ricevuto ACK. Tuttavia ogni qualvolta che

questo si verifica TCP imposta il successivo intervallo di timeout al doppio

del valore precedente anziché derivarlo dagli ultimi EstimatedRTT e

DevRTT. La scadenza del timer viene probabilmente provocata dalla

congestione nella rete ossia troppi pacchetti che arrivano presso una o

più code di router nel percorso tra origine e destinazione provocando

l’eliminazione dei pacchetti e/o lunghi ritardi. Se nei periodi congestionati

le sorgenti continuano a trasmettere la congestione può peggiorare a tal

fine TCP si comporta in modo rispettoso della rete

Ritrasmissione rapida – Le ritrasmissioni possono incidere sui ritardi

 end-to-end. Per limitare questo problema TCP utilizza ACK duplicati

relativi ad un segmento il cui ACK è gia stato ricevuto. Quando il

destinatario TCP riceve un segmento con un numero di sequenza

successivo a quello atteso rileva un buco nel flusso dati e, non potendo

mandare ACK negativi, invia automaticamente un ACK relativo all’ultimo

byte di dati che ha ricevuto in ordine; dato che in molti casi il mittente

invia un gran numero di segmenti, se uno di questi viene smarrito il

destinatario TCP risponde con molti ACK duplicati. Nel caso in cui siano

stati ricevuti tre ACK duplicati il mittente TCP effettua una ritrasmissione

rapida, rispedendo il segmento mancante prima che scada il timer

Go-Back-N o ripetizione selettiva?

Il mittente TCP deve solo memorizzare il numero di sequenza più basso tra i

byte ritrasmessi che non hanno ancora ricevuto ACK e il numero di sequenza

successivo da inviare. In quest’ottica TCP assomiglia molto a un protocollo di

tipo GBN tuttavia esistono differenze chiave tra TCP e GBN dovute alla

memorizzazione nei buffer (TCP non memorizza in ordine) e alla ritrasmissione

(TCP rispedisce solo lo stretto necessario).

Una modifica proposta a TCP, il cosiddetto riscontro selettivo, consente al

destinatario di mandare ACK in modo selettivo per i segmenti non in ordine

anziché cumulativamente per l’ultimo segmento ricevuto senza errori

nell’ordine giusto. Se combinato con la ritrasmissione selettiva TCP risulta

molto simile anche ad un generico protocollo SR. Alla luce di ciò TCP si

classifica come ibrido tra i due.

Controllo di flusso

Gli host agli estremi delle connessioni TCP riservano dei buffer di ricezione per

la connessione. Quando la connessione TCP riceve byte corretti e in sequenza,

li posiziona nel buffer di ricezione. Il processo applicativo associato leggerà i

dati da questo buffer, ma non necessariamente nell’istante in cui arrivano:

l’applicazione ricevente potrebbe essere impegnata in qualche altro compito e

non leggere i dati fino a un istante di tempo molto successivo al loro arrivo. Se

l’applicazione è relativamente lenta nella lettura dei dati può accadere che il

mittente mandi in overflow il buffer di ricezione inviando molti dati troppo

rapidamente. TCP offre un controllo del flusso alle proprie applicazioni per

evitare che il mittente saturi il buffer del ricevente. Il controllo del flusso è

pertanto un servizio di confronto sulla velocità, dato che paragona la frequenza

di invio del mittente con quella di lettura dell’applicazione ricevente. I mittenti

TCP possono essere rallentati anche dalla congestione della rete ma questa

forma di controllo del mittente viene detta controllo di congestione.

TCP offe un controllo di flusso facendo mantenere al mittente una variabile

chiamata finestra di ricezione che fornisce al mittente un’indicazione dello

spazio livero disponibile nel buffer del destinatario. Dato che TCP è full duplex, i

due mittenti mantengono finestre di ricezione distinte.

Nell’host di ricezione sarà allocato un buffer di ricezione di dimensione

rcvbuffer contenente le variabili

LastByteRead (numero ultimo byte nel flusso di dati che il processo

 applicativo nel ricevitore ha letto dal buffer)

LastByteRcvd (numero ultimo byte nel flusso dati che è stato copiato nel

 buffer di ricezione di B)

Dato che TCP non può mandare in overflow il buffer

o LastByteRcvd – LastByteRead < rcvbuffer

La finestra di ricezione indicata con rwnd, viene impostata alla quantità

 di spazio disponibile nel buffer: rwnd = rcvbuffer – [LastByteRcvd –

LastByteRead]

Risulta quindi una variabile dinamica

Allo stesso modo il buffer del mittente conterrà le variabili LastByteSent

(numero ultimo byte inviato) e LastByteAcked (numero ultimo byte

confermato). Essendo una connessione full duplex il ricevitore si occuperà di

passare costantemente il valore di rwnd ed il mittente dovrà assicurarsi che la

disuguaglianza:

LastByteSent – LastByteAcked < rwnd

Rimanga vera per tutta la connessione. Nel caso estremo in cui rwnd vada a 0

le specifiche TCP richiedono che il mittente continui inviare segmenti con byte

di dati anche in questo caso; prima o poi il buffer inizierà a svuotarsi e rwnd

avrà un valore diverso da 0

Gestione della connessione TCP

Il TCP nel client procede a stabilire una connessione TCP nel server nel

seguente modo:

1. TCP lato client invia uno speciale segmento al TCP lato server. Questo

segmento non contiene dati ma il bit SYN posto ad 1 (per questo motivo

viene detto segmento SYN); il client sceglie inoltre a caso un numero di

sequenza iniziale (client_isn) e lo pone nel campo numero di sequenza

del segmento SYN iniziale

2. Quando il datagramma IP contenente il segmento TCP SYN arriva all’host

server, esso estrae il segmento dal datagramma, alloca i buffer e le

variabili TCP alla connessione e invia un segmento di connessione

approvata al client TCP. Anche questo segmento contiene solo il bit SYN

posto ad uno ed il campo ACK posto a (client_isn + 1) infine il server

sceglie il proprio numero di sequenza iniziale (server_isn) e lo pone nel

numero di sequenza. Il segmento così composto prende il nome di

segmento SYNACK

3. Alla ricezione del segmento SYNACK, anche il client alloca buffer e

variabili alla connessione. IL client invia quindi al server un altro

segmento in risposta al segmento SYNACK ponendo il valore (server_isn

+ 1) nel campo ACK; il bit SYN qui viene posto a 0 dato che la

connessione è stabilita.

Completati questi tre passi client e server possono scambiarsi segmenti

contenenti dati. Quando tale connessione deve essere chiusa bisogna

deallocare le risorse utilizzate. Il processo applicativo client invia un comando

di chiusura che forza il client TCP ad inviare un segmento TCP speciale al

processo server. Tale segmento contiene il bit FIN con valore 1. Quando il

server riceve questo segmento risponde inviando un ACK al client spedendo

così il proprio segmento di shutdown con il bit FIN uguale a 1. Infine il client

manda a sua volta un ACK al server. A questo punto tutte le risorse sono

deallocate. Principi del controllo della connessione

L’approccio scelto da TCP consiste nell’imporre a ciascun mittente un limite alla

velocità di invio sulla propria connessione in funzione della congestione di rete

percepita. Se il mittente TCP si accorge di condizioni scarso traffico sul percorso

incrementa il tasso trasmissivo; se percepisce traffico lo riduce.

Assumiamo che il buffer di ricezione sia sufficientemente grande da poter

ignorare il vincolo della finestra di ricezione; pertanto la quantità di dati che

non hanno ricevuto ACK è limitata soltanto dalla finestra di congestione (cwnd).

All’inizio di ogni RTT, il vincolo consente al mittente di trasmettere cwnd byte

sulla connessione; al termine del RTT il mittente riceve gli ACK relativi. La

velocità è quindi di cwnd/RTT byte/s. Modificando il valore della finestra di

congestione il mittente può quindi regolare la velocità di invio dati sulla propria

connessione.

TCP percepisce congestione quando rileva “eventi di perdita” definiti come

l’occorrenza di un timeout o della ricezione di tre ACK duplicati da parte del

destinatario.

Dato che TCP utilizza gli ACK per temporizzare gli incrementi dell’ampiezza

della finestra di congestione definiamo TCP auto-temporizzato.

L’algoritmo di rilevazione della congestione di rete presenta tre fasi:

1. Slow start: si stabilisce la connessione TCP, il valore della finestra di

congestione viene in genere inizializzato alla massima dimensione del

corpo dati di un segmento TCP (questa quantità viene definita 1 MSS:

Maximum Segment Size) e si incrementa di 1 MSS ogni volta che un

segmento tramesso riceve un ACK. La velocità crescerà

esponenzialmente finché non si verifica un fenomeno di perdita indicato

da un evento di timeout. A questo punto il mittente TCP inizializza cwnd a

1 e ricomincia lo slow start inizializzando contemporaneamente un’altra

variabile, la soglia di slow start, a cwnd/2 con cwnd pari al valore che

aveva quando è stata rilevata la congestione

2. Congestion avoidance: quando TCP entra nello stato di congestion

avoidance il valore di cwnd è circa la metà di quello che aveva quando è

stata rilevata la congestione. In questa fase il mittente aumenta il valore

di cwnd progressivamente di 1 MSS ogni RTT. Appena si verifica un

timeout cwnd viene ritornata ad 1 e la soglia impostata alla metà del

valore di cwnd al momento del timeout

3. Fast recovery: il valore di cwnd aumenta di 1 MSS per ogni ACK duplicato

ricevuto relativamente al segmento perso che ha causato l’entrata di TCP

nello stato di fast recovery. La versione più recente di TDP è TDP Reno ed

adotta come valore della soglia di fast recovery 8 MSS

Fairness

Consideriamo K connessioni TCP, ciascuna con un differente percorso end-to-

end, ma che passano tutte attraverso un collegamento con capacità

trasmissiva di R bps che costituisce il collo di bottiglia del sistema. Supponiamo

che ogni connessione stia trasferendo un file di grandi dimensioni e che non ci

sia traffico UDP. Un meccanismo di controllo della congestione si dice equo

(fair) se la velocità trasmissione media di ciascuna connessione è

approssimativamente R/K.

TCP tende a offrire la stessa porzione di banda a connessioni TCP in

competizione in un collegamento che costituisce un collo di bottiglia. Se TCP

sta dividendo la banda in modo uguale il throughput (che ricordiamo essere la

frequenza trasmissiva massima) sarà la bisettrice del primo quadrante di un

sistema di riferimento cartesiano.

Essendo che i valori sono sempre oscillanti l’obbiettivo per una connessione fair

è ottenere throughput situati vicino all’intersezione tra la bisettrice e la linea di

massimo utilizzo della banda.

UDP non avendo controllo della congestione non segue queste regole e per

questa ragione viene preferito per molte applicazioni multimediali quali

telefonia e videotelefonia che preferiscono perdere pacchetti piuttosto che

ridurre il loro tasso trasmissivo. Le sorgenti UDP possono soffocare il traffico

TCP Livello di Rete

Il ruolo del livello di rete è piuttosto semplice: trasferire i pacchetti da un host a

un altro. Per fare questo si identificano funzioni importanti:

Inoltro (forwarding) – Quando un router riceve un pacchetto, lo deve

 trasferire sull’appropriato collegamento di uscita. Con questo termine ci

si riferisce all’azione locale con cui il router trasferisce i pacchetti da

un’interfaccia di ingresso a quella di uscita.

Instradamento (routing) – Il livello di rete deve determinare, tramite

 algoritmi di instradamento, il percorso che i pacchetti devono seguire.

Con questo termine indicheremo il processo di rete che determina i

percorsi dei pacchetti nel loro viaggio da sorgente a destinazione. Per

inoltrare i pacchetti i router estraggono dal campo intestazione un valore

che utilizzano come indice nella tabella di inoltro; questo risultato indica

a quale interfaccia di collegamento il pacchetto debba essere diretto.

Instaurazione della connessione – alcune architetture di rete richiedono

 che i router lungo il percorso di rete effettuino handshake prima di

condividere pacchetti

Definiamo commutatore di pacchetto un generico dispositivo che si occupa del

trasferimento dall’interfaccia in ingresso a quella in uscita, in base al valore del

campo dell’intestazione del pacchetto. Tra questi distinguiamo i commutatori a

livello di collegamento che stabiliscono l’inoltro in relazione al valore del campo

a livello di collegamento; e i router che prendono le decisioni di inoltro

basandosi sul valore nel campo di rete. I router sono dispositivi di livello 3

(livello di rete) ma devono implementare protocolli di livello 2 perché

necessitano da tale livello alcune funzionalità.

Modelli di servizio

Il modello di servizio della rete definisce le caratteristiche del trasporto end-to-

end di dati tra i sistemi periferici di invio e di ricezione. Può offrire servizi quali:

Consegna garantita: questo servizio assicura che il pacchetto giunga,

 prima o poi, a destinazione.

Consegna garantita con ritardo limitato: Questo servizio assicura che il

 pacchetto giunga a destinazione nel rispetto di un limite di ritardo

specificato

Consegna ordinata: Questo servizio garantisce che i pacchetti giungano a

 destinazione nell’ordine in cui sono stati inviati

Banda minima garantita: Questo servizio emula il comportamento di un

 collegamento trasmissivo con bit rate specificato tra host di invio e di

destinazione. Non si perdono pacchetti finche l’host di invio trasmette ad

un tasso inferiore al bit rate specificato.

Jitter limitato: Questo servizio garantisce che il lasso di tempo tra la

 trasmissione di due pacchetti sia uguale a quello di ricezione

Servizi di sicurezza: Questo servizio, mediante una chiave di sicurezza

 nota solo a una coppia di host, cifra il payload di tutti i datagrammi;

l’host di ricezione avrà il compito di decifrare.

Il livello di rete di interent mette a disposizione un solo servizio noto come best

effort.

I servizi di rete ATM:

A bit rate costante (CBR): trasporta un flusso di celle ATM attraverso la

 rete in modo che il ritardo end-to-end di una cella e la variabilità di tale

ritardo (jitter) e la percentuale di celle perdute o consegnate in ritardo

siano inferiori ai valori specificati

A bit rate disponibile (ABR): garantisce un tasso trasmissivo minimo

 anche se può smarrire delle celle

Differenze servizi livello di rete e livello di trasporto

Sebbene i servizi a livello di rete rispecchiano quanto avviene a livello di

trasporto esistono alcune differenze:

A livello di trasporto si tratta di servizi tra host messi a disposizione dal

 livello di rete al livello di trasporto che, invece, fornisce al livello di

applicazione i servizi da processo a processo.

In tutte le principali architetture di reti di calcolatori, il livello di rete offre

 un servizio da host a host con e senza connessione. Le reti di calcolatori

che offrono servizi con connessione prendono il nome di reti a circuito

virtuale; le reti di calcolatori che offrono servizi senza connessione

prendono il nome di reti datagram

I due livelli implementano servizi orientati alla connessione in modo

 diverso Reti a circuito virtuale

Un circuito virtuale consiste di:

Un percorso, ossia una serie di collegamenti e router, tra gli host

 sorgente e destinazione;

Numeri VC, uno per ciascun collegamento lungo il percorso;

 Righe nella tabella di inoltro in ciascun router lungo il percorso;

Nelle reti a circuito virtuale i router devono mantenere informazioni sullo stato

delle connessioni attive. In particolare, il router deve aggiungere alla tabella di

inoltro una nuova riga ogni volta che si stabilisce una nuova connessione e

cancellarla quando viene rilasciata. Il ciclo di vita di un circuito virtuale è

articolato in tre fasi:

1. Instaurazione: il livello di trasporto del mittente contatta il livello di rete e

attende che imposti il circuito virtuale. Il livello di rete determina il

percorso, il numero di VC dei collegamenti lungo il percorso e aggiunge

una riga nella tabella di inoltro.

2. Trasferimento dati: stabilito il circuito, i dati possono fluire da esso

3. Terminazione: quando il mittente o il destinatario vogliono terminare la

connessione, informa la rete che a sua volta comunica la decisione al

sistema all’altro capo e aggiorna la tabella di inoltro nei router per

indicare che il circuito non esiste più

Reti Datagram

Quando un host vuole inviare un pacchetto in una rete datagram, prima lo

contrassegna con l’indirizzo del destinatario e quindi lo immette nella rete. Nel

loro viaggio dalla sorgente alla destinazione i pacchetti passano attraverso una

serie di router che utilizzano gli indirizzi di destinazione per inoltrarli. Ogni

router ha una tabella di inoltro che fa corrispondere gli indirizzi alle interfacce

di collegamento.

Il router confronta un prefisso dell’indirizzo di destinazione del pacchetto con

una riga della tabella; se c’è corrispondenza allora inoltra il pacchetto al

collegamento associato. Quando si verificano corrispondenze multiple, il router

adotta la regola di corrispondenza a prefisso più lungo, vale a dire che

determina la corrispondenza più lunga e inoltra i pacchetti all’interfaccia di

collegamento associata.

I router nelle reti datagram non conservano informazioni sullo stato della

connessione ma sullo stato di inoltro.

Router

Un router è costituito da:

Porte di ingresso – Svolgono le funzioni a livello fisico di terminazione di

 un collegamento in ingresso al router. Svolgono anche funzioni a livello di

collegamento, necessarie per inter-operare con le analoghe funzioni

dall’altro capo del collegamento di ingresso. Inoltre fanno in modo che il

pacchetto inoltrato nella struttura di commutazione del router esca sulla

porta di uscita corretta.

Struttura di commutazione – Connette fisicamente le porte di ingresso a

 quelle di uscita

Porta di uscita – Memorizzano i pacchetti che provengono dalla struttura

 di commutazione e li trasmetto sul collegamento in uscita operando le

funzionalità necessarie al livello di collegamento e fisiche

Processore di instradamento – Esegue i protocolli di instradamento e

 gestisce le tabelle di inoltro e le informazioni sui collegamenti attivi. In

alcuni casi tali funzioni sono chiamate router forwarding plane e sono

implementate a livello hardware perché devono operare in tempi

brevissimi; le funzioni che invece implementano la struttura di controllo

del router (router control plane) sono implementate via software ed

eseguite sul processore di instradamento.

Elaborazione in ingresso

L’elaborazione effettuata alla porta di ingresso è centrale per la funzionalità del

router: è qui che, utilizzando le informazioni della tabella di inoltro, viene

determinata la porta di uscita a cui dirigere un pacchetto attraverso la struttura

di commutazione. Sebbene questa sia elaborata dal processore di

instradamento, una copia conforme è memorizzata su ciascuna porta di

ingresso e aggiornata quando necessario. La tabella di inoltro viene copiata

sulla line card dal processore di instradamento tramite un bus separato

Struttura di commutazione

La struttura di commutazione rappresenta il cuore del router attraverso il quale

i pacchetti vengono commutati, ossia inoltrati, dalla porta di ingresso alla porta

di uscita. La commutazione può essere:

In memoria – Sistema utilizzato dai primi router; la commutazione era

 fatta sotto il diretto controllo della CPU, le porte funzionano da dispositivi

di I/O. Quando arriva un pacchetto la porta di ingresso, mediante

interrupt, ne segnala l’arrivo e lo copia in memoria del processore di

instradamento il quale ne estrae dall’intestazione l’indirizzo di

destinazione e tramite la tabella di inoltro individua la porta di uscita

appropriata nel cui buffer copiava il pacchetto. I limiti di questo sistema

sono che era possibile effettuare una sola operazione di scrittura/lettura

alla volta.

Tramite Bus – Le porte di ingresso trasferiscono direttamente alle porte di

 uscita tramite un bus condiviso e senza l’utilizzo del processore. Per

effettuare questa operazione si aggiunge un’etichetta interna di

commutazione al pacchetto che indica la porta locale di output alla quale

il pacchetto deve essere trasferito una volta trasmesso sul bus; solo la

porta corrispondente all’etichetta lo raccoglierà e si occuperà di

rimuovere tale etichetta in quanto non più utile. I limiti di questo sistema

sono che si può trasferire un pacchetto alla volta e che la banda è

limitata alla banda del bus.

Attraverso rete di interconnessione – Implementa una matrice di

 commutazione (crossbar switch) la quale è una rete di interconnessioni

che consiste di 2n bus che collegano n porte di ingresso a n porte di

uscita. Ogni bus verticale interseca tutti i bus orizzontali a un punto di

incrocio che può essere aperto o chiuso dal controller della struttura di

commutazione. Elaborazione in uscita

Prende i pacchetti dalla memoria della porta di uscita sul collegamento

uscente, questo comprende selezionare e togliere dalla coda i pacchetti per la

trasmissione e operare le funzioni a livello di collegamento fisico. È evidente

che si possono formare code di pacchetti sia presso le porte di ingresso sia

presso le porte di uscita; al crescere delle code la memoria del router può

esaurirsi e quindi può avvenire una perdita di pacchetti.

Definiamo il tasso di trasferimento della struttura di commutazione S come

switch

il tasso al quale i pacchetti vengono trasferiti dalla porta di input a quella di

output. Se tale tasso è maggiore del tasso con cui la porta di uscita manda i

pacchetti il numero dei pacchetti in coda può continuare a crescere fino a

esaurire lo spazio in memoria sulla porta di uscita, caso in cui i pacchetti

vengono eliminati. Occorre quindi determinare la dimensione congrua del

buffer: per anni questa è stata la media dell’RTT per la capacità del

collegamento ma oggi, per sopperire al gran numero di flussi TCP che passano

attraverso un collegamento la quantità di buffer necessaria è:

C

B=RTT x √ N

Quando ci sono più pacchetti sulle porte di uscita uno schedulatore di pacchetti

deve determinare l’ordine di uscita. Le metodologie di giudizio sono o FCFS

(first-come-fist-served), cioè in base all’ordine di arrivo, o WFQ cioè

l’accodamento equo ponderato. La schedulazione dei pacchetti riveste un ruolo

cruciale nel fornire garanzia di qualità del servizio.

Le politiche di eliminazione invece prendono il nome collettivo di algoritmi di

ACQ (active queque managment) e sono diverse, ricordiamo il drop-tail

(eliminazione in coda) o il più noto algoritmo di RED (random early detection)

che mantiene una media ponderata della lunghezza della coda, se la coda è

piena o la lunghezza media è superiore a una soglia massima i pacchetti

vengono marcati o eliminati.

Se la struttura di commutazione non è sufficientemente rapida è possibile

avere ritardi anche nelle porte di ingresso. Questo fenomeno è noto come

blocco in testa alla coda (HOL, head-of-the-line-blocking): un pacchetto nella

coda di ingresso deve attendere il trasferimento attraverso la struttura in

quanto risulta bloccato da un altro pacchetto che lo precede.

Protocollo Internet (IP): inoltro e

indirizzamento in internet

Formato dei datagrammi

I principali campi dei datagrammi IPv4 sono:

Numero di versione: Specificano la versione del protocollo IP del

 datagramma e consentono al router la sua corretta interpretazione

Lunghezza dell’intestazione: Indicano dove iniziano effettivamente i

 dati del datagramma. Un tipico datagramma IP ha un’intestazione di 20

byte

Tipo di servizio: Inclusi in IPv4 per distinguere i diversi tipi di

 datagrammi

Lunghezza del datagramma: Rappresenta la lunghezza totale del

 datagramma IP, intestazione più dati, misurata in byte. Considerando che

questo campo è lungo 16 bit, la massima dimensione dei datagrammi IP

è 65.535 byte anche se raramente superano i 1500

Identificatore, flag, spiazzamento di frammentazione: hanno a che

 fare con la frammentazione che in IPv6 non è consentita sui router

Tempo di vita: Il campo time-to-live (TLL) è stato incluso per assicurare

 che i datagrammi non restino in circolazione per sempre nella rete.

Questo campo viene decrementato di un’unità ogni volta che il

datagramma è elaborato da un router e quando raggiunge 0 indica che

deve essere scartato

Protocollo: indica lo specifico protocollo a livello di trasporto al quale

 vanno passati i dati del datagramma: 6 indica TCP; 17 UDP.

Checksum dell’intestazione: consente ai router di rilevare gli errori sui

 bit nei datagrammi ricevuti. Rileva una condizione di errore se il

checksum trasportato nell’intestazione del datagramma non corrisponde

alla somma di ogni coppia di byte in complemento a due

Indirizzi IP sorgente e destinazione: Indicano da dove arriva il

 datagramma e dove deve andare

Opzioni: consentono di estendere l’intestazione IP; in IPv6 tale campo è

 stato eliminato perché crea solo problemi

Dati (payload): contiene il segmento a livello di trasporto da

 consegnare alla destinazione; può contenere altri dati quali messaggi

ICMP (messaggi di malfunzionamento)

I datagrammi IP hanno 20 byte di intestazione opzioni escluse. I datagrammi

non frammentati che trasportano segmenti TCP ne hanno 40: 20 di intestazione

IP più 20 di intestazione TCP, assieme al messaggio applicativo.

Frammentazione dei datagrammi IP

La massima quantità di dati che un frame a livello di collegamento può

trasportare è detta unità massima di trasmissione (MTU). Dato che per il

trasporto da un router all’altro i datagrammi sono incapsulati in frame a livello

di collegamento, la MTU di questo protocollo pone un limite rigido alla

lunghezza dei datagrammi IP. La difficoltà nasce quando durante il tragitto si

possono utilizzare differenti protocolli a livello di collegamento con differenti

MTU. La soluzione è frammentare i datagrammi in datagrammi più piccoli detti

frammenti e trasferirli sul collegamento in uscita.

Sia UDP che TCP si aspettano di ricevere datagrammi completi pertanto

dovranno essere riassemblati prima di raggiungere il livello di trasporto. Questo

compito è affidato ai sistemi periferici che per svolgerlo utilizzano i campi

identificazione, flag e spiazzamento. Quando il router frammenta il

datagramma, contrassegna i frammenti con gli indirizzi di sorgente e

destinazione e con l’identificatore numeri del datagramma originario,

esaminando gli identificativi si individuano frammenti appartenenti a medesimi

datagrammi. Il campo flag può essere indicizzato con valori 1, che sta a

significare che sono in arrivo altri frammenti del medesimo datagramma, e 0,

che indica che è l’ultimo frammento del datagramma. Si utilizza infine il campo

di spiazzamento per specificare l’esatto rodine che i frammenti avevano

originariamente all’interno del datagramma IP e per determinare se un

datagramma è andato perduto.

Se qualche frammento non arriva a destinazione, l’intero datagramma va

scartato.

La frammentazione oltre ad aumentare la complessità dei sistemi periferici e

dei router crea un problema a livello di sicurezza: mediante serie di frammenti

bizzarri e inaspettati si possono creare attacchi DoS letali quale l’attacco Holt2,

dove l’attaccante manda un flusso di piccoli frammenti all’host bersaglio,

nessuno dei quali ha spiazzamento nullo. Per ovvie ragioni di sicurezza nel

protocollo IPv6 la frammentazione è stata rimossa.

Indirizzamento IPv4

Generalmente un host ha un solo collegamento con la rete, quando

un’implementazione di IP dell’host vuole inviare un datagramma, lo fa su tale

collegamento. Il router invece avendo sia il compito di ricevere che di inoltrare

datagrammi ha due collegamenti. In entrambi i casi i collegamenti prendono il

nome di interfacce.

Dato che host e router sono in grado di inviare e ricevere datagrammi, IP

richiede che tutte le interfacce abbiano un proprio indirizzo IP che pertanto

risulta associato a un’interfaccia e non all’host che la contiene. Gli indirizzi IP

sono lunghi 32 bit (4 byte) e ci sono un totale di 2 indirizzi IP, cioè 4 miliardi.

32

Gli indirizzi IP sono scritti in notazione decimale puntata, in cui ciascun byte

dell’indirizzo viene indicato in forma decimale e separato da un punto dagli altri

byte dell’indirizzo. Ogni interfaccia di host e di router di internet ha un indirizzo

IP globalmente univoco ma non può essere scelto in modo arbitrario in quanto

la prima parte dell’indirizzo è determinata dalla sottorete a cui è collegata. La

strategia di assegnazione degli indirizzi è denominata classles interdomain

routing (CIDR) e generalizza la notazione di indirizzamento di sottorete.

L’indirizzo IP viene diviso in due parti e mantiene la forma decimale puntata

a.b.c.d/x dove x indica il numero di bit nella prima parte dell’indirizzo. Gli x bit

più a sinistra di un indirizzo nella forma a.b.c.d/x costituiscono una porzione di

rete dell’indirizzo e sono spesso detti prefisso dell’indirizzo.

Prima di CIDR, le parti di rete di un indirizzo IP dovevano essere lunghe 8, 16 o

24 bit e tale schema era noto come classful adressing dato che le sottoreti con

indirizzi di sottorete da 8, 16 e 24 bit erano note rispettivamente come reti di

classe A, B e C.

Un indirizzo IP broadcast contrassegna tutti gli host sulla stessa sottorete.

Esiste un’autorità globale che ha la responsabilità ultima di gestire lo spazio di

indirizzamento IP e di allocare i blocchi di indirizzi: L’internet Corporation For

Assigned Names And Numbers (ICANN): questa è un’operazione senza scopo di

lucro che non solo controlla gli indirizzi IP, ma gestisce i root DNS server. Ha

anche il compito di assegnare e risolvere dispute sui nomi di dominio.

Come ottenere l’indirizzo di un host: DHCP


PAGINE

49

PESO

101.52 KB

PUBBLICATO

5 mesi fa


DETTAGLI
Corso di laurea: Corso di laurea in ingegneria informatica
SSD:
Università: Catania - Unict
A.A.: 2018-2019

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher antoniotes96 di informazioni apprese con la frequenza delle lezioni di Architettura Internet e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Catania - Unict o del prof Malgeri Michele.

Acquista con carta o conto PayPal

Scarica il file tutte le volte che vuoi

Paga con un conto PayPal per usufruire della garanzia Soddisfatto o rimborsato

Recensioni
Ti è piaciuto questo appunto? Valutalo!

Altri appunti di Corso di laurea in ingegneria informatica

Analisi matematica 2 - Appunti
Appunto
Analisi matematica - Domande
Appunto
La gestione delle eccezioni in Java
Appunto
Analisi Matematica III - prova scritta
Appunto