Está en la página 1de 19

Programación de sockets

Mag. José Antonio Brenes Carranza


CI-0121 Redes de comunicación de datos
CI0123 Proyecto integrador de sistemas operativos y redes de comunicación de datos
Grupo 02 I Ciclo 2023

1
Agenda

• ¿Qué se ha dicho hasta el momento?


• ¿Qué son los sockets?
• Modelo cliente-servidor
• Comunicación intra-procesos vs inter-procesos
• Requerimientos para la programación de sockets
• Primitivas/funciones/métodos de los sockets
• ¿Cómo programar sockets en otros lenguajes?

2
¿Qué se ha dicho hasta el momento…?

• Sockets nos ayudan a comunicar mensajes fuera del


computador
• Comunicación intra-procesos vs inter-procesos
• Se necesitan ciertas cosas para programarlos y que funcionen
• Red de comunicación
• Direcciones IP
• Puertos
• Decidir el tipo de direccionamiento
• Decidir el tipo de socket (stream/datagram)
• Modelo cliente-servidor
• Primitivas (funciones/métodos) de los sockets
• Etc

• Todo lo cual veremos en detalle en el curso CI-0121

3
Por ahora… revisemos detalles de los sockets

• ¿Qué son los sockets?


• Los sockets son un mecanismo que permite conectar dos nodos en
una red para comunicarlos entre sí. Uno de los socket (nodo A)
escucha en un puerto particular y una dirección IP, mientras que el
otro socket (nodo B) alcanza al primero para establecer la
comunicación. El primero, el servidor, escucha por solicitudes de
conexión, mientras que el segundo, el cliente, le solicita al servidor la
conexión para comunicarse.

Proceso Proceso
(nodo A) (nodo B)

socket socket

Red

4
Modelo cliente-servidor

• Un modelo muy utilizado para comunicaciones entre nodos en


una red.
• Inicialmente, se requiere de un nodo servidor que escuche
(listen) por peticiones de conexión.
• Requiere entre otras cosas: dirección IP válida, puerto de escucha.
• Uno o varios clientes, pueden solicitar al servidor, una
conexión.

• Ejemplos:
• Servicios web
• Servicios de correo
• Servicios de almacenamiento

5
Comunicación intra-procesos vs inter-procesos

• Comunicación intra-procesos
• “Dentro del computador”
• Usa procesos hijos, semáforos, memoria compartida.
• Ejemplo: ejercicio buzón, piporseries.

• Comunicación inter-procesos
• “Fuera del computador”
• Imagínense que en cada computador hay un proceso (socket)
comunicándose con un proceso en otro computador (otro socket).
• En el caso del servidor se tendrán varios procesos (uno por cliente).
• Ejemplo: servicios de correo → un servidor de correo atiende a
muchos clientes

6
Requerimientos para la programación de sockets

• Red de comunicación de datos

Proceso Proceso

socket socket

Red

7
Requerimientos para la programación de sockets (2)

• Red de comunicación de datos

Proceso Proceso

socket socket
Pila de Pila de
red del red del
SO SO

Red

8
Requerimientos para la programación de sockets (3)

• Red de comunicación de datos


Capa de Capa de
aplicación aplicación
Proceso Proceso
Capa de Capa de
presentación presentación

socket Pila de Capa de sesión Capa de sesión Pila de socket


red del Capa de Capa de red del
SO transporte transporte SO
(Modelo Capa de red Capa de red (Modelo
OSI) OSI)
Capa de enlace Capa de enlace
de datos de datos

Capa física Capa física

Red

9
Requerimientos para la programación de sockets (4)

• Red de comunicación de datos

Proceso Capa de
Proceso
Capa de
aplicación aplicación

socket Pila de Pila de socket


red del Capa de Capa de red del
SO transporte transporte SO
(Modelo Capa de red Capa de red (Modelo
TCP/IP) TCP/IP)
Acceso a datos Acceso a datos

Red

10
Requerimientos para la programación de sockets (5)

• Direccionamiento IP
• Tanto en el cliente como en el servidor
• En el servidor para localizar y alcanzar el socket
• En el cliente para que el servidor envíe la respuesta

• Puertos
• En el servidor se debe especificar el puerto de “escucha”
• Cuando se crea la conexión, se “otorga” un puerto específico al
subproceso que atenderá la comunicación en el servidor.
• Puertos válidos
• Existe ya toda una lista de puertos asignados a servicios específicos
• https://es.wikipedia.org/wiki/Anexo:N%C3%BAmeros_de_puertos_de_red

• Para nuestros sockets puede usarse un puerto entre 1024-65535 libre

11
Requerimientos para la programación de sockets (6)

• Direccionamiento IP + Puertos
Proceso*
Proceso* Proceso+ Proceso+
Proceso*
socket Proceso+ socket
Pila de Proceso* Pila de
IP: 1.2.3.4 red del red del IP: 1.2.3.5
Puerto: SO SO Puerto:
10000 15423

Red

*/+ Pueden compartir misma dirección IP, pero puerto debe ser distinto

12
Requerimientos para la programación de sockets (7)

• Tipo de direccionamiento
• IPv4 → direcciones de 32 bits de la forma x.x.x.x, dónde x~[0,255]
• AF_INET
• IPv6 → direcciones de 128 bits de la forma a:b:c:d:e:f:g:h, donde
a,b,c,d,e,f,g,h ~ [0000,FFFF]
• AF_INET6

• Tipo de socket
• Define las propiedades de la comunicación: confiabilidad, secuencia
de mensajes, velocidad de conexión, etc.
• Socket stream (ej. uso en transacciones bancarias)
• SOCK_STREAM → TCP (orientado a la conexión – capa de transporte)
• Socket datagram (ej. uso en videojuegos, videoconferencias)
• SOCK_DGRAM → UDP (sin conexión – capa de transporte)

13
Primitivas/funciones/métodos de los sockets

• Sin entrar en muchos detalles, se tienen al menos los


siguientes métodos:
• Socket → crear un nuevo socket
• Bind → vincular un socket a una dirección local
• Listen → escuchar por conexiones nuevas
• Accept → bloquear proceso que pide la conexión hasta que
esta sea establecida
• Connect→ establecer una conexión
• Send → enviar datos a través del socket
• Receive → recibir datos desde la conexión
• Close → cerrar la conexión y liberar el puerto

14
Primitivas/funciones/métodos de los sockets (2)

• En sockets del tipo SOCK_DGRAM, se tienen:


• Servidor
• Socket
• Bind
• Send
• Receive

• Cliente
• Socket
• Send
• Receive
• Close

15
Primitivas/funciones/métodos de los sockets (3)

• En sockets del tipo SOCK_STREAM, se tienen:


• Servidor
• Socket
• Bind
• Listen
• Accept
• Send
• Receive
• Close
• Cliente
• Socket
• Connect
• Send
• Receive
• Close

• ¡Importante! ➔ para lograr el establecimiento de la conexión, esta debe


negociarse entre ambos procesos, esto se realiza mediante el mecanismo
TCP “three-way handshake”
• después entraremos en detalle...

16
¿Cómo programar sockets en otros lenguajes?

• Python (estaremos trabajando con estos más adelante)


• https://realpython.com/python-sockets/

• C#/.Net (con estos no)


• https://www.geeksforgeeks.org/socket-programming-in-c-sharp/

• Java (con estos menos)


• https://www.geeksforgeeks.org/socket-programming-in-java/

17
Gracias por su atención!

18
19

También podría gustarte