SOCKETS TCP Y UDP. Implementacion. WebSockets
SOCKETS TCP Y UDP. Implementacion. WebSockets
SOCKETS TCP Y UDP. Implementacion. WebSockets
PERUANA
FACULTAD DE INGENIERÍA DE SISTEMAS E
INFORMÁTICA
TRABAJO MONOGRÁFICO
DOCENTE : ING.
CURSO :
SEMESTRE : II-2018
IQUITOS-LORETO
INTRODUCCIÓN
En la actualidad, muchos de los procesos que se ejecutan en una computadora requieren
obtener o enviar información a otros procesos que se localizan en una computadora diferente.
Para lograr esta comunicación se utilizan los protocolos de comunicación TCP y UDP.
El protocolo TCP (Transmission Control Protocol) establece un conducto de comunicación
punto a punto entre dos computadoras, es decir, cuando se requiere la transmisión de un flujo
de datos entre dos equipos, el protocolo TCP establece un conducto exclusivo entre dichos
equipos por el cual los datos serán transmitidos y este perdurará hasta que la transmisión
haya finalizado, gracias a esto TCP garantiza que los datos enviados de un extremo de la
conexión lleguen al otro extremo y en el mismo orden en que fueron enviados. Las
características que posee TCP hacen que el protocolo sea conocido como un protocolo
orientado a conexión.
Mientras tanto también existe un protocolo no orientado a la conexión llamado UDP. El
protocolo UDP no es orientado a la conexión debido a que la forma de trasmitir los datos no
garantiza en primera instancia su llegada al destino, e incluso si este llegara al destino final,
tampoco garantiza la integridad de los datos. UPD hace la transmisión de los datos sin
establecer un conducto de comunicación exclusiva como lo hace TCP, además utiliza
datagramas, los cuales contienen una porción de la información y que son enviados a la red
en espera de ser capturados por el equipo destino. Cuando el destino captura los datagramas
debe reconstruir la información, para esto debe ordenar la información que recibe ya que la
información transmitida no viene con un orden específico, además se debe tener conciencia
de que no toda la información va a llegar. El funcionamiento del protocolo UDP se puede
comparar con el servicio postal.
Asimismo, HTML5 es la nueva versión del lenguaje HTML. Provee nuevas tecnologías,
como geolocalización, bases de datos locales al cliente, web workers, y tags de video y audio,
entre otras. El protocolo Websocket comenzó siendo parte del estándar HTML5, pero luego
continuó su evolución como un estándar separado. Todas esas tecnologías en conjunto
plantean un nuevo paradigma de diseño y programación de aplicaciones web. Algunos de
estos elementos son tan nuevos que aún, al día de la fecha, no están implementados en los
principales productos del mercado.
El protocolo Websocket permite mantener una conexión full-duplex y con estado entre
cliente y servidor web. Aunque pensado para su utilización con JavaScript dentro de un
navegador web, puede ser extendido para soportar subprotocolos binarios y usarlo desde
aplicaciones que se ejecuten fuera de un cliente web.
1
INDICE
1. Socket .............................................................................................................................. 3
1.1. Definición ................................................................................................................ 3
1.2. Explicación detallada ............................................................................................... 3
1.3. Propiedades inherentes a los sockets ....................................................................... 5
1.4. Orígenes ................................................................................................................... 5
2. SOCKETS TCP Y UDP. ................................................................................................. 6
2.1. Protocolos de Transporte ......................................................................................... 6
2.2. Socket TCP .............................................................................................................. 6
2.3. Socket UDP: .......................................................................................................... 10
3. Websocket ..................................................................................................................... 13
3.1. Conocimientos previos .......................................................................................... 13
3.2. Funcionamiento del protocolo ............................................................................... 14
3.2.1. Terminología .................................................................................................. 14
3.2.2. Requerimientos de Websocket ....................................................................... 15
3.2.3. Descripción del protocolo............................................................................... 17
3.3. Websocket con HTML5: Un nuevo paradigma de desarrollo web ....................... 22
3.3.1. La web pre-AJAX........................................................................................... 22
3.3.2. La web con HTML5 ....................................................................................... 22
3.3.3. La nueva web .................................................................................................. 24
3.4. Posibles usos .......................................................................................................... 25
4. Referencias .................................................................................................................... 26
2
1. SOCKET
1.1. Definición
Socket designa un concepto abstracto por el cual dos programas (posiblemente situados
en computadoras distintas) pueden intercambiar cualquier flujo de datos, generalmente
de manera fiable y ordenada.
Los sockets son una forma de comunicación entre procesos que se encuentran en
diferentes máquinas de una red, los sockets proporcionan un punto de comunicación por
el cual se puede enviar o recibir información entre procesos.
Los sockets tienen un ciclo de vida dependiendo si son sockets de servidor, que esperan
a un cliente para establecer una comunicación, o socket cliente que busca a un socket de
servidor para establecer la comunicación.
3
• Un par de direcciones del protocolo de red (dirección IP, si se utiliza el protocolo
TCP/IP), que identifican la computadora de origen y la remota.
• Un par de números de puerto, que identifican a un programa dentro de cada
computadora.
Los sockets permiten implementar una arquitectura cliente-servidor. La comunicación
debe ser iniciada por uno de los programas que se denomina programa "cliente". El
segundo programa espera a que otro inicie la comunicación, por este motivo se denomina
programa "servidor".
4
1.3. Propiedades inherentes a los sockets
Las propiedades de un socket dependen de las características del protocolo en el que se
implementan. El protocolo más utilizado es Transmission Control Protocol; una
alternativa común a éste es User Datagram Protocol.
Cuando se implementan con el protocolo TCP, los sockets tienen las siguientes
propiedades:
1.4. Orígenes
En los orígenes de Internet, las primeras computadoras en implementar sus protocolos
fueron las de la Universidad de Berkeley. Dicha implementación tuvo lugar en una
variante del sistema operativo Unix conocida como BSD Unix. Pronto se hizo evidente
que los programadores necesitarían un medio sencillo y eficaz para escribir programas
capaces de intercomunicarse entre sí. Esta necesidad dio origen a la primera
especificación e implementación de sockets, también en Unix. Hoy día, los sockets están
implementados como bibliotecas de programación para multitud de sistemas operativos,
simplificando la tarea de los programadores.
5
2. SOCKETS TCP Y UDP.
2.1. Protocolos de Transporte
UDP (User Datagram Protocol): Es un protocolo no orientado a conexión. Es decir
cuando una maquina A envía paquetes a una maquina B, el flujo es unidireccional. La
transferencia de datos es realizada sin haber realizado previamente una conexión con la
máquina de destino (maquina B), y el destinatario recibirá los datos sin enviar una
confirmación al emisor (la maquina A). Esto es debido a que la encapsulación de datos
enviada por el protocolo UDP no permite transmitir la información relacionada al
emisor. Por ello el destinatario no conocerá al emisor de los datos excepto su IP.
La creación del socket en el servidor se remite a crear el socket, indicar porque puerto
se harán las escuchas y esperar a la llamada de un cliente para aceptar la conexión, en
cambio un cliente creará el socket e indicará donde se encuentra y por qué puerto quiere
conectarse, de esta forma Cliente y Servidor crearán una conexión.
Servidor:
Para crear los socket se crea un objeto del tipo ServerSocket, este método pertenece a la
clase java.net.Serversocket
6
Una vez que hemos creado el objeto socket mandamos un parámetro que indicará el
puerto por el que se realzará las comunicaciones.
Cliente:
Primero crea un objeto del tipo Socket que pertenece a la clase java.net.Serversocket,
Después se obtiene un objeto InetAddress, y usando el método getByName le indicamos
donde se va a ejecutar el cliente, en nuestro caso indicamos que será en localhost.
Finalmente creamos un objeto de tipo socket al que pasaremos la dirección donde se está
ejecutando el cliente, y el puerto por donde se conectará al servidor.
Ejemplo TCP: El servidor esperará a un cliente y mostrará todos los mensajes que el
cliente le envíe. El cliente solo mandará mensajes al servidor, y al escribir la palabra
“fin” terminarán ambos programas.
7
8
9
2.3. Socket UDP:
En este ejemplo vemos que cada paquete de datos podrá tansportar un máximo de 256
bytes por paquete, que es el tamaño máximo que se intercambia el servidor y el cliente.
Además, cuando queremos enviar datos, especificamos el buffer de los datos que
queremos enviar, en nuestro caso 256, la longitud máxima de datos, la dirección y el
puerto de destino del datagrama. La dirección destino se especifica con el objeto
InetAddress, mientras que el puerto es un número entero (6000). El código esta bastante
comentado y tiene bastantes explicaciones que pueden ayudaros.
Comentando un poco el código, podemos ver que el cliente para enviar datos usará el
método send() de la clase DatagremSocket.
Por otro lado el servidor para recibir datos lo que hace es crear un DatagramSocket para
recibir paquetes especificando el número de puerto en el constructor. De esta forma, el
servidor estará esperando por el puerto especificado cualquier paquete entrante.
10
11
12
3. WEBSOCKET
3.1. Conocimientos previos
El protocolo Websocket permite mantener una conexión full-duplex y con estado entre
cliente y servidor web.
Aunque pensada para protocolos textuales, esta tecnología puede ser extendida para
soportar protocolos binarios (Actualmente Javascript no soporta la transferencia de datos
en modo binario). Actualmente, el W3C está definiendo la API de Javascript, la IETF
está especificando el protocolo Websocket y las empresas lo están empezando a incluir
en sus navegadores y servidores.
13
3.2. Funcionamiento del protocolo
En esta sección se detallará el protocolo Websocket conforme aparece definido en la
RFC The Websocket protocol.
3.2.1. Terminología
14
• Websocket Sub-Protocol (Subprotocolo): Es el subprotocolo negociado para
utilizar en el canal de comunicación. Este protocolo especifica el framing a
utilizar, la codificación, el timing, etc.
3.2.2. Requerimientos de Websocket
5. El protocolo debe poder diferenciar entre protocolos binarios y basados en texto plano.
1. El cliente debe ser capaz de establecer una conexión Websocket mediante una
negociación (handshake) bien definida.
15
2. El protocolo debe proveer un método para cerrar una conexión cuando el cliente lo
solicite.
durante el handshake.
5. Debe poder enviar y recibir tanto datos binarios como en texto plano2
1. El servidor que acepta peticiones de Websocket por parte de un cliente debe utilizar
un handshake bien definido.
2. Debe poder enviar y recibir tanto datos binarios como en texto plano.
1. El protocolo debe poder operar con los proxies con la misma facilidad que
Requerimientos de seguridad
Estos requerimientos aún no han sido incluidos en el draft, pero son cuestiones que se
tendrán en cuenta a futuro.
1. El protocolo debe utilizar el modelo de seguridad basado en origen usada por los
navegadores web para restringir las páginas que pueden contactar al servidor de
Websocket cuando se utiliza el protocolo desde una página web.
2. Cuando se lo utiliza directamente (no desde una página web), el protocolo debe utilizar
un modelo de seguridad equivalente al utilizado por HTTP o HTTPS cuando se los usan
directamente.
3. El protocolo debe ser robusto frente a ataques de cross-protocol y cross-site.
16
3.2.3. Descripción del protocolo
Ya vimos que la unidad para el envío de datos es el mensaje. Sin embargo, el envío y
recepción de mensajes se produce al nivel de la aplicación.
También mencionamos que en capas más bajas el PDU3 se llama frame. Los frames
tienen un tipo asociado y el protocolo define estos tipos de frames:
• Datos en texto plano con formato UTF-8. En este caso, la interpretación de los
datos se delega a la aplicación.
• Frames de Control, usados para la señalización del protocolo. Por ejemplo, para
mantener la conexi´on o para cerrar la sesión.
A pesar de los distintos tipos de frames, el protocolo de Websocket está diseñado para
que haya la menor cantidad de datos de framing y así ahorrar espacio.
Conceptualmente, Websocket es una capa justo por encima de TCP que agrega:
Además, por recomendación de la IANA, Websocket usa por default los puertos TCP/80
y TCP/443 para las conexiones sin cifrar y cifradas, respectivamente.
Establecimiento de la conexión
La forma más sencilla de establecer la conexión es a través del puerto 80, pero se corre
el riesgo de que un proxy intermedio intercepte los mensajes y los descarte. La forma
más segura es establecer una conexi´on cifrada con SSL/TLS al puerto 443.
Cuando un cliente solicita una conexi´on, el servidor recibe una petición GET con la
oferta de Upgrade al protocolo Websocket. Para servicios con demasiada carga se
pueden balancear varios servidores de Websocket.
17
La URL para el protocolo es WS://Servidor/Recurso. Para las conexiones cifradas, el
protocolo usados es WSS.
Framing
En esta sección se presenta la forma que tiene un frame de Websocket. Sin entrar en
demasiados detalles sobre cada campo que conforma el frame, pues no es la finalidad de
este trabajo analizar con detenimiento el protocolo, se explicarán aquellas partes
importantes para este documento.
La Figura detalla un frame de Websocket t´ıpico. Hay que aclarar que el programador
trabaja tan sólo a partir de los datos de la aplicación. Es decir, no debe considerar
cuestiones tales como la longitud del frame o el tipo de frame, pues esto lo resuelve la
API intermedia. Por último, se debe tener en cuenta que la unidad de trabajo es el
mensaje, y que varios frames componen dicho mensaje.
18
FIN
Es un campo de 1 bit que indica si es el fragmento final del mensaje. Para el caso de
mensaje pequeños, el primero fragmento también puede ser el último.
RSVx
Cada campo reservado tiene una longitud de 1 bit y su valor debe ser 0, a menos que se
negocie una extensión que defina un significado para esos campos.
Opcode
Indica la forma en que debe interpretarse el payload. Más adelante se mencionan los
tipos básicos de mensajes.
Indica la longitud del payload y tiene 7 bits (0 a 127). La longitud marcada es la longitud
de la extensión de datos más la longitud de los datos de la aplicación.
Extensión de datos
En principio, puede ocupar N bytes, y es 0 a menos que haya presente un bit o un opcode
reservados. En este caso el protocolo interpreta que se negoció una extensión.
19
Datos de la aplicación
Son los datos de la aplicación, con una longitud arbitraria. Luego de la extensión se
considera que el resto son bytes de datos de la aplicación.
Frames de control
Son frames que se usan para comunicar el estado del Websocket. Todos los frames de
control deben tener un tamaño de 125 bytes o menos y no deben fragmentarse.
Las aplicaciones no deben enviar más mensajes luego de haber enviado un frame de
cierre.
Si el cuerpo del mensaje de cierre coincide con el cuerpo de un mensaje de cierre enviado
previamente, se lo considera un ACK. De otra forma, se lo considera una solicitud para
cerrar el enlace.
Cuando uno de los extremos recibe un mensaje de cierre, debe enviar el ACK tan pronto
como pueda.
Cuando un extremo recibe un ping, debe enviar un pong en respuesta, tan pronto como
le sea posible. Los cuerpos del ping y el pong deben coincidir.
Idem Ping.
Frames de datos
Cualquier otro tipo de frame que no aparece listado en la sección anterior son frames de
datos. es decir, datos de la aplicación. Los frames de datos se dividen en dos:
Texto plano
20
El payload es texto en formato UTF-8.
Binarios
Extensiones
El handshake inicial está diseñado para ser compatible con los servidores HTTP y demás
software intermedio (Proxies, por ejemplo), de forma que se pueda utilizar tanto
Websocket como HTTP en el mismo puerto. Por esta razón, el handshake de apertura es
un mensaje HTTP solicitando pasar a Websocket:
El orden de los encabezados no tiene importancia. Es por medio de ellos que un cliente
especifica subprotocolos, cookies, etc.
Para cerrar la conexión, cualquiera de los dos extremos puede enviar un mensaje con un
opcode de cierre de conexi´on. Cuando el otro extremo lo recibe, envía un ACK de cierre.
Es de notar que luego de ser implementado en Chrome, Firefox y Opera, Websocket fue
deshabilitado en las siguientes versiones de esos navegadores hasta mediados del 2011
debido a una vulnerabilidad en el mecanismo de handshaking.
21
3.3. Websocket con HTML5: Un nuevo paradigma de desarrollo web
Anteriormente se presentaron los conceptos básicos relacionados con la Web y se habló
de las nuevas tecnologías que introduce HTML5, como son los web workers, las bases
de datos del lado del cliente y, por supuesto, el protocolo Websocket.
La web anterior a Ajax se caracteriza por páginas HTML con una baja interacción por
parte del usuario.
Las páginas web tienen una extensión importante y el cliente descarga todo el contenido
de una vez, tratando de optimizar el uso de su cache.
Es necesario mencionar que las conexiones a Internet anteriores al año 2005 tenían un
ancho de banda inferior al actual y la comunicación vía modems era la norma.
Entiende que ahora Javascript es esencial para toda aplicación web, de ahí que establezca
pautas para la utilización de threads en Javascript, conocidos bajo el nombre de
WebWorkers.
La movilidad es otra característica creciente de la web actual. Sin embargo, los medios
de comunicación subyacentes no proveen una disponibilidad total de Internet a los
dispositivos móviles. Es así que sería deseable que las aplicaciones web pudieran
almacenar datos de forma local, tanto para su utilización posterior de forma off-line,
como para su modificación y posterior carga a Internet una vez el dispositivo haya
obtenido una nueva conexión. Las bases de datos locales sirven a este propósito.
22
Gracias a las bases de datos locales, en el caso más extremo el cliente puede descargar
la aplicación web, trabajar en modo off-line y luego cargar la información a Internet.
Para el caso general, se puede almacenar información de sesión sin necesidad de recurrir
al servidor web.
23
Para resolver esta situación la W3C propone el nuevo protocolo Websocket que permite
implementar este tipo de comunicación entre cliente y servidor web.
Dado que Websocket se puede integrar con otros protocolos, como IMAP o XMPP, se
puede desacoplar al servidor web de todo ese tráfico y procesamiento. La Figura-4.3
muestra la forma en que se acoplan estos servicios actualmente.
Por otro lado, la Figura describe la arquitectura aquí planteada, en donde el cliente web
dialoga directamente con el servidor de Websocket. Más aún, notar que el cliente no
tiene que preguntar constantemente si hay o no mensajes nuevos; es el servidor de
Websocket quien le avisa cuando tiene un mensaje nuevo.
Las nuevas tecnologías que conforman HTML5 perfilan la web hacia un ambiente más
social e interactivo, con aplicaciones escritas en HTML, CSS y Javascript, utilizando
JSON o XML sobre Websocket para el intercambio de datos.
AJAX y WebWorkers se encargan del manejo de eventos, mientras que Comet tiende a
desaparecer gradualmente. Sin embargo, la desaparición de Comet no implica el fin para
los productos que lo implementan. Por ejemplo, Aped (el servidor de Comet usado en
este trabajo) ya implementa Websocket como mecanismo de comunicación.
24
3.4. Posibles usos
El principal objetivo del protocolo son las RIAs, Rich Internet Applications. En
particular, aquellas cuyo estado se deba conocer en tiempo real. Un ejemplo típico de
esta clase de aplicaciones es un chat basado en web, donde los usuarios deben ver las
actualizaciones de los mensajes instantáneamente.
Otra ventaja importante que presenta Websocket es su integración directa con otras
tecnologías. De esta forma se libera al servidor web de esta carga. Un ejemplo de estos
son los webmails. Estos sistemas consisten de tres capas: El cliente web, el servidor web
con la aplicación web y el servidor de email. Usando Websocket es posible implementar
una aplicación web que interactúe con el servidor de mail directamente, sin pasar a través
del servidor web. Esto, claramente, libera recursos del lado del servidor (Aunque lleva
esa complejidad al servidor Websocket y al cliente web, de ahí que sean tan importantes
las tecnologías de Web workers y bases de datos del lado del cliente).
• Trabajo colaborativo basado en la web, donde, por ejemplo, los escritores vean
en tiempo real los cambios hechos por los demás.
• Plataformas de subastas y bolsas de comercio.
• Como transporte para otros protocolos binarios o textuales, como Jabber6
• Chats basados en web.
• Sistemas de conferencias web y meetings online, similar a webex.
• Sistemas para administrar computadoras de forma remota.
• Integración de HTTP con otros protocolos con estado mediante proxies
Debe notarse que Websocket no está diseñado para el streaming de audio y video, pues
se ejecuta encima de TCP, que no es un protocolo de transporte conveniente para hacer
streaming en tiempo real. Además, para esto HTML5 tiene los tags de audio y video.
Por último, no hay que olvidar que Websocket está inserto en un contexto más amplio,
en particular, HTML5. Son las características de HTML5 junto con Websocket los que
posibilitan la creación de nuevas RIAs eficientes y basadas en protocolos abiertos.
25
4. REFERENCIAS
Banchoff Tzancoff, M. (06 de Diciembre de 2011). Websocket:Comparaci´on de
performance e. Recuperado el 28 de Diciembre de 2018, de
http://sedici.unlp.edu.ar/bitstream/handle/10915/47014/Documento_completo__.pdf
?sequence=1
Bonilla, I. (07 de Noviembre de 2012). Sockets: Protocolos de comunicación TCP y UDP.
Recuperado el 28 de Diciembre de 2018, de http://dsp.mx/blog/sistemas-de-
informacion/49-sockets-tcp-udp
Paszniuk, R. (12 de Setiembre de 2013). Sockets en Java (UDP y TCP). Recuperado el 28 de
Diciembre de 2018, de https://www.programacion.com.py/escritorio/java-
escritorio/sockets-en-java-udp-y-tcp
Wikipedia. (s.f.). Socket de Internet. Recuperado el 2018 de diciembre de 28, de
https://es.wikipedia.org/wiki/Socket_de_Internet
26