¿Podría alguien explicar claramente la diferencia entre un puerto y un zócalo? Sé que un puerto sirve como puerta de entrada a la red para un proceso de aplicación y que el proceso de aplicación utiliza una conexión de socket al número de puerto dado para manejar la comunicación de red, pero cuando tienes múltiples procesos escuchando en un solo número de puerto, estoy descubriendo Es difícil entender la diferencia entre el zócalo y el puerto y cómo encajan entre sí.
networking
sockets
networks
cobie
fuente
fuente
Respuestas:
S es un programa de servidor: digamos que es un servidor HTTP, por lo que utilizará el número de puerto conocido para HTTP , que es 80. Lo ejecuto en un host con dirección IP
10.0.0.4
, por lo que escuchará las conexiones10.0.0.4:80
(porque ahí es donde todos esperarán encontrarlo).Dentro de S , voy a crear un socket y vincularlo a esa dirección: ahora, el sistema operativo sabe que las conexiones que entran
10.0.0.4:80
deben enrutarse a mi proceso S a través de ese socket en particular.salida de netstat una vez que el socket está vinculado:
NÓTESE BIEN. la dirección local es todo ceros, porque S no le importa cómo sus clientes lleguen a él
Una vez que S tiene este socket enlazado, aceptará conexiones: cada vez que un nuevo cliente se conecta,
accept
devuelve un nuevo socket, que es específico para ese clienteSalida de netstat una vez que se acepta una conexión:
10.0.0.4:80
representa el final de la conexión de S y está asociado con el socket devuelto poraccept
10.0.0.5:55715
es el final de la conexión del cliente y está asociado con el socket que el cliente pasó para conectarse . El puerto del cliente no se utiliza para nada excepto para enrutar paquetes en esta conexión TCP al proceso correcto: el núcleo del cliente lo asigna aleatoriamente desde el rango de puertos efímeros.Ahora, S puede continuar aceptando más conexiones de clientes ... cada uno tendrá su propio socket, cada socket estará asociado con una conexión TCP única y cada conexión tendrá una dirección remota única. S rastreará el estado del cliente (si hay alguno) al asociarlo con el socket.
Entonces, más o menos:
accept
regresa una de las llamadas simultáneas , lo hace en un solo proceso, cada socket de conexión entrante es único para una instancia del servidorsocketpair
, ser hijo de ese proceso y heredar uno, o pasar explícitamente uno de los sockets de ese procesofuente
Piense en su máquina como un edificio de apartamentos:
Un puerto es un número de apartamento.
Un zócalo es la puerta de un apartamento.
Una dirección IP es la dirección del edificio.
fuente
A socket is the door of an apartment.
Pero, ¿no podría haber numerosos enchufes abiertos en un puerto?Un puerto es parte de la dirección en los protocolos TCP y UDP. Se utiliza para ayudar al sistema operativo a identificar qué aplicación debe obtener los datos que se reciben. Un sistema operativo debe admitir puertos para admitir TCP y UDP porque los puertos son una parte intrínseca de TCP y UDP.
Un socket es parte de la interfaz que el SO presenta a las aplicaciones para permitirles enviar y recibir datos de la red. La mayoría de las implementaciones de socket admiten muchos protocolos más allá de TCP y UDP, algunos de los cuales no tienen concepto de puertos. Un sistema operativo no tiene que admitir sockets para admitir TCP o UDP; podría proporcionar una interfaz diferente para que las aplicaciones la utilicen. Un socket es simplemente una forma de enviar y recibir datos en un puerto específico.
fuente
Una computadora tiene una dirección IP que la identifica como una entidad separada en la red. Agregamos un número adicional para permitirnos diferenciar entre conexiones a esa computadora. Este es el número de puerto. En el lado del sistema operativo de la conexión, necesita buffers, estado de conexión, etc. Este objeto lógico es el socket.
fuente
Un socket es una ruta de comunicación a un puerto. Cuando desea que su programa se comunique a través de la red, le ha dado una forma de direccionar el puerto y esto se hace creando un socket y conectándolo al puerto. Básicamente, socket = IP + puertos Los sockets proporcionan acceso al puerto + ip
fuente
Una dirección IP identifica el dispositivo, es decir, la dirección del dispositivo en particular, cuando llegó a la máquina usando IP ahora el puerto define a qué proceso en esa máquina comunicarse.
Entonces, para que tenga lugar la comunicación real, necesita tanto el puerto + IP que se llama socket.
fuente