OFFRO ANNUNCI DI QUALSIASI GENERE GRATIS!! CONTATTATEMI SU EMAIL LINKIAMOCI@EMAIL.IT!!

Ultra torrent

Chat

Tutto di tutto Headline Animator

giovedì 11 novembre 2010

IPV4 appunti

IPv4 è la versione di protocollo internet (IP) attualmente in uso. Esso è descritto nell'IETF RFC 791 pubblicato per la prima volta nel settembre 1981.

L'header del pacchetto IPv4 consiste in 13 campi di cui 1 opzionale (segnalato nello schema con sfondo rosso) e chiamato con l'ovvio nome di Options. I campi sono inseriti col byte più significativo messo per primo (notazione big-endian) e all'interno dei singoli byte il bit più significativo è il primo (quello di indice 0).

+Bits 0–34–78–1516–1819–31
0VersionInternet
Header length
Type of Service
(now DiffServ and ECN)
Total Length
32IdentificationFlagsFragment Offset
64Time to LiveProtocolHeader Checksum
96Source Address
128Destination Address
160Options (optional)
160
o
192+

Data
  • Versione [4 bit] - Indica la versione del datagramma IP: per IPv4, ha valore 4 (da qui il nome IPv4).
  • Internet Header Length (IHL) [4 bit] - Indica la lunghezza (in word da 32 bit) dell'header del datagramma IP ovvero l'offset del campo dati; tale lunghezza può variare da 5 word (20 byte) a 15 word (60 byte) a seconda della presenza e della lunghezza del campo facoltativo Options;
  • Type of Service (TOS) [8 bit] - Nelle specifiche iniziali del protocollo (RFC 791), questi bit servivano all'host mittente per specificare il modo e in particolare la precedenza con cui l'host ricevente doveva trattare il datagramma:
    • bit 0-2 : Precedenza
    • bit 3: Latenza (0 = normale, 1 = bassa)
    • bit 4: Throughput (0 = normale, 1 = alto)
    • bit 5: Affidabilità (0 = normale, 1 = alta)
    • bit 6-7: Riservati per usi futuri
ad esempio un host poteva scegliere una bassa latenza, mentre un altro preferire un'alta affidabilità. Nella pratica questo uso del campo TOS non ha preso largamente piede.
Dopo molte sperimentazioni e ricerche, recentemente questi 8 bit sono stati ridefiniti ed hanno la funzione di Differentiated services (DiffServ nell'IETF e Explicit Congestion Notification (ECN) codepoints (vedi RFC 3168), necessari per le nuove tecnologie basate sullo streaming dei dati in tempo reale, come per il esempio il Voice over IP (VoIP) usato per lo scambio interattivo dei dati vocali.
  • Total Length [16 bit] - Indica la dimensione (in byte) dell'intero datagramma, comprendendo header e dati; tale lunghezza può variare da un minimo di 20 byte (header minimo e campo dati vuoto) ad un massimo di 65535 byte. In ogni momento, ad ogni host è richiesto di essere in grado di gestire datagrammi aventi una dimensione minima di 576 byte mentre sono autorizzati, se necessario, a frammentare datagrammi di dimensione maggiore.
  • Identification [16 bit] - Utilizzato, come da specifiche iniziali, per identificare in modo univoco i vari frammenti in cui può essere stato "spezzato" un datagramma IP. Alcune sperimentazioni successive hanno però suggerito di utilizzare questo campo per altri scopi, come aggiungere la funzionalità di tracciamento dei pacchetti.
  • Flags [3 bit] - Bit utilizzati per il controllo del protocollo e della frammentazione dei datagrammi:
    • Reserved - sempre settato a 0. Come pesce d'Aprile, in RFC 3514 si è proposto di utilizzarlo come "Evil bit".
    • DF (Don't Fragment) - se settato a 1 indica che il datagramma non deve essere frammentato; se tale datagramma non può essere inoltrato da un host senza essere frammentato, viene semplicemente scartato. Questo può risultare utile per "ispezionare" la capacità di gestione dei vari host del percorso di routing.
    • MF (More Fragments) - se settato a 0 indica che il datagramma è l'ultimo frammento o il solo frammento del datagramma originario, pertanto tutti gli altri suoi frammenti hanno il bit MF settato a 1. Naturalmente, questo bit sarà sempre 0 anche in tutti i datagrammi che non sono stati frammentati.
  • Fragment Offset [13 bit] - Indica l'offset (misurato in blocchi di 8 byte) di un particolare frammento relativamente all'inizio del datagramma IP originale: il primo frammento ha offset 0. L'offset massimo risulta pertanto pari a (2^{13}-1)\times8=65528 byte che, includendo l'header, potrebbe eccedere la dimensione massima di 65535 byte di un datagramma IP.
  • Time To Live (TTL) [8 bit] - Indica il tempo di vita (time to live) del datagramma, necessario per evitarne la persistenza indefinita sulla rete nel caso in cui non si riesca a recapitarlo al destinatario. Storicamente il TTL misurava i "secondi di vita" del datagramma, mentre ora esso misura il numero di "salti" da nodo a nodo della rete: ogni router che riceve il datagramma prima di inoltrarlo ne decrementa il TTL (modificando di conseguenza anche il campo Header Checksum), quando questo arriva a zero il datagramma non viene più inoltrato ma scartato. Tipicamente, quando un datagramma viene scartato per esaurimento del TTL, viene automaticamente inviato un messaggio ICMP al mittente del datagramma, specificando il codice di Richiesta scaduta; la ricezione di questo messaggio ICMP è alla base del meccanismo di traceroute.
  • Protocol [8 bit] - Indica il codice associato al protocollo utilizzato nel campo dati del datagramma IP: per esempio al protocollo TCP è associato il codice 6, ad UDP il codice 17, mentre ad IPv6 è associato il codice 41. La lista dei codici dei vari protocolli, inizialmente definita in RFC 790, è mantenuta e gestita dalla Internet Assigned Numbers Authority.
  • Header Checksum [16 bit] - È un campo usato per il controllo degli errori dell'header. Ad ogni hop, il checksum viene ricalcolato (secondo la definizione data in RFC 791) e confrontato con il valore di questo campo: se non c'è corrispondenza il pacchetto viene scartato. È da notare che non viene effettuato alcun controllo sulla presenza di errori nel campoData deputandolo ai livelli superiori.
  • Source address [32 bit] - Indica l'indirizzo IP associato all'host del mittente del datagramma.
Da notare che questo indirizzo potrebbe non essere quello del "vero" mittente nel caso di traduzioni mediante NAT. Infatti, qualora un host intermedio effettui questa traduzione, sostituisce l'indirizzo del mittente con uno proprio, procurandosi poi di ripristinare l'indirizzo originario su tutti i messaggi di risposta che gli arrivano destinati al mittente originario.
  • Destination address [32 bit] - Indica l'indirizzo IP associato all'host del destinatario del datagramma e segue le medesime regole del campo Source address.
  • Options - Opzioni (facoltative e non molto usate) per usi più specifici del protocollo.
Si ricorda che il valore del campo IHL deve essere sufficientemente grande da includere anche tutte le opzioni e, nel caso queste siano più corte di una word, il padding necessario a completare i 32 bit. Inoltre, nel caso in cui la lista di opzioni non coincida con la fine dell'header, occorre aggiungere in coda ad essa un marcatore EOL (End of Options List).
C'è da notare infine che, potendo causare problemi di sicurezza, l'uso delle opzioni LSSR e SSRR (Loose e Strict Source and Record Route) è scoraggiato e molti router bloccano i datagrammi che contengono queste opzioni.

Di seguito è riportata la struttura contenuta nell'header ip.h della libreria GNU C:

struct iphdr   { #if __BYTE_ORDER == __LITTLE_ENDIAN     unsigned int ihl:4;     unsigned int version:4; #elif __BYTE_ORDER == __BIG_ENDIAN     unsigned int version:4;     unsigned int ihl:4; #else # error "Please fix " #endif     u_int8_t tos;     u_int16_t tot_len;     u_int16_t id;     u_int16_t frag_off;     u_int8_t ttl;     u_int8_t protocol;     u_int16_t check;     u_int32_t saddr;     u_int32_t daddr;     /*The options start here. */   };

Nessun commento:

Qual'è il vostro broswer?