puertos puerto protocolo listado lista funciones caracteristicas alternativos networking tcp port

networking - protocolo - puertos de red y sus funciones



¿Cómo funciona realmente el número de puerto en TCP? (3)

He leído la pregunta anterior en el foro respectivo, pero creo que la gente allí tampoco está de acuerdo entre sí.

No veo ningún desacuerdo en ninguno de los temas que mencionas.

Quiero saber qué define exactamente una conexión de socket

(sockid, ip de origen, puerto de origen, ip dext, puerto de destino)

o solo

(IP de origen, puerto de origen, dext ip, puerto de destino)

El último. El primero es un producto de la imaginación. No se menciona en ninguno de los hilos que cites.

Lo que quiero preguntar es que dos procesos diferentes, como dos navegadores diferentes, pueden comunicarse con un servidor web en el mismo puerto de origen (el puerto Dest sería el mismo por defecto).

No si están en la misma IP de origen. Violaría la definición de identidad mencionada anteriormente.

Lo que en el caso de diferentes pestañas en el mismo navegador.

Sí, debido a la agrupación de conexiones. Si estás hablando de conexiones separadas, la respuesta sigue siendo no.

Además, como se menciona en una de las respuestas, una sola página web intenta conectarse a muchos servidores diferentes, como servidores de anuncios, etc. Lo mismo ocurre con el hecho de que Chrome o Firefox se conectan con el mismo puerto a diferentes servidores o usan un solo puerto.

Vas a tener que explicar esto. ¿Cuál es la diferencia entre ''el mismo puerto'' y ''un solo puerto''? No es una pregunta real.

https://serverfault.com/questions/296603/understanding-ports-how-do-multiple-browser-tabs-communicate-at-the-same-time

¿Cómo puede una aplicación usar el puerto 80 / HTTP sin conflicto con los navegadores?

¿Cómo se conectan varios clientes simultáneamente a un puerto, digamos 80, en un servidor?

He leído las preguntas anteriores, pero parece que las respuestas son inconsistentes.

Quiero saber qué define exactamente una conexión de socket, es esto:

(sockid, source ip, source port, dest ip, dest port)

o solo:

(source ip, source port, dest ip, dest port)

¿Pueden dos procesos diferentes (por ejemplo, dos navegadores diferentes) comunicarse con un servidor web en el mismo puerto de origen? (El puerto de destino sería el mismo por defecto)

¿Qué ocurrirá en el caso de diferentes pestañas en el mismo navegador?

Además, como se menciona en una de las respuestas, una sola página web puede conectarse a múltiples servidores (por ejemplo, servidores de anuncios) simultáneamente. Cuando se conecta a varios servidores simultáneamente, ¿el navegador web (por ejemplo, Chrome, Firefox) se conecta a cada servidor utilizando el mismo puerto, o utiliza un puerto diferente para cada servidor?


Sé que esto es tarde, pero como el hilo aún está en Internet, y debido a que es una pregunta común con muy pocas respuestas autorizadas en la web, merece una explicación más completa y concisa para aquellos que pueden tropezar con ella, incluso en este punto. fecha tardía

  1. Abre un navegador para abrir un sitio web, digamos google.com. En el proceso de especificar el sitio web, su computadora elegirá arbitrariamente un número de puerto para usar como su "puerto de origen". El número estará por encima de 49152, que es el comienzo de "Puertos dinámicos, privados o efímeros", pero por debajo de 65535, que es el número de puerto más alto disponible. El número de puerto elegido está asociado con esa "instancia" del navegador.

  2. Solo por diversión, abre una nueva pestaña en el navegador y también escribe "google.com" en la línea url. Tu objetivo es tener dos instancias de google.com funcionando porque estás buscando cosas diferentes. Luego, su computadora elige un segundo número de puerto para esa sesión, diferente del puerto "fuente" que usó para la primera sesión. De hecho, podría hacer esto muchas, muchas veces, y cada sesión tendrá un puerto "fuente" único asociado con cada instancia.

  3. Su paquete se envía a google.com, y el número de puerto de destino en cada instancia será el puerto 80. Los servidores web "escuchan" en el puerto 80 para las solicitudes de conexión entrantes. Para cada sesión con google.com que haya abierto, el puerto de destino, desde la perspectiva de su computadora, siempre será el puerto 80, pero para cada instancia de conexión a google.com en su navegador o navegadores, el puerto de origen será único identificar una pestaña específica en una instancia del navegador, únicamente. Así es como se diferencian en tu computadora.

  4. google.com recibe su primera solicitud. Su respuesta especificará el puerto 80 como su puerto de origen. Aquí es donde se pone interesante. Cada consulta que Google.com reciba de usted se tratará como un "socket", que es una combinación de su dirección IP y el número de puerto específico asociado con el proceso que contactó a google.com. Entonces, por ejemplo, diremos que su dirección IP es 165.40.30.12, y el número de puerto de origen que su computadora usó como su puerto de origen para cuatro instancias de comunicaciones con google.com (digamos cuatro pestañas diferentes que abren google.com). 61235, 62421, 58392 y 53925. Estos cuatro "enchufes" serían entonces 165.40.30.12:61235, 165.40.30.12:62421, 165.40.12.58392, y 165.40.30.12:53925. Cada combinación de "dirección IP: número de puerto de origen" es única, y google.com tratará cada instancia como única. google.com responde y se comunica con el "socket", es decir, la combinación de dirección IP y puerto.

  5. Su computadora obtiene sus respuestas de google.com y las clasifica según lo que recibe como su "socket" de destino que analiza por números de puerto, asignando la respuesta de google.com a la ventana o pestaña del navegador correspondiente, según corresponda. No hay problema desde el final de las cosas, ya que ve la respuesta correcta en la ventana correcta cada vez.

  6. "Pero," estás pensando, "¿qué pasa si otra persona usa accidentalmente el mismo número de puerto, digamos 61235, como he usado para mi número de fuente? ¿No confunde esto en google.com?" No, en absoluto, porque google.com está rastreando "sockets" que son una combinación de dirección IP y número de puerto. Otra persona, naturalmente, y esperamos sinceramente que esté usando una dirección IP diferente a la que está usando, digamos 152.126.11.27, y la combinación de la dirección IP y el número de puerto son únicas - 152.126.11.27:61235 - diferenciada por sus diferentes direcciones IP, a pesar de que los números de puerto son los mismos.

  7. No importa si google.com recibe 1000 consultas de 1000 usuarios, todas usando el puerto 80 como su número de puerto de destino (el puerto que google.com escucha para las comunicaciones entrantes) porque cada uno de esos 1000 usuarios tendrá direcciones IP únicas. . google.com rastrea a sus clientes por su carácter único, y siempre tienen que ser únicos, ¿no es así? - números de socket que consisten en su dirección IP y número de puerto "fuente" Incluso si cada uno de esos 1000 clientes de alguna manera lograra usar el mismo número de puerto "fuente" (poco probable), aún tendrían direcciones IP diferentes, haciendo que su fuente "socket" sea única entre todas las demás.

  8. Todo esto es bastante simple cuando lo ves explicado de esta manera. Deja claro que un servidor web siempre puede escuchar en un puerto (80) y aún así diferenciarse de los distintos clientes. No se limita a mirar la dirección IP que recibió en la consulta; pensaría que todas deberían ser únicas a primera vista hasta que se dé cuenta de que podría tener más de una página web abierta en ese servidor web, pero en el puerto de origen. Número, que en combinación, hace que cada consulta sea única. Espero que esto quede bastante claro. Es un sistema elegante cuando lo piensas, pero simple una vez que lo entiendes.


Tomando sus preguntas a su vez:

Una conexión se define por:

{protocolo, IP local, puerto local, IP remota, puerto remoto}

(Es mejor decir local y remoto en lugar de origen y destino, porque el puerto local es la fuente cuando se envía, pero el destino cuando se recibe).

Sockid es solo un descriptor en el proceso del usuario que se asigna a la conexión en el kernel, al igual que un descriptor de archivo se asigna a un archivo en el disco que se ha abierto.

Dos procesos diferentes no pueden vincularse al mismo puerto local. Sin embargo, es posible que dos procesos utilicen la misma conexión: un descriptor de socket se puede heredar de un proceso principal a un proceso secundario, o el descriptor se puede pasar entre procesos utilizando comunicaciones entre procesos. Los dos procesos usarían los mismos puertos porque en realidad están compartiendo la misma conexión.

Si bien el protocolo permite el uso del mismo puerto local cuando se conecta a diferentes servidores o puertos remotos, la mayoría de las pilas TCP no lo permiten. La API para vincular un puerto local es la misma, ya sea que la esté utilizando para una conexión saliente o para escuchar una conexión entrante, y la intención no se especifica hasta DESPUÉS de que el puerto esté vinculado. Dado que solo un socket puede escuchar en un puerto en particular, la API simplemente se niega a permitir que múltiples sockets se unan a un puerto (hay una excepción especial a esto, pero no es relevante para esta discusión). Como resultado, todas las conexiones salientes utilizarán diferentes puertos locales. Por lo tanto, cuando el navegador abre varias conexiones (ya sea para el mismo servidor web o para servidores diferentes), tendrán diferentes puertos locales.