[successivo] [precedente] [indice]

Interfacce coi Livelli Superiori

Il nuovo protocollo IPv4 ha delle ripercussioni sui protocolli ai livelli superiori. In particolare:

Checksum a Livello Trasporto

Il checksum a livello trasporto e' calcolato su un pacchetto immaginario che e' la concatenazione del pacchetto a livello trasporto ed uno pseudoheader a livello IP.

Calcolo checksum

Lo pseudoheader e' una rappresentazione di una testata nominale a livello IP.

Pseudoheader

I protocolli TCP ed UDP devono essere modificati per riconoscere questa nuova versione dello pseudoheader.

IPv6 ed il Domain Name Service

Gli indirizzi IPv4 sono solitamente mantenuti in record di tipo A (codice 1). Per IPv6 e' stato definito un nuovo record di risorse, di codice 28 e di identificativo AAAA.

Gli indirizzi rovesciati col DNS si ottenevano rovesciando l'ordine dei byte in un indirizzo IPv4 ed appendendo il nome di dominio "in-addr.arpa."

Per fornire una simile mappatura in IPv6 nasce il problema che i nuovi indirizzi non hanno confini ben determinati. La separazione tra fornitore e cliente di servizi, rete e sottorete ed host non cade a limiti definiti di 32, 16 o 8 bit, bensi' di 4 bit (nybble).

L'indirizzo rovesciato viene quindi espresso in nybbles in sequenza invertita, con appesa la stringa nuova "ip6.int."

Ad esempio, l'indirizzo:

4321:0:1:2:3:4:567:89ab
e' ivertito in:
b.a.9.8.7.6.5.0.4.0.0.0.3.0.0.0.2.0.0.0.1.0.0.0.0.0.0.0.1.2.3.4.ip6.int.

Interfacce di Programmazione

Le funzioni principali relative ai socket non sono da cambiare. I cambiamenti principali avvengono relativamente a:

Viene definita una nuova famiglia di indirizzamento, AF_INET6, ed una nuova famiglia di protocolli, PF_INET6.

Gli indirizzi della famiglia AF_INET6 sono rappresentati nella nuova struttura in_addr6:

struct in_addr6 {
	u_long s6_addr[4];
}

La struttura sockaddr_in e' sostituita da sockaddr_in6, che viene in due versioni leggermente diverse per i sistemi BSD 4.3 e BSD 4.4, con l'uso di un flag di compilazione condizionale.

Per BSD 4.3:

struct sockaddr_in6 {
	u_short		sin6_family;
	u_short		sin6_port;
	u_long	s	in6_flowlabel;
	struct in_addr6	sin6_addr;
}

Per BSD 4.4:

#define SIN6_LEN

struct sockaddr_in6 {
	u_char		sin6_len;
	u_char		sin6_family;
	u_short		sin6_port;
	u_long		sin6_flowlabel;
	struct in_addr6	sin6_addr;
}

Le funzioni di traduzione indirizzi sono ora hostname2addr e addr2hostname, che permettono la specifica del tipo di indirizzamento come parametro, AF_INET o AF_INET6. La struttura host entry gia' prevede indirizzamento multiplo e non va cambiata.

Le funzioni inet_ntoa e inet_addr sono rimpiazzate da ascii2addr e addr2ascii, con la famiglia di indirizzamento come parametro aggiuntivo.

Per uniformare il trattamento di indirizzi IPv4 ed IPv6 viene introdotto il nuovo prefisso 0:0:0:0:0:FFFF di 96 bit da concatenarsi davanti ai 32 bit dell'indirizzo IP vecchio stile.

Per programmi server che ascoltano su un socket e' stata introdotta una nuova opzione di setsockopt per trasformare un socket PF_INET6 in socket PF_INET.