aplicacionesMulticastV6

22
Desarrollo de aplicaciones Multicast Sockets en IPv6 Sockets en IPv6 Sockets Multicast Th d (hil ) Threads (hilos) 08/05/2014

description

aplicaciones multicast

Transcript of aplicacionesMulticastV6

  • DesarrollodeaplicacionesMulticast

    Sockets en IPv6SocketsenIPv6SocketsMulticastTh d (hil )Threads (hilos)

    08/05/2014

  • SocketsenIPv6:estructuras Estructuradedireccionesdesockets enIPv6(definidasen)

    /*IPv6address */struct in6_addr{

    union {uint8 t u6 addr8[16];uint8_t u6_addr8[16];uint16_tu6_addr16[8];uint32_tu6_addr32[4];

    }in6_u;} _};

    struct sockaddr_in6{uint8 t sin6 len; /* Longitud de esta estructura*/uint8_tsin6_len; /*Longituddeestaestructura*/sa_family_t sin6_family; /*AF_INET6*/in_port_t sin6_port; /*Transport layer port #*/uint32_tsin6_flowinfo; /*IPv6flow information */struct in6_addrsin6_addr;/*IPv6address */uint32_tsin6_scope_id; /*IPv6scopeid*/

    };

    2Redes de Computadores II - Grado en Ingeniera Informtica

  • SocketsenIPv6:crearyasociary/*Declaracin*/int s;int s;struct sockaddr_in6myaddr_in6;

    /*Creacin*/s=socket(AF_INET6,SOCK_STREAM,0);

    /*Inicializacin*/myaddr_in6.sin6_family=AF_INET6;

    dd i 6 i 6 dd i 6 ddmyaddr_in6.sin6_addr=in6addr_any;myaddr_in6.sin6_port=htons(13);

    /*Asociacin */bind(s,(struct sockaddr *)&myaddr_in6,sizeof(myaddr_in6));

    3Redes de Computadores II - Grado en Ingeniera Informtica

  • SocketsenIPv6:cambiosdeformato Cambiosdeformatoendirecciones()

    o int inet pton(int af,const char *src,void *dst);_p ( , , ); ConviertedireccionesIPv4(AF_INET)eIPv6(AF_INET6)detextoaformatobinario(estructuradedireccindered)

    Reemplaza a inet aton y a inet addr Reemplazaainet_aton yainet_addro const char *inet_ntop(int af,const void *src,char *dst,socklen_t size);

    ConviertedireccionesIPv4eIPv6deformatobinarioatextol Reemplazaainet_ntoa

    Ejemplo:char equipo[INET6 ADDRSTRLEN];char equipo[INET6_ADDRSTRLEN];unsigned char cliaddr[sizeof(struct in6_addr)];inet_ntop (AF_INET6,cliaddr,equipo,sizeof(equipo));

    EjemplodesocketsIPv6defechayhoradisponibleenDiaweb

    4Redes de Computadores II - Grado en Ingeniera Informtica

  • Otras familias y tipos de sockets (I)Otrasfamiliasytiposdesockets(I)Familia DescripcinAF INET Protocolos IPv4_

    AF_INET6 Protocolos IPv6

    AF_LOCAL (AF_UNIX) Protocolos de dominios de UNIX

    AF_ROUTE Sockets de encaminamiento

    AF_KEY Sockets de clave

    AF_NS Protocolos Xerox NS (XNS)

    AF_ISO Protocolos de OSI

    Tipo DescripcinSOCK_STREAM Sockets stream

    SOCK_DGRAM Sockets datagrama

    SOCK_RAW Procesado propio

    SOCK PACKET Acceso a nivel de enlace (slo para LINUX)SOCK_PACKET Acceso a nivel de enlace (slo para LINUX)

    SOCK_SEQPACKET Sockets de paquetes en secuencia

    5Redes de Computadores II - Grado en Ingeniera Informtica

  • Otras familias y tipos de sockets (y II)Otrasfamiliasytiposdesockets(yII)

    AF_INET AF_INET6 AF_LOCAL AF_ROUTE AF_KEY AF_OSI AF_NS

    SOCK STREAM TCP TCP SI_

    SOCK_DGRAM UDP UDP SI

    SOCK_RAW IPv4 IPv6 SI SI

    SOCK SEQPACKET SI SISOCK_SEQPACKET SI SI

    6Redes de Computadores II - Grado en Ingeniera Informtica

  • Interoperatividad IPv4eIPv6(I)p ( )

    Basefundamentalo Sustituir llamadas a gethostbyname y gethostbyaddr por getaddrinfo yo Sustituirllamadasagethostbyname ygethostbyaddr porgetaddrinfo y

    getnameinfo entreotras(,y) Funcionesparagarantizarinteroperabilidad

    o int getnameinfo (const struct sockaddr *sa,socklen_t salen,char *node,socklen_t nodelen,char *serv,socklen_t servlen,unsigned int flags) Resuelveelnombrededominiodadaladireccin Combinalasfuncionalidadesdegethostbyaddr ygetservbyport

    o int getaddrinfo(const char *nodename,const char *servname,const structaddrinfo *hints,struct addrinfo **res);, ); Resuelveladireccin(enunaoestructurasaddrinfo)dadosunombre Combinalasfuncionalidadesdegethostbyname ygetservbyname

    o void freeaddrinfo(struct addrinfo *ai);o void freeaddrinfo(struct addrinfo ai); Liberalamemoriaasociadaalaestructuraaddrinfo retornadaporgetaddrinfo

    o const char *gai_strerror(int ecode); R t l j i d l di d d lt t dd i f Retornaelmensajeasociadoaloscdigosdeerrordevueltosporgetaddrinfo

    7Redes de Computadores II - Grado en Ingeniera Informtica

  • Escenario 1: Cliente IPv4, Servidor IPv6Escenario1:ClienteIPv4,ServidorIPv6

    Un servidor IPv6 con pila dual puede atender clientes IPv4 eUnservidorIPv6conpiladualpuedeatenderclientesIPv4eIPv6

    Lo hace utilizando direcciones IPv6 obtenidas de la LohaceutilizandodireccionesIPv6obtenidasdelacorrespondienteIPv4El id k t IP 6 h l di i ElservidorcreaunsocketIPv6queescuchaenladireccincomodndeIPv6

    8Redes de Computadores II - Grado en Ingeniera Informtica

  • IPv6client

    IPv6server

    IPv4client

    IPv6 listening socket,

    bound to ::, port 8888

    TCP TCP TCP

    , p

    IPv6 IPv4 IPv4 IPv6

    IPv4 mapped IPv6 address

    IPv6 address

    IPv6

    D t D t

    IPv4 IPv4 IPv6

    D t206.62.226.42 5flb:df00:ce3

    e:e200:20:80Data link

    Data link

    Data link

    e:e200:20:800:2b37:6426

    Enethdr

    IPv4hdr

    TCPhdr

    TCPdataType 0800

    Enethdr

    IPv6hdr

    TCPhdr

    TCPdata

    Type 0800dport 8888

    hdr hdr hdr dataType 86dd dport 8888

    Servidor IPv6 atendiendo clientes IPv4 e IPv6 9Redes de Computadores II - Grado en Ingeniera Informtica

  • AF_INETSOCK_STREAMsockaddr in

    AF_INETSOCK_DGRAMsockaddr in

    IPv4 sockets sockaddr_in sockaddr_inAF_INET6SOCK_DGRAM

    k dd i 6

    AF_INET6SOCK_STREAM

    k dd i 6

    sockets

    IPv6sockets sockaddr_in6sockaddr_in6sockets

    TCP UDP

    IPv4 mapped

    Addressreturned by IPv6

    IPv4

    IPv4 mapped P. ej.: IPv4 1.2.3.4IPv6 correspondiente ::FFFF:102:304

    IPv4 IP 6

    yaccept orrecvfrom

    IPv6

    IP 4 d IPv6 datagram

    IPv4 IPv6

    Recepcin de datagramas, dependiendo del tipo de socket receptorIPv4 datagram IPv6 datagram

    10Redes de Computadores II - Grado en Ingeniera Informtica

  • Escenario 2: Cliente IPv6, Servidor IPv4Escenario2:ClienteIPv6,ServidorIPv4

    El servidor IPv4 se inicia en un nodo que slo tiene IPv4 yElservidorIPv4seiniciaenunnodoqueslotieneIPv4ycreaunsocketsIPv4deescucha

    El cliente IPv6 se inicia y antes del connect o sendto llama a ElclienteIPv6seiniciayantesdelconnect osendto llamaagetaddrinfo (antesgethostbyname)paraobtenerladireccin IP del servidor La pila dual del cliente detecta ladireccinIPdelservidor.LapiladualdelclientedetectaladireccinIPv4delservidoryretornaladireccinIPv6delacorrespondiente IPv4correspondienteIPv4

    Portanto,sehaceutilizandodatagramasIPv4

    11Redes de Computadores II - Grado en Ingeniera Informtica

  • AF_INETSOCK_STREAMsockaddr in

    AF_INETSOCK_DGRAMsockaddr in

    IPv4 socketsAF_INET6SOCK_DGRAMsockaddr in6

    AF_INET6SOCK_STREAMsockaddr in6

    IPv6sockets sockaddr_in6sockaddr_in6

    TCP UDP

    IPv4 mapped IPv6 Addressfor connect or sendto

    IPv6 IPv4

    IPv4 IPv6

    or sendto

    IPv4 datagram IPv6 datagram

    v

    g g

    Peticiones de clientes, dependiendo del tipo de direccin y tipo de socket12Redes de Computadores II - Grado en Ingeniera Informtica

  • Ejemploj p

    ServidoryclientedefechayhoraTCPyUDPdisponibleenlaplataformadelaasignatura

    13Redes de Computadores II - Grado en Ingeniera Informtica

  • Aplicacionesmulticast conSocketsp

    Multicasto Mediantelasfuncionessetsockopt ygetsockopt conlassiguientesopciones

    Orden Tipodedato DescripcinIP_ADD_MEMBERSHIP struct ip_mreq Unirse a un grupo multicastIPV6_ADD_MEMBERSHIP struct ipv6_mreq Unirse a un grupo multicast

    IP_DROP_MEMBERSHIPIPV6_DROP_MEMBERSHIP

    struct ip_mreqstruct ipv6_mreq Abandonar un grupo multicast

    IP_MULTICAST_IFIPV6_MULTICAST_IF struct in_addr

    Especificar el interfaz por defecto

    IP_MULTICAST_TTL u char Especificar el TTL en IPv4 y el IPV6_MULTICAST_HOPS u_char alcance para IPv6IP_MULTICAST_LOOPIPV6_MULTICAST_LOOP u_char

    Habilitar o deshabilitar loopback

    14Redes de Computadores II - Grado en Ingeniera Informtica

  • Aplicacionesmulticast conSockets(I)p ( )

    Emisormulticast (Servidor) Crear el socket AF INET ( AF INET6) y del

    Suscriptormulticast (Cliente) Crear el socket AF INET ( AF INET6) yCrearelsocketAF_INET(AF_INET6)ydel

    tipoSOCK_DGRAM Inicializarlaestructurasockaddr_in (

    sockaddr_in6)connuestrapropiaIPy

    CrearelsocketAF_INET(AF_INET6)ydeltipoSOCK_DGRAM

    ActivarlaopcinSO_REUSEADDRparapermitirvariossuscriptoresenlamisma_ p p y

    nmerodepuertoefmero ActivarIP_MULTICAST_LOOP(

    IPV6_MULTICAST_LOOP)enelsocketsised ibi bi i d l

    p pmquina

    Deestaformasepuedenrecibirdatagramasdestinadosalmismonumerodepuerto

    Usar bind para especificar el nmero dedesearecibirtambincopiadelosdatagramasenviadosalgrupomulticast

    Configurarsifueranecesariolainterfazporla que se enviarn los datagramas con la

    Usarbind paraespecificarelnmerodepuertodenuestraaplicacineINADDR_ANY(in6addr_any)pararecibirdatagramas

    laqueseenviarnlosdatagramasconlaopcinIP_MULTICAST_IF(IPV6_MULTICAST_IF)

    EnviareldatagramaalaIPmulticast y

    UtilizarIP_ADD_MEMBERSHIP(IPV6_ADD_MEMBERSHIP)paraespecificarelgrupomulticast delquesedesean recibir datagramas yg y

    nmerodepuertodenuestraaplicacin(conocidopornuestrosclientes)rellenandounaestructurasockaddr_in (sockaddr in6)

    deseanrecibirdatagramasyopcionalmenteporquinterfazsielequipotienevarias(estructurapv6_mreq)

    sockaddr_in6)p _ q)

    Recibirlosdatagramas

    Redes de Computadores II - Grado en Ingeniera Informtica 15

  • Aplicacionesmulticast conSockets(II)p ( )

    Extractodecdigodeuninalgrupomulticast enunadeterminadainterfaz......#defineGRUPOMULTICASTV6"ff15::33#defineINTERFAZeth0...

    struct ipv6_mreqipv6mreq;...ipv6mreq.ipv6mr_interface=if_nametoindex(INTERFAZ);

    /*Convierteladireccinmulticast abinario*/if(inet_pton(familia,GRUPOMULTICASTV6,&ipv6mreq.ipv6mr_multiaddr)==1)

    {perror(Llamada inet pton\n");perror(Llamadainet_pton\n");exit(1);

    }

    /* U i l lti t *//*Unirsealgrupomulticast */if(setsockopt(s,IPPROTO_IPV6,IPV6_ADD_MEMBERSHIP,&ipv6mreq,sizeof(ipv6mreq))==1)

    {perror(Llamadasetsockopt paramulticast\n");exit(1);

    }

    Redes de Computadores II - Grado en Ingeniera Informtica 16

  • Aplicacionesmulticast conSockets(yIII)p (y )

    Extractodecdigoparaespecificarlainterfazporlaquedifundir......#defineINTERFAZeth0...

    int interfaz;int interfaz;...

    interfaz=if_nametoindex(INTERFAZ);

    /*Difundirporunainterfazdeterminada*/if(setsockopt(s,IPPROTO_IPV6,IPV6_MULTICAST_IF,(char *)&interfaz,sizeof(interfaz)))==1)

    {perror(Llamada setsockopt para especificar interfa de dif sin");perror(Llamadasetsockopt paraespecificarinterfazdedifusin");exit(1);

    }

    Redes de Computadores II - Grado en Ingeniera Informtica 17

  • Funcionesdegestindeaplicacionesdemultidifusin mcast XXXmultidifusinmcast_XXX

    Funcionesdeutilidadenaplicacionesmultidifusin(fuenteoriginaldellibroUnixNetworkProgramming)o int mcast_get_if (int sockfd)o int mcast get loop (int sockfd)o int mcast_get_loop (int sockfd)o int mcast_get_ttl (int sockfd)o int mcast_join (int sockfd,const SA*sa,socklen_t salen,const

    h *if i t ifi d )char *ifname,u_int ifindex)o int mcast_leave (int sockfd,const SA*sa,socklen_t salen)o int mcast_set_if (int sockfd,constchar*ifname,u_int ifindex)o Int mcast_set_loop (int sockfd,int onoff)o Int mcast_set_ttl (int sockfd,int val)P f t d l lib U i N t k P i ProgramasfuentesdellibroUnixNetworkProgrammingo Pulseparadescargardelsitioweboficialdellibro

    P l d d l it i d ti d l DIAWEBo PulseparadescargardelrepositoriodeprcticasdelDIAWEB

    18Redes de Computadores II - Grado en Ingeniera Informtica

  • Threads (I)( )

    Problemasdeforko Lamemoriasecopiadepadresahijos,todoslosdescriptoresseduplican

    o SenecesitanmecanismosdeIPCparapasarinformacinentrepadresehijosdespusdefork

    Solucin=Threads (hilos)o Todoslosthread deunprocesocompartenlamismamemoriaglobalo Lacreacindeunthread puedeserentre10100vecesmsrpidaquelacreacindeunproceso

    o ProblemaSincronizacin

    19Redes de Computadores II - Grado en Ingeniera Informtica

  • Threads (II)( )

    Todoslosthread comparten Instruccionesdelosprocesos

    Datos

    CadaThread tienesupropio Iddethread

    Conjunto de registros Datos Ficherosabiertos Manejadoresyestadodelas

    Conjuntoderegistros,incluyendocontadordeprogramaypunterodepilaj y

    seales Directorioactualdetrabajo

    Id d i

    Pila(paravariableslocalesyretornodedirecciones)

    errno Iddeusuarioygrupo errno Mscaradeseales Prioridad

    20Redes de Computadores II - Grado en Ingeniera Informtica

  • Threads (III)( ) Existendostiposdethread

    o En el espacio de usuarioo Enelespaciodeusuarioo Enelkernel

    pthread oPosix Thread.Estandarizadoen1995comopartedePosix.1cL f i d l f Lasfuncionessondelaformao pthread_create creaunthreado pthread_join esperaelfinaldeunthreado pthread_self devuelveeliddethreado pthread_detach elthread finalizaporsmismoo pthread_exit finalizaunthreado pthread_attr_* atributosdelthreado pthread_mutex_* usoexclusivodeunthread aunrecursoo pthread cond * espera por una condicino pthread_cond_ esperaporunacondicino pthread_rwlock_* accesocompartidoparaleeryexclusivoparaescribiro pthread_cancel pidelacancelacindeunthread

    21Redes de Computadores II - Grado en Ingeniera Informtica

  • Threads (IV)( )#include //hola.c#include

    void holamundo (void *ptr){( p ) {printf("HolaMundo\n");

    }

    int main(int argc,char *argv[]){( g , g []) {pthread_t hilo1;int estado;

    /*handler,atributosdelthread,funcin,argumentosdelafuncin*/gestado=pthread_create(&hilo1,NULL,(void *)&holamundo,NULL);if (estado!=0)

    printf ("ErroralcrearelThread\n");

    estado=pthread_join(hilo1,NULL);if (estado!=0)

    printf("Thread unida\n");

    return 0;}

    #makefileLIBS=lpthreadhola:hola.o

    $(CC)$(CFLAGS)[email protected]$@$(LIBS)

    22Redes de Computadores II - Grado en Ingeniera Informtica