Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Rete Internet
La rete Internet è una rete WAN, quindi una rete dislocata in territorio mondiale. I terminali sono chiamati host, i nodi
di commutazione sono invece chiamati router. La rete internet è stata introdotta e gestita dall’organismo IETF
(Internet Engineering Task Force), un organismo internazionale che ha emanato gli standard della rete Internet.
Servizio di rete
La funzione di multiplazione è dinamica con l’assegnazione a domanda delle risorse, l’asse dei tempi è di tipo
unslotted. La rete ha un basso GII e GTT. La funzione di commutazione è con attraversamento ad immagazzinamento
e rilancio. L’architettura protocollare è complessa, poiché Internet è costituita da una tecnologia eterogenea visto che
sfrutta le capacità di trasferimento di reti di TLC già esistenti.
Sottosistema di sottoreti
La rete internet sfrutta le risorse di trasferimento di reti di TLC già esistenti, per poterlo fare nel router devono essere
implementati i sottosistemi dei terminali delle sottoreti a cui è collegato sulle interfacce. Quindi, per ogni interfaccia
del router si ha un sottosistema di sottorete diverso. Devono sempre essere presenti le c.f. di tx/rx e di Delimitazione.
Negli anni la struttura ha subito dei cambiamenti perché si è cercato di migliorare la connessione dei router tramite
mezzi trasmissivi diretti (ex. fibra ottica), garantendo delle capacità di trasferimento molto alte e inserendo nel
sottosistema di sottorete un sottosistema per TX-RX e uno per la delimitazione.
Sottosistema IP
Il sottosistema IP deve svolgere la funzionalità di Indirizzamento di
Terminale (indirizzo di 32 bit rappresentabile mediante 4 interi) e la
funzionalità di Frammentazione.
Sottosistema di Sottorete
Il sottosistema sfrutta le risorse di trasferimento della rete di TLC a cui
è collegato l’host per trasferire le UI verso il router di accesso. Sono
sempre presenti le c.f. di tx/rx e di Delimitazione.
Sottosistema IP
Formato del datagramma IP
Il campo Version (4 bit) riporta in codice binario il numero della versione del protocollo IP
Nel campo HLEN (Header Lenght) (4 bit) è riportata la lunghezza della PCI, compresa tra 20 Byte e 60 Byte, di
cui 40 Byte sono opzionali. Il campo indica il numero di parole (gruppi) di 32 bit (4 byte) presenti nella PCI, il
numero di parole deve essere compreso tra 5 (0101) e 15 (1111)
Il campo Service Type (8 bit) permette agli utenti di richiedere particolari servizi di trasferimento. I bit 1,2,3
costituiscono il campo Precedenza, 000 indica la massima priorità. I bit 4,5,6,7 possono essere settati come segue:
se
sono impostati come 1000 l’utente chiede un servizio in cui venga minimizzato il ritardo di trasferimento; se sono
impostati come 0100 si chiede di massimizzare il Thoughput, ovvero il GII; se sono impostati come 0010 l’utente
chiede di massimizzare l’affidabilità del trasferimento (es seguire percorsi che coinvolgano reti affidabili); se sono
impostati come 0001 si chiede di minimizzare il costo monetario. Il bit 8 è sempre posto al valore 0.
Il campo Total Lenght (di 16 bit) riporta la lunghezza totale del datagramma IP, ovvero dell’Header e del Data.
La lunghezza massima, circa 65 mila byte, è indicata con un campo di bit tutti pari ad 1.
Il campo Time to Live (8 bit) serve a risolvere eventuali errori di instradamento. L’(IP)-PDU quando viene inviata
segue un percorso di rete per raggiungere l’host di destinazione, ma potrebbero esserci dei problemi
nell’instradamento (es: l’(IP)-PDU vaga in modo indefinito nella rete). L’(IP)-PDU oltre a non raggiungere l’host
di destinazione, consumerebbe risorse di trasferimento senza effettuare un trasferimento utile. Risulta necessario
rimuovere l’(IP)-PDU dalla rete: il campo Time to Live viene impostato dall’host ad un certo valore che
rappresenta il numero massimo di router che potranno instradare il datagramma nel percorso di rete. Ogni
volta che un router riceve l’(IP)-PDU decrementa il campo di una unità, se il valore viene azzerato il datagramma
viene scartato. Solitamente il campo Time to Live viene impostato a 255 router (campo di tutti 1)
Il campo Protocol (8 bit) codifica il protocollo del sottosistema di trasporto che dove elaborare il datagramma, se
il campo riporta il valore 6 / 17 / 1 allora deve essere svolto il protocollo TCP / UDP / ICMP
Il campo Header Checksum (16 bit) trasporta i bit necessari affinché venga svolta la rilevazione d’errore sui bit
dell’header
Nei campi Destination IP Address (4 byte) e Source IP Address (4 byte) sono riportati gli indirizzi IP dell’host
destinatario, necessario a svolgere l’operazione di indirizzamento di terminale, e dell’host emittente
Internet Control Message Protocol (ICMP)
Il sottosistema ICMP si trova al di sopra del sottosistema IP e agisce quando devono essere elaborati dei messaggi
di controllo da parte della rete che codificano una situazione d’errore. Il router quando riscontra un datagramma
oggetto di errore deve scartarlo e notificare il fatto all’host emittente. Gli errori codificati sono:
Errore di instradamento: il router nella tabella di instradamento non contiene le informazioni per inoltrare il
datagramma, il router scarterà il datagramma e avviserà l’host emittente.
Azzeramento del Time to Live: quando il campo Time to Live viene azzerato, il router scarterà il
datagramma e avviserà l’host emittente
Congestione: porta allo scarto del datagramma e alla notifica inviando il codice di errore.
In presenza di errori di questo tipo il sottosistema ICMP genera un messaggio di controllo in cui è codificato uno degli
eventi di errore e sfrutta il sottosistema IP per trasportare i messaggi di controllo verso l’host emittente.
In realtà non è possibile assegnare tutti gli indirizzi esistenti perché la stringa con tutti i bit settati ad 1 porta all’invio
di un messaggio di tipo broadcast nella sottorete; la stringa con tutti i bit settati a 0 non può essere associata a degli
Host.
Nella tabella di instradamento invece di riportare gli indirizzi di ogni host, viene riportato il Net-id del blocco a
cui appartiene l’host. L’instradamento avviene in questo modo: il router esamina il campo Destination IP Address
del datagramma IP, determina il Net-id del blocco al quale appartiene l’indirizzo e decide verso quale interfaccia
inoltrare il datagramma. A più indirizzi IP che appartengono allo stesso blocco corrisponde dunque la stessa
informazione d’indirizzo e lo stesso interfaccia del router.
Subnetting
La tecnica del Subnetting risolvere la questione dello spreco di indirizzi IP. I blocchi di indirizzi vengono divisi
in sottoblocchi, di dimensioni diverse in base alle esigenze, e vengono assegnati alle sottoreti (ad un blocco è
assegnato un gruppo di sottoreti, ad ogni sottorete è assegnato un sottoblocco). Gli indirizzi IP sono quindi costituiti
da:
1. L’indirizzo del sottoblocco si ottiene aggiungendo al prefisso una stringa di 32−(H +Li) bit pari a 0 (il campo
Host-id viene posto pari ad una stringa con i bit settati tutti al valore 0).
2. La maschera è una stringa di H +Li bit pari a 1
(lunghezza prefisso) e una stringa di 32−(H +Li) bit pari
a 0.
2° Indirizzo Maschera
H bit Li bit 32-(H+Li) bit H+Li bit 32-(H+Li) bit
Net_Id Sub_Id 00…00 11…11 00…00
Il router per svolgere l’operazione di instradamento legge nel campo Destination IP Address l’indirizzo dell’host di
destinazione, quindi cerca nella tabella la riga di instradamento relativa al sottoblocco a cui appartiene quell’indirizzo.
Il router verifica l’appartenenza di un indirizzo Ind(H) ad un sottoblocco ( Ind(S) , Mas(S) ) tramite un AND
logico:
Un’operazione di AND logico tra due bit equivale a calcolare il prodotto dei due bit, nel caso di due sequenze esso
equivale a calcolare l’AND logico tra i bit in corrispondenza delle due sequenze. Un AND logico con una sequenza di
soli bit pari a 0 restituisce come risultato una sequenza di bit pari a 0.
⏟
Ind ( H ) ∈ Sb → Ind ( H )=Prefix ( Sb ) a⏟
1 , a2 , … , a p k + p=32
k p
Prefix ( Sb ) a1 ,a 2 , ... , a p
1⋯1 0⋯0
Ind ( H )∧Mas ( Sb ) → Prefix ( Sb ) 0 … 0=Ind (Sb)
( )
Prefix Sb 0 ⋯ 0
x a1 , a2 ,... , a p
1 ⋯1 0 ⋯0
Ind ( H )∧Mas ( Sb ) → x 0 ⋯ 0 ≠ Ind ( Sb ) → Ind (H ) ∈ Sb
x 0⋯0
Tecniche di Subnetting
Bisogna determinare in modo ottimale le dimensioni del blocco di indirizzi (la classe) e la lunghezza del Sub-id, in
modo tale che ciò non porti a uno spreco di indirizzi IP. Questo problema si chiama Problema di Indirizzamento.
Esistono due possibili tecniche di subnetting:
1. Subnetting statico
2. Subnetting con maschera a lunghezza variabile
Subnetting statico
In un subnetting statico tutti i sottoblocchi hanno esattamente la stessa dimensione. Al sottoblocco sono assegnati
p
2 indirizzi costituiti da:
H bit del Net-id del blocco
L bit del Sub-id del sottoblocco
P bit dell’Host-id (H + L + P = 32)
Tutti i prefissi del blocco, a prescindere dal sottoblocco a cui appartengono, hanno una lunghezza di H + L bit e quindi
le maschere dei sottoblocchi sono esattamente le stesse.
Il subnetting statico non è una tecnica ottimale a causa del vincolo che tutti i sottoblocchi devono essere delle stesse
dimensioni. Per determinare la dimensione dei sottoblocchi bisogna stabilire la lunghezza di Sub-id e dell’Host-id in
modo tale da soddisfare la richiesta della sottorete più grande.
Il subnetting con maschera a lunghezza variabile permette di minimizzare il numero di indirizzi IP sprecati.
Risolvere un problema di indirizzamento vuol dire capire se sia possibile a partire da un blocco, identificare dei
sottoblocchi da assegnare alle sottoreti tali che ciascuno contenga un numero di indirizzi che soddisfi le esigenze di
quella sottorete; bisogna poi determinare le dimensioni e i prefissi dei sottoblocchi (determinare le lunghezze delle
Sub-id(i), ovvero le Li (i=1,...,M).
Dati:
M : numero di sottoreti
N i: numero di indirizzi IP di cui ha bisogno la sottorete i-esima,i=1 , ..., M
H : lunghezza in bit del prefisso del blocco (Net-id)
- H = 8, blocco di classe A
- H = 16, blocco di classe B
- H = 24, blocco di classe C
Problema:
1. Determinare se l’indirizzamento sia possibile
2. Determinare Li(i=1 , ..., M )
3. Determinare i prefissi Net-id.Sub-id(i) dei sottoblocchi Sbi assegnati alle sottoreti #i (
i=1 , ..., M ). Ciascun prefisso è rappresentabile dalla coppia di parole a 32 bit
( Ind( Sbi), Mas( Sbi) )
Un sottoblocco di indirizzi ha complessivamente 2 P indirizzi, tuttavia, due di questi indirizzi IP sono riservati (Host-id
i
costituita da tutti bit pari a 1 o a 0). Quindi, gli indirizzi assegnabili alle sottoreti sono 2 P −2.
i
1. Si calcola il numero di IP di cui ciascuna sottorete ha bisogno, ovvero la lunghezza dell’Host-id di ogni
sottorete:
Pi
Ovvero, determinare: Pi ,min tc:2 ≥ N i +2 ∀ i=1 , ... , M Pi=log2 N i +2
Si costruisce un albero binario. La radice dell’albero rappresenta il blocco originario e ha come prefisso il
Net-id, i nodi dell’albero rappresentano i sottoblocchi. L’etichetta di un nodo corrisponde al prefisso del
sottoblocco. I nodi figlio sx e figlio dx rappresentano due sottoblocchi il cui prefisso è pari al prefisso del
padre con l’aggiunta di un bit pari a 0 (→ Net Id.0 - sx) e pari a 1 (→Net Id.1 - dx). Per determinare i prefissi
dei successivi sottoblocchi si applica la procedura in modo ricorsivo finché non si raggiunge una lunghezza
del prefisso pari a quella calcolata precedentemente. La dimensione del sottoblocco nodo figlio è esattamente
la metà di quella del sottoblocco nodo padre. Di conseguenza, la somma del numero di indirizzi assegnati ai
nodi figli è pari al numero di indirizzi del nodo padre. Facendo variare i valori del campo Host-id degli
indirizzi IP dei nodi figli si ottengono tutti e soli gli indirizzi IP del nodo padre: l’unione dei sottoblocchi figli
costituisce il sottoblocco padre. I nodi figli non hanno indirizzi in comune. Per determinare un prefisso di
lunghezza pari a H + Li, bisogna prendere uno dei nodi in corrispondenza dell’Li-esimo livello dell’albero.
Tecnica CIDR
Verso la metà degli anni 90 si stavano esaurendo gli IP: erano stati impegnati il 100% degli indirizzi di classe A, il 36
% degli indirizzi di classe C e il 61,95 % degli indirizzi di classe B. Si prevedeva che in poco tempo sarebbero stati
esauriti anche i blocchi di classe B. Il problema fu risolto con l’introduzione della tecnica di indirizzamento CIDR
(Classless Inter Domain Routing) o tecnica di Supernetting.
Internet è una rete in area geografica mondiale organizzata in domini gestiti da un’unica organizzazione. I domini
sono chiamati Autonomous System (AS), ovvero un insieme di sottoreti, di router e di host interconnessi fra loro e
gestiti da un unico ente amministrativo o da uno stesso operatore di rete. I domini sono connessi tra loro mediante i
router.
L’organizzazione gerarchica aveva permesso di semplificare molto l’operazione di instradamento assegnando un
blocchi di indirizzi ad ogni sottorete. Successivamente, verso la metà degli anni 80, per evitare uno spreco di indirizzi
IP, si pensò di assegnare un unico blocco di indirizzi di dimensione opportuna (quasi sempre blocchi di classe B)
all’intero dominio e di assegnare un sottoblocco ad ogni sottorete.
La tecnica di Supernetting permette di superare l’indirizzamento per classi, ovvero il vincolo di assegnare un blocco
di una certa classe ad un dominio, e permette di assegnare ad un dominio un insieme di blocchi con prefissi
consecutivi di dimensioni più piccole. L’insieme dei blocchi di un dominio costituisce un macroblocco di indirizzi
e tutti gli indirizzi del macroblocco hanno lo stesso prefisso.
Si può quindi pensare di assegnare invece di un blocco di classe B un certo numero di blocchi di classe C con dei
prefissi consecutivi.
Alla fine degli anni 90 vennero riassegnati gli indirizzi IP dei blocchi di
classe C alle varie regioni geografiche, in modo tale che fossero
consecutivi. Tutti gli indirizzi assegnati a una certa zona geografica sono
rappresentabili mediante un unico prefisso di 7 bit.
Instradamento diretto
Il router estrae l’indirizzo IP dal datagramma dal campo
Destination IP Address, consulta la tabella di instradamento e
capisce verso quale interfaccia inoltrarlo. Per consegnare il
datagramma IP il router attuare tutti i meccanismi funzionali
propri della sottorete: deve imbustare l’(IP)-PDU in una (LLC)-
PDU, imbustata a sua volta in una (MAC)-PDU in cui viene
inserito l’indirizzo MAC del terminale di destinazione. Quindi
trasmette la trama MAC. L’host di destinazione riceve il
datagramma, estrae la (MAC)-PDU ottenendo l’(LLC)-PDU e
infine l’(IP)-PDU.
Quindi, il router deve conoscere l’indirizzo fisico del terminale, ovvero l’indirizzo del terminale nella specifica rete
di TLC (es: se è una rete LAN, l’indirizzo fisico coincide con l’indirizzo MAC di 48 bit).
L’indirizzo MAC si ottiene tramite il protocollo ARP (Address Resolution Protocol), esso permette di determinare
l’inidrizzo fisico di un elemento di rete presente nella sottorete conoscendone l’indirizzo IP. Per ogni sottorete
viene definito un particolare protocollo ARP. Se il router non conosce l’indirizzo MAC dell’host di destinazione invia
una (MAC)-PDU Broadcast nella sottorete, in cui indica a tutti i terminali che è alla ricerca dell’indirizzo MAC del
terminale a cui corrisponde quel particolare indirizzo IP. L’host di destinazione riceverà la trama e risponderà
fornendo al router il suo indirizzo MAC. L’informazione viene riportata nella tabella ARP, in cui viene memorizzata
la corrispondenza tra indirizzo IP e indirizzo MAC.
Router: (IP)-PDU (LLC)- PDU (MAC)-PDU _ ARP: Indirizzo Mac dell’host
Host di destinazione: (MAC)-PDU (LLC)- PDU IP)-PDU
Instradamento indiretto
Il router deve inoltrare il datagramma a un router
intermedio, affinché il datagramma sia consegnato al
router intermedio occorre attuare tutti i meccanismi
funzionali propri della sottorete che collega i due router.
Le tabelle possono essere impostate via software oppure possono essere determinate in maniera automatica tramite dei
protocolli di Routing che prevedono lo scambio di informazioni di controllo tra i router.
Quando un router deve effettuare un
instradamento esamina il campo Destination IP
Address del datagramma IP e controlla a quale
sottoblocco/ blocco/ macroblocco l’indirizzo
appartenga. È presente una colonna aggiuntiva,
Next Hop Router, grazie al cui contenuto il
router capisce se l’instradamento sia di tipo
diretto o indiretto. Se l’instradamento è diretto
nel campo Next Hop Router è presente
l’indirizzo 0.0.0.0; altrimenti l’instradamento è
indiretto e viene riportato l’indirizzo IP del
router intermedio (nella sottorete comune).
Se un indirizzo IP non appartiene a nessuno dei
sottoblocchi/blocchi/macroblocchi presenti
nella tabella di instradamento, si sceglie come riga di instradamento la riga di default, che ha indirizzo e maschera
costituiti dalle parole a 32 bit 0.0.0.0; nel campo Next Hop Router è inserito l’indirizzo del default router (è il router
verso cui viene inviato il traffico diretto ad una destinazione
non presente nella tabella di routing).
Anche gli host hanno tabelle di routing seppur con poche righe di
instradamento. La tabella permette di specificare con quale interfaccia accedere
ad internet, nel caso in cui sia collegato a più di una sottorete; permette di
specificare se l’instradamento sia diretto o indiretto e permette di indicare un
default router.
Sottosistema di Trasporto
Il sottosistema di trasporto è presente solo nei terminali e indipendentemente dal servizio di strato che offre svolge
sempre la c.f. di indirizzamento di applicativo. L’UI del sottosistema è chiamata (SS-T)-PDU, suddivisa in (SS-T)-
PCI e (SS-T)- SDU. Lo strato di trasporto eroga due diversi servizi di strato:
Servizio di strato UDP: è un servizio senza connessione e prevede l’esecuzione delle c.f. d’Indirizzamento di
Applicativo e di Rivelazione d’Errore.
Servizio di strato TCP: è un servizio con connessione che prevede
l’esecuzione delle c.f. di Indirizzamento Applicativo, di Controllo d’Errore
(rivelazione e recupero d’errore), di Risequenziamento, di Controllo di Flusso e
di Controllo di Congestione.
Il servizio TCP offre un servizio di strato con connessione. Le c.f. eseguite sono:
Indirizzamento Applicativo
Controllo d’Errore
Controllo di Flusso
Risequenziamento
Controllo di Congestione
La PDU, chiamata segmento TCP, si compone di due
parti: la SDU, il campo Data, che riporta i dati generati
dall’applicazione, e la parte PCI con i campi di controllo.
1. Una delle applicazioni invia la richiesta di inizio della comunicazione: invio del SYN segment
- Nel campo Code Bits il bit di SYN è settato al valore 1
- Nel campo Sequence Number è riportato il numero di sequenza a partire dal quale l’entità inizierà a
numerare i propri byte (nell’esempio con numero di sequenza x)
2. Accettazione dell’inizio della comunicazione: invio del SYN segment
- Nel campo Code Bits il bit di SYN è settato al valore 1
- Nel campo Code Bits il bit di ACK è settato al valore 1
- Il campo Aknowledgment Number trasporta il valore x+1 per comunicare all’altro host che ha acquisito
che il numero da cui inizierà a numerare i segmenti è il valore x
- Nel campo Sequence Number è riportato il valore y
3. Riscontro del messaggio: invio dell’ACK segment
- Nel campo Code Bits il bit di ACK è settato al valore 1
- Il campo Aknowledgment Number trasporta il valore y+1
Fase di abbattimento
Nella fase di abbattimento
le due vie di comunicazione vengono chiuse in modo
indipendente: quando una delle entità ha finito di trasmettere i
suoi byte manda dei segmenti di controllo all’altra in cui la
avvisa che ha concluso la trasmissione; quando anche l’altra avrà
terminato di mandare i propri dati chiuderà la sua connessione
sempre inviando un segmento di controllo.
L’altro host quando avrà anche lui terminato la comunicazione manderà a sua volta il segmento di FIN, inserendo nel
campo Sequence Number l’ultimo byte trasferito nella fase di trasferimento (y); l’host risponderà con un segmento di
ACK con bit di ACK pari a 1 e con valore y + 1 nel campo Aknowledgment Number.
Risequenziamento
La c.f. di risequenziamento consente all’entità dello strato TCP dell’host di destinazione di riordinare i segmenti
nel caso in cui l’ordine sia stato alterato dalla rete. Il campo Sequence Number riporta la numerazione dei segmenti
nell’ambito di una stessa connessione TCP, viene riportato il numero di sequenza del primo byte trasportato nel campo
Data.
Controllo d’errore
Il controllo d’errore avviene in maniera simile a quello del servizio di strato LLC di tipo 2, nell’ambito della rete
LAN. Per svolgere la funzionalità si sfruttano i campi Sequence Number e Ackowledgment Number, entrambi di 32
bit.
In presenza di un segmento TCP caratterizzato da errore si innesca un meccanismo di riemissione da parte dell’entità
emittente. La c.f. si basa su:
Numerazione dei segmenti: vengono numerati i byte della comunicazione e il campo Sequence Number riporta
il numero di sequenza del primo byte della comunicazione trasportato nel campo Data
Riscontro dei segmenti: il destinatario dei segmenti provvede a riscontrare, anche in modo cumulativo, la
ricezione dei segmenti con un ACK. Il riscontro è indicato nel campo Aknowledgment Number di 32 bit:
quando il destinatario riceve correttamente tutti i byte che hanno un numero di sequenza a x setta il campo al
valore x+1
Utilizzo di un timer
Rivelazione d’Errore
L’host di destinazione applicando una certa funzione valuta il codice di 16 bit inserito dall’emittente nel campo
Checksum. La funzione ha come argomento una stringa di bit costituita da tutti i bit presenti nel segmento TCP
(sia Data sia nei campi di controllo), la stringa comprende anche alcuni bit presenti nell’intestazione del datagramma
IP, contro il principio di stratificazione. Il destinatario valuta la stessa funzione sulla stringa di bit ricevuta e
confronta il suo risultato con il codice presente nel campo Checksum. Se corrispondono ipotizza che non sono
avvenuti errori e riscontra il messaggio, altrimenti scarta il segmento TCP.
Recupero d’Errore
Viene introdotto l’utilizzo di un timer nei riscontri per evitare situazioni di stallo, che possono verificarsi quando dei
segmenti TCP vengono persi dalla rete o vengono scartati dal destinatario:
Si consideri il k-esimo segmento TCP inviato: nell’istante in cui viene inviato viene inizializzato un timer ad un valore
chiamato RTO (Retrasmission Time Out), alla scadenza dell’RTO se non è stato ricevuto un riscontro l’entità
emittente provvede a ritrasmettere il segmento k-esimo. L’RTO deve essere dimensionato in modo opportuno: il
suo valore dipende dal segmento k-esimo ed è calcolato in relazione all’RTT (Round Trip Time), ovvero “tempo di
andata e ritorno”. L’RTT è il tempo che intercorre dal momento in cui viene inviato un segmento a quello in cui
viene ricevuto il suo riscontro (ipotizzando che non sia possibile fare riscontri cumulativi). L’RTT di un segmento
non è quantità fissa, ma varia tra i segmenti di una stessa comunicazione perché include i ritardi di trasferimento della
rete, i quali possono variare essendo la multiplazione dinamica in Internet con contese di utilizzazione con ritardi
variabili.
L’RTO deve essere dimensionato in modo opportuno: se si dimensiona l’RTO troppo piccolo rispetto l’RTT si rischia
di non dare tempo al segmento e al suo riscontro di propagarsi; se si dimensiona l’RTO troppo grande rispetto l’RTT
si rischia di ritardare eccessivamente la trasmissione in presenza di un errore sul segmento originario.
Una procedura per calcolare l’RTO del k-esimo segmento prevede di fissarlo al valore RTO(k)=βSRTT (k ) ( β=2),
dove SRTT ( k ) è una stima dell’ RTT ( k ) . La stima si basa sugli RTT dei segmenti precedenti, ad esempio misurando
per la stima del segmento k-esimo gli RTT (1) , RTT (2) , ..., RTT (k−1).
PROCEDURA DI STIMA:
La media degli RTT non viene scelta come stima perché essa dà lo stesso peso agli RTT di tutti i segmenti, ma le
informazioni più affidabili sullo stato della rete riguardano gli ultimi segmenti inviati. Sul primo segmento non
possono essere effettuate stime dell’RTT. La seguente procedura permette di dare maggior peso agli RTT dei
segmenti inviati per ultimi: (α = 0, 9)
La procedura funziona quando non avvengono ritrasmissioni a causa di eventuali scadenze di timer. Quando viene
ritrasmesso un segmento, non si possono valutare RTT affidabili perché c’è un’ambiguità nell’interpretare a quale
segmento appartenga l’ACK ricevuto (quello originario o quello ritrasmesso). Potrebbero essersi verificati due eventi:
- Il segmento è stato perso, quindi l’ACK è relativo al segmento ritrasmesso.
- Il segmento ha subito un ritardo maggiore di quello che ci si aspettava, ovvero maggiore dell’RTO stimato
L’algoritmo di Karn stabilisce come aggiornare l’RTO quando si verificano delle ritrasmissioni. Per i segmenti
ritrasmessi il valore dell’RTO è aggiornato secondo la formula:
RT O i+1 ( k )=q × RT Oi (k )
dove l’ RT Oi+1 ( k ) rappresenta l’RTO associato alla i+1-esima copia di un segmento ritrasmesso. Ogni volta che il
segmento viene ritrasmesso si aumenta di q volte l’RTO della copia trasmessa precedentemente.
Controllo di Congestione
La c.f. di Controllo di Congestione ha lo scopo di regolare il ritmo binario di emissione in accordo alle
potenzialità della rete, in particolare dei router. Si basa sull’applicazione di meccanismi di tipo proattivo, ovvero di
tipo preventivo in quanto i terminali devono far si che i router non raggiungano uno stato di congestione, e di tipo
reattivo: qualora un router dovesse essere in uno stato di congestione l’host abbassa il ritmo di emissione.
Controllo di Flusso
La c.f. di controllo di flusso ha lo scopo di limitare il ritmo binario d’emissione dell’emittente in accordo alle
potenzialità di chi riceve. Un host emittente è vincolato ad emettere un numero massimo di byte, tale numero è
stabilito dall’host destinatario che attua la c.f. di controllo di flusso.
Il controllo di flusso viene attuato con il riscontro dei segmenti TCP ricevuti: l’host ricevente riscontra i byte ricevuti e
fornisce all’entità emittente l’autorizzazione a trasmetterne ulteriori. Per far ciò sfrutta il campo Window di 16 bit, che
riporta il numero massimo di byte che l’emittente può inviare.
Se il campo Aknowledgment Number = A e Window = W, l’host emittente è autorizzato a trasmettere tutti i byte con
numero di sequenza contenuto nell’intervallo [A, A + W − 1]. L’insieme dei numeri di sequenza dei byte che
l’emittente è autorizzato a trasmettere è chiamato finestra; W è detta dimensione della finestra. Maggiore è la
dimensione della finestra e più alto sarà il ritmo binario di emissione dell’host emittente. Il valore iniziale della
dimensione della finestra viene contrattato all’inizio nella fase di instaurazione della connessione TCP (per entrambe
le direzioni si stabilisce una dimensione di finestra).
Nel corso di una comunicazione il valore di W può cambiare: se il ricevente sta esaurendo la capacità di elaborazione
può abbassare il valore di W e quindi diminuire il ritmo binario d’emissione dell’emittente; viceversa, quando ha
maggiori capacità di elaborazione può incrementare W, aumentando il ritmo binario d’emissione dell’emittente.
Esempio:
Sul lato sinistro si trova l’host emittente e sul destro quello di destinazione. È stata instaurata una connessione TCP in cui l’host
emittente inizia a numerare i byte a partire del numero di sequenza 1001 ed è stata concordata una dimensione di finestra iniziale
pari a 1400 ottetti (W = 1400); quindi la finestra è pari all’intervallo [1001 ; 2400]. Quando l’entità emittente trasmette un
segmento non deve emettere per forza tutti i byte della finestra.
Nell’esempio l’emittente invia due segmenti di 200 (con SN = 1001) e 400 byte (con SN = 1201) e si ferma; quindi, sono state
utilizzate le autorizzazioni che vanno da 1001 a 1600. Successivamente riprende l’emissione, inviando due segmenti entrambi di
200 byte (SN [1601 ; 1800] e SN [1801 ; 2000] ); quindi, sono state utilizzate le autorizzazioni con numeri di sequenza da
1001 a 2000. L’emittente ha a disposizione ancora 400 autorizzazioni.
L’host ricevente riceve i primi due segmenti (da 1001 a 1600) e li riscontra in modo cumulativo inserendo AN = 1601. Inoltre,
concede delle ulteriori autorizzazioni con una dimensione di finestra pari a 1000. Se W = 1000, l’host emittente è autorizzato a
trasmettere tutti i byte che vanno da A = 1601 a A+W −1 = 2600 (l’host emittente ottiene ulteriori 200 autorizzazioni perché
l’estremo superiore della finestra si sposta da 2400 a 2600). Quindi l’host emittente ha a in totale 600 autorizzazioni non utilizzate,
con numeri di sequenza da 2001 a 2600.
L’host emittente manda 3 segmenti di 200 byte (con SN = 2001, 2201, 2401) e l’host di destinazione li riscontra con AN = 2601 e
con W = 1400, che porterà ad avere 1400 autorizzazioni che andranno da 2601 a 4000. (1400 ottetti).
{ {
8W 8W R × RTT 8W R × RTT
, per < R →W < ,W <
P ()
b
s
= RTT RTT
R , per W ≥
R × RTT
8 P
→ S= = R × RTT
R
1, W ≥
R × RTT
8
8 8
La portata normalizzata di una connessione dipende dalla dimensione della finestra, dal Round Trip Time e dal bit rate
(R). Per valori di finestra abbastanza bassi, la portata aumenta all’aumentare della finestra in modo lineare, quindi, in
queste circostanze viene attuato un controllo di flusso. Quando la portata raggiunge il valore della capacità R
(W = 65535 byte valore massimo della dimensione di finestra) l’emissione avviene alla velocità massima e non viene
attuato un controllo di flusso: