Conceptos básicos de red y programación de sockets

Hay varias razones para usar Python para la programación de redes. La simplicidad de Python lo convierte en el lenguaje más poderoso.

Conceptos básicos de la red: Computer Networking tiene como objetivo estudiar y analizar el proceso de comunicación entre diferentes dispositivos informáticos o sistemas informáticos que están conectados o en red para intercambiar información y compartir recursos. Para trabajar en red, debemos tener una red. Una red es simplemente un grupo de dos o más PC conectadas entre sí. Hay muchos tipos de redes, pero los tipos de redes más comunes son las redes de área local (LAN) y las redes de área amplia (WAN).

En una LAN, las computadoras están conectadas entre sí dentro de un área «local» (por ejemplo, una oficina o un hogar). En una WAN, las computadoras están más separadas y conectadas por líneas telefónicas/de comunicación, ondas de radio u otros medios de conexión.

¿Cómo se clasifican las redes?

Las redes generalmente se clasifican usando tres propiedades: Topología, Protocolos y Arquitectura.

Topología: especifica la disposición geométrica de la red. Las topologías comunes son bus, anillo y estrella.

Protocolo: Especifica un conjunto común de reglas y señala el uso de computadoras en la red para comunicarse. La mayoría de las redes usan Ethernet, pero algunas redes pueden usar el protocolo Token Ring de IBM. Ethernet se utiliza principalmente para redes domésticas y de oficina.

Arquitectura: Se refiere a uno de los dos tipos principales de arquitectura de red: Peer-to-peer o cliente/servidor. En una configuración de red punto a punto, no hay servidor y las computadoras simplemente se conectan entre sí en un grupo de trabajo para compartir archivos, impresoras y acceso a Internet. Se encuentran comúnmente en configuraciones domésticas y solo son prácticos para grupos de trabajo con una docena o menos de computadoras. En una red cliente/servidor suele haber un controlador de dominio NT, en el que se conectan todas las computadoras.

Este servidor puede proporcionar una variedad de servicios, incluido el acceso central a Internet, el correo (incluido el correo electrónico), el uso compartido de archivos y el acceso a la impresora, además de garantizar la seguridad de toda la red. Esto se encuentra comúnmente en configuraciones corporativas, donde la seguridad de la red es esencial.

Python para la programación de redes:

Python es el más simple de implementar entre sus pares. Además, podemos hacer casi todo con python. Podemos hacer un sitio web con python. Podemos hacer nuestra propia aplicación usando Python.

El soporte de bibliotecas de terceros proporcionadas por python lo hace ilimitado. También hay documentación adecuada para las bibliotecas de terceros, por lo que es más fácil usarlas en nuestra aplicación. Por lo tanto, Python es la elección perfecta para la programación en red.

Servicios de red de Python:

Hay dos niveles de acceso a un servicio de red en Python, como se menciona a continuación:

  • Acceso de bajo nivel
  • Acceso avanzado

En el primer caso, los programadores pueden usar y acceder al soporte de socket subyacente del sistema operativo usando las bibliotecas de Python, y los programadores pueden implementar tanto protocolos sin conexión como orientados a la conexión para la programación. También se puede acceder a los protocolos de red de aplicaciones mediante el acceso de alto nivel proporcionado por las bibliotecas de Python. Estos protocolos son HTTP, FTP y más.

Este artículo se basa principalmente en algunos de los conceptos básicos más conocidos de redes y programación de sockets en Python.

Definición de enchufes: Para comprender qué son realmente los sockets, primero debemos conocer cierta información sobre la conexión a Internet. La conexión a Internet básicamente conecta dos puntos a través de Internet para compartir datos y otras cosas. Un proceso de la primera computadora puede comunicarse con un proceso de la segunda computadora a través de una conexión a Internet.

Tiene las siguientes propiedades:

  • De confianza: Significa que mientras los cables que conectan dos computadoras sean seguros, los datos se transferirán de manera segura.
  • Punto a punto: Se establece una conexión entre dos puntos.
  • Duplex completo: Significa que la información se puede transferir de ambas formas, es decir. del cliente al mismo tiempo al mismo tiempo

Un socket es el punto final en un flujo de comunicación entre dos programas o dos canales de comunicación que operan en una red. Se crean utilizando un conjunto de solicitudes de programación llamado socket API (interfaz de programación de aplicaciones). La biblioteca de sockets de Python proporciona clases para manejar el comportamiento común como una interfaz genérica.

Los sockets usan protocolos para determinar el tipo de conexión para la comunicación puerto a puerto entre las máquinas cliente y servidor. Los protocolos se utilizan para lo siguiente:

  • Servidores de nombres de dominio (DNS)
  • dirección IP
  • Correo electrónico
  • FTP (Protocolo de transferencia de archivos)

Entonces, los sockets son puntos finales de un canal de comunicación bidireccional punto a punto. Dada una conexión a Internet, digamos entre el cliente (navegador) y el servidor (digamos codingninjas.com), tendremos dos sockets, un socket de cliente y un socket de servidor. Un socket funciona en dos partes: dirección IP + número de puerto.

Las direcciones IP son las direcciones que ayudan a identificar de manera única un dispositivo en Internet y un puerto es un punto final para la comunicación en un sistema operativo.

Programación de sockets en Python

La programación de sockets es una forma de conectar dos nodos en una red para comunicarse entre sí. Un socket o nodo escucha en un puerto específico en IP y otro socket se comunica con el otro para establecer una conexión. El servidor forma el socket de escucha y extiende el cliente al servidor. Son la columna vertebral real detrás de la navegación web. En términos más simples, hay un servidor y un cliente. La programación de socket comienza con la importación del módulo o framework de socket. Este módulo contiene métodos incorporados necesarios para crear sockets y ayudarlos a conectarse entre sí.

Algunos de los métodos importantes son los siguientes:

MétodosSuelte
socket.socket()utilizado para crear sockets (requerido tanto en el servidor como en los extremos del cliente para crear sockets)
enchufe. aceptar ( )utilizado para aceptar una conexión. Devuelve un par de valores (conn, dirección) donde conn es un nuevo objeto de socket para enviar o recibir datos y es la dirección del socket presente en el otro extremo de la conexión.
socket.bind()utilizado para vincular a la dirección especificada como un parámetro
socket.cerrar()utilizado para marcar el zócalo cerrado
socket.conectar()se utiliza para conectarse a una dirección remota especificada como un parámetro
socket.escucha()permite que el servidor acepte conexiones

Introducción a la Programación Cliente-Servidor: Ahora, a partir de la discusión anterior sobre los módulos de socket y la comprensión de la importancia de este módulo de socket, veamos cómo puede crear servidores y clientes para la programación de socket en Python.

Servidor: Un servidor es un programa, computadora o dispositivo dedicado a administrar los recursos de la red. Los servidores pueden estar en el mismo dispositivo o computadora o conectados localmente a otros dispositivos y computadoras o incluso de forma remota. Un servidor tiene un método connect() que lo vincula a una IP y puerto específicos para que pueda escuchar las solicitudes entrantes en esa IP y puerto. Un servidor tiene un método listen() que pone al servidor en modo de escucha. Esto permite que el servidor escuche las conexiones entrantes. Y finalmente el servidor tiene el método accept() y close(). El método de recepción inicia una conexión con el cliente y el método de cierre cierra la conexión con el cliente.

  • En primer lugar, importamos el socket requerido
  • Luego creamos un objeto socket y reservamos un puerto en nuestra computadora
  • Conectamos nuestro servidor al puerto especificado. Si pasa una cadena vacía, el servidor también puede escuchar las conexiones entrantes de otras computadoras. Si hubiésemos pasado 127.0.0.1 solo escucharía aquellas llamadas realizadas dentro del ordenador local
  • Después de eso, colocamos el servidor en un módem de escucha, cinco aquí significa que cinco conexiones se mantienen esperando si el servidor está ocupado y si un sexto socket intenta conectarse, la conexión es rechazada.
  • Finalmente, hacemos un bucle por un tiempo y comenzamos a aceptar todas las conexiones entrantes y cerramos esas conexiones después de enviar un mensaje de agradecimiento a cada enchufe conectado.

Cliente: Ahora necesitamos algo con lo que un servidor pueda interactuar, para esto usamos el cliente. Un cliente es una computadora o software que recibe información o servicios del servidor. En un módulo cliente-servidor, los clientes solicitan servicios de los servidores. El mejor ejemplo es un navegador web como Google Chrome, Firefox, etc. Estos navegadores web solicitan servidores web para las páginas web y los servicios requeridos según las indicaciones del usuario.

Programa del lado del cliente:

  • Primero, creamos un objeto socket
  • Luego nos conectamos a localhost en el puerto 12345 (el puerto en el que se ejecuta nuestro servidor) y, finalmente, obtenemos datos del servidor y cerramos la conexión.
  • Ahora guarde este archivo como client.py y ejecútelo desde la terminal después de iniciar el script del servidor.

Para ejecutar estos programas, ¿qué tenemos que hacer? simplemente abra nuestro símbolo del sistema, vaya a la carpeta donde hemos creado nuestro programa de cliente y servidor y luego escriba py server.py para el lado del servidor, especialmente el indicador y para ejecutar el cliente, necesitamos py client.py en un símbolo del sistema diferente. Una vez hecho todo esto, el servidor y el cliente comienzan a ejecutarse, por lo que claramente implementamos nuestra programación de socket.

👉 Aqui tienes mas python tutoriales para aprender.