Passa al contenuto principale

3. Specifica

Questo capitolo fornisce la specifica completa del Protocollo Internet (Internet Protocol, IP), incluso il formato dell'intestazione, le descrizioni dettagliate dei campi, le procedure operative e le definizioni delle interfacce.

3.1. Formato dell'intestazione Internet

Un riepilogo del contenuto dell'intestazione internet segue:

 0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
||Version| IHL |Type of Service| Total Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|| Identification |Flags| Fragment Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|| Time to Live | Protocol | Header Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|| Source Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|| Destination Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Esempio di intestazione del datagramma Internet (Figura 4)

Si noti che ogni segno di spunta rappresenta una posizione di bit.

Descrizioni dei campi

Version (Versione): 4 bit

Il campo Version indica il formato dell'intestazione internet. Questo documento descrive la versione 4.

IHL (Internet Header Length, Lunghezza intestazione Internet): 4 bit

La lunghezza dell'intestazione Internet è la lunghezza dell'intestazione internet in parole da 32 bit, e quindi punta all'inizio dei dati. Si noti che il valore minimo per un'intestazione corretta è 5.

Type of Service (Tipo di servizio): 8 bit

Il tipo di servizio fornisce un'indicazione dei parametri astratti della qualità del servizio desiderata. Questi parametri devono (are to) essere utilizzati per guidare la selezione dei parametri di servizio effettivi durante la trasmissione di un datagramma attraverso una particolare rete.

Bit 0-2:  Precedenza
Bit 3: 0 = Ritardo normale, 1 = Basso ritardo
Bit 4: 0 = Throughput normale, 1 = Alto throughput
Bit 5: 0 = Affidabilità normale, 1 = Alta affidabilità
Bit 6-7: Riservato per uso futuro

0 1 2 3 4 5 6 7
+-----+-----+-----+-----+-----+-----+-----+-----+
| | | | | | |
| PRECEDENZA | D | T | R | 0 | 0 |
| | | | | | |
+-----+-----+-----+-----+-----+-----+-----+-----+

Valori di precedenza:

  • 111 - Network Control
  • 110 - Internetwork Control
  • 101 - CRITIC/ECP
  • 100 - Flash Override
  • 011 - Flash
  • 010 - Immediate
  • 001 - Priority
  • 000 - Routine

Total Length (Lunghezza totale): 16 bit

La lunghezza totale è la lunghezza del datagramma, misurata in ottetti, inclusa l'intestazione internet e i dati. Questo campo consente una lunghezza del datagramma fino a 65.535 ottetti. Tutti gli host devono (must) essere preparati ad accettare datagrammi fino a 576 ottetti. Si raccomanda (recommended) che gli host inviino datagrammi più grandi di 576 ottetti solo se hanno la garanzia che la destinazione sia preparata ad accettare i datagrammi più grandi.

Identification (Identificazione): 16 bit

Un valore di identificazione assegnato dal mittente per aiutare nell'assemblaggio dei frammenti di un datagramma.

Flags (Flag): 3 bit

Vari flag di controllo.

  • Bit 0: riservato, deve (must) essere zero
  • Bit 1: (DF) 0 = Può frammentare (May Fragment), 1 = Non frammentare (Don't Fragment)
  • Bit 2: (MF) 0 = Ultimo frammento, 1 = Altri frammenti

Fragment Offset (Offset del frammento): 13 bit

Questo campo indica dove nel datagramma questo frammento appartiene. L'offset del frammento è misurato in unità di 8 ottetti (64 bit). Il primo frammento ha un offset di zero.

Time to Live (Tempo di vita): 8 bit

Questo campo indica il tempo massimo che il datagramma è autorizzato a rimanere nel sistema internet. Se questo campo contiene il valore zero, allora il datagramma deve (must) essere distrutto. Questo campo viene modificato nell'elaborazione dell'intestazione internet. Il tempo è misurato in unità di secondi, ma poiché ogni modulo che elabora un datagramma deve (must) decrementare il TTL di almeno uno anche se elabora il datagramma in meno di un secondo, il TTL deve (must) essere considerato solo come un limite superiore al tempo che un datagramma può (may) esistere.

Protocol (Protocollo): 8 bit

Questo campo indica il protocollo di livello successivo utilizzato nella porzione di dati del datagramma internet. I valori per vari protocolli sono specificati in "Assigned Numbers" [9].

Valori comuni:

  • 1 = ICMP
  • 6 = TCP
  • 17 = UDP

Header Checksum (Checksum dell'intestazione): 16 bit

Un checksum solo sull'intestazione. Poiché alcuni campi dell'intestazione cambiano (ad es., tempo di vita), questo viene ricalcolato e verificato in ogni punto in cui viene elaborata l'intestazione internet.

L'algoritmo del checksum è: Il campo checksum è il complemento a uno a 16 bit della somma in complemento a uno di tutte le parole a 16 bit nell'intestazione. Ai fini del calcolo del checksum, il valore del campo checksum è zero.

Source Address (Indirizzo sorgente): 32 bit

L'indirizzo sorgente.

Destination Address (Indirizzo di destinazione): 32 bit

L'indirizzo di destinazione.

Options (Opzioni): variabile

Le opzioni possono (may) apparire o non apparire nei datagrammi. Devono (must) essere implementate da tutti i moduli IP (host e gateway). Ciò che è opzionale è la loro trasmissione in un particolare datagramma, non la loro implementazione.


3.2. Discussione

Indirizzamento

Per fornire flessibilità nell'assegnazione di indirizzi alle reti e consentire un gran numero di reti da piccole a medie, l'interpretazione del campo indirizzo è codificata per specificare un piccolo numero di reti con un gran numero di host, un numero moderato di reti con un numero moderato di host, e un gran numero di reti con un piccolo numero di host.

Formati di indirizzo:

|| Bit di ordine superiore | Formato | Classe | ||------------------------|---------|--------| || 0 | 7 bit di rete, 24 bit di host | a | || 10 | 14 bit di rete, 16 bit di host | b | || 110 | 21 bit di rete, 8 bit di host | c | || 111 | escape alla modalità di indirizzamento estesa | - |

Frammentazione e riassemblaggio

Il campo di identificazione internet (ID) viene utilizzato insieme agli indirizzi sorgente e destinazione, e al campo protocollo, per identificare i frammenti di datagramma per il riassemblaggio.

Il bit di flag More Fragments (MF) viene impostato se il datagramma non è l'ultimo frammento. Il campo Fragment Offset identifica la posizione del frammento, relativa all'inizio del datagramma originale non frammentato. I frammenti vengono contati in unità di 8 ottetti.

Ogni modulo internet deve (must) essere in grado di inoltrare un datagramma di 68 ottetti senza ulteriore frammentazione. Questo perché un'intestazione internet può essere fino a 60 ottetti, e il frammento minimo è 8 ottetti.

Ogni destinazione internet deve (must) essere in grado di ricevere un datagramma di 576 ottetti sia in un pezzo unico che in frammenti da riassemblare.


3.3. Interfacce

La descrizione funzionale delle interfacce utente con IP è, nel migliore dei casi, fittizia, poiché ogni sistema operativo avrà funzionalità diverse. Tuttavia, tutti gli IP devono (must) fornire un certo insieme minimo di servizi per garantire che tutte le implementazioni IP possano (can) supportare la stessa gerarchia di protocolli.

Esempio di interfaccia di livello superiore

Le seguenti due chiamate di esempio soddisfano i requisiti per la comunicazione dall'utente al modulo del protocollo internet ("=>" significa restituisce):

SEND (INVIA)

SEND (src, dst, prot, TOS, TTL, BufPTR, len, Id, DF, opt => result)

dove:

  • src = indirizzo sorgente
  • dst = indirizzo destinazione
  • prot = protocollo
  • TOS = tipo di servizio
  • TTL = tempo di vita
  • BufPTR = puntatore buffer
  • len = lunghezza buffer
  • Id = Identificatore
  • DF = Non frammentare (Don't Fragment)
  • opt = dati opzione
  • result = risposta
    • OK = datagramma inviato correttamente
    • Error = errore negli argomenti o errore di rete locale

RECV (RICEVI)

RECV (BufPTR, prot, => result, src, dst, TOS, len, opt)

dove:

  • BufPTR = puntatore buffer
  • prot = protocollo
  • result = risposta
    • OK = datagramma ricevuto correttamente
    • Error = errore negli argomenti
  • len = lunghezza buffer
  • src = indirizzo sorgente
  • dst = indirizzo destinazione
  • TOS = tipo di servizio
  • opt = dati opzione

Questa specifica definisce il Protocollo Internet versione 4 (IPv4), che fornisce:

  • Consegna di datagrammi senza connessione
  • Servizio best-effort (nessuna garanzia di affidabilità)
  • Capacità di frammentazione e riassemblaggio
  • Indirizzamento per fino a 2^32 host
  • Instradamento attraverso reti interconnesse
  • Indicazione del tipo di servizio
  • Gestione del tempo di vita
  • Opzioni per gestione speciale

Il protocollo è progettato per essere semplice, scalabile e flessibile, consentendo all'Internet di supportare diverse applicazioni e tecnologie di rete.

Per i dettagli completi su tutte le opzioni IP, le procedure di frammentazione, gli algoritmi di riassemblaggio e i requisiti di implementazione, consultare il testo completo di RFC 791.


Nota: Questa è una versione condensata della Sezione 3 di RFC 791. Per la specifica completa inclusi i formati dettagliati delle opzioni, il pseudocodice di frammentazione/riassemblaggio e tutti i casi limite, consultare il documento ufficiale RFC 791.