¿Los navegadores web utilizan diferentes puertos de salida para diferentes pestañas?

58

En un navegador web que admite tener múltiples pestañas, como Firefox, ¿las diferentes pestañas que van a diferentes dominios del sitio web utilizan un puerto dedicado para cada dominio?

¿O el navegador usa un solo puerto para administrar todas las pestañas y, por lo tanto, todos los dominios?

yoyo_fun
fuente
Los navegadores usan 2 puertos cuando se conectan a sitios web, 80 es para conexiones http, 443 es para conexiones https. en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers
Moab
77
Sé que los puertos solían conectarse al servidor, pero me preguntaba acerca de los números de puerto utilizados para conectarse desde el cliente (computadora host).
yoyo_fun
2
Creo que el término "puertos salientes" es impreciso. Los puertos son bidireccionales. Quizás puedas decir. "puertos locales" en su lugar. Los puertos locales se utilizan como puertos de origen (salientes) para enviar solicitudes y puertos de destino (entrantes) para recibir respuestas.
Ron Maupin
66
El sistema operativo asigna los puertos y a cada nueva conexión se le asigna un nuevo puerto local para que sea diferente de todas las demás conexiones abiertas.
Ex Umbris
1
@ExUmbris: Esa puede ser una estrategia sensata y simple, pero las conexiones TCP se identifican por el quad {IP local, puerto local, IP remota, puerto remoto}. El puerto local no es necesario para la unicidad, lo cual es bueno: el servidor web no puede usar su puerto local para la unicidad. Y desde la perspectiva del servidor web, la IP remota tampoco es única, ya que varios usuarios pueden estar ubicados detrás de una única puerta de enlace / proxy.
MSalters

Respuestas:

55

¿Los navegadores usan diferentes puertos para conectarse a diferentes sitios web?

Ellos si.

Aquí hay un ejemplo que muestra mis conexiones actuales de Firefox (tengo 9 pestañas abiertas) en Windows 7:

ingrese la descripción de la imagen aquí

Notas:

  • Puede ver que los puertos locales son todos diferentes.

  • Los puertos remotos suelen ser 80 (HTTP), 443 (HTTPS) u 8080 (HTTP alternativo).

  • El proceso completo de representación de una página web se describe a continuación. Vea en particular los pasos 5, 6, 13 y 15 (que están en negrita):

    • En general, la representación de una sola página web utiliza múltiples conexiones, no todas las cuales serán a la misma dirección remota.

    • Esto se debe a que las páginas web a menudo incluyen recursos alojados en otros lugares (archivos javascript, etc.).

  • Las conexiones múltiples al mismo sitio web (por ejemplo, stackoverflow.com) también tienen puertos locales diferentes (porque son conexiones separadas en diferentes pestañas que representan diferentes páginas).


Representación de una página web: paso a paso

Nota:

  • Los pasos 5, 6, 13 y 15 (que están en negrita) son directamente relevantes para la pregunta.

¿Alguna vez has pensado en lo que sucede cuando navegas por la web? No es tan simple como parece:

  1. Escribe una URL en la barra de direcciones en su navegador preferido.
  2. El navegador analiza la URL para encontrar el protocolo, el host, el puerto y la ruta.
  3. Forma una solicitud HTTP (que probablemente era el protocolo)
  4. Para llegar al host, primero debe traducir el host legible por humanos en un número IP, y lo hace haciendo una búsqueda de DNS en el host
  5. Luego, se debe abrir un socket desde la computadora del usuario a ese número de IP, en el puerto especificado (generalmente el puerto 80)
  6. Cuando una conexión está abierta, la solicitud HTTP se envía al host
  7. El host reenvía la solicitud al software del servidor (más a menudo Apache) configurado para escuchar en el puerto especificado
  8. El servidor inspecciona la solicitud (la mayoría de las veces solo la ruta) e inicia el complemento del servidor necesario para manejar la solicitud (¿correspondiente al idioma del servidor que utiliza, PHP, Java, .NET, Python?)
  9. El complemento obtiene acceso a la solicitud completa y comienza a preparar una respuesta HTTP.
  10. Para construir la respuesta se accede a una base de datos (muy probablemente). Se realiza una búsqueda en la base de datos, basada en parámetros en la ruta (o datos) de la solicitud
  11. Los datos de la base de datos, junto con otra información que el complemento decida agregar, se combinan en una larga cadena de texto (probablemente HTML).
  12. El complemento combina esos datos con algunos metadatos (en forma de encabezados HTTP) y envía la respuesta HTTP al navegador.
  13. El navegador recibe la respuesta y analiza el HTML (que con un 95% de probabilidad está roto) en la respuesta
  14. Un árbol DOM está construido a partir del HTML roto
  15. Se realizan nuevas solicitudes al servidor para cada nuevo recurso que se encuentra en la fuente HTML (generalmente imágenes, hojas de estilo y archivos JavaScript). Vuelva al paso 3 y repita para cada recurso.
  16. Las hojas de estilo se analizan y la información de representación en cada una se adjunta al nodo correspondiente en el árbol DOM
  17. Javascript se analiza y ejecuta, y los nodos DOM se mueven y la información de estilo se actualiza en consecuencia
  18. El navegador muestra la página en la pantalla de acuerdo con el árbol DOM y la información de estilo para cada nodo
  19. Ves la página en la pantalla
  20. Te molesta todo el proceso fue demasiado lento.

Fuente Representación de una página web: paso a paso

DavidPostill
fuente
63

Cada conexión a un sitio web utiliza un socket diferente con el puerto TCP de destino predeterminado 80 para HTTP simple y 443 para HTTPS. Para que el socket sea único, la combinación de la dirección IP de origen, el puerto TCP de origen, la dirección IP de destino y el puerto TCP de destino debe ser diferente.

Si tiene varias conexiones al mismo sitio web (suponiendo que el sitio web use solo 1 dirección IP) desde la misma computadora, se debe usar un puerto TCP de origen diferente. De esta manera, cada conexión es única.

Sin embargo, debe tenerse en cuenta que a partir de HTTP 1.1, todas las conexiones son persistentes durante un período de tiempo determinado (a menos que se declare lo contrario). Esto significa que su navegador puede reutilizar la misma conexión si se solicitan múltiples recursos del mismo sitio web (por ejemplo, archivos css / js). Esto también se aplica si tiene varias instancias del mismo sitio web en su navegador.

Si está en Windows, el netstat -no -p TCPcomando le mostrará todos los sockets TCP activos y su ID de proceso correspondiente, incluidos los de su navegador:

ingrese la descripción de la imagen aquí

Si está en Unix / Linux (Debian en este caso), puede usar el comando netstat -ntpo ss -t:

ingrese la descripción de la imagen aquí

Egon Olieux
fuente
44
Tenga en cuenta que netstat también mostrará conexiones que no sean del navegador, por ejemplo, conexiones de correo electrónico para un cliente de correo electrónico, conexiones de noticias para un lector de noticias. Estas conexiones estarán en diferentes puertos remotos.
DavidPostill
A menos que me falte algo, parece que estás asumiendo que el autor de la pregunta está usando Windows, aunque no ha mencionado un sistema operativo. También es bueno enumerar a qué sistema operativo se refiere cada vez que proporciona comandos de consola.
user45623
99
@ user45623: aunque la captura de pantalla es una captura de pantalla de Windows, netstat -ndebería funcionar en la mayoría de los sistemas operativos, incluidos Linux y Mac OS.
Heinzi
1
En Windows (tal vez también en otros sistemas operativos) puede usar netstat -n -opara ver qué proceso creó qué conexión. O puede ejecutar tcpview de SysInternal para ver la lista en una GUI, con nombres de proceso e íconos y todo.
Jonathan
Ahora la pregunta es, ¿los navegadores web reutilizan las conexiones de diferentes pestañas si conducen al mismo servidor?
John Dvorak
11

En cuanto a las pestañas a diferentes sitios web, no hay nada en TCP que requiera que el puerto local sea diferente, siempre que la tupla {IP local, puerto local, IP objetivo, puerto objetivo} sea ​​única. Para pestañas al mismo sitio web, la situación es mucho más compleja.

El navegador, como cualquier otra pieza de software de cliente, utiliza un puerto local diferente por conexión saliente al mismo objetivo. En general, formará múltiples conexiones a cualquier sitio web dado, para obtener recursos incrustados como imágenes, CSS, JavaScript, etc. También agrupará esas conexiones para su posible reutilización.

No es posible decir si las diferentes pestañas del mismo sitio web utilizarán conexiones distintas , porque (a) de todos modos, por lo general, no hay una sola conexión por pestaña, y (b) dependiendo del momento y la autenticación, las conexiones pueden ser reutilizado entre pestañas; y como no es posible identificar las conexiones, tampoco es posible identificar los puertos locales.

usuario207421
fuente
Gracias. ¿Qué significa "agrupar" una conexión?
yoyo_fun
En lugar de cerrarlo, devuélvalo a un grupo y solo ciérrelo si permanece inactivo durante un intervalo de tiempo de espera; y mirar en el grupo primero antes de crear una nueva conexión a ese objetivo. Así es como se implementa HTTP keep-alive.
user207421
Entonces, ¿un grupo es una estructura de datos en la memoria que almacena conexiones abiertas y aún no cerradas?
yoyo_fun
Eso es correcto, por lo general, un mapa codificado por IP de destino: puerto
user207421
2
@EJP: Tenga en cuenta que para HTTPS, no es seguro teclear el mapa por IP y puerto de destino; también necesita distinguir entre conexiones a diferentes nombres de host a pesar de que se resuelven en la misma IP y puerto. Podría decirse que un navegador también debe mantener las conexiones para diferentes pestañas separadas si al menos una pestaña está en modo incógnito.
Henning Makholm
6

Si. No, quizás. Depende.

Primero, un navegador puede usar cualquiera de estas estrategias para las conexiones:

  1. Conexión única (poco probable para cualquier navegador más reciente que 1995)
  2. Una conexión por pestaña (básicamente igual que la n. ° 1, solo que un poco mejor)
  3. Una conexión por recurso (ingenuo, pero no funciona tan mal)
  4. Conjunto de conexiones con conexiones para reutilizar y mantener vivo
  5. Algo diferente (léase como: cosas raras)

No tiene una manera de saber qué estrategia usará un navegador, aunque usar un grupo de conexiones (y reutilizar conexiones) es una suposición razonable.

En segundo lugar, la forma en que funciona TCP, tiene un puerto de origen y un puerto de destino para cada conexión. El par de dirección / puerto de origen y destino define la conexión.
Siempre [1] utiliza un puerto conocido (como 80 o 443) para conectarse al servidor (al que escucha en su dirección anunciada), pero el otro puerto se elige al azar. Por lo tanto, dependiendo de qué lado mire una conexión, tiene uno o muchos puertos posibles.

Por lo tanto, la misma pestaña puede (y usualmente) usará varios puertos diferentes en su extremo, pero en principio diferentes pestañas podrían (si las conexiones se agrupan y se cargan diferentes recursos en diferentes pestañas desde el mismo servidor) usar el mismo puerto.

Como la pregunta menciona explícitamente la salida , en el caso "normal", los números de puerto serían los mismos independientemente de la pestaña en la que se encuentren o uno de los dos puertos posibles (80 y 443). Aunque, por supuesto, es posible solicitar explícitamente un puerto diferente (como 8080) en una URL. Sin embargo, eso es un poco raro.


[1] Bueno, no siempre ... pero no lo compliquemos demasiado.

Damon
fuente
Otro factor ... el sistema operativo elige el puerto del lado del cliente, no el navegador; y el puerto del lado del cliente que ve el servidor puede ser diferente de lo que ve el navegador, si la conexión pasa por un dispositivo NAT. La mayoría de los sistemas operativos asignan de forma lineal o aleatoria dentro de un rango de puertos efímero (configurable), pero un navegador podría solicitar el mismo puerto de origen a través de múltiples conexiones a diferentes servidores. (Y el OP pregunta por los puertos del cliente, no por los puertos del servidor)
David
@david: es difícil saber cuál es el correcto (o qué responder) ya que la Q es un dato ambiguo, de ahí mi larga excursión de cobertura. El OP pregunta por el puerto saliente en el cliente. "Cliente" sugiere que estamos hablando del puerto de origen (en términos de TCP), que es el que se elige libre o aleatoriamente (por la implementación), pero "saliente" sugiere que realmente estamos hablando del puerto de destino . Lo cual se describe mucho mejor como "puerto en el servidor" en palabras simples. Su comentario sobre NAT es correcto como se ve desde el servidor, pero no afecta al cliente.
Damon