2010-06-02 11 views
51

Si entiendo bien, las aplicaciones a veces usan HTTP para enviar mensajes, ya que el uso de otros puertos puede causar problemas de firewall. Pero, ¿cómo funciona eso sin entrar en conflicto con otras aplicaciones como los navegadores web? De hecho, ¿cómo entran en conflicto varios navegadores al mismo tiempo? ¿Todos ellos monitorean el puerto y reciben notificaciones ... puede compartir un puerto de esta manera?¿cómo puede una aplicación usar el puerto 80/HTTP sin entrar en conflicto con los navegadores?

Tengo la sensación de que esta es una pregunta tonta, pero no es algo en lo que haya pensado antes, y en otros casos he visto problemas cuando 2 aplicaciones están configuradas para usar el mismo puerto.

Respuesta

65

Hay 2 puertos: un puerto fuente (navegador) y una (servidor) puerto de destino.El navegador solicita al sistema operativo un puerto fuente disponible (supongamos que recibe) y luego realiza una conexión de socket al puerto de destino (normalmente 80/HTTP, 443/HTTPS).

Cuando el servidor web recibe la respuesta, envía una respuesta que tiene 80 como puerto de origen y 33123 como puerto de destino.

Así que si usted tiene 2 navegadores que acceden simultáneamente stackoverflow.com, tendría algo como esto:

Firefox (localhost:33123) <-----------> stackoverflow.com (69.59.196.211:80) 
Chrome (localhost:33124) <-----------> stackoverflow.com (69.59.196.211:80) 
+0

Para conexiones concurrentes, parece que está explicando esto desde la ** perspectiva ** del navegador. ¿Qué pasa con ** la perspectiva ** de la aplicación? –

+6

Un navegador es una aplicación. ¿Podría explicar su pregunta? –

+1

¿Todas las pestañas de un navegador también tienen un puerto diferente como ese? – huync

17

Las solicitudes HTTP salientes no se producen en el puerto 80. Cuando una aplicación solicita un socket, generalmente recibe una al azar. Este es el puerto de origen.

El puerto 80 sirve para servir contenido HTTP (por el servidor, no por el cliente). Este es el puerto de Destino.

Cada navegador utiliza una fuente diferente para generar solicitudes. De esta forma, los paquetes vuelven a la aplicación correcta.

+0

Pero lo que si mi cliente/servidor se comunican en 80 ... si el cliente recibe un mensaje en puerto 80 (¿por qué) el navegador no lo interceptará como contenido HTTP? –

+1

El cliente se CONECTARÁ al puerto 80 en el servidor, pero usará otro puerto. Pruébelo usted mismo: descargue un archivo de un servidor (por ejemplo, un video de youtube), abra un mensaje y escriba "netstat". Su propia máquina utilizará un puerto aleatorio (como 62123) para conectarse al servidor en el puerto 80. – Konerak

+5

@John, no. El * servidor web * abre el puerto 80, pero el * navegador * tiene un puerto diferente, asignado aleatoriamente. Si su aplicación se comunica en el puerto 80, entonces evita que su aplicación se use en la misma máquina que un servidor web, pero no interfiere en absoluto con la navegación web. –

1

Un navegador es una aplicación de cliente que utiliza para ver contenido en un servidor web que generalmente está en una máquina diferente. El servidor web es el que escucha en el puerto 80, no el navegador en el cliente.

+1

No entiendo por qué esto fue votado negativamente . Puede que no sea la respuesta más completa, pero no tiene nada de malo. –

2

El puerto 80 de usted está hablando aquí es el puerto remoto en el servidor, el navegador local abre el puerto alto para cada conexión establecida.

Cada conexión tiene números de puerto en ambos extremos, uno se llama puerto local, otro puerto remoto.

Firewall permitirá el tráfico a un puerto alto para el navegador, porque sabe que la conexión se ha establecido desde su computadora.

+0

"localmente el navegador abre el puerto alto para cada conexión establecida" ... ¿cómo se consigue esto a través de un cortafuegos entonces? ¿Los firewalls dejan abierto un rango específico de puertos por defecto? –

+1

@John: en general, un firewall detectará los puertos y las direcciones involucradas cuando la conexión haya sido establecida por primera vez por el cliente, y permitirá el tráfico de retorno desde el servidor automáticamente siempre que la conexión esté "activa". –

+0

Los firewalls permiten conexiones de salida en cualquier puerto. Por lo general, bloquean las conexiones entrantes en la mayoría de los puertos a menos que los abra explícitamente. –

3

Debe tener cuidado al hacer la distinción entre "escuchar en el puerto 80" y "conectarse al puerto 80".

Cuando dice que "las aplicaciones a veces usan HTTP para enviar mensajes, ya que usar otros puertos puede causar problemas de firewall", en realidad quiere decir que "algunas veces las aplicaciones envían mensajes al puerto 80".

El servidor está escuchando en el puerto 80 y puede aceptar conexiones múltiples en ese puerto.

6

Es el 5-tuple de (protocolo IP, dirección IP local, puerto local, dirección IP remota, puerto remoto) que identifica una conexión. Varios navegadores (o de hecho, un único navegador que carga varias páginas simultáneamente) usarán cada uno el puerto de destino 80, pero el puerto local (que está asignado por el O/S) es distinto en cada caso. Por lo tanto, no hay conflicto.

+0

Entonces, internamente, el servidor envía la respuesta a del cliente? –

+0

Correcto, en la respuesta, el servidor cambia el puerto local y remoto y la dirección IP local y remota, por lo que la respuesta tiene el puerto local = 80 y el puerto remoto = . – jchl

4

Los clientes suelen elegir un puerto entre 1024 y 65535. Depende del sistema operativo cómo manejarlo. Creo que los clientes de Windows incrementan el valor de cada nueva conexión, los clientes de Unix eligen un número de puerto aleatorio.

Algunos servicios se basan en un puerto de cliente estático como NTP (123 UDP)

+0

1024 y * 65535 * (no 65536) – exoddus

+0

@exoddus arreglado, gracias. –

Cuestiones relacionadas