1 / 13

Sockets a IPv6

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.

hidi
Download Presentation

Sockets a IPv6

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. José Ortiz Padilla José Núñez Martínez Antonio Moya Fdez. Sockets a IPv6

  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.

  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 les de 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)

  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)

  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ó.

  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().

  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.

  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

  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.

  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 cridesanteriors 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);

  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.

  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

  13. Bibliografia • http://www.ietf.org/ The Internet Engineering Task Force (RFC Pages) • Basic Socket Interface Extensions for IPv6 RFC 2553 - March 1999 • Bibliografia adicional • Advanced Socket API for IPv6 RFC 2292 - February 1998

More Related