interfaz sockets

Upload: carlosveramejia

Post on 04-Nov-2015

219 views

Category:

Documents


0 download

DESCRIPTION

Todo lo que tiene que ver con interfaz sockets

TRANSCRIPT

Abstract-Papers up to 4 pages should be submitted using this format

INTERFAZ SOCKET.

Ren Andrs Palta MorochoUniversidad de CuencaFacultad de Ingeniera Escuela de Informtica

ABSTRACT (RESUMEN): En el presente artculo se realiza una breve introduccin a la interfaz sockets desde su origen en la Universidad de California en Berkeley en donde originalmente de diseo la interfaz para el sistema operativo Unix y que en la actualidad la interfaz socket es ampliamente usado por muchos fabricantes y por la mayora de sistemas operativos existentes. Decir tambin que la interfaz sockets soporta comunicaciones orientadas a la conexin y no orientadas a la conexin as como el diseo de los sockets est basado en la arquitectura cliente servidor por lo que es fundamental especificar quien acta como servidor y quien como cliente.

Keywords (palabras clave) interfaz, socket, protocolo.

I. INTRODUCTION (INTRODUCCIN)

Los sockets son mecanismos de comunicacin entre procesos que permiten que un proceso hable con otro proceso incluso estando en distintas maquinas. Es decir un socket no es ms que un canal de comunicacin entre dos programas que corren sobre ordenadores distintos o incluso en la misma computadora. Desde el punto de vista de programacin, un socket no es ms que un fichero que se abre de manera especial. Una vez abierto se pueden escribir y leer datos de el con las funciones de lectura y escritura. La forma de referenciar un socket por los procesos implicados, es mediante un descriptor del mismo tipo que el utilizado para referenciar ficheros, se podr realizar redirecciones de los archivos de E/S estndar (descriptores 0,1 y 2) a los sockets y asi combinar ntre ellos aplicaciones de la red.

Hay que tomar en cuenta que las aplicaciones desarrolladas con sockets estn basadas en la arquitectura Cliente-Servidor. La aplicacin necesita conocer el papel que va a desempear (cliente o servidor), ya que la estructura de la aplicacin y primitivas difieren.

II. ORIGEN

El origen de la interfaz socket se da en la Universidad de California en Berkeley, en esta Universidad disearon para el sistema operativo BSD UNIX, una interfaz para permitir a los programas acceder y comunicarse a travs de una red de computadores. Las llamadas al sistema de E/S en UNIX se basan en el proceso de open-read-write-close (abrir-leerescribir-cerrar), y esto de utiliza tanto con archivos como con dispositivos hardware. En este tipo de comunicaciones se bas el diseo de la interfaz sockets, con lo que para comunicarse con una red TCP/IP, se abre primero una conexin con la red, se leen y escriben datos a travs de ella y una vez terminados los procesos se cierra la conexin.

La INTERFAZ SOCKET, se incorpor a la versin 4.1 del sistema operativo. El S.O. BSD Unix fue muy adoptado por grandes fabricantes como Sun Microsystems Inc., Tektronix Inc. o Digital Equipment Corp., por ende la interfaz sockets estuvo disponible en gran cantidad de mquinas. La interfaz fue ampliamente aceptado por lo que se conviertio en un estndar que lo usaban la mayora de fabricantes.

Aunque originalmente fue desarrollado para el S.O. Unix hoy en da lo usan todos los Sistemas Operativos como es S.O. de Microsoft Windows, Mac, OS2, Linux, etc

III. IMPLEMENTACION EN EL S.O.La implementacin de la interfaz socket se dio segn las especificaciones con las que contaba el S.O. es asi que en Unix, cuando una aplicacin desea realizar operaciones E/S, este llama a la funcin open para crear un descriptor de fichero que se usara luego para acceder al fichero. El S.O. operativo implementa los descriptores de ficheros como un array de punteros a estructuras internas de datos. Para cada proceso, el sistema mantiene una tabla de descriptores de ficheros separados.

Cuando un proceso abre un fichero, el S.O. coloca un puntero a las estructuras de datos internas de ese fichero en la tabla de descriptores de ficheros de ese proceso y le devuelve al proceso el ndice del puntero en esa tabla. Ese ndice es el descriptor del fichero y es lo nico que el proceso tiene que recordar cuando quiere acceder al fichero.

La interfaz socket aade una nueva abstraccin para la comunicacin a travs de la red, el socket. Cada socket activo se identifica por un entero denominado su descriptor de socket. El S.O. Unix coloca los descriptores de sockets en la misma tabla de descriptores que los ficheros. De esta manera, una aplicacin no puede tener un descriptor de fichero con el mismo valor que un descriptor de socket.

Para crear un descriptor de socket se le aade al S.O. una nueva llamada al sistema: la funcin socket. Con esta funcin se crea un socket. Cuando un proceso crea un socket, el sistema coloca un puntero a las estructuras internas de ese socket en la tabla de descriptores de ficheros de ese proceso y le devuelve al proceso el ndice de esa tabla. Dicho ndice es el descriptor socket, para rellenar los detalles especficos del socket ser necesario realizar llamadas a otras funciones del API.

IV. CONCEPTOS DE DISEO

Un socket se le puede ver como un punto de conexin que comunica dos procesos entre s. Para que dos procesos pudieran comunicarse entre procesos hubo que aadir al sistema de una cantidad de funciones que permitieran a esos procesos acceder a los dispositivos de red. Cuando se consider como aadir funciones al S.O. para suministrar acceso a las comunicaciones, surgieron dos posibilidades: Definir funciones que soporten especficamente el protocolo TCP/IP. Definir funciones que soporten cualquier tipo de protocolo de comunicaciones y parametrizarlas cuando se quisiera utilizar TCP/IP.

Hay que decir que en el momento del desarrollo de la interfaz socket, el protocolo TCP/IP no estaba tan ampliamente divulgado como lo es hoy en da y existan otras posibilidades para establecer comunicaciones entre dos mquinas. Es por esta razn que los diseadores optaron por la segunda opcin: mantener la generalidad de la interfaz. Es por ello que al desvincular la interfaz de sockets de un protocolo de comunicaciones determinado se har necesario especificar ese protocolo cuando se usen esas funciones. De esta manera, cada vez que se quisiera utilizar la interfaz de sockets, ser necesario especificar:

Familia De Protocolo: Hay que indicar que tipo de protocolo se va a utilizar para realizar las distintas comunicaciones. Los protocolos TCP/IP constituyen una nica familia representada por la constante PF_INET.En el caso de comunicaciones entre procesos en la misma maquina usando el sistema de ficheros, tendramos la familia de protocolos identificada como PF_UNIX.

Tipo de Servicio: La interfaz permite seleccionar el tipo de servicio que se desea siempre y cuando el protocolo seleccionado sea capaz de suministrar distintos tipos de servicio. Aqu por tipo de servicio nos estamos refiriendo a cosas como comunicacin orientada a la conexin o bien a comunicacin no orientada a la comunicacin.

Familia de Direcciones Finales: La interfaz de protocolos especifica la direccin final de una comunicacin de una manera distinta. La direccin final de una comunicacin es el punto a travs del cual un proceso enva o recibe datos. Por ejemplo en IP, una direccin final se especifica usando la direccin IP de la mquina y el nmero de puerto de protocolo que usara el programa. En el caso de usar la familia de protocolos UNIX la direccin final ser el nombre de un fichero. La interfaz permite que las direcciones finales se puedan expresar con distintos formatos aun dentro de la propia familia de protocolos. Cada una de esas posibles representaciones correspondera a una familia de direcciones.

VI: FUNDAMENTOS

Como se ha definido los sockets son un sistema de comunicacin entre procesos de diferentes mquinas de una red. Especficamente un socket es un punto de comunicacin por el cual un proceso puede emitir o recibir informacin.

Normalmente, un servidor se ejecuta sobre una computadora especfica y tiene un socket que responde en un puerto especfico. El servidor nicamente espera, este escucha a travs del socket a que un cliente haga la peticin.

En el lado del cliente: el cliente conoce el nombre de host de la maquina en el cual el servidor se encuentra ejecutando y el nmero de puerto en el cual el servidor est conectado. Para realizar una peticin de conexin, el cliente intenta encontrar al servidor en la maquina servidor en el puerto especifico.

Si no hay problemas en la comunicacin el servidor acepta la conexin, adems de aceptar, el servidor obtiene un nuevo socket sobre un puerto diferente. Esto se debe a que necesita un nuevo socket para seguir atendiendo al socket original para peticiones de conexin mientras atiende las necesidades del cliente que se conect.

Por la parte del cliente, si la conexin es aceptada, un socket se crea de forma satisfactoria y puede usarlo para comunicarse con el servidor. Es importante darse cuenta que el socket en el cliente no est utilizando el nmero de puerto usado para realizar la peticin al servidor. En lugar de este, el cliente asigna un numero de puerto local a la maquina en la cual est siendo ejecutado. Ahora el cliente y el servidor pueden comunicarse escribiendo o leyendo en o desde sus respectivos sockets.

VI. CREACION DE UN SOCKET

Para crear un socket, se utiliza la funcin socket y se debe especificar tres parmetros:

Protocol Family: Identifica a una familia de protoclos relacionados, como TCP/IP.

Socket Type: Si el programa utilizara el socket para transmitir flujo de bytes o datagramas. SOCK_DGRAM: Para datagramasSOCKET_STREAM: Para flujo de bytes.

Protocol: Permite especificar que protocolo utilizara el socket. IPPROTO_TCP, IPPROTO_UDP

Si la llamada a socket() ha retornado el valor de -1 significa que algo ha salido bien. En este caso podemos comprobar la variable errno para saber que ha ocurrido. Los valores posibles son:

EACCES: Se deniega el permiso para crear el socket del tipo solicitado. EMFILE: La tabla de descriptores del proceso seta llena. EPROTONOSUPPORT: El protocolo especificado o el servicio solicitado no estn soportados.

Cuando se llama a la funcin socket, la implementacin del socket lo crea y devuelve un identificador de socket que identifica a un registro en la tabla de descripcin tal y como se especific en el punto III en la Implementacin en el S.O.El registro muestra la estructura de datos del socket.

Cada vez que la aplicacin llama a la funcin socket, la implementacin de este reserva memoria para una nueva estructura de datos y almacena la direccin de la familia, el tipo de socket y el protocolo.

VII. CONFIGURACION DEL SOCKET

Una vez creado el socket, utilizando la funcin socket, se pueden utilizar las funciones de configuracin dependiendo del uso que se le vaya a dar al socket.

Si se trata de un cliente orientado a la conexin, se deber llamar a la funcin connect que se encargara de almacenar toda la informacin local y remota en la estructura de datos socket.

Si se trata de un cliente no orientado a la conexin las funciones llamadas son: Maquina Local: bind Maquina remota: send.

En el caso de un servidor orientado a la conexin: Maquina Local: bind Maquina Remota: listen y accept

En el caso de un servidor no orientado a la conexin: Maquina Local: bind Maquina Remota: recvfrom

VIII. PRIMITIVAS SOCKET ORIENTADO A LA CONEXIN

El programa servidor solicita a la implementacin del socket que le asigne una estructura de datos para el socket y que le devuelva un descriptor de sockets para utilizarlo en las siguientes llamadas a funciones de la interfaz socket. Despus el servidor une el socket a un puerto de protocolo local. La funcin listen indica al socket que atienda las conexiones entrantes y que confirme las solicitudes de conexin y se encarga de poner al socket en modo de atencin pasiva.

El programa cliente tambin crea un socket, pero no necesita ocuparse de que direccin local usara el protocolo ya que se utiliza un protocolo orientado a la conexin, por tanto no llama a la funcin bind.Lo que hace es iniciar la conversin en red llamando a la funcin connect. Despues de que el cliente y el servidor establecen la conexin, pueden ocurrir comunicaciones adicionales a travs de las funciones write y read.

Socket: Crea un descriptor de socket.Close: Cierra socket.Bind: Asocia una direccin local con un socket.Accept: Espera una solicitud de conexin.Connect: Inicia conexin con conector remoto.Send, Write: Enva mensajeRecv, Read: Recibe mensajeListen: Crea cola de espera para almacenar solicitudes de conexin.Shutdown: Deshabilita al recepcin y/o el envo de datos por el socket.

IX. PRIMITIVAS SOCKET NO ORIENTADO A LA CONEXIN.

El cliente no establece una conexin con el servidor, sino que le enva datagramas mediante la llamada del sistema Sendto. Requiere como parmetro la direccin destino (servidor). Por su parte, el servidor slo tiene que invocar una llamada recvfrom. Espera hasta que arriva data de algn cliente. Recvfrom devuelve la direccin del proceso cliente junto con el datagrama de forma tal que el servidor puede enviar su respuesta al proceso correcto.

Socket: Crea un descriptor de socketClose: Cierra socketBind: Asocia una direccin local con un socketSendto: Enva mensajeRecvfrom: Recibe mensaje

Conexin de un Socket

Un programa cliente orientado a la conexin utiliza la funcin connect para configurar un socket, y requiere como parmetros:Identificador Socket que es el valor del descriptor del socket que devolvi la funcin socket.Direccin del socket remoto, es decir la direccin IP del host remoto y el puntero de protocolo y Longitud de la direccin, el tamao en bytes de la direccin del socket remoto.

En el caso de cliente no orientado a la conexin o servidores en general tienen que tender a un puerto de protocolo las solicitudes que les pueden llegar. La funcin de asignacin de nombres, bind en la API de sockets permite a un programa asociar una direccin local con un socket.

Transmisin de Datos.

Se proporciona cinco funciones para transmitir datos a travs de un socket y se divide en dos grupos:Dos funciones que requieren una direccin de destino como parmetro.Las restantes que son las utilizadas en los procesos orientados a conexin, no lo precisan.

X. CONCLUSIONES

A pesar de que originalmente fue desarrollado para el S.O. Unix hoy en da es muy usado por los diferentes S.O. y por muchos de los fabricantes a nivel mundial.

La programacin de aplicaciones en redes utilizando la interfaz de sockets, constituye una herramienta simple de utilizar y de mucha potencia para el desarrollo de aplicaciones.

Cabe decir que con el uso de la interfaz socket se puede dar el desarrollo de aplicaciones distribuidas en redes del tipo cliente servidor, que estn especialmente hechas para trabajar en internet.

V: REFERENCES (BIBLIOGRAFA)

[1] [En lnea]. http://courses.cs.vt.edu/~cs5516/spring03/slides/SocketProgramming_6.pdf [ltimo acceso: 17 Enero 2015].[2] [En lnea]. http://lia.deis.unibo.it/Courses/PMA4DS1112/materiale/10.Socket.pdf[ltimo acceso: 17 Enero 2015].[3] DOUGLAS E COMER Redes Globales de Informacin con Internet y TCP/IP