• Non ci sono risultati.

Reti di calcolatori

N/A
N/A
Protected

Academic year: 2021

Condividi "Reti di calcolatori"

Copied!
17
0
0

Testo completo

(1)

1

Reti di calcolatori

Storicamente le prime reti di calcolatori vengono sviluppate negli anni '70. L'esperimento pilota, finanziato dall'agenzia statunitense DARPA, prende il nome di ARPAnet e nasce ufficialmente nel 1969.

A questa esperienza seguono, nel corso degli anni '70, numerose implementazioni di reti di calcolatori, molte delle quali di tipo proprietario, cioè sviluppate da un solo costruttore ed incompatibili con sistemi di altri costruttori. Alcune tra le più note furono DECnet della Digital, SNA di IBM e XNS della Xerox.

La caratteristica fondamentale di queste reti è quella di essere sistemi chiusi, ossia sostanzialmente incapaci di comunicare fra loro. Una volta che un utente decide di adottare una di queste reti è legato al relativo produttore, che è l'unico fornitore di apparati compatibili con la rete installata.

Questo fenomeno detto di captivity, limita molto le scelte dell'utente, che è costretto a seguire l'evoluzione e le scelte tecnologiche del tipo di rete che ha scelto.

Al contrario sarebbe auspicabile che queste reti fossero sistemi aperti, ossia tali che qualunque calcolatore fosse in grado di comunicare con qualunque altro indipendentemente dalla sua architettura e dal suo costruttore. Un sistema aperto ha infatti alcuni importanti vantaggi:

 favorire la diffusione delle reti di calcolatori tramite l'interconnessione delle reti esistenti;

 rendere possibile agli utenti e ai costruttori di reti approvvigionarsi da qualunque produttore, favorendo la concorrenza.

Modello di comunicazione a strati

Per realizzare reti di calcolatori che siano sistemi aperti è necessario:

 delineare un modello di riferimento per la comunicazione fra calcolatori che sia base comune di questi sistemi;

 giungere alla definizione di standard universalmente accettati che specifichino in modo preciso le funzioni che sono necessarie per realizzare la comunicazione.

La comunicazione fra calcolatori di tipo diverso è in generale un problema abbastanza complesso.

Per semplificare la progettazione dal punto di vista tecnico di una rete di calcolatori risulta quindi conveniente suddividere il problema complessivo in una serie di sottoproblemi ben confinati, chiarendo poi come essi debbano interagire.

Questo tipo di approccio è stato sostanzialmente comune a tutte le implementazioni di reti di calcolatori, anche quando queste si presentavano come sistemi chiusi.

I vantaggi che si hanno nell'operare un approccio a strati sono:

 riduzione della complessità nella costruzione di architetture protocollari introducendo livelli di astrazione;

 indipendenza per l'operatività e le strutture interne di ogni strato; ogni strato deve compiere un compito diverso dagli altri e la sua struttura non è vincolata da quella degli altri livelli;

 interazione tramite servizi; i livelli sono disposti a pila, uno sopra l'altro. Ogni livello fornisce servizi al livello superiore e usufruisce di servizi dal livello sottostante, comunicando tramite la loro interfaccia;

 facilità di attuare cambiamenti su uno strato senza alterare i restanti; gli strati interagiscono tra loro tramite servizi, essendo quindi indipendenti tra loro possono essere modificati nel tempo con nuove tecnologie senza che questo richieda interventi negli altri strati;

Due livelli di pari grado posti su due calcolatori differenti comunicano tra loro tramite protocollo , mentre due livelli adiacenti della stessa macchina comunicano tra loro tramite interfaccia.

L'obiettivo di un livello è quello di servire servizi al livello superiore nascondendo a questo il modo in cui i servizi sono realizzati.

(2)

2

(3)

3

Modello ISO-OSI

Nei primi anni '80 l' ISO promuove un'azione volta alla definizione di un modello di riferimento a strati e di una serie di standard per protocolli e interfacce atti a realizzare dei sistemi aperti. Questo lavoro prende il nome di Open System Interconnection o OSI .

L' ISO-OSI (Open System Interconnection) Reference Model ha lo scopo di fornire uno standard per la connessione di sistemi aperti e fornire un modello di riferimento rispetto al quale confrontare architetture di rete proprietarie e non.

Il modello OSI non definisce di per sé dei protocolli specifici di comunicazione, non può essere considerato quindi come un'architettura di rete. Il ruolo del modello OSI consiste nello

standardizzare la comunicazione tra i terminali affinché i differenti costruttori possano mettere a punto dei prodotti (software o hardware) compatibili.

Il numero di livelli che compongono il modello strutturale è stato scelto in modo da associare una specifica funzionalità per livello, senza presentare funzionalità ridondanti su più livelli.

OSI è costituito da 7 livelli:

1. strato fisico ; ha come compito principale effettuare il trasferimento fisico delle cifre binarie tra i due sistemi in comunicazione; definisce il modo in cui di dati sono fisicamente convertiti in segnali digitali sui media di comunicazione (impulsi elettrici, modulazioni della luce, ecc.) 2. strato di collegamento (data link) ; la sua funzione fondamentale è quella di rilevare e

recuperare gli errori trasmissivi che potrebbero essersi verificati durante il trasferimento fisico;

definisce l'interfaccia con la scheda di rete e la condivisione del mezzo di trasmissione.

3. strato di rete (network) ; rende invisibile allo strato superiore il modo in cui sono utilizzate le risorse di rete per la fase di instradamento; permette di gestire l'indirizzamento e il routing dei dati, cioè il loro invio tramite la rete.

4. strato di trasporto (transport) ; fornisce le risorse per il trasferimento trasparente di informazioni; è incaricato del trasporto dei dati, della loro divisione in pacchetti e della gestione degli eventuali errori di trasmissione.

5. strato di sessione (session) ; assicura la possibilità di instaurare un colloquio tra due sistemi;

definisce l'apertura e la distruzione delle sessioni di comunicazione tra i terminali di rete.

6. strato di presentazione (presentation) ; è interessato alla sintassi e alla semantica delle informazioni da trasferire; definisce il formato dei dati manipolato dal livello applicativo (loro rappresentazione, eventualmente loro compressione e loro codifica) indipendentemente dal sistema.

7. strato di applicazione (application) ; ha lo scopo di fornire ai processi residenti nei due sistemi in comunicazione i mezzi per accedere all'ambiente OSI. Assicura l'interfaccia tra le applicazioni. Si tratta quindi del livello più vicino agli utenti.

(4)

4

Modello Internet

La rete Internet si è sviluppata al di fuori dal modello ISO-OSI e presenta una struttura solo parzialmente aderente al modello OSI .

L'architettura di rete Internet Protocol Suite nota anche come architettura TCP/IP, è una architettura composta da 4 strati:

 strato di accesso alla rete (network access layer); comprende le funzioni che nel modello OSI sono degli strati fisico, di collegamento e parte di quello di rete, specifica la forma nella quale i dati devono essere inviati indipendentemente dal tipo di rete usata.

Questo livello accesso di rete contiene tutte le specifiche riguardo la trasmissione di dati su una rete fisica, indipendentemente dal tipo di collegamento tra gli host o tra le reti. Lo standard IEEE802 definisce dei modelli di standardizzazione introducendo l’idea che LAN e MAN devono fornire un’interfaccia unificata verso il livello network pur utilizzando tecnologie trasmissive differenziate. I protocolli di questo livello sono: FDDI(Fiber Distributed Data interface), PPP (Point to point Protocol), Ethernet, Token ring.

 strato Internet Protocol (IP); è collocabile nella parte alta dello strato di rete del modello OSI, è di tipo senza connessione e best effort. Questo livello gestisce la nozione di indirizzamento IP. Esso permette l'invio dei datagrammi (pacchetti di dati) verso dei terminali remoti nonché la gestione della loro frammentazione e riassemblaggio alla ricezione. I protocolli di questo livello sono: IP, ICMP, ARP, RARP.

 strato di trasporto (TCP o UDP ); corrisponde al livello di trasporto del modello OSI, ed è implementato in due versioni, TCP (Transmission Control Protocol) che è un protocollo con connessione ed affidabile (assicura il controllo degli errori ), e UDP (User Datagram Protocol) che è senza connessione e non affidabile. Il livello trasporto permette alle applicazioni in esecuzione su terminali remoti di comunicare.

 strato di applicazione (application protocol); nell'architettura Internet non sono previsti gli strati di sessione e di presentazione, ma solo quello di applicazione; questo strato contiene i protocolli utilizzati dalle applicazioni residenti sui terminali. I protocolli utilizzati in questo strato sono FTP (File Transfer Protocol - per il trasferimento dei file), POP (Post Office Protocol) e SMTP (Simple Mail Transfer Protocol) per la posta elettronica, Telnet per il terminale virtuale, HTTP (HyperText Transfer Protocol - per le pagine Web), DNS (Domain Name Service - per convertire nomi alfanumerici in indirizzi IP), NNTP (News Network Transfer Protocol - trasferimento articoli dei newsgroup)

(5)

5

Cosa significa best effort

La consegna best effort descrive uno scenario di rete in cui non è fornita nessuna garanzia sulla consegna dei dati o sul livello di QoS (Quality of service), ma, tutte le comunicazioni avvengono con il massimo impegno possibile (best effort per l'appunto). La diretta conseguenza di questo approccio è rappresentata da un bitrate e un tempo di consegna variabili in base all'attuale carico della rete. Nonostante la rimozione di queste caratteristiche di controllo e preallocazione delle risorse possa sembrare insensata, è in realtà utilissima, infatti, così facendo, la struttura della reti ne risulta semplificata e opera più efficientemente.

Ciò che accade con la posta ordinaria può essere considerato un approccio best effort. La consegna di una lettera da parte del postino non è garantita e non conosciamo il momento in cui ci sarà consegnata. Il postino però farà del suo meglio (best effort) per recapitarci la posta quanto prima, se per caso un giorno le lettere da consegnare siano troppe allora la consegna della nostra lettera potrà subire un ritardo.

Le convenzionali reti telefoniche non sono basate sull'approccio best effort, ma utilizzano la commutazione di circuito. Mentre si sta per instaurare una nuova chiamata le risorse vengono preallocate, una volta stabilita la connessione la chiamata non può cadere a causa di un sovraccarico della rete, l'ampiezza di banda è infatti garantita.

Incapsulamento dei dati

Durante una trasmissione, i dati attraversano alcuni degli strati al livello del terminale emittente. Ad ogni livello, un'informazione viene aggiunta al pacchetto di dati, si tratta di un'intestazione, un insieme di informazioni che garantisce la trasmissione. A livello del terminale ricevente, al momento del passaggio in ogni livello, l'intestazione viene letta, poi cancellata. Così, alla ricezione, il messaggio è nel suo stato originale.

Ad ogni livello, il pacchetto cambia d'aspetto, dato che gli si aggiunge un'intestazione (header), e quindi le denominazioni cambiano seguendo i livelli:

 Il pacchetto di dati è detto messaggio al livello Applicazione

 Il messaggio in seguito è incapsulato sotto forma di segmento nel livello Trasporto

 Il segmento, una volta incapsulato, nel livello Internet prende il nome di datagramma

 Infine si parla di trame sul livello Accesso di rete

(6)

6

I protocolli del livello Internet

Il protocollo IP

Il protocollo IP permette l'elaborazione e il trasporto dei datagrammi IP (i pacchetti di dati), senza tuttavia assicurarne la consegna questo perché il protocollo IP tratta i datagrammi IP indipendentemente gli uni dagli altri.

I datagrammi

I dati circolano su Internet sotto forma di datagrammi (si parla anche di pacchetti). I datagrammi sono dei dati incapsulati, cioè dei dati ai quali sono state aggiunge delle intestazioni corrispondenti a informazioni sul loro trasporto (come l'indirizzo IP di destinazione). I dati contenuti nei datagrammi sono analizzati (e eventualmente modificati) dai router che permettono il loro transito.

Ecco il formato di un datagramma :

(7)

7 Ecco il significato dei campi :

 Version (4 bit). Questi quattro bit, che specificano la versione del protocollo IP (IPv4 o IPv6) del datagramma, consentono al router la corretta interpretazione del datagramma; infatti, versioni diverse di IP hanno differenti formati per i datagrammi.

 IHL Intermediate Header Length (4 bit): si tratta del numero di parole di 32 bit costituenti l'intestazione (il valore minimo è 5). Un datagramma IPv4 può contenere un numero variabile di opzioni (incluse nell’intestazione) e questi 4 bit indicano dove iniziano effettivamente i dati del datagramma. La maggior parte dei datagrammi IP non contiene opzioni, pertanto il tipico datagramma IP ha un’intestazione di 20 byte.

 TOS Type Of Service (8 bit): I bit relativi al tipo di servizio sono stati inclusi nell’intestazione IPv4 per distinguere diversi tipi di datagrammi. Spesso è utile distinguere datagrammi in tempo reale (usati nelle applicazioni di telefonia) da altro traffico (ad esempio FTP).

 Total length (16 bit): Rappresenta la lunghezza totale del datagramma IP, intestazione più dati, misurata in byte. Poiché questo campo è lungo 16 bit, la massima dimensione dei datagrammi IP è 65536 byte, anche se raramente questi superano i 1500. Utilizzato congiuntamente con la dimensione dell'intestazione, questo campo permette di determinare dove si trovano i dati.

 Identification, D, M e Fragment offset (16+3+13 bit): sono dei campi che permettono la frammentazione dei datagrammi, verranno spiegati in seguito.

 TTL (8bit): Il campo time-to-live (TTL) è stato incluso per assicurare che i datagrammi non restino in circolazione per sempre nella rete. Questo campo viene decrementato di una unità ogni volta che il datagramma è elaborato da un router, e quando raggiunge 0 il datagramma deve essere eliminato.

 Protocol (8 bit): Questo campo è usato solamente quando il datagramma raggiunge la destinazione finale. Il valore del campo indica lo specifico protocollo a livello di trasporto al quale vanno passati i dati del datagramma. Ad esempio, il valore 6 indica che i dati sono destinati a TCP, mentre il valore 17 designa UDP. Il numero di protocollo nel datagramma IP ha un ruolo analogo a quello del campo numero di porta nel segmento a livello di trasporto. Il numero di protocollo è l’anello di collegamento tra i livelli di rete e di trasporto, mentre il numero di porta è il “collante” che lega i livelli di trasporto e di applicazione.

 Header checksum (16 bit) : campo per la verifica del controllo di correttezza dell’intestazione.

Viene calcolato suddividendo l’intestazione in campi di 16 bit (nel calcolo i 16 bit della checksum stessa che devono essere settati a zero), facendone la somma in complemento 1, e calcolando il complemento binario del risultato (~somma). Il ricevente esegue la somma in complemento a uno (questa volta con il checksum all'interno), Se il risultato è composto da tutti 1il datagramma è valido. Normalmente i datagrammi in cui si verifica un errore vengono scartati.

 Source IP address (32 bit): Questo campo rappresenta l'indirizzo IP del terminale emettitore, e permette al destinatario di rispondere

 Destination IP address (32 bit): indirizzo IP del destinatario del messaggio.

 Option: eventuali altre opzioni.

 Payload (Dati): Nella maggior parte dei casi, il campo contiene il segmento a livello di trasporto(TCP o UDP) da consegnare alla destinazione.

La frammentazione dei datagrammi IP

La dimensione di un datagramma è al massimo di 65536 byte. Tuttavia questo valore non è mai raggiunto dato che le reti non hanno una capacità sufficiente per inviare dei pacchetti così grossi.

Inoltre le reti su Internet usano diverse tecnologie per la trasmissione fisica dei dati e la dimensione massima effettiva di un datagramma varia a seconda del tipo di rete.

La dimensione massima di una trama è detta MTU (Maximum Transfer Unit), essa provocherà la

(8)

8

frammentazione del datagramma se questo ha una dimensione più grande dell'MTU di rete, ad esempio per le reti Ethernet l’MTU è di 1500 byte mentre per le reti FDDI è 4470 byte.

La frammentazione di un datagramma avviene a livello dei router, cioè alla transizione da una rete con un MTU grande verso un'altra con un MTU più piccolo. Se il datagramma è troppo grande per passare sulla rete, il router lo divide, cioè lo scompone in frammenti di dimensione minore dell'MTU di rete ed in modo tale che la dimensione del frammento sia un multiplo di 8 byte. In seguito il router invia questi frammenti in modo indipendente e li reincapsula considerando la nuova dimensione. Inoltre il router aggiunge delle informazioni affinché il terminale di destinazione possa riassemblare i frammenti nell'ordine giusto. Non vi è però nessuna garanzia che i frammenti arrivino nell'ordine corretto dato che sono inviati in maniera individuale e indipendente.

Ogni datagramma ha più campi che permettono il riassemblaggio:

 campo offset di frammento (13 bit): campo che permette di conoscere la posizione iniziale del frammento nel datagramma iniziale. L'unità di misura di questo campo è di 8 byte (con il primo frammento di valore 0).

 campo di identificazione (16 bit): numero attribuito ad ogni frammento per permettere il riassemblaggio.

 campo lunghezza totale (16 bit): è ricalcolato per ogni frammento.

 campo flags (3 bit):

 Il primo bit non è utilizzato.

 Il secondo bit (detto DF : Don't Fragment ) indica se il datagramma può essere frammentato o meno. Se un datagramma ha questo bit posizionato a 1 e il router non può inviarlo senza frammentarlo, allora il datagramma sarà rigettato con un messaggio di errore

 L'ultimo bit (detto MF : More Fragments, in italiano Frammenti a seguire) se vale uno indica che il datagramma è un frammento al quale ne seguiranno altri, se vale zero allora il datagramma è l’ultimo frammento (quindi il router dovrebbe avere tutti i frammenti precedenti) oppure il datagramma non è soggetto ad una frammentazione.

Il riassemblaggio dei frammenti

Una volta che un datagramma è diviso, i frammenti viaggiano in modo separato fino alla destinazione finale dove vengono riassemblati (allo stesso livello IP).

Quando il terminale ricevente riceve il primo frammento avvia un timer, se il tempo finisce prima che siano arrivati tutti i frammenti allora tutti i frammenti già arrivati vengono scartati senza elaborare il datagramma di origine. I frammenti hanno tutti lo stesso campo identificazione del datagramma originale, mentre altri campi, come ad esempio “fragment offse” e “total length”, vengono ricalcolati.

La destinazione usa il valore identificazione e l'indirizzo IP di provenienza per identificare univocamente il datagramma (o i datagrammi frammenti), pertanto il campo identificazione deve essere generato come valore univoco su di un terminale, che può utilizzare a tale scopo un contatore globale in memoria. Il terminale ricevente riceve i frammenti (anche fuori ordine) e deve sapere quando sono arrivati tutti. Il frammento con bit MF a zero è l'ultimo, usando i suoi valori di fragment offset e total length può conoscere la lunghezza totale del datagramma d'origine ed esaminado fragment offset e total length di tutti i frammenti arrivati il ricevente può sapere se è arrivato tutto per ricostruire il datagramma originale.

Il routing IP

Il routing IP è parte integrante del livello IP della serie TCP/IP. Il routing consiste nell'assicurare l'invio di un datagramma IP attraverso una rete prendendo il percorso più breve. Questo ruolo è assicurato da dei terminali detti router, cioè dei terminali collegati (e colleganti) almeno due reti.

(9)

9

Il protocollo ARP

Ogni dispositivo di rete possiede un numero di identificazione univoco di 48 bit (MAC address, cioè Media Access Control address) che viene stabilito al momento della produzione della scheda in fabbrica, possiamo considerare questo numero come un indirizzo fisico del dispositivo di rete. Ogni dispositivo di rete deve però anche possedere un indirizzo IP per accede ad Internet, possiamo considerare l’indirizzo IP come un indirizzo logico del dispositivo di rete.

ARP è un protocollo di servizio, utilizzato in una rete di calcolatori che utilizzi il protocollo di rete IP e che supporti il servizio di broadcast. Per inviare un pacchetto IP ad un calcolatore della stessa sottorete è necessario incapsularlo in un pacchetto di livello inferiore che dovrà avere come indirizzo di destinazione il MAC address del dispositivo di rete del calcolatore a cui lo si vuole inviare.

ARP viene utilizzato per ottenere questo indirizzo esso infatti permette di conoscere l'indirizzo fisico (MAC address) di una scheda di rete corrispondente ad un indirizzo IP ed è per questo che si chiama Protocollo di risoluzione d'indirizzo (in inglese ARP significa Address Resolution Protocol).

Se il pacchetto deve essere inviato ad un terminale di un'altra sottorete, ARP viene utilizzato per scoprire il MAC address del router (gateway).

Il terminale che vuole conoscere il MAC address di un altro terminale, di cui conosce l'indirizzo IP, invia in broadcast una richiesta ARP (pacchetto di ARP-request), generata dal protocollo IP, contenente l'indirizzo IP dell'host di destinazione ed il proprio indirizzo MAC.

Tutti i terminali della sottorete ricevono la richiesta. In ciascuno di essi il protocollo ARP verifica se viene richiesto il proprio indirizzo IP. Il terminale di destinazione che riconoscerà il proprio IP nel pacchetto di ARP-request, provvederà ad inviare una risposta (ARP-reply) all'indirizzo MAC sorgente, contenente il proprio MAC. In questo modo ogni terminale può scoprire l'indirizzo fisico degli altri terminali sulla stessa sottorete.

In ogni terminale il protocollo ARP tiene traccia delle risposte ottenute in una apposita cache, per evitare di dovere utilizzare ARP prima di inviare ciascun pacchetto (il che comporterebbe un notevole ritardo nelle comunicazioni nonché una maggiore complessità nella gestione del traffico).

Le voci della cache ARP vengono cancellate dopo un certo periodo dall'ultima occorrenza, tipicamente dopo 5 minuti.

Il protocollo RARP

RARP è il protocollo inverso all'ARP Il protocollo RARP (Reverse Address Resolution Protocol) è usato per risalire ad un indirizzo IP conoscendo l'indirizzo fisico (MAC address) di un dispositivo di rete. Questo protocollo consente, ad esempio, ad un terminale di conoscere il proprio indirizzo IP all'accensione chiedendolo, in modalità broadcast agli altri terminali connessi alla rete. In genere la richiesta arriva ad un server RARP che contiene l'indirizzo di risposta nei propri file di configurazione. Ormai è reso obsoleto dal BOOTP e dal suo successore DHCP più ricchi di funzionalità.

Il protocollo ICMP

Il protocollo ICMP (Internet Control Message Protocol) è utilizzato per inviare messaggi di errore che indicano, ad esempio, che il servizio richiesto non è disponibile o che un terminale non è raggiungibile. Esso non è di solito usato direttamente da applicazioni tranne per qualche eccezione come ping e traceroute.

(10)

10

I protocolli del livello trasporto

Il protocollo TCP

TCP (che significa Transmission Control Protocol) è uno dei protocolli principali del livello trasporto del modello TCP/IP. Esso permette, a livello delle applicazioni, di gestire i dati provenienti (o a destinazione) dal livello inferiore del modello (cioè il protocollo IP). Una volta che i dati sono forniti al protocollo IP, quest'ultimo li incapsula in datagrammi IP, fissando il campo protocollo a 6. TCP è un protocollo orientato connessione, cioè permette a due terminali che

comunicano di controllare lo stato della trasmissione

Le caratteristiche principali del protocollo TCP sono le seguenti :

 Il servizio offerto da TCP è il trasporto di un flusso di byte bidirezionale tra due applicazioni in esecuzione su host differenti. Il protocollo permette alle due applicazioni di trasmettere contemporaneamente nelle due direzioni, quindi il servizio può essere considerato "Full Duplex" anche se non tutti i protocolli applicativi basati su TCP utilizzano questa possibilità.

 Il flusso di byte viene frazionato in blocchi per la trasmissione dall'applicazione a TCP (che normalmente è implementato all'interno del sistema operativo), per la trasmissione all'interno di segmenti TCP, per la consegna all'applicazione che lo riceve, ma questa divisione in blocchi non è per forza la stessa nei diversi passaggi.

 TCP è un protocollo orientato alla connessione, ovvero prima di poter trasmettere dati deve stabilire la comunicazione, negoziando una connessione tra mittente e destinatario, che viene esplicitamente chiusa quando non più necessaria. Esso quindi ha le funzionalità per creare, mantenere e chiudere una connessione.

 TCP garantisce che i dati trasmessi, se giungono a destinazione, lo facciano in ordine e una volta sola ("at most once"). Più formalmente, il protocollo fornisce ai livelli superiori un servizio equivalente ad una connessione fisica diretta che trasporta un flusso di byte. Questo è realizzato attraverso vari meccanismi di acknowledgment e di ritrasmissione su timeout.

 TCP possiede funzionalità di controllo di flusso e di controllo della congestione sulla connessione, attraverso il meccanismo della finestra scorrevole. Questo permette di ottimizzare l'utilizzo della rete anche in caso di congestione, e di condividere equamente la capacità disponibile tra diverse sessioni TCP attive su un collegamento.

 TCP fornisce un servizio di multiplazione delle connessioni su un host, attraverso il meccanismo delle porte.

Grazie al protocollo TCP le applicazioni possono avere la garanzia che la comunicazione avvenga senza perdita di dati grazie ad un sistema di riscontri (acknowledge) sulla effettiva ricezione dei dati. I router (che lavorano a livello Internet) hanno come unico ruolo l'invio dei dati sotto forma di datagramma, senza preoccuparsi del controllo dei dati stessi, dato che questo è realizzato a livello trasporto dal protocollo TCP.

Al momento di una comunicazione con il protocollo TCP due terminali devono stabilire una connessione. Il terminale emittente (quello che chiede la connessione) è detto client, mentre il terminale ricevente è detto server.

TCP permette il multiplexaggio/demultiplexaggio, cioè di far transitare su una stessa linea dei dati provenienti da applicazioni diverse o in altre parole di mettere in serie delle informazioni arrivate in parallelo. Questo è realizzato grazie al concetto di porta che, insieme all’indirizzo IP, permette di determinare in modo univoco un'applicazione in esecuzione su un dato terminale.

(11)

11 Il formato dei dati su TCP

Un segmento TCP è costituito come segue :

Significato dei differenti campi :

 Porta sorgente (16 bit): porta relativa all'applicazione in corso su un terminale sorgente

 Porta destinazione (16 bit): porta relativa all'applicazione in corso su un terminale destinazione

 Numero di sequenza (32 bit): Quando il flag SYN è a zero, indica lo scostamento (espresso in byte) dell'inizio del segmento TCP all'interno del flusso completo, a partire dall' Initial Sequence Number (ISN), negoziato all'apertura della connessione. Quando SYN è a 1, il numero di sequenza è quello iniziale usato per sincronizzare client e server (ISN).

 Numero di riscontro (32 bit): Numero di riscontro, ha significato solo se il flag ACK è settato a 1, e conferma la ricezione di una parte del flusso di dati nella direzione opposta, indicando il valore del prossimo Sequence number che l'host mittente del segmento TCP si aspetta di ricevere.

 Lunghezza intestazione (4 bit): permette di individuare l'inizio dei dati nel pacchetto. Questo valore è essenziale dato che il campo di opzioni è di dimensione variabile

 Non usato(6 bit): campo inutilizzato , riservato per usi futuri

 Flags (6x1 bit): i flag rappresentano delle informazioni supplementari :

(12)

12

 URG: se questo flag è a 1 il pacchetto deve essere trattato urgentemente.

 ACK: se il flag è a 1 il pacchetto è un riscontro

 PSH (PUSH): se il flag è a 1, il pacchetto funziona secondo il metodo PUSH.

 RST: se il flag è a 1, la connessione viene riinizializzata.

 SYN:il flag TCP SYN indica una richiesta di connessione.

 FIN: se questo flag è a 1, la connessione si interrompe

 Finestra di ricezione (16 bit): campo che permette di conoscere il numero di byte che il ricevitore desidera ricevere senza riscontro

 Checksum o CRC (16 bit): la somma di controllo è realizzata utilizzando intestazione +dati per poter verificare l'integrità del segmento

 Puntatore a dati urgenti (16 bit): indica il numero d'ordine a partire dal quale l'informazione diventa urgente

 Opzioni (Dimensione variabile): opzioni diverse, si riempie lo spazio rimanente dopo le opzioni con degli zero per avere una lunghezza multipla di 32 bit

 Dati: il messaggio (chiamato anche payload o carico utile) Sequence number e Acknowledgment number

Il Sequence number, o numero di sequenza, serve a posizionare il carico utile del segmento TCP all'interno del flusso di dati.

TCP si aspetta di ricevere il segmento successivo all'ultimo segmento ricevuto in ordine, ovvero quello il cui numero di sequenza è pari al numero di sequenza dell'ultimo segmento ricevuto in ordine più la dimensione del carico utile dello stesso segmento (cioè del suo campo Data).

In ricezione, TCP controlla se il numero di sequenza ricevuto è quello atteso e in caso affermativo può inviare direttamente il carico utile al processo di livello applicativo e liberare i propri buffer.

Se invece riceve un numero di sequenza maggiore di quello atteso, deduce che uno o più segmenti ad esso precedenti sono andati persi o ritardati dal livello di rete sottostante. Pertanto, memorizza temporaneamente in un buffer il carico utile del segmento per poterlo consegnare al processo applicativo dopo aver ricevuto e consegnato anche tutti quelli precedenti. Dal punto di vista del processo applicativo, quindi, i dati arriveranno in ordine anche se la rete ha per qualsiasi motivo alterato questo ordine, realizzando così il requisito della consegna ordinata dei dati.

Se infine il numero di sequenza ricevuto è inferiore a quello atteso, il segmento viene considerato un duplicato di uno già ricevuto e già inviato allo strato applicativo, e quindi scartato. Questo permette di realizzare l'eliminazione dei duplicati di rete.

In ogni segmento inoltre, viene inviato un Acknowledgment Number, o numero di riscontro. Il numero di riscontro presente in un segmento riguarda il flusso di dati nella direzione opposta.

Il protocollo TCP adotta la politica di Conferma cumulativa, ciò significa semplicemente che l'arrivo di numero di riscontro indica al ricevente che il mittente ha ricevuto e correttamente inoltrato al proprio processo applicativo, il segmento avente numero di sequenza uguale al numero di riscontro indicato (-1) e anche tutti i segmenti ad esso precedenti. Per tale motivo, in trasmissione, TCP mantiene temporaneamente una copia di tutti i dati inviati ma non ancora riscontrati. Quando riceve un numero di riscontro per un segmento, ne deduce che tutti i dati precedenti a quel numero sono stati ricevuti correttamente e quindi libera il proprio buffer da questi dati.

Per ciascun segmento inviato, TCP avvia un timer, detto timer di ritrasmissione RTO (Retransmission Time Out). Se il segmento non riceve un ACK prima che il timer scada, TCP assume che tutti i segmenti trasmessi a partire da quello siano andati persi e quindi li ritrasmette.

(13)

13

Si noti che, in TCP, il meccanismo dei numeri di riscontro non permette al ricevitore di comunicare al trasmettitore che un segmento è stato perso, ma alcuni dei successivi sono stati ricevuti (meccanismo ad Acknowledgment Number negativi), quindi è possibile che per un solo pacchetto perso ne debbano essere ritrasmessi molti. Questo comportamento non ottimale è compensato dalla semplicità del protocollo. Questa tecnica è detta Go-Back-N; l'alternativa, ovvero progettare il protocollo di trasporto in modo che solo i pacchetti effettivamente persi vengano ritrasmessi, è detta Selective Repeat (ripetizione selettiva); l'utilizzo però di alcuni campi opzionali appositi permette l'utilizzo della ripetizione selettiva.

I numeri di riscontro e i relativi timer permettono quindi di realizzare la consegna affidabile, ovvero di garantire che tutti i dati inviati siano consegnati anche se alcuni pacchetti vengono persi dalla rete.

Inizio di una connessione

Per stabilire la connessione fra le due applicazioni si applicano le seguenti regole:

 Le porte TCP devono essere aperte

 L'applicazione sul server è passiva, cioè l'applicazione è in modalità ascolto, in attesa di una connessione

 L'applicazione sul client fa una richiesta di connessione sul server. L'applicazione del client è detta in apertura attiva.

I due terminali devono iniziare la comunicazione sincronizzandosi attraverso ad un meccanismo comunemente detto three way handshake ,che si ritrova anche in fine di sessione.

 In un primo tempo il terminale emittente (il client) trasmette un segmento il cui flag SYN è a 1 (per segnalare che si tratta di un segmento di sincronizzazione), con un numero di sequenza C, che si chiama numero di sequenza iniziale del client (ISN)

 Quando il terminale ricevente (il server) riceve il segmento iniziale proveniente dal client gli invia un acknowledge, cioè un segmento il cui flag ACK è a 1 e il flag SYN è a 1 (dato che si tratta ancora di una sincronizzazione) con un numero di sequenza S ed numero di riscontro C+1

 Infine il client trasmette al server un acknowledge, cioè un segmento il cui flag ACK è a 1, il cui flag SYN è a zero (non si tratta più di un segmento di sincronizzazione) con numero di sequenza C+1 e numero di riscontro S+1

In seguito a questa sequenza i due terminali sono sincronizzati e la comunicazione può cominciare.

Considerando ciò che avviene in ambito client-server quando la comunicazione avviene attraverso un socket si può così riassumere la successione tipica degli eventi e dei segmenti di dati che vengono scambiati che porta alla creazione di una connessione :

1. Il server deve essere preparato per accettare le connessioni in arrivo; il procedimento si chiama apertura passiva del socket. Questo viene fatto chiamando la sequenza di funzioni sui socket create, bind e listen. Completata l'apertura passiva il server chiama la funzione accept e il processo si blocca in attesa di connessioni.

(14)

14

2. Il client richiede l'inizio della connessione usando la funzione connect, attraverso un procedimento che viene chiamato apertura attiva. La chiamata di connect blocca il processo e causa l'invio da parte del client di un segmento di sincronizzazione (flag SYN a 1).

3. il server deve dare l'acknowledge del segmento di sincronizzazione del client ed inoltre deve inviare il suo segmento di sincronizzazione al client trasmettendo il suo numero di sequenza iniziale questo viene fatto dal server trasmettendo un singolo segmento in cui sono impostati entrambi i flag SYN e ACK.

4. una volta che il client riceve l'acknowledge dal server la funzione connect ritorna, l'ultimo passo è dare l'acknowledge del segmento di sincronizzazione del server inviando un ACK.

Alla ricezione di quest'ultimo la funzione accept del server ritorna e la connessione è stabilita.

Affidabilità dei trasferimenti

Il protocollo TCP permette di assicurare il trasferimento dei dati in modo affidabile e garantisce che un insieme di dati sia spedito ad un altro dispositivo senza duplicati, modifiche o perdite.

Il protocollo TCP ha un sistema di riscontri (acknowledge) che assicura la correttezza e l'affidabilità della comunicazione. Si possono verificare tre condizioni: segmento ricevuto correttamente, segmento perso, segmento ricevuto ma corrotto.

Caso 1: Segmento ricevuto correttamente

Ogni segmento trasmesso contiene un proprio numero di sequenza. Alla ricezione di un segmento di dato, il terminale ricevente rimanda un segmento il cui flag ACK è a 1 (per segnalare che si tratta di un acknowledge) accompagnato da un numero di riscontro uguale al numero di sequenza del segmento ricevuto+1.

(15)

15 Caso 2: Segmento perso

L’ACK è solo positivo, per scoprire se un messaggio non è arrivato a destinazione il trasmettitore, quando invia un segmento, avvia un timer; al suo scadere, se non è arrivato l’ACK per quel segmento, il segmento viene ritrasmesso, dato che in questo caso il terminale emittente considera il segmento perso. Tuttavia, se il segmento non è perso e arriva comunque al destinatario, il terminale ricevente saprà grazie al numero d'ordine che si tratta di un doppione e conserverà solo l'ultimo segmento arrivato a destinazione.

Caso 3: Segmento ricevuto ma corrotto

Se il ricevitore riceve un segmento e verifica che esso non è corretto (ad esempio in base al controllo del checksum) ne richiede la ritrasmissione inviando un segmento con numero di riscontro che corrisponde al numero di sequenza dell'ultimo segmento corretto ricevuto +1.

Sender e Receiver Buffer

Si dice “buffer” un’area della memoria dell’applicazione che contiene i dati da scambiare tra mittente e destinatario. I dati vengono mano mano copiati (in unità di dimensione configurabile da parte di una applicazione) nell’area di memoria del sistema operativo attraverso la system call write(). Per ottimizzare il rapporto tra le informazioni di controllo poste nell’intestazione e la quantità di byte di dati disponibili nell’area data, un dato messaggio viene inviato soltanto nel momento in cui la parte di dati disponibile nel buffer eccede una data soglia configurabile.

Send buffer: area di memoria in cui TCP pone i messaggi in attesa di trasmissione; il send buffer è anche detto “send socket buffer”.

Receive buffer: area di memoria del sistema operativo in cui TCP pone i messaggi ricevuti; il receive buffer è anche detto “receive socket buffer”

Per ogni nuova connessione vengono allocati una nuova coppia di send e receive buffer.

Metodo della finestra scorrevole

I pacchetti di dati potrebbero essere trasmessi in sequenza uno per volta e prima di inviare il successivo sarebbe necessario aspettare la conferma.

Se per ogni pacchetto occorre aspettare la conferma si rallenta la trasmissione, per cui molti protocolli connection-oriented permettono la trasmissione di più pacchetti prima della ricezione di una conferma.

(16)

16

Si applica quindi il metodo detto della “finestra scorrevole”. Il numero di byte che si possono trasmettere prima di ricevere la conferma è detto finestra. Il campo Finestra di ricezione del segmento TCP dice quanti byte possono essere spediti a partire da quello (compreso) che viene confermato con l'ack number. La dimensione della finestra è negoziata dinamicamente durante la sessione TCP. Si realizza così un meccanismo di controllo di flusso. Se la dimensione della finestra fosse L il trasmettitore invierebbe L byte dopo di che si fermerebbe ad aspettare ACK, se gli L byte sono arrivati correttamente l’ACK contiene come numero di riscontro L+1.

Un valore di finestra zero significa: fermati per un po', riprenderai quando ti arriverà un segmento con uguale ack number e con un valore di window size diverso da zero. Questo valore serve a ridurre la velocità di trasmissione dei dati nel flusso di byte che va dal ricevente al trasmettitore del presente segmento. Viene usato quando ci si accorge di una congestione della rete, per non incrementare ancora la congestione, oppure quando i buffer di ricezione sono ormai pieni e non si vuole rischiare di perdere dei dati .

La dimensione della finestra definita nell'intestazione di ogni segmento TCP determina quindi quanti segmenti possono rimanere in attesa di conferma di ricezione, se la finestra viene riempita il mittente sospende l'invio di altri segmenti fino a quando non sono confermati almeno alcuni segmenti. Limitare il numero degli acknowledge rende meno congestionata la rete.

Questo metodo è detto Metodo della finestra scorrevole dato che definisce in un certo qual modo una finestra di sequenze che non hanno bisogno di acknowledge e che si sposta man mano che gli acknowledge sono ricevuti.

La dimensione di questa finestra non è fissa. Il server può memorizzare nel campo finestra dei suoi acknowledge la dimensione che gli sembra più adatta. Così quando l’acknowledge indica una richiesta d'aumento della finestra, il client sposterà il bordo destro della finestra aumentandola.

Invece, in caso di diminuzione, il client non sposterà il bordo destro della finestra verso sinistra ma aspetterà che il bordo sinistro avanzi (con l'arrivo degli acknowlege).

Fine di una connessione

Tanto il client quanto il server possono chiedere di mettere fine ad una connessione La fine della connessione avviene in questo modo :

 Uno dei terminali invia un segmento con il flag FIN a 1, e l'applicazione si mette in stato di attesa di fine, cioè finisce di ricevere i segmenti in corso e ignora i successivi

 Dopo la ricezione del segmento, l'altro terminale invia un acknowledge con il flag FIN a 1 e continua a spedire i segmenti in corso. In seguito a questo il terminale informa l'applicazione che un segmento FIN è stato ricevuto, poi invia un segmento FIN all'altro terminale, chiudendo così la connessione.

(17)

17

Il protocollo UDP

Il protocollo UDP (User Datagram Protocol) è un protocollo del livello trasporto del modello TCP/IP non orientato connessione. Questo protocollo è molto semplice dato che non fornisce nessun controllo degli errori.

Il formato di un segmento UDP è quindi molto semplice :

 Porta Sorgente (16 bit): si tratta del numero di porta corrispondente all'applicazione emittente del segmento UDP. Questo campo rappresenta un indirizzo di risposta per il destinatario. Quindi, questo campo è opzionale, il che significa che se la porta sorgente non è precisata, i 16 bit di questo campo saranno azzerati, caso in cui il destinatario non potrà rispondere (cosa non sempre necessaria, soprattutto per dei messaggi unidirezionali)

 Porta Destinazione (16 bit): questo campo contiene la porta corrispondente all'applicazione del terminale destinatario al quale ci si rivolge.

 Lunghezza (16 bit): questo campo precisa la lunghezza totale del segmento, intestazione compresa; ora l'intestazione ha una lunghezza di 4x16 bit (oppure 8x8 bit) quindi il campo lunghezza è necessariamente superiore o uguale a 8 byte.

 Somma di controllo (16 bit): si tratta di una Somma di controllo realizzata in maniera tale da poter controllare l'integrità del segmento.

 Dati (lunghezza variabile)

Rilevare gli errori di trasmissione usando il checksum

L'IP non garantisce la corretta consegna dei dati. Esso lascia l'incombenza della protezione dei dati al protocollo di trasporto. Entrambi TCP e UDP hanno meccanismi che garantiscono che i dati che consegnano all'applicazione sono corretti.

Se un pacchetto arriva dove è necessario ma arriva corrotto, e questo non viene rilevato, ciò è in qualche modo peggio che se si fosse perso.

Per fornire un meccanismo di base per il controllo degli errori nella trasmissione IP, TCP e UDP includono un campo checksum nell'intestazione del pacchetto.

L'IP prova a proteggere l'intestazione dei pacchetti IP, la parte relativamente piccola di ogni pacchetto, che controlla come il pacchetto viene trasmesso nella rete. Lo fa mediante il calcolo di un checksum dei campi dell'intestazione e l'inclusione del checksum stesso nel pacchetto trasmesso. Il ricevitore controlla il checksum nell'intestazione del pacchetto IP prima di processare il pacchetto. I pacchetti i cui checksum non coincidono più sono stati danneggati in qualche modo e sono semplicemente scartati.

Lo stesso algoritmo di checksum è utilizzato da TCP e UDP, essi però includono la parte dati nel pacchetto (non soltanto l'intestazione) nei loro calcoli.

L'idea alla base è molto semplice: si prendono i byte due alla volta (una word) e li si sommano tutti insieme, il complemento del valore ottenuto viene memorizzato nel campo Checksum del pacchetto che viene trasmesso. Il trasmettitore usa uno speciale algoritmo per calcolare il checksum, lo stesso algoritmo è utilizzato dal ricevitore per verificare i dati che ha ricevuto ed assicurarsi che non si siano verificati errori.

Riferimenti

Documenti correlati

maggiore della metà à à à di AB, traccio di AB, traccio di AB, traccio di AB, traccio un arco..

z Il client è un qualsiasi programma che invia una richiesta e aspetta una risposta; tipicamente termina dopo avere usato un server un numero finito di volte. z Il server aspetta

2 punti: risposta corretta, soluzione migliore, buona proprietà di linguaggio, esposizione chiara e leggibile.. 1,8 punti: risposta corretta, soluzione migliore con qualche

2 punti: risposta corretta, soluzione migliore, buona proprietà di linguaggio, esposizione chiara e leggibile.. 1,8 punti: risposta corretta, soluzione migliore con qualche

(a) supponiamo di denire il parallelogramma come un quadrilatero che ha in centro di simmetria (chiamiamo O tale centro); allora, se A, B, C e D sono nell'ordine i vertici

© 2009 Pier Luca Montessoro – Davide Pierattoni (si veda la nota a pagina 2) Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e

– Supporto nella stesura delle schede per la definizione delle risorse veicolate con il metodo della Programmazione Unitaria. • FEAMP: Misura

 Si raccomanda di prestare attenzione ai Criteri di ammissibilità e di selezione e all’intensità di aiuto previsti negli Avvisi pubblici relativi a Misure di cui agli