Gli ingranaggi di internet
Internet è una rete di calcolatori che interconnette milioni di dispositivi di calcolo in tutto il mondo. Inizialmente, erano connessi solamente PC tradizionali o workstation, attualmente invece vengono sempre più spesso connessi a Internet sistemi terminali non tradizionali quali PDA (personal digital assistant), televisori, calcolatori portatili, automobili, elettrodomestici e altro ancora.
Tutti questi dispositivi sono detti host (ospiti) o sistemi terminali (end system). I sistemi terminali sono connessi tra loro tramite una rete di collegamenti (communication link) e commutatori di pacchetti (packet switch). Questi, sia i collegamenti che i commutatori, possono essere di molti tipi differenti, costituiti da varie tipologie di mezzi fisici, tra cui ritroviamo cavi coassiali, fili di rame, fibre ottiche e onde elettromagnetiche. Collegamenti diversi possono trasmettere dati a frequenza differente, e tale frequenza di trasmissione (transmission rate) viene misurata in bit/secondo (bps).
Quando un sistema terminale vuole inviare dati a un altro sistema terminale, segmenta i dati e aggiunge un’intestazione a ciascun segmento: l’insieme delle informazioni risultanti viene chiamato pacchetto. I pacchetti, una volta giunti a destinazione, vengono ri-assemblati nei dati originari.
Le connessioni avvengono in modo indiretto (i sistemi terminali normalmente non sono connessi direttamente), attraverso dispositivi di instradamento (switching device) o packet switch. I principali packet switch sono i router e i link-layer switch. Un packet switch prende un pacchetto da uno dei collegamenti in ingresso e lo ritrasmette su uno di quelli in uscita, instradando quindi i pacchetti verso la loro destinazione finale.
La sequenza di collegamenti di comunicazione e di packet switching attraversati dal singolo pacchetto è chiamato percorso. I sistemi terminali accedono a Internet tramite i cosiddetti Internet Service Provider (ISP), che comprendono ISP residenziali, ISP aziendali, ISP universitari ecc. Un provider è un insieme di commutatori di pacchetto e di collegamenti di comunicazione. I provider possono fornire diversi tipi di accesso alla rete, wireless, a larga banda ecc. I provider di basso livello sono interconnessi a quelli nazionali e internazionali di livello più alto.
Ciascuna rete di un ISP, sia di alto che di basso livello, è gestita in modo indipendente e fa uso del protocollo IP. I sistemi terminali, i commutatori di pacchetto e altre parti di Internet fanno uso di protocolli che controllano l’invio e la ricezione di informazioni all’interno di Internet. Due dei più importanti protocolli Internet sono il Transmission Control Protocol (TCP) e l’Internet Protocol (IP). Entrambi, insieme, formano la famosa coppia TCP/IP.
Data l’importanza dei protocolli per Internet, risulta fondamentale conoscere le funzioni svolte da ogni singolo protocollo. Ecco dove entrano in gioco gli standard. Gli standard di Internet vengono sviluppati dall’Internet Engineering Task Force (IETF). La documentazione sugli standard Internet viene detta request for comment (RFC). Queste ultime ci permettono di consultare relative tecniche e commenti su tutti i tipi di protocolli, e inoltre definiscono anche vari protocolli tra cui TCP, IP, HTTP (per il web) e SMTP (Simple Mail Transfer Protocol) per la posta elettronica.
Esistono, oltre alla rete Internet pubblica, anche molte reti private appartenenti a industrie e pubbliche amministrazioni, i cui host non possono scambiare messaggi con host al di fuori della rete privata (a eccezione dei messaggi che passano attraverso i cosiddetti firewall, il cui scopo è restringere il flusso di messaggi da e verso una determinata rete). Le reti private sono anche dette intranet, dato che usano lo stesso tipo di host, router, collegamenti e protocolli Internet.
Descrizione dei servizi offerti da internet
Possiamo anche descrivere Internet da un punto di vista completamente diverso, cioè come un’infrastruttura che fornisce servizi alle applicazioni. Tali applicazioni/servizi includono la posta elettronica, la navigazione sul web, la messaggistica istantanea, lo streaming video, i giochi distribuiti, la condivisione dei file su base peer-to-peer, l’autenticazione remota.
Quindi possiamo affermare che Internet permette ad applicazioni distribuite di scambiare i dati dei suoi sistemi terminali, altro aspetto importante è che il web è solo uno dei tanti servizi distribuiti che utilizza Internet. Concetto rilevante è che le applicazioni Internet girano sui sistemi terminali e non sui packet switch del nucleo della rete. I sistemi terminali collegati a Internet forniscono un’API che specifica come il pezzo di software che gira su un sistema terminale chiede a Internet di recapitare dati a un altro specifico pezzo di software che gira su un altro sistema terminale. L'API Internet è un insieme di regole che il modulo software mittente deve seguire in modo che i dati siano recapitati al modulo software di destinazione.
È anche fondamentale ricordarsi che Internet è un’infrastruttura nella quale vengono costantemente introdotte nuove applicazioni. Le comunicazioni tra due host si possono classificare in due categorie distinte:
- Affidabile, orientato alla connessione: tale servizio garantisce che i dati trasmessi dal mittente sono consegnati al destinatario, arrivano nell’ordine corretto e inoltre sono completi.
- Non affidabile, senza connessione: questo servizio, a differenza del primo, non ci dà nessuna garanzia sulla consegna.
Ogni applicazione distribuita deve fare uso di uno dei due servizi.
Cos’è un protocollo?
Un protocollo di rete è simile a un “protocollo umano” (insieme di regole, buone maniere, per la semplice comunicazione tra due persone) ad eccezione del fatto che le entità che si scambiano messaggi e che intraprendono azioni sono componenti hardware o software di qualche dispositivo. Qualsiasi attività in Internet che coinvolge due o più entità remote in comunicazione viene governata da un protocollo. In generale possiamo dire che un protocollo è caratterizzato da:
- Un “linguaggio” comune con il quale comunicare.
- Un ordine con cui scambiarsi i messaggi.
- L’azione da intraprendere nel momento in cui i messaggi vengono inviati o ricevuti.
La rete Internet fa un uso estensivo dei protocolli:
- Protocolli tra schede di rete.
- Protocolli per il controllo della congestione dei pacchetti.
- Protocolli per l’instradamento dei pacchetti.
- Protocolli per la visualizzazione delle pagine web.
Proviamo ora a dare una definizione rigorosa di protocollo: un protocollo definisce il formato e l’ordine dei messaggi scambiati tra due o più entità in comunicazione, così come le azioni intraprese in fase di trasmissione e/o ricezione di un messaggio o di un altro evento.
Struttura della rete
Possiamo dividere la rete in due grandi insiemi: il centro della rete e i confini della rete.
I confini della rete
Ai confini della rete, troveremo i componenti delle reti che si trovano più esternamente, ovvero i componenti con cui abbiamo più familiarità, ossia i calcolatori, i telefoni cellulari ecc. Come già detto, i sistemi terminali vengono anche detti host, in quanto ospitano (ed eseguono) programmi applicativi quali browser e server web.
In base al tipo di connessione/relazione tra i diversi host, possiamo avere diverse architetture, in particolare quando gli host si suddividono ulteriormente in client e server si parla di Architettura Client/Server. In questo caso, i client tendono a essere PC che sfruttano e fungono da clienti a servizi messi a disposizione da server, macchine più potenti che distribuiscono pagine web e/o altri servizi. Altra architettura frequente è l'architettura peer to peer (nodi paritari, connessione punto-punto), che fa un uso limitato o inesistente di server dedicati, ma che si basa sull’idea che tutti gli host sono serventi e allo stesso tempo clienti.
Servizi ai confini della rete
L’obiettivo dei sistemi terminali è il trasferimento dei dati. Le reti TCP/IP forniscono per le applicazioni terminali due tipi di servizio:
- Senza connessione.
- Orientato alla connessione.
Lo sviluppatore progetta le proprie applicazioni utilizzando uno dei due servizi.
Servizio orientato alla connessione
Le applicazioni che utilizzano un servizio orientato alla connessione, prima di trasmettere i pacchetti, effettuano l’handshaking (stretta di mano). Concretamente, i servizi terminali sono consapevoli dell'avvenuta connessione, mentre i commutatori di pacchetto non ne sanno nulla e non mantengono memoria di nulla. Il protocollo TCP ci assicura un trasporto affidabile (orientato quindi alla connessione), una consegna in “ordine” del flusso di byte. In caso di perdita di byte, questi vengono ritrasmessi perché il protocollo TCP si basa sulla tecnica dell’acknowledgement o ACK, ovvero il destinatario invia un messaggio di avvenuta ricezione.
Inoltre, il protocollo TCP si basa su altre due tecniche fondamentali:
- Controllo del flusso: il mittente non sovraccarica il destinatario.
- Controllo di congestione: i mittenti rallentano il tasso di invio quando la rete è congestionata.
Le più frequenti applicazioni che utilizzano il protocollo TCP sono quelle che offrono servizi di tipo HTTP, FTP ed SMTP.
Servizio senza connessione
Questo servizio non prevede handshaking, e l’applicazione trasmette i pacchetti direttamente al mittente. In questo caso la consegna è più veloce ma meno affidabile, infatti il mittente non sa quale pacchetti sono arrivati a destinazione. Un importante protocollo che non è orientato alla connessione è UDP (User Datagram Protocol), l’immediata conseguenza è che il trasferimento dei dati non è affidabile, inoltre questi non prevede il controllo del flusso e il controllo di congestione. Viene frequentemente utilizzato per la connessione streaming, vantaggioso per garantire velocità e quindi consistenza al servizio, cosa che con il protocollo TCP risulterebbe di difficile realizzazione.
Il nucleo della rete
Il nucleo della rete si può definire come una maglia di packet switch e collegamenti che interconnettono i sistemi terminali di Internet. Esistono due fondamentali approcci per spostare i dati nella rete di collegamenti a switch: la commutazione di circuito e la commutazione di pacchetto.
Nella reti a commutazione di circuito, le risorse richieste lungo un percorso per consentire la comunicazione tra sistemi terminali sono riservate per l’intera durata della sessione di comunicazione. Le reti telefoniche sono esempi di reti a commutazione di circuito. Prima che possa iniziare l’invio, la rete deve stabilire una connessione tra mittente e destinatario. Questo è un collegamento “con tutti i crismi” in cui i commutatori sul percorso tra mittente e destinatario mantengono lo stato della connessione per tutta la durata della comunicazione.
Quando la rete stabilisce un circuito, riserva anche una frequenza di trasmissione costante nei collegamenti di rete per la durata della connessione. Dato che per questa connessione dal mittente al destinatario è stata riservata una certa larghezza di banda, il mittente può trasferire i dati a una frequenza costante garantita.
Nelle reti a commutazione di pacchetto, tali risorse non sono riservate; i messaggi di una sessione utilizzano le risorse su richiesta, e di conseguenza potrebbero dover attendere (mettersi in coda) per accedere a un collegamento. Internet è la rete a commutazione di pacchetto per eccellenza. Si consideri cosa succede quanto un host vuole inviare un pacchetto a un altro host in Internet. Come per la commutazione di circuito, il pacchetto viene trasmesso attraverso una serie di collegamenti di comunicazione, ma senza riservargli però alcuna frazione di banda. Se uno dei collegamenti è congestionato perché altri pacchetti richiedono contemporaneamente la trasmissione sul collegamento, allora il nostro pacchetto dovrà attendere in un buffer sul lato di invio del collegamento di trasmissione e subirà un ritardo. Internet fa il massimo sforzo possibile (best effort) per consegnare i pacchetti in modo temporizzato, ma non garantisce il successo.
Commutazione di circuito
Con questa modalità, quando due host desiderano comunicare, la rete stabilisce una connessione end-to-end (punto-punto, ovvero da punto finale a punto finale) dedicata a loro per l’intera durata della sessione. Supponiamo di avere una rete a commutazione di circuito con quattro commutatori interconnessi tra di loro attraverso quattro collegamenti. Ciascuno dei commutatori dispone di n circuiti, in modo che ogni collegamento possa supportare n connessioni simultanee.
Affinché l’host A invii messaggi a B, la rete deve prima riservare un circuito su ciascuno dei due collegamenti che dividono A da B. Poiché ogni collegamento presenta n circuiti, per ogni collegamento utilizzato dalla connessione punto-punto, la connessione ottiene 1/n della larghezza di banda del collegamento per la durata della connessione stessa.
Quindi, in concreto, in una rete a commutazione di circuito le risorse della rete (es. larghezza di banda) sono suddivise in “pezzi”. Ciascun pezzo viene allocato ai vari collegamenti, e le risorse rimangono inattive se non vengono utilizzate, in quanto non c’è condivisione. La suddivisione della banda in pezzi può essere realizzata attraverso una:
- Divisione di frequenza.
- Divisione di tempo.
I circuiti dei collegamenti sono implementati tramite multiplexing a divisione di frequenza (FDM, frequency-division multiplexing) o multiplexing a divisione di tempo (TDM, time-division multiplexing). Con FDM, lo spettro di frequenza di un collegamento viene suddiviso tra le connessioni stabilite tramite il collegamento. Nello specifico, il collegamento dedica una banda di frequenza a ciascuna connessione per la durata della connessione stessa. Nelle reti telefoniche, questa banda di frequenza ha normalmente un’ampiezza di 4 kHz (ossia 4000 hertz o 4000 cicli al secondo). La larghezza della banda viene detta ampiezza di banda (bandwidth). Anche le stazioni radio FM usano FDM per condividere lo spettro di frequenza tra gli 88MHz e i 108MHz, nelle quali ciascuna stazione ha assegnata una specifica banda di frequenza.
Per un collegamento TDM, il tempo viene suddiviso in frame (intervalli) di durata fissa che sono a loro volta ripartiti in un numero fisso di slot (porzioni) temporali. Quando la rete stabilisce una connessione attraverso un collegamento, le dedica uno slot di tempo in ogni frame. Questi slot sono dedicati unicamente a quella connessione, con uno slot temporale disponibile in ciascun frame alla trasmissione dei dati di connessione.
Commutazione di pacchetto
Nelle moderne reti di calcolatori, l’origine/la sorgente suddivide i messaggi lunghi in parti più piccole note come pacchetti. Tra l’origine e la destinazione, questi pacchetti viaggiano attraverso collegamenti e commutatori di pacchetto (di cui esistono due tipi principali: i router e i commutatori a livello di link). I pacchetti vengono trasmessi su ciascun collegamento di comunicazione a una frequenza pari alla frequenza totale di trasmissione del collegamento.
La maggior parte dei commutatori di pacchetto utilizza la trasmissione store-and-forward (immagazzinamento e rilascio). Ciò significa che il commutatore deve ricevere l’intero pacchetto prima di poter cominciare a trasmettere sul collegamento in uscita il primo bit del pacchetto. Di conseguenza, questi commutatori di pacchetto introducono un ritardo, detto di store-and-forward, all’ingresso di ciascun collegamento lungo il percorso del pacchetto.
Consideriamo ora quanto tempo richiede l’invio di un pacchetto da L bit tra due host in una rete a commutazione di pacchetto. Supponiamo che esistano Q collegamenti tra i due host, ciascuno alla frequenza di R bps. Si ipotizzi che questo sia l’unico pacchetto in rete. Il pacchetto deve innanzitutto essere trasmesso sul primo collegamento in uscita da A, il che richiede L/R secondi. Deve poi essere ritrasmesso su ciascuno dei Q-1 restanti collegamenti, pertanto il ritardo totale è di QL / R.
Ogni commutatore di pacchetto connette più collegamenti. Per ciascuno di questi, il commutatore mantiene un buffer di output (detto anche coda di output) per conservare i pacchetti che il router sta per inviare su quel collegamento. Di conseguenza, in aggiunta ai ritardi store-and-forward, i pacchetti subiscono anche ritardi di coda dovuti al buffer di output, ovviamente nel caso in cui questo risulti occupato, causando il cosiddetto fenomeno di congestione. Tali ritardi sono variabili e dipendono dal livello di traffico nella rete.
Dato che il buffer ha dimensione finita, un pacchetto in arrivo può trovare il buffer completamente riempito da altri pacchetti che attendono la trasmissione. In questo caso, si verificherà una perdita di pacchetto (packet loss): verrà cioè eliminato o il pacchetto in arrivo o uno di quelli che si trovano già in coda. Se la frequenza di arrivo dei pacchetti al commutatore supera la frequenza di inoltro sul collegamento in uscita si verifica un ingorgo.
Vantaggi della commutazione di pacchetto:
- Non è necessario dividere la larghezza di banda in pezzi.
- Non è necessario allocare la banda in modo dedicato.
- Non è necessario riservare le risorse.
Considerazioni:
- La commutazione di pacchetto è ottima per i dati a raffica, grazie al meccanismo di condivisione delle risorse e grazie al fatto che è semplice, ovvero non necessita dell’impostazione della chiamata.
- Nel caso di eccessiva congestione possono esserci ritardi e perdita di pacchetti; sono necessari protocolli per il trasferimento affidabile di dati e per il controllo della congestione.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
-
Appunti completi corso Reti Logiche
-
Reti dei calcolatori - Appunti
-
Reti di Calcolatori - Test
-
Reti di Calcolatori