aplicacionesMulticastV6
-
Upload
antonio-blazquez-parra -
Category
Documents
-
view
233 -
download
2
description
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