Passa al contenuto principale

1. Introduzione

1.1. Motivazione

Il Protocollo Internet (Internet Protocol) è progettato per l'uso in sistemi interconnessi di reti di comunicazione informatica a commutazione di pacchetto. Un tale sistema è stato chiamato "catenet" [1]. Il protocollo internet fornisce la trasmissione di blocchi di dati chiamati datagrammi (datagrams) dalle sorgenti alle destinazioni, dove le sorgenti e le destinazioni sono host identificati da indirizzi di lunghezza fissa. Il protocollo internet fornisce anche la frammentazione (fragmentation) e il riassemblaggio (reassembly) dei datagrammi lunghi, se necessario, per la trasmissione attraverso reti a "pacchetti piccoli".

Obiettivi di progettazione fondamentali

1. Interconnessione

Rete A ←→ Gateway ←→ Rete B ←→ Gateway ←→ Rete C
↓ ↓ ↓
Host 1 Host 2 Host 3

IP consente l'interconnessione di diversi tipi di reti

2. Consegna di datagrammi

  • Servizio senza connessione (connectionless)
  • Ogni datagramma instradato indipendentemente
  • Nessuna garanzia di consegna, ordine o protezione contro la duplicazione

3. Indirizzamento

  • Indirizzi di lunghezza fissa a 32 bit
  • Identificano univocamente ogni host su internet
  • Struttura gerarchica (rete + host)

4. Frammentazione e riassemblaggio

Datagramma grande (1500 byte)
↓ Frammentazione
Frammento 1 (500 byte) + Frammento 2 (500 byte) + Frammento 3 (500 byte)
↓ Trasmissione attraverso rete a pacchetti piccoli
↓ Riassemblaggio
Datagramma grande (1500 byte)

1.2. Ambito

Il protocollo internet è specificamente limitato nell'ambito per fornire le funzioni necessarie per consegnare un pacchetto di bit (un datagramma internet) da una sorgente a una destinazione su un sistema interconnesso di reti. Non esistono meccanismi per aumentare l'affidabilità dei dati end-to-end, il controllo di flusso, la sequenziazione o altri servizi comunemente trovati nei protocolli host-to-host. Il protocollo internet può (can) sfruttare i servizi delle sue reti di supporto per fornire vari tipi e qualità di servizio.

Cosa IP NON fornisce

|| Funzione | IP fornisce | Fornito da | ||----------|-------------|------------| || Consegna affidabile | ❌ No | TCP | || Controllo di flusso | ❌ No | TCP | || Sequenziamento | ❌ No | TCP | || Recupero errori | ❌ No | TCP | || Gestione connessioni | ❌ No | TCP | || Controllo congestione | ❌ No | TCP |

Cosa IP fornisce

|| Funzione | Descrizione | ||----------|-------------| || ✅ Indirizzamento | Indirizzi IP a 32 bit | || ✅ Instradamento | Inoltro datagrammi | || ✅ Frammentazione/Riassemblaggio | Adattamento a diversi MTU | || ✅ Tempo di vita | TTL previene loop | || ✅ Tipo di servizio | Campo ToS | || ✅ Checksum dell'intestazione | Rilevamento errori intestazione |

Filosofia di progettazione

Principio end-to-end:
- Mantenere lo strato IP semplice
- Funzioni complesse implementate agli endpoint
- Il nucleo della rete esegue solo l'inoltro

Vantaggi:
✅ Scalabilità della rete
✅ Supporto di più protocolli di livello superiore
✅ Isolamento del dominio di guasto

1.3. Interfacce

Questo protocollo è chiamato da protocolli host-to-host in un ambiente internet. Questo protocollo chiama protocolli di rete locale per trasportare il datagramma internet al prossimo gateway o host di destinazione.

Interfaccia di livello superiore

Esempio: TCP chiama IP

Il modulo TCP chiamerebbe il modulo internet per prendere un segmento TCP 
(incluso l'intestazione TCP e i dati utente) come porzione di dati di un
datagramma internet. Il modulo TCP fornirebbe gli indirizzi e altri
parametri nell'intestazione internet al modulo internet come argomenti
della chiamata.

Flusso dell'interfaccia:

Livello Applicazione
↓ Dati
Livello Trasporto (TCP/UDP)
↓ Segmento TCP/datagramma UDP
Livello Rete (IP) ← Aggiunta intestazione IP
↓ Datagramma IP
Livello Collegamento dati (Ethernet/etc)
↓ Frame
Livello Fisico

Interfaccia di livello inferiore

Esempio: IP chiama la rete locale

Nel caso di ARPANET, per esempio, il modulo internet chiamerebbe un 
modulo di rete locale che aggiungerebbe il leader 1822 [2] al datagramma
internet creando un messaggio ARPANET da trasmettere all'IMP (Interface
Message Processor). L'indirizzo ARPANET sarebbe derivato dall'indirizzo
internet dall'interfaccia di rete locale.

Esempio di protocollo 1822:

+------------------+------------------+
|| Leader 1822 | Datagramma IP |
|| (specifico ARPANET) | (formato generico) |
+------------------+------------------+

Parametri dell'interfaccia

Interfaccia di invio IP:

send_ip_datagram(
source_address, // Indirizzo IP sorgente
dest_address, // Indirizzo IP destinazione
protocol, // Protocollo livello superiore (TCP=6, UDP=17)
tos, // Tipo di servizio
ttl, // Tempo di vita
data, // Dati
length, // Lunghezza dati
options // Opzioni IP (opzionale)
);

Interfaccia di ricezione IP:

receive_ip_datagram(
source_address, // Indirizzo IP sorgente
dest_address, // Indirizzo IP destinazione
protocol, // Protocollo livello superiore
data, // Dati
length // Lunghezza dati
);

1.4. Operazione

Il protocollo internet implementa due funzioni di base: indirizzamento e frammentazione.

Indirizzamento

I moduli internet utilizzano gli indirizzi trasportati nell'intestazione internet per trasmettere i datagrammi internet verso le loro destinazioni. La selezione di un percorso per la trasmissione è chiamata instradamento (routing).

Struttura dell'indirizzo:

Indirizzo IP a 32 bit = Porzione rete + Porzione host

Classe A: [0][rete 7 bit][host 24 bit]
Classe B: [10][rete 14 bit][host 16 bit]
Classe C: [110][rete 21 bit][host 8 bit]

Decisione di instradamento:

def route_datagram(dest_ip):
if dest_ip in local_network:
# Consegna diretta
send_to_host(dest_ip)
else:
# Inoltra al gateway
gateway = lookup_routing_table(dest_ip)
send_to_gateway(gateway, datagram)

Frammentazione

I moduli internet utilizzano campi nell'intestazione internet per frammentare e riassemblare i datagrammi internet quando necessario per la trasmissione attraverso reti a "pacchetti piccoli".

Processo di frammentazione:

Datagramma originale (MTU=1500):
+--------+------------------------+
|| Intestaz IP | 1480 byte dati |
+--------+------------------------+

Dopo frammentazione attraverso rete MTU=500:

Frammento 1:
+--------+--------+
|| Intestaz IP | 480 byte | MF=1, Offset=0
+--------+--------+

Frammento 2:
+--------+--------+
|| Intestaz IP | 480 byte | MF=1, Offset=60
+--------+--------+

Frammento 3:
+--------+--------+
|| Intestaz IP | 520 byte | MF=0, Offset=120
+--------+--------+

Campi di frammentazione:

  • Identification: Identifica il datagramma originale
  • Flags:
    • DF (Don't Fragment): Non frammentare
    • MF (More Fragments): Altri frammenti seguono
  • Fragment Offset: Posizione del frammento nel datagramma originale (unità di 8 byte)

Modello di operazione

Il modello di operazione è che un modulo internet risiede in ogni host impegnato nella comunicazione internet e in ogni gateway che interconnette le reti. Questi moduli condividono regole comuni per interpretare i campi di indirizzo e per frammentare e assemblare i datagrammi internet. Inoltre, questi moduli (specialmente nei gateway) hanno procedure per prendere decisioni di instradamento e altre funzioni.

Il protocollo internet tratta ogni datagramma internet come un'entità indipendente non correlata a qualsiasi altro datagramma internet. Non ci sono connessioni o circuiti logici (virtuali o altrimenti).

Mittente:
1. Ricevere dati dal livello superiore
2. Aggiungere intestazione IP
3. Consultare tabella di instradamento
4. Frammentare se necessario
5. Passare alla rete locale

Gateway intermedio:
1. Ricevere datagramma IP
2. Verificare indirizzo di destinazione
3. Consultare tabella di instradamento
4. Decrementare TTL
5. Frammentare se necessario
6. Inoltrare al prossimo hop

Ricevente:
1. Ricevere datagramma IP
2. Verificare indirizzo destinazione (è per me?)
3. Riassemblare se frammentato
4. Passare al protocollo di livello superiore

Meccanismi chiave

Il protocollo internet utilizza quattro meccanismi chiave nel fornire il suo servizio: Tipo di servizio, Tempo di vita, Opzioni e Checksum dell'intestazione.

Tipo di servizio (Type of Service)

  • Utilizzato per indicare la qualità del servizio desiderata
  • Insieme astratto o generalizzato di parametri
  • Utilizzato dai gateway per selezionare i parametri di trasmissione
  • Guida le decisioni di instradamento e selezione della rete

Tempo di vita (Time to Live)

  • Limite superiore sulla durata di vita del datagramma
  • Impostato dal mittente, decrementato ad ogni hop
  • Il datagramma viene distrutto quando il TTL raggiunge zero
  • Può (can) essere considerato come un limite di tempo di autodistruzione

Opzioni

  • Funzioni di controllo necessarie in alcune situazioni
  • Non necessarie per la maggior parte delle comunicazioni comuni
  • Includono disposizioni per timestamp, sicurezza e instradamento speciale

Checksum dell'intestazione (Header Checksum)

  • Verifica che l'intestazione sia stata trasmessa correttamente
  • I dati possono (may) contenere errori (non verificati da IP)
  • Se il checksum fallisce, il datagramma viene scartato immediatamente

Modello di affidabilità

Il protocollo internet non fornisce una struttura di comunicazione affidabile. Non ci sono conferme né end-to-end né hop-by-hop. Non c'è controllo degli errori per i dati, solo un checksum dell'intestazione. Non ci sono ritrasmissioni. Non c'è controllo di flusso.

Gli errori rilevati possono (may) essere segnalati tramite il Protocollo di messaggi di controllo Internet (Internet Control Message Protocol, ICMP) [3] che è implementato nel modulo del protocollo internet.


Riepilogo dei concetti chiave

Datagramma

  • Pacchetto indipendente
  • Contiene informazioni di indirizzamento complete
  • Può (can) essere instradato indipendentemente

Senza connessione

  • Nessuna creazione di connessione richiesta
  • Ogni datagramma gestito indipendentemente
  • Semplice ed efficiente

Best effort

  • Nessuna garanzia di consegna
  • Nessuna garanzia di ordine
  • Nessuna garanzia contro la duplicazione
  • L'affidabilità è gestita dai protocolli di livello superiore

Filosofia di progettazione: Il protocollo IP segue la filosofia di progettazione "rete semplice, endpoint intelligenti", spostando la complessità ai bordi della rete e mantenendo il nucleo della rete semplice e scalabile. Questa progettazione consente all'internet di supportare un'ampia varietà di applicazioni e servizi.