Sockets a IPv6

13
CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament d’Arquitectura de Computadors (Seminaris de CASO) Autors Sockets a IPv6 José Ortiz Padilla José Núñez Martínez Antonio Moya Fdez.

description

José Ortiz Padilla José Núñez Martínez Antonio Moya Fdez. Sockets a IPv6. Compatibilitat. La nova implementació ha de ser compatible 100% amb IPv4 tant binàriament com a nivell de codi. - Els programes compilats amb IPv4 han de continuar funcionant en màquines amb IPv6. - PowerPoint PPT Presentation

Transcript of Sockets a IPv6

Page 1: Sockets a IPv6

CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament d’Arquitectura de Computadors

(Seminaris de CASO)

Autors

Sockets a IPv6

José Ortiz Padilla

José Núñez Martínez

Antonio Moya Fdez.

Page 2: Sockets a IPv6

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS

Departament. d’Arquitectura de Computadors - UPC

2

Compatibilitat La nova implementació ha de ser compatible 100% amb

IPv4 tant binàriament com a nivell de codi.- Els programes compilats amb IPv4 han de continuar funcionant en màquines amb IPv6.- Els programes fets per a IPv4 que es recompilin amb la nova interfície d’IPv6 han de funcionar amb normalitat.

Les aplicacions han de poder interrelacionar-se independentment de la versió d’IP que utilitzin.

Page 3: Sockets a IPv6

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS

Departament. d’Arquitectura de Computadors - UPC

3

Modificacions S’ha de canviar:

La implementació interna de les funcions,(no afecta a la programació pel fet de que es passa un punter a una estructura genèrica -sockaddr-)

el tipus de dades d’adreces de sockets,(sockaddr_in6 per a IPv6, sockaddr_in per a IPv4)

les funcions de traducció de noms a adreces i lesde conversions d’adreces.(s’afegeixen funcions anàlogues a gethostbyname(), gethostbyaddr() inet_ntoa() i inet_addr() compatibles totes amb ambdos protocols. Les existents es deixen com estan)

Page 4: Sockets a IPv6

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS

Departament. d’Arquitectura de Computadors - UPC

4

Interfície del socket S’afegeixen una nova família d’adreces i una nova família

de protocols a <sys/socket.h>,AF_INET6 com a adreces i PF_INET6 com a protocol(habitualment, s’utilitza la definició #define PF_INET6 AF_INET6)

una nova estructura d’adreces a <netinet/in.h>,struct in6_addr {

union{

uint8_t _S6_u8[16];

uint32_t _S6_u32[4];

uint64_t _S6_u64[2];

}

};

#define s6_addr _s6_un._s6_u8

(l’usuari pot escollir amb quina forma vol treballar)

Page 5: Sockets a IPv6

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS

Departament. d’Arquitectura de Computadors - UPC

5

Interfície del socket (II) i una nova estructura d’adreçament de sockets:

struct sockaddr_in6{

uint8_t sin6_len;

sa_family_t sin6_family;

in_port_t sin6_port;

uint32_t sin6_flowinfo;

struct in6_addr sin6_addr;;

uint32_t sin6_scope_id;

};

Diferències respecte IPv4:- sin6_len ens diu la longitud de l’estructura,- sin6_flowinfo expressa la qualitat de servei en la comunicació i- sin6_scope_id ens defineix el format d’entrada de la direcció.

Page 6: Sockets a IPv6

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS

Departament. d’Arquitectura de Computadors - UPC

6

Interfície per a l’obtenció d’adreces La crida gethostbyname() es inadequada per a moltes

aplicacions. Causes:

- No ens dóna cap eina per a distingir entre els diferents tipus d’adreça que ens pot retornar.- Algunes implementacions d’aquesta funció no són segures respecte als threads (thread safe).

Solució:- Es defineix la nova crida getipnodebyname().

Page 7: Sockets a IPv6

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS

Departament. d’Arquitectura de Computadors - UPC

7

Interfície d’obtenció d’adreces (II)#include <sys/socket.h>

#include <netdb.h>

struct hostent *getipnodebyname (const char *name, int af, int flags, int *error_num);

‘name’ és el nom de la màquina o la direcció IP en octets,p.ex. “147.83.41.110” o “alabi.fib.upc.es”

‘af’ és la família d’adreces, ‘flags’ especifica el tipus d’adreces que busquem i que ens serà

retornada i ‘error_num’ ens dóna un codi dels possibles errors obtinguts.

Page 8: Sockets a IPv6

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS

Departament. d’Arquitectura de Computadors - UPC

8

Interfície d’obtenció d’adreces (III) Possibles valors dels codis d’error:

- HOST_NOT_FOUND- NO_ADDRESS- NO_RECOVERY- TRY_AGAIN

Valors possibles per als flags:- 0

- Amb AF_INET només retorna adreces amb format IPv4- Amb AF_INET6 només retorna adreces amb format IPv6

Page 9: Sockets a IPv6

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS

Departament. d’Arquitectura de Computadors - UPC

9

Interfície d’obtenció d’adreces (IV) Més flags:

- AI_DEFAULT es considera la suma d’aquests dos flags: AI_V4MAPPED: Amb AF_INET6 retorna adreces en format IPv6 o

adreces d’IPv4 mapejades en format IPv6.

AI_ADDRCONFIG: S’ utilitza per buscar adreces amb els mateixos formats que disposa la màquina que fa la petició.

- Amb la suma dels dos flags aconseguim obtenir qualsevol tipus d’adreça, ja sigui IPv4 o IPv6, mapejades en la familia especificada.

Page 10: Sockets a IPv6

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS

Departament. d’Arquitectura de Computadors - UPC

10

Interfície d’obtenció d’adreces (V) Pels mateixos motius que abans també hem de definir una

nova funció que substitueixi la crida gethostbyaddr().#include <sys/socket.h>

#include <netdb.h>

struct hostent *getipnodebyaddr(const void *src, size_t len, int af, int *error_num);

Alliberant memòria:Les dues crides anteriors demanen memòria dinàmica per tal de generar l’estructura hostent. S’ha d’alliberar utilitzant:#include <netdb.h>

void freehostent (struct hostent *ptr);

Page 11: Sockets a IPv6

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS

Departament. d’Arquitectura de Computadors - UPC

11

Interfície de conversió d’adreces Les funcions inet_addr() i inet_ntoa() nomès serveixen per a

IPv4. Es defineixen dos funcions anàlogues compatibles amb els dos protocols.#include <sys/socket.h>

#include <arpa/inet.h>

int inet_pton (int af, const char *src, void *dst);

const char *inet_ntop (int af, const void *src, char *dst, size_t size);

‘inet_pton’ tradueix una adreça donada en format de text a la seva anàloga en format numèric binari.

‘inet_ntop’ tradueix una adreça numèrica binària en una adreça llegible.

Page 12: Sockets a IPv6

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS

Departament. d’Arquitectura de Computadors - UPC

12

Interfície de conversió d’adreces (II) En ambos casos, ‘src’ representa l’origen (allò que es vol

traduïr) i ‘dst’ representa el resultat de la traducció.

En el cas d’ ‘inet_ntop’, el paràmetre ‘size’ especifica el tamany del buffer on guardarem el resultat.Per tal de facilitar la declaració d’aquest buffer, a <netinet/in.h> podem trobar:

#define INET_ADDRSTRLEN 16

#define INET6_ADDRSTRLEN 46

Page 13: Sockets a IPv6

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS

Departament. d’Arquitectura de Computadors - UPC

13

Bibliografia

http://www.ietf.org/The Internet Engineering Task Force (RFC Pages)

Basic Socket Interface Extensions for IPv6RFC 2553 - March 1999

Bibliografia adicional Advanced Socket API for IPv6

RFC 2292 - February 1998