Categories
redes web

Peticiones HTTP

Los tipos de peticiones web más comunes son los siguientes:

  • GET
    • Es la petición más común y se utiliza para solicitar recursos específicos a través de una URL. El servidor responde enviando el recurso solicitado. Esta petición es idempotente, lo que significa que no debe tener un impacto diferente en el servidor si se repite varias veces.
  • POST
    • Se utiliza para enviar datos al servidor, generalmente como parte de un formulario HTML. Los datos enviados con una petición POST son incluidos en el cuerpo de la petición, en lugar de estar presentes en la URL. Esta petición no es idempotente, lo que significa que puede tener un impacto diferente en el servidor cada vez que se realiza.
  • PUT
    • Se utiliza para enviar datos al servidor y reemplazar completamente el recurso existente en la ubicación especificada. Si el recurso no existe, se crea uno nuevo. Es idempotente, lo que significa que el resultado es el mismo independientemente de cuántas veces se repita la petición.
  • DELETE
    • Se utiliza para solicitar al servidor que elimine el recurso especificado en la URL. Al igual que PUT, es idempotente.
  • PATCH
    • Se utiliza para enviar datos al servidor para realizar modificaciones parciales en el recurso identificado. A diferencia de PUT, PATCH no reemplaza completamente el recurso, sino que realiza actualizaciones específicas en él.

Estos son algunos de los tipos de peticiones web más comunes. Además de estos, también existen otros métodos menos utilizados, como OPTIONS, HEAD, TRACE, etc. Cada tipo de petición tiene un propósito específico y se utiliza según las necesidades de la aplicación web y el manejo de los recursos del servidor.

Categories
redes web

Partes de una URL

Una URL (Uniform Resource Locator, por sus siglas en inglés) es una dirección web que se utiliza para identificar de manera única la ubicación de un recurso en Internet. Las partes principales que conforman una URL son las siguientes:

  • Esquema (Scheme): El esquema especifica el protocolo de comunicación que se utilizará para acceder al recurso. Algunos ejemplos comunes de esquemas son “http://” para páginas web normales, “https://” para páginas web seguras con cifrado SSL/TLS, “ftp://” para transferencia de archivos, “mailto://” para direcciones de correo electrónico, etc.
  • Nombre de dominio (Domain Name): El nombre de dominio identifica la ubicación específica del recurso en Internet. Por ejemplo, en “https://www.ejemplo.com“, el nombre de dominio es “www.ejemplo.com“. El nombre de dominio se compone de dos partes principales: el subdominio (opcional) y el dominio de nivel superior (TLD, por sus siglas en inglés). En este caso, “www” es el subdominio y “ejemplo.com” es el dominio de nivel superior.
  • Ruta (Path): La ruta es la ubicación específica del recurso dentro del servidor. Indica la estructura de directorios y archivos en el servidor web que llevan al recurso deseado. Por ejemplo, en “https://www.ejemplo.com/carpeta/recurso.html“, la ruta es “/carpeta/recurso.html”.
  • Consulta (Query): La consulta es una cadena de caracteres opcional que se utiliza para pasar información adicional al servidor. Es comúnmente utilizado en aplicaciones web para enviar parámetros o datos específicos. La consulta se inicia con el símbolo “?” y puede contener múltiples pares clave-valor separados por el símbolo “&”. Por ejemplo, en “https://www.ejemplo.com/recurso.php?parametro1=valor1&parametro2=valor2“, la consulta es “?parametro1=valor1&parametro2=valor2”.
  • Fragmento (Fragment): El fragmento identifica una sección específica dentro del recurso enlazado, generalmente utilizado en páginas web que contienen anclajes internos. El fragmento se inicia con el símbolo “#”. Por ejemplo, en “https://www.ejemplo.com/pagina.html#seccion“, el fragmento es “#seccion”.

Estas son las partes básicas que componen una URL web. Cada una de ellas puede estar presente o ser opcional, dependiendo del tipo de recurso y cómo se accede a él.

Categories
Linux redes

Cómo monitorear la velocidad de internet con speedtest-cli y iperf3 desde Python

En ocasiones nos gustaría poder saber cómo se ha estado comportando nuestra velocidad de internet o solo nos gustaría comprobar si estamos obteniendo la velocidad que tenemos contratada con nuestro proveedor de internet. Como averiguaremos esto es muy sencillo y solo necesitamos una computadora con acceso a internet y un poco de paciencia.

Requisitos

Obtener código fuente

Para poder monitorear el desempeño de nuestra red es necesario obtener el código fuente que se encargará de obtener las mediaciones programaticamente. El código se puede obtener desde la siguiente dirección

https://github.com/nestortechtips/monitor-velocidad/archive/refs/heads/main.zip

Dentro del archivo zip nos encontraremos con la siguiente estructura de archivos

.
|____requirements.txt
|____README.md
|____main.py

Instalar dependencias

Para que se pueda ejecutar la biblioteca iperf3 sin incovenientes se require instalar la biblioteca homónima en el sistema operativo. A continuación mostraremos cómo hacerlo en Ubuntu 20.04

apt-get update && apt-get install iperf3 -y

Ahora instalaremos las bibliotecas requeridas por nuestro programa de Python, el cuál utiliza Python 3+ (en caso de no tener Python instalado en nuestro sistema podemos instalarlo siguiendo la documentación oficial)

pip install -r requirements.txt

Comprendiendo el código

Ya que contamos con las dependencias del programa, tomemos un momento para analizar el código.

El programa consiste de un par de métodos que se encargan de obtener las mediciones de iperf3 y speedtest-cli además de un método principal que se encarga de orquestrar la ejecución del programa

obtener_velocidad_internet_speedtest_cli

Este método se encarga de obtener la medición de velocidad de speedtest. La línea test_velocidad_subida = speedtest.Speedtest() se encarga de crear el objeto por el que obtendremos el servidor con el que se realizará prueba (el servidor se obtiene de forma aleatoria pero es posible especificar uno en particular) y las velocidades de bajada y subida con los métodos test_velocidad_bajada.download() y test_velocidad_subida.upload() respectivamente. Los resultados de ambos métodos son en bits/segundo, para facilitar su interpretación se calculan en Mbits/segundo con las siguientes líneas velocidad_bajada /= (1 * 10 **6) y velocidad_subida /= (1 * 10 **6)

obtener_velocidad_internet_iperf3

Este método se encarga de obtener el ancho de banda disponible entre nuestra red y un servidor corriendo iperf3 públicamente (la lista de servidores disponibles se puede encontrar aquí). El método se encarga de crear un obtjeto iperf3 con los datos necesarios para realizar la prueba al servidor, los cuales son su hosts/dominio y puerto, adicionalmente configuramos la duración de la prueba en segundos (no se recomienda un duración mayor a 20 segundos para no interferir con la comunicación de los dispositivos en nuestra red). En código esto se ve de la siguiente manera

client = iperf3.Client()
client.duration = 7
client.server_hostname = 'iperf.scottlinux.com'
client.port = 5201

En el ejemplo anterior indicamos que el servidor se encuentra en el dominio iperf.scottlinux.com, que la prueba durará 7 segundos y que el servidor se encuentra escuchando en el puerto 5201

main

Por último el método main se encarga de configurar la ruta donde deseamos guardar el log de la ejecución filename=’/log/{HOST_NAME}.log, ejecutar los métodos obtener_velocidad_internet_speedtest_cli y obtener_velocidad_internet_iperf3 para obtener las medicione de velocidad.

Ejecucíon

El programa puede ejecutarse de la siguiente forma

python main.py

Después de unos momentos deberán aparecer en nuestra pantalla las mediciones de las pruebas realizadas

speedtest-cli descarga - 193.43 Mbits/s. Subida - 191.15 Mbits/s. Servidor - Axtel

iperf3 descarga - 28.833 Mbits/s. Subida - 30.929 Mbits/s