Bienvenidos sean a este post, hoy hablaremos sobre una forma de comunicacion en la red de redes como son los Sockets, si bien no vamos a ahondar en este tipo de comunicaciones si veremos sus caracteristicas y otros detalles, comencemos estableciendo que el tipo de comunicacion entre sockets se lo suele denominar cliente/servidor, la caracteristica de este tipo de comunicacion es que siempre dispone de dos programas, uno que sera el servidor y otro el cliente.

Anuncios

El servidor se encargara de centralizar el servicio y de ofrecer los mismos en un direccion conocida, p.e. un servidor web, y el cliente sera el encargado de permitir al usuario interactuar con el servidor, veamos en la siguiente tabla el comportamiento de estos dos programas:

PasoServidorCliente
1A la espera de algun clienteSe conecta al servidor
2Espera solicitud del clienteSolicita informacion al servidor
3Envia respuestaRecibe respuesta
4Ir al punto 2 si necesita mas informacionIr al punto 2 en caso de otra solicitud
5Cierra la conexionCierra la conexion
6Vuelve al punto 1

Este tipo de conexion utiliza el protocola TCP/IP, el protocolo de Internet y utilizado en todos los S.O y redes tanto de compañias como hogareñas, el cual es el encargado de transportar de una manera fiable la informacion de un dispositivo a otro. Para poder utilizarla tenemos la interfaz Socket, la cual sera encargada de definir las reglas que un programa ha de seguir para utilizar los servicios a nivel de transporte en TCP/IP, pero que es un socket? Podemos definir a un socket como el punto final de una comunicacion bidireccional entre dos programas que intercambian informacion sobre la red, tanto interna como en la internet.

En cualquier dispositivo (PC, Tablet, Movil, Consola, etc) dispone de multiples conexiones de tipo socket, para evitar inconvenientes cada conexion tiene un id, el id de conexion se compone de dos partes: uno sera la direccion IP del equipo y el otro sera un numero de puerto, en el protocolo TCP/IP hay algunos puertos que estan definidos para algunas conexiones, por ejemplo:

  • Puerto 21, FTP
  • Puerto 22, SSH
  • Puerto 80, Http
  • Puerto 443, Https
  • Puerto 5500, VNC

Tecnicamente, nosotros no podriamos utilizar estos puertos para nuestras conexiones porque estos ya estan asignados, les recomiendo esta pagina para ver el listado de los puertos TCP ya asignados:

Anuncios

https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers

Del listado en general los primeros 4000 puertos estan establecidos por la OSI puede ocurrir que algun programa no estandar, como un videojuego, utilice un puerto de forma predeterminada, p.e. DOOM usa el 666 😎, y para nosotros desde el puerto 6000 podriamos usar cualquiera porque realmente ya no son estandar, a su vez la conexion puede ser de dos tipos: TCP y UDP, a continuacion explicaremos cada uno de ellos.

Sockets stream (TCP)

Este tipo de conexion utiliza el metodo TCP, esto significa que nos permite una transmision de informacion continua permitiendo una mejor comunicacion porque a este metodo se lo conoce como un protocolo de conexion seguro porque para transmitir la informacion antes debe establecer la conexion, su forma de trabajo es la siguiente: Tendremos por un lado un socket encargado de atender las peticiones de conexion (servidor) y otro socket que solicita la conexion (cliente), una vez que estos dos sockets estan conectados se establece la comunicacion entre ambos.
Esta forma de trabajo nos permite tener una comunicacion segura entre ambos sockets y nos provee una forma transparente de manipular errores, esto significa que si detecta que alguna parte de la informacion no ha llegado a su destino la volvera a transmitir hasta que se haya realizado de forma exitosa.

Sockets Datagram (UDP)

Este tipo de conexion al contrario del metodo antes descripto utiliza UDP lo cual significa que este metodo transmite sin necesidad de haber establecido una conexion previa como hace TCP, esto nos da un protocolo que es muy eficiente a la hora de mandar informacion pero a diferencia de TCP no tendremos una notificacion de si la informacion llego o no a destino y en caso de algun error no se volvera a enviar la informacion. Tambien su principal diferencia es que la informacion en forma de paquetes o datagramas, los cuales tienen un tamaño limitado y como dijimos antes no siempre estos pueden llegar a destino o llegar en el orden que los enviamos, su principal ventaja con respecto al anterior es la performance porque apenas sobrecarga la informacion enviada y como no necesita establecer la comunicacion los retrasos son minimos, ideal para cuando hacemos transmisiones en tiempo real como audio y video sobre internet.
Este protocolo no posee un metodo de notificacion de si llego o no la informacion y en caso de necesitar uno deberemos desarrollarlo nosotros, un ultimo dato el tamaño de los datagramas es de 1500 bytes y dependiendo de la informacion que enviemos este se fraccionara o no.

Como pueden ver cada metodo tiene sus pros y contras, si nosotros no necesitamos que la informacion llegue si o si y de forma correcta podemos utilizar el metodo UDP donde enviaremos la informacion y listo, con esto ganaremos en tiempo y performance y como dijimos antes es ideal para cuando hacemos un streaming de audio y/o video, en cambio si nosotros necesitamos que la informacion llegue fidedigna a como la enviamos en ese caso utilizaremos TCP porque es el metodo mas seguro para enviar nuestra informacion y dispondremos de la posibilidad de poder controlar el flujo de la misma.

Anuncios

En resumen, hoy hemos visto que son los sockets, como son, la comunicacion cliente/servidor, los metodos que usan para enviar su informacion, los pros y contras de cada uno de ellos, una descripcion de los metodos y su forma de trabajo, espero les haya sido util sigueme en Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00