IP

Da Hacknowledge.

L'IP (Internet Protocol) è un protocollo situato al livello di rete nello stack TCP/IP. Tale protocollo si occupa quindi di inserire negli header di un pacchetto proveniente dai livelli superiori gli indirizzi logici del mittente e del destinatario. Ogni host in una rete è quindi identificato a livello logico (non a livello fisico) da un indirizzo IP, ovvero un indirizzo logico univoco che in un certo momento identifica in modo non ambiguo qualsiasi host collegato in rete.

Indice

[modifica] Funzionamento del protocollo di rete

Quello che fa un router a livello di rete è, in sostanza, trasferire un pacchetto da un host all'altro noti l'IP sorgente e l'IP di destinazione. Le due funzioni principali di un router a livello di rete sono

  • inoltro (forwarding), ovvero il trasferimento di un pacchetto ricevuto da un router sul collegamento di uscita giusto
  • instradamento (routing), ovvero la determinazione tramite appositi algoritmi (routing algorithms) del percorso che i pacchetti dovranno seguire

Per l'inoltro dei pacchetti i router estraggono dall'header il valore che useranno poi come indice nella loro tabella di inoltro (forwarding table). Il risultato indica a quale interfaccia di rete dovrà essere diretto il pacchetto.

[modifica] Indirizzo IP

All'atto della connessione di un host alla rete, all'host viene assegnato dal router della rete un indirizzo logico che identifica univocamente quest'ultimo all'interno della rete stessa. O meglio, viene creato un accoppiamento tra l'indirizzo fisico della macchina, ovvero l'indirizzo della sua interfaccia di rete (indirizzo MAC) e un indirizzo logico (indirizzo IP) che viene assegnato all'host stesso. Il router e gli altri dispositivi nella rete dal momento in cui un host si collega sanno che a quel dato indirizzo fisico (MAC) da quel momento in poi è assegnato un certo indirizzo logico (IP), e mantengono questo dato nelle loro tabelle per lo scambio dei pacchetti.

L'indirizzo IP ha una dimensione fissa. Lo standard utilizzato da decenni ormai è IPv4 (versione 4 del protocollo IP), e tale standard prevede che l'indirizzo sia rappresentato a 32 bit (4 byte). Per comodità (e per evitare di rappresentare l'indirizzo in formato esadecimale o peggio ancora in un illeggibile formato binario) l'IP viene generalmente rappresentato con la dotted notation, ovvero una notazione del tipo x.x.x.x. È una notazione in cui l'indirizzo a 32 bit viene 'splittato' in 4 parti (ognuna quindi da 8 bit, o 1 byte), e ogni parte è separata da un '.'. Poiché ogni parte rappresenta 8 bit, con ogni parte dell'indirizzo IP in dotted notation è possibile rappresentare tutti i numeri nell'intervallo esadecimale 0...FF, che in decimale identifica l'intervallo 0...255. Con un indirizzo IPv4 è quindi possibile rappresentare 2^{32} \simeq 4.3 milioni di indirizzi.

[modifica] Problemi dello standard IPv4 e proposta dello standard IPv6

Lo standard IPv4 è stato teorizzato negli anni '70, quando la rete non aveva ancora le dimensioni attuali e 4.3 milioni di indirizzi sembravano più che sufficienti. Ma i problemi legati a questo limite massimo di indirizzo ora cominciano a farsi sentire.

Al giorno d'oggi IPv4 consente di creare 4 classi di indirizzi:

  • Classe A - indirizzi del tipo x.*.*.*. Con questa classe è possibile gestire fino a 16.8 milioni di indirizzi.
  • Classe B - indirizzi del tipo x.x.*.*. Con questa classe è possibile gestire fino a 65535 indirizzi.
  • Classe C - indirizzi del tipo x.x.x.*. Con questa classe è possibile gestire fino a 255 indirizzi.

Il problema di internet è stata la corsa nei primi anni della sua vita a indirizzi di classe A. Allora internet non aveva ancora le dimensioni attuali, e il valore degli indirizzi di classe A era in parte sottovalutato. In quegli anni grandi compagnie come IBM, Microsoft, Intel, Apple e altre sono entrate senza grandi problemi in possesso di indirizzi di classe A. Come risultato ora queste aziende hanno oltre 16 milioni di indirizzi assegnati a testa, e un'azienda, per quanto grande possa essere, raramente si troverà ad avere connessi in rete oltre 16 milioni di host contemporaneamente. Quegli indirizzi però rimangono riservati e non utilizzabili da altri. A questo bisogna aggiungere la crescita esponenziale di internet negli ultimi anni, che ha causato una penuria di indirizzi IP. Questo problema finora si è raggirato con scorciatoie come il NAT o l'assegnazione dinamica degli indirizzi, ma il problema rimane, e ha costretto la teorizzazione dello standard IPv6.

[modifica] IPv6

Un indirizzo nello standard IPv6 è composto di 128 bit. Tale lunghezza supera tutte le limitazioni imposte dall'IPv4, in quanto metterebbe a disposizione della rete un numero immenso di indirizzi (nell'ordine di 1038). Data l'enorme gamma di indirizzi a disposizione IPv6 potrebbe essere un'autentica rivoluzione. Ogni oggetto potrebbe avere un indirizzo IP ed essere connesso alla rete. Ad esempio un frigorifero o un forno a microonde, che potrebbero essere controllati da remoto in rete.

Il problema principale è l'applicabilità. IPv6 è un protocollo già implementato e compatibile con la maggior parte dei linguaggi di programmazione in circolazione, ma l'enorme problema è quello di riscrivere tutte le applicazioni di rete usando questo standard e soprattutto quello di far sì che tutti i dispositivi di rete (schede di rete, router, switch, hub) siano compatibili con questo nuovo standard. La migrazione quindi sarà estremamente lenta: pur essendo stato teorizzato oltre 15 anni fa, quando già i grandi teorici della rete cominciavano a intravedere le crepe dell'IPv4, la migrazione a IPv6 è avvenuta solo in ambiti estremamente ristretti per ora, e a livello sperimentale.

[modifica] Assegnazione di indirizzi IP

L'assegnazione di un indirizzo IP da parte del router della rete può avvenire in due modi:

  • Indirizzo statico. L'interfaccia di rete dell'host è configurata per connettersi alla rete utilizzando sempre lo stesso indirizzo IP.
  • Indirizzo dinamico. Al momento del collegamento alla rete l'host invia al router un pacchetto contenente una richiesta DHCP. Il router assegna all'host il primo indirizzo IP disponibile all'interno di una lista di IP.

[modifica] Struttura di un pacchetto IP

Immagine:ip-pack.png

Quella riportata sopra è la struttura di un header IPv4 che incapsula un pacchetto proveniente dai livelli superiori. I campi dell'header IP sono i seguenti:

  • Versione (4 bit). Generalmente 4 nel caso di un pacchetto IPv4.
  • IP Header Length (4 bit). Lunghezza dell'header IP.
  • Type of Service (1 byte). Generalmente non usato.
  • Total Length (2 byte). Lunghezza dell'header + lunghezza della parte dati.
  • Identification (2 byte). 16 bit dedicati all'identificazione del pacchetto.
  • Flags (3 bit). I bit flag sono usati per frammentare eventualmente pacchetti di grandi dimensioni. I flag sono
    • X-- Non usato
    • -X- Non frammentare
    • --X Questo pacchetto è solo parte di un pacchetto originario frammentato
  • Fragment offset (13 bit).
  • Time to Live (1 byte). Numero massimo di passaggi che il pacchetto dovrà fare attraverso dei commutatori di pacchetto prima di diventare non più valido (non ha senso tenere in rete pacchetti che non riescono a giungere a destinazione).
  • Protocol (1 byte). Protocollo di trasporto da usare (TCP o UDP).
  • Checksum (2 byte). 16 bit usati per fare controlli su eventuali bit corrotti nel pacchetto.
  • IP sorgente (4 byte).
  • IP destinazione (4 byte).
  • Eventuali opzioni + riempimento (4 byte).
  • Dati (lunghezza variabile).
Strumenti personali