36
Sockets

Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Embed Size (px)

Citation preview

Page 1: Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Sockets

Page 2: Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Definición de Socket

Punto de comunicación entre procesos.Punto de comunicación entre procesos.

Descriptor de socket.Descriptor de socket.

Page 3: Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Características de un socket

<sys/socket.h><sys/socket.h>

Dominio Dominio

TipoTipo

Page 4: Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Dominio de un socket

Formato de direcciones y protocolos Formato de direcciones y protocolos Dominio UNIXDominio UNIX (AF_UNIX) (AF_UNIX) ::

<sys/un.h><sys/un.h>

struct sockaddr_un{struct sockaddr_un{

shortshort sun_family;sun_family;

charchar sun_data[108];sun_data[108];

};};

Page 5: Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Dominio de un socket

Dominio InternetDominio Internet (AF_INET) : (AF_INET) :struct in_addr{struct in_addr{

u_long u_long s_addr;s_addr;

};};

struct sockaddr_in{struct sockaddr_in{

shortshort sin_family; sin_family;

u_shortu_short sin_port; sin_port;

struct in_addr sin_addr;struct in_addr sin_addr;

charchar sin_zero[8]; sin_zero[8];

};};

Page 6: Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Dominio de un socket

Valores de la estructura:Valores de la estructura:

1.1. AF_INETAF_INET

2.2. IPPORT_TCP,IPPORT_TCP, IPPORT_TELNET;IPPORT_TELNET; IPPORT_RESERVEDIPPORT_RESERVED..

3.3. INADDR_ANYINADDR_ANY

Page 7: Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Tipo de un socket

Propiedades de comunicaciónPropiedades de comunicación

1.1. Fiabilidad de la transmisión. Fiabilidad de la transmisión.

2.2. Conservación del orden de los datos. Conservación del orden de los datos.

3.3. No duplicación de datos. No duplicación de datos.

4.4. Comunicación en modo conectado. Comunicación en modo conectado.

5.5. Conservación de los límites de los Conservación de los límites de los mensajes. mensajes.

6.6. Envío de mensajes <<urgentes>>. Envío de mensajes <<urgentes>>.

Page 8: Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Tipo de un socket

Tipos disponiblesTipos disponibles• SOCK_DGRAMSOCK_DGRAM. Propiedad 5. UDP.. Propiedad 5. UDP.• SOCK_STREAMSOCK_STREAM. Propiedades 1-4. . Propiedades 1-4.

Propiedad 6. TCP.Propiedad 6. TCP.• SOCK_RAWSOCK_RAW. Superusuario. IP.. Superusuario. IP.

Page 9: Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Creación y Supresión de un Socket

CreaciónCreación::

int socket (dominio, tipo, protocolo)int socket (dominio, tipo, protocolo)int dominio; int dominio; int tipo;int tipo; int protocolo; int protocolo;

SupresiónSupresión::

closeclose

Page 10: Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Enlazamiento socket-dirección

Primitiva bindPrimitiva bind::

int bind (sock, p_direccion, lg)int bind (sock, p_direccion, lg)

int int sock; sock;

struct sockaddr *p_direccion;struct sockaddr *p_direccion;

intint lg; lg;

Page 11: Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Enlazamiento socket-dirección

El dominio Unix:El dominio Unix:

ls, rmls, rm

sockunix.c (hoja 5 de Sockets)sockunix.c (hoja 5 de Sockets) El dominio Internet:El dominio Internet:

gethostname, gethostbyname, gethostname, gethostbyname, INADDR_ANYINADDR_ANY

getservbyname, IPPORT_RESERVEDgetservbyname, IPPORT_RESERVED

Page 12: Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Enlazamiento socket-dirección

int getsockname (sock, p_adr, p_lg)int getsockname (sock, p_adr, p_lg)

int int sock; sock;

struct sockaddr *p_adr; struct sockaddr *p_adr;

int int *p_lg; *p_lg;

crearsock.c (hoja 7 de Sockets)crearsock.c (hoja 7 de Sockets)

Page 13: Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Comunicación por datagramas

Sockets tipo SOCK_DGRAMSockets tipo SOCK_DGRAM Poca fiabilidadPoca fiabilidad Comunicación modo no conectadoComunicación modo no conectado Posible <<pseudoconexión>> (dirección Posible <<pseudoconexión>> (dirección

implícita)implícita)

Page 14: Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Envío de mensajes

int sendto (sock, msg, lg, opcion, p_dest, lgdest)int sendto (sock, msg, lg, opcion, p_dest, lgdest)

int int sock; sock;

char char *msg; *msg;

int int lg; lg;

int int opcion; opcion;

struct sockaddr *p_dest;struct sockaddr *p_dest;

int int lgdest; lgdest;

Page 15: Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Envío de mensajes

int sendmsg (sock, msg, opcion)int sendmsg (sock, msg, opcion)

int int sock; sock;

struct msghdr msg[];struct msghdr msg[];int int opcion; opcion;

Page 16: Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Envío de mensajes

struct msghdr {struct msghdr {

caddr_t msg_name;caddr_t msg_name;

int msg_namelen;int msg_namelen;

struct iovec *msg_iov;struct iovec *msg_iov;

int int msg_iovlen; msg_iovlen;

caddr_t msg_accrights;caddr_t msg_accrights;

int int msg_accrightslen; msg_accrightslen;

}; }; 

Page 17: Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Envío de mensajes

struct iovec {struct iovec {

caddr_t iov_base;caddr_t iov_base;

int iov_len;int iov_len;

};}; msghdr msghdr en en <sys/socket.h><sys/socket.h> iovec iovec en en <sys/uio.h><sys/uio.h>

Page 18: Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Recepción de mensajes

int recvfrom (sock, msg, lg, opcion, p_exp, int recvfrom (sock, msg, lg, opcion, p_exp, p_lgexp) p_lgexp)

int int sock; sock;char char *msg; *msg; int int lg; lg;int int opcion; opcion;struct sockaddr *p_exp;struct sockaddr *p_exp; int int *p_lgex; *p_lgex;

Page 19: Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Recepción de mensajes

int recvmsg (sock, msg, opcion)int recvmsg (sock, msg, opcion)

  

int int sock; sock;

struct msghdr msg[];struct msghdr msg[];int int opcion; opcion;

Page 20: Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Cliente/Servidor

El Servidor:El Servidor:1.1. Creación y enlace al puerto de servicio de Creación y enlace al puerto de servicio de

un socket.un socket.2.2. Desconexión del servidor de su terminal de Desconexión del servidor de su terminal de

lanzamiento o ejecución.lanzamiento o ejecución.3.3. Bucle infinito en el cual el servidor:Bucle infinito en el cual el servidor:

a.a. Espera una petición.Espera una petición.b.b. La trata.La trata.c.c. Pone la forma de respuesta.Pone la forma de respuesta.d.d. Envía la respuesta.Envía la respuesta.

Page 21: Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Cliente/Servidor

El Cliente:El Cliente:

1.1. Creación del socket local.Creación del socket local.

2.2. Preparación de la dirección del Preparación de la dirección del servidor.servidor.

3.3. Envío del mensaje.Envío del mensaje.

4.4. Espera del resultado.Espera del resultado.

5.5. Explotación del resultado.Explotación del resultado.

Page 22: Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Ejemplo Cliente/Servidor

Ejemplo Completo (hoja 11 de Sockets).Ejemplo Completo (hoja 11 de Sockets). Estructura Estructura hostenthostent en en netdb.hnetdb.h    

struct hostent{char *h_name; char **h_aliases;int h_addrtype; int h_length;char **h_addr_list;

#define h_addr h_addr_list[0] };

Page 23: Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Pseudoconexiones

Primitiva Primitiva connectconnect::

int connect (sock, p_adr, lgadr)

int sock;

struct sockaddr *p_adr;int lgadr;

Page 24: Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Pseudoconexiones

Primitiva Primitiva socketpairsocketpair::

int socketpair (dominio, tipo, protocolo, p_sock)

int dominio;

int tipo;

int protocolo;

int *p_sock;

Page 25: Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Pseudoconexiones

Primitiva Primitiva sendsend::

int send (sock, msg, lg, opcion)int send (sock, msg, lg, opcion)

int int sock; sock;

char char *msg; *msg;

int int lg; lg;

int int opcion; opcion;

Page 26: Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Pseudoconexiones

Primitiva Primitiva recvrecv::

int recv (sock, msg, lg, opcion)int recv (sock, msg, lg, opcion)

  

int int sock; sock;

char char *msg; *msg;

int int lg; lg;

int int opcion; opcion;

Page 27: Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Comunicación modo conectado

FiabilidadFiabilidad

Circuito virtualCircuito virtual

telnet, ftp, rlogintelnet, ftp, rlogin

Page 28: Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Creación y enlace del socket de escuchasocket/bind

Apertura del serviciolisten

Espera de demanda de conexiónaccept

Creación de un subprocesofork

Tratamiento de la demanda

HIJOPADRE

Page 29: Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Punto de vista del servidor

int listen (sock, nb)int listen (sock, nb)  

int sock; int sock; int nb;int nb;

int accept (sock, p_adr, p_lgadr)int accept (sock, p_adr, p_lgadr)  

int int sock; sock;struct sockaddr *p_adr;struct sockaddr *p_adr; int int

*p_lgadr; *p_lgadr;

Page 30: Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Creación (y eventualmente enlace de un socket)socket/bind

Construcción de la dirección del servidor

Demanda de conexiónconnect

Diálogo con el servidor

ÉxitoFallo

Page 31: Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Punto de vista del cliente

int connect (sock, p_adr, lgadr)

  

int sock;struct sockaddr *p_adr;

int lgadr;

Page 32: Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Diálogo servidor/cliente

La emisión:La emisión:

        int write (sock, msg, lg)

  

int sock;

char *msg;

int lg;   

Page 33: Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Diálogo servidor/cliente

La emisión:La emisión:

int send (sock, msg, lg, opcion)

  

int sock;

char *msg;

int lg;

int opcion;

Page 34: Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Diálogo servidor/cliente

La recepción:

int read (sock, msg, lg)  

int sock;char *msg;int lg;   

  

Page 35: Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Diálogo servidor/cliente

La recepción:La recepción:

int recv (sock, msg, lg, opcion)

  

int sock;

char *msg;

int lg;

int opcion;

Page 36: Sockets. Definición de Socket Punto de comunicación entre procesos. Punto de comunicación entre procesos. Descriptor de socket

Diálogo servidor/cliente

El corte de la conexión:El corte de la conexión:

int shutdown (desc, sens)int shutdown (desc, sens)

  

int desc;int desc;

int sens;int sens;