5.4) Controllo della congestione

Quando troppi pacchetti sono presenti in una parte della subnet, si verifica una congestione che degrada le prestazioni. Ciò dipende dal fatto che, quando un router non riesce a gestire tutti i pacchetti che gli arrivano, comincia a perderli, e ciò causa delle ritrasmissioni che aggravano ancor più la congestione.


Figura 5-3: Effetti della congestione

La congestione in un router può derivare da diversi fattori:

Inoltre, la congestione in un router tende a propagarsi ai suoi vicini che gli inviano dati. Infatti, quando tale router è costretto a scartare i pacchetti che riceve non li conferma più, e quindi i router che li hanno spediti devono mantenerli nei propri buffer, aggravando così anche la propria situazione.

Il controllo della congestione è un problema globale di tutta la rete, ed è ben diverso dal problema del controllo di flusso nei livelli data link, network (nel caso dei servizi connection oriented) e trasporto, che invece riguarda una singola connessione sorgente-destinazione.

Ci sono due approcci al problema della congestione:

Il primo cerca di impostare le cose in modo che la congestione non si verifichi, ma poi non effettua azioni correttive.

Il secondo tiene sott'occhio la situazione della rete, intraprendendo le azioni opportune quando necessario.

5.4.1) Traffic shaping

In questo approccio, di tipo open loop, l'idea è di forzare la trasmissione dei pacchetti a un ritmo piuttosto regolare, onde limitare la possibilità di congestioni.

Verdemo tre tecniche per implementare il traffic shaping:

Algoritmo Leaky bucket (secchio che perde)

L'idea è semplice, e trova un analogia reale in un secchio che viene riempito da un rubinetto (che può essere continuamente manovrato in modo da risultare più o meno aperto) e riversa l'acqua che contiene attraverso un forellino sul fondo, a ritmo costante. Se viene immessa troppa acqua, essa fuoriesce dal bordo superiore del secchio e si perde.

Sull'host si realizza (nell'interfaccia di rete o in software) un leaky bucket, che è autorizzato a riversare sulla rete pacchetti con un fissato data rate (diciamo b bps) e che mantiene, nei suoi buffer, quelli accodati per la trasmissione.

Se l'host genera più pacchetti di quelli che possono essere contenuti nei buffer, essi si perdono.


Figura 5-4: Leaky bucket

In questo modo, l'host può anche produrre un traffico bursty senza creare problemi sulla rete; finché il data rate medio non supera i b bps tutto funziona regolarmente, oltre si cominciano a perdere pacchetti.

Algoritmo token bucket (secchio di gettoni)

E' una tecnica per consentire un grado di irregolarità controllato anche nel flusso che esce sulla rete.

Essenzialmente, si accumula un credito trasmissivo con un certo data rate (fino ad un massimo consentito) quando non si trasmette nulla.

Quando poi c'è da trasmettere, lo si fa sfruttando tutto il credito disponibile per trasmettere, fino all'esaurimento di tale credito, alla massima velocità consentita dalla linea.

Il secchio contiene dei token, che si creano con una cadenza prefissata (ad esempio uno ogni millisecondo) fino a che il loro numero raggiunge un valore M prefissato, che corrisponde all'aver riempito il secchio di token.

Per poter tramettere un pacchetto (o una certa quantità di byte), deve essere disponibile un token.

Se ci sono k token nel secchiello e h > k pacchetti da trasmettere, i primi k sono trasmessi subito (al data rate consentito dalla linea) e gli altri devono aspettare dei nuovi token.

Dunque, potenzialmente dei burst di M pacchetti possono essere trasmessi in un colpo solo, fermo restando che mediamente non si riesce a trasmettere ad una velocità più alta di quella di generazione dei token.

Un'altra differenza col leaky bucket è che i pacchetti non vengono mai scartati (il secchio contiene token, non pacchetti). Se necessario, si avverte il livello superiore, produttore dei dati, di fermarsi per un pò.

Questi due algoritmi possono essere usati per regolare il traffico host-router e router-router; in quest'ultimo caso però, se il router sorgente è costretto a fermarsi invece di inviare dati e non ha spazio di buffer a sufficienza, questi possono perdersi.

Flow specification

Il traffic shaping è molto efficace se tutti (sorgente, subnet e destinazione) si accordano in merito.

Un modo di ottenere tale accordo consiste nello specificare:

Tale accordo si chiama flow specification e consiste in una struttura dati che descrive le grandezze in questione.

Sorgente, subnet e destinatario si accordano di conseguenza per la trasmissione.

Questo accordo viene preso prima di trasmettere, e può essere fatto sia in subnet connesse (e allora si riferisce al circuito virtuale) che in subnet non connesse (e allora si riferisce alla sequenza di pacchetti che sarà trasmessa).

Controllo della congestione nelle reti basate su circuiti virtuali

In generale nelle reti connesse è più facile il controllo della congestione, perché le risorse per una connessione sono allocate in anticipo.

Quindi, per evitare la congestione è possibile negare l'attivazione di nuovi circuiti virtuali ove non vi siano sufficienti risorse per gestirli. Questa tecnica va sotto il nome di admission control.

5.4.2) Choke packet

In questo approccio, di tipo closed loop, è previsto che un router tenga d'occhio il grado di utilizzo delle sue linee di uscita. Il router misura, per ciascuna linea, l'utilizzo istantaneo U e accumula, entro una media esponenziale M, la storia passata:

Mnuovo = a Mvecchio + (1 - a)U

dove

Quando, per una delle linee in uscita, M si avvicina a una soglia di pericolo prefissata, il router esamina i pacchetti in ingresso per vedere se sono destinati alla linea d'uscita che è in allarme.

In caso affermativo, invia all'host di origine del pacchetto un choke packet (to choke significa soffocare) per avvertirlo di diminuire il flusso.

Quando l'host sorgente riceve il choke packet diminuisce il flusso (tipicamente lo dimezza) e ignora i successivi choke packet per un tempo prefissato, perché tipicamente ne arriveranno molti in sequenza.

Trascorso tale tempo prefissato, l'host si rimette in attesa di altri choke packet. Se ne arrivano altri, riduce ancora il flusso. Altrimenti, aumenta di nuovo il flusso.

Hop-by-hop choke packet

L'unico problema della tecnica precedente è la lentezza di reazione, perché l'host che produce i pacchetti ci mette un certo tempo a ricevere i choke packet ed a diminuire di conseguenza il ritmo della trasmissione. Per migliorare le cose si può costringere ogni router sul percorso, appena riceve tali pacchetti, a rallentare subito il ritmo. In tal caso si parla di hop-by-hop choke packet.

Questa tecnica rende molto più veloce il sollievo del router che ha per primo i problemi di congestione, ma richiede più spazio di buffer nei router sul percorso dall'host originario a quel router.

5.5) Internetworking

Come sappiamo, esistono diverse architetture di rete, ciascuna caratterizzata dalle scelte effettuate in molti settori fra i quali ricordiamo:

Per connettere fra loro reti eterogenee si devono superare problemi non banali, tra i quali:

A causa di tali problemi, in generale (a meno che le architetture di rete non siano molto simili) non si usa questo approccio generale, ma altre tecniche più specifiche.

Tali tecniche sono basate sull'uso di particolari attrezzature, che operano a livelli diversi:

Reti di router multiprotocollo

Mediante ricorso a tali apparecchiature diventa possibile, per esempio, impostare una internetwork costituita di reti eterogenee. Ogni rete può comunicare con le altre reti a lei conformi attraverso una porzione di rete costituita di router multiprotocollo.


Figura 5-5: Internetwork basata su router multiprotocollo

Le reti OSI possono parlare fra loro, e così quelle IP. Nella subnet costituita dai router multiprotocollo circolano pacchetti di entrambe le architetture, che vengono instradati secondo le regole di competenza dell'architettura di sui fanno parte.

Tunneling

Un' altra tecnica che risolve un problema analogo è il tunneling, che si utilizza per mettere in comunicazione due reti uguali per mezzo di una rete diversa.


Figura 5-6: Tunneling

In questo caso la rete di tipo Y non è dotata di router multiprotocollo. Invece, un router designato in ciascuna delle due reti di tipo X è multiprotocollo e incapsula i pacchetti delle reti di tipo X dentro pacchetti di tipo Y, consegnandoli poi alla rete di tipo Y. Si noti che in questi pacchetti ci sono due buste di livello network:


Figura 5-7: Doppio livello network nel tunneling

Frammentazione

Un diverso problema che talvolta si presenta è legato al fatto che in generale è possibile che i pacchetti in arrivo da una rete siano troppo grandi per transitare su un altra.

In questo caso è necessario che il livello network della rete di origine (e di quella di destinazione) prevedano meccanismi di spezzettamento del pacchetto in frammenti prima di consegnarli alla rete di transito, e di ricomposizione dei frammenti appena essi giungono dalla rete di transito in quella di destinazione (come vedremo, il protocollo IP è fornito di questa funzionalità).

Circuiti virtuali concatenati

Se tutte le reti interessate offrono servizi connessi nel livello network, è possibile costruire un circuito virtuale che si estende attraverso più reti eterogenee come concatenazione di circuiti virtuali che attraversano ciascuno una delle reti. Ai confini fra ogni rete ci sono dei router multiprotocollo che:

Transport gateway

Un meccanismo simile è piuttosto diffuso a livello transport, dato che esso offre servizi connessi in quasi tutte le architetture. In tale ambito le apparecchiature interessate prendono il nome di transport gateway.

Poiché i transport gateway operano a livello transport, essi ricevono i dati dal livello application di partenza e li consegnano al livello application di arrivo.

Application gateways

Un ultimo tipo di attrezzatura è costituito dagli application gateway, che effettuano una conversione di dati a livello application.

Ad esempio, per mandare da un host Internet un messaggio di posta elettronica a un utente OSI:

5.5.1) Internetwork routing

In generale, in una internetwork le singole reti componenti sono entità autonome e vengono chiamate AS (Autonomous System).

In questo caso, il routing complessivo è a due livelli:


Torna al sommario | Vai avanti