¿Por qué mi navegador se bloquea cuando visito google.com:8000, pero error en google.com:443?

0

Estoy aprendiendo sobre puertos y estaba jugando. Descubrí que cuando visito http://google.com:8000 (un puerto que elegí al azar), mi navegador agota el tiempo de espera después de un tiempo de inactividad.

Pero cuando visito http://google.com:443 , recibo un error de inmediato. (El texto del error parece ser específico del navegador: Chrome dice "Respuesta vacía", mientras que Safari afirma que el servidor "desconectó la conexión inesperadamente").

Sé que 443 es el puerto predeterminado para el protocolo HTTPS, así que supuse que podría tener algo que ver con eso, pero no estoy lo suficientemente familiarizado con estos conceptos como para descifrarlo. En particular, ¿podría alguien explicarme qué sucede cuando especifico un número de puerto incorrecto y mi navegador se cuelga (durante aproximadamente 1 minuto) antes de que se agote el tiempo de espera?

Eli Rose
fuente

Respuestas:

3

Cuando vaya a algún lugar utilizando un navegador y especificando un puerto, está intentando hacer una conexión (TCP) a ese puerto.

Cuando ejecuta un servicio (como un servidor web, por ejemplo), se ejecuta en un puerto específico. Si intenta conectarse a una máquina y no se está ejecutando ningún programa asociado con ese puerto (el término correcto está vinculado al puerto), o está protegido por firewall, se agota el tiempo de espera.

Cuando fuiste a Google en el puerto 8000, no había ningún servicio ejecutándose en él, por lo que se agotó el tiempo de espera. (Realmente intenta conectarse algunas veces en caso de que haya un error las primeras veces para hacer las cosas más robustas)

Cuando fuiste a Google en el puerto 443, estableciste una conexión exitosa, porque el 443 se usa típicamente para HTTPS, es decir, conexiones seguras. Debido a que no inició una conexión segura según el protocolo HTTPS, Chrome y Firefox se comportaron de esa manera.

Respuesta avanzada

Al realizar una conexión en TCP, hay un "protocolo de enlace de 3 vías": el cliente envía un paquete "SYN" al servidor. El servidor recibe esto y, suponiendo que hay un programa en ejecución, envía un acuse de recibo "SYN-ACK", luego el cliente envía un paquete "ACK" al servidor, momento en el cual los sistemas han establecido una conexión.

En el caso de conectarse al puerto 8000, el cliente no obtiene una respuesta al paquete SYN, por lo que lo intenta varias veces y luego se da por vencido y agota el tiempo de espera.

En el caso de conectarse al puerto 443, se establece una conexión a nivel TCP. En este momento, el servidor espera negociar una conexión SSL por seguridad (porque está configurado para hacerlo en el puerto 443). No sabes cómo hablar SSL, por lo que falló.

Puntos extra

Si tiene instalado TELNET, la mayoría de los sistemas lo hacen, puede pretender ser un navegador (o un cliente de correo o lo que sea si conoce el protocolo), haciendo lo siguiente.

1.  type "telnet www.google.com 80"
(wait for a few seconds)
2.  Type GET / HTTP/1.1<enter>
host www.google.com<enter><enter>

El paso 1 le dice a Telnet que cree una conexión TCP al servidor de Google en el puerto 80, y el paso 2 dice qué obtener (GET / significa obtener el archivo raíz), y la línea "host" dice a qué servidor desea conectarse: necesita esto porque muchos sitios web comparten un solo servidor: la segunda línea le dice al servidor qué sitio. Presiona Intro dos veces para decir que has terminado de enviar tu encabezado y luego obtienes una respuesta HTTP. (Si fuera un navegador web, enviaría mucha más información, incluidos los detalles del navegador, las cookies, etc., pero a modo de explicación no lo hicimos).

davidgo
fuente
Gracias por la respuesta completa. Entonces, si especifico un puerto en el que no se ejecuta ningún servicio, ¿qué está sucediendo en el nivel de hardware en el lado del servidor? ¿Los paquetes se "entregan", pero no se recogen? ¿Se aplica ese concepto? Estoy pensando en un puerto como depósito de paquetes, pero tal vez estoy totalmente desconectado. ¿Es más una simple etiqueta que viene con cada paquete?
Eli Rose
Los paquetes se entregan (al servidor) pero no se recogen (es decir, el servicio los ignora). Tenga en cuenta que esto sucede en el software, no en el hardware. Su computadora tiene una pila de red "tcp / ip". Básicamente un controlador de red, que se comunica con su tarjeta de red y proporciona los protocolos de comunicación subyacentes.
davidgo