Comprensione delle porte: come comunicano più schede del browser contemporaneamente? [chiuso]


18

Oggi ho capito che fondamentalmente non capisco come funziona la comunicazione portuale.

Se accendo un'istanza di un server web in ascolto sulla porta 80, può rispondere a molte richieste da diverse schede del browser, tutte comunicanti sulla porta 80.

Tuttavia, non riesco ad avviare due istanze del server, entrambe in ascolto sulla porta 80, poiché si verifica un conflitto di porta.

L'ho sempre preso come un dato, (solo un processo può collegarsi a una porta specifica in un dato momento) senza mai davvero pensarci su - non ci sono più processi che comunicano sulla porta 80? (vale a dire, ciascuna delle schede in esecuzione nel browser?)

Risposte:


24

Fondamentalmente, un solo processo può ASCOLTARE su una porta alla volta (tecnicamente, un socket è dedicato all'ascolto). Ma una porta può gestire molti socket che trasferiscono dati, un socket è una combinazione di IP / porta locale e indirizzo IP remoto / porta remota. In questo modo, una volta che il server accetta la connessione in entrata mentre ASCOLTA, apre un nuovo socket dedicato a quella conversazione e passa l'elaborazione a qualcos'altro, quindi torna a ASCOLTARE.

Maggiori dettagli qui .


In realtà puoi avere più processi in ascolto sulla stessa porta. Se lo fai con più lettori udp, ad esempio, otterrai un bilanciamento del carico a livello di kernel. Per prima cosa aprire il socket per l'ascolto, quindi fork e provare recv()in ogni processo.
viraptor,

5
@viraptor: Vero, ma dato che UDP è senza connessione, non c'è davvero una distinzione tra "ascolto" e "ricezione".
Adam Robinson,

La stessa idea funziona con TCP, processo di fork con socket di ascolto e accettazione () su entrambi.
viraptor,

In realtà, un socket è solo un "endpoint" per la comunicazione. Immagino che cosa intendevi dire è che una presa connessa è una combinazione di IP / porta locale e IP / indirizzo remoto / porta remota. La parola socket è così spesso usata che è stato difficile per me capire qual è la sua descrizione attuale
westoque,

14

Il browser si collega da una porta casuale alta (cioè> 1024) sul computer alla porta 80 di un server remoto. Pertanto non vi sono conflitti di porta sulla macchina.

Se si utilizzano molte schede per connettersi allo stesso server remoto (o ci sono molti utenti che si connettono al server), tutti vanno alla stessa porta e sono serviti dallo stesso processo (ovvero il server Web del sito).


2
Questa è la risposta corretta Le connessioni TCP hanno un numero di porta su entrambe le estremità. Entrambi i computer coinvolti possono distinguere tra il sito Web di connessione: 80 <-> browser: 12397 e il diverso sito Web di connessione: 80 <-> browser: 22958.
pjc50,

7

Il server in ascolto sulla porta 80 non DEVE gestire più processi. I demoni TCP semplici degli anni più vecchi potevano gestire solo una connessione alla volta. È possibile emulare questo comportamento avendo un programma come l' netcatascolto su una porta specifica e provare a connettere due macchine ad esso. Uno entrerà, l'altro rimbalzerà senza una connessione. Questi demoni sono per lo più inutili, quindi non li vedi più.

Per qualcosa come un web server, è in ascolto direttamente sulla porta. La cosa da tenere a mente è che si trova in cima alla libreria dei socket del sistema operativo. Quando viene stabilita una nuova connessione, la libreria socket passa il nuovo socket al software del server web. A quel punto, il software del server web ha alcune opzioni.

Una possibilità è che passi l'oggetto socket a un nuovo thread nello stesso processo. Ogni volta che la comunicazione avviene su questo socket, questo thread lo gestirà. Il processo genitore media quali thread sono attivi in ​​un dato momento, il che potrebbe essere molto.

Un'altra possibilità è che gira su un nuovo processo e passa l'oggetto socket al processo. A quanto ho capito, ora tocca al sistema socket del sistema operativo mediare la comunicazione tra questi processi figlio e i loro obiettivi. Il processo genitore ha ancora un certo controllo sui processi, come l'uccisione di quelli sospesi e altre comunicazioni tra processi.

Quale di questi approcci è più efficiente dipende dal sistema operativo. IIRC, Apache può essere eseguito in entrambe le modalità.

In sostanza, la libreria socket fornisce un livello di elaborazione parallela al web server. Può gestire più connessioni simultanee trasferendo attivamente i dati, il tutto accettando nuove connessioni.

Per un browser in grado di convertire più tentativi di connessione a un server web per migliorare i tempi di caricamento, si applica anche il parallelismo sul lato browser, questa è una cosa buona e meravigliosa. Il browser tiene traccia dello stato della pagina durante il caricamento e i molteplici tentativi di connessione che fa girare fanno parte del processo.


+1 per aver ragione in così tanti modi :)
Michael Lowman,

2

Esistono effettivamente due "tipi" di socket stream. Uno ha un jolly "altra estremità", uno ha un host specifico: porta per l'altra estremità.

Non ci sono due socket (o meglio dovrebbero mai) avere gli stessi identificatori "questa estremità" e "l'altra estremità". Il socket che viene "ascoltato" (accettando le connessioni in entrata) è quello che ha un jolly "altra estremità", quindi può esistere solo uno alla volta. Quando arrivano le connessioni, acceptviene eseguita una, restituendo un socket con un host: tupla di porta per l'altra estremità.


1

La tua domanda mi ricorda me stesso qualche anno fa prima di Cisco CCNA - aveva gli stessi dubbi :)

Prima di tutto, stabilire più connessioni HTTP non è necessariamente legato alla quantità di schede che hai aperto nel tuo browser. Quando si visita un sito con annunci o codice di analisi di Google, ad esempio, ci si connette a più siti nonostante si trovi in ​​una sola scheda.

Ad ogni modo, quando il browser comunica con il server Web, la porta di destinazione del traffico inviato al server Web è la porta 80, mentre la porta di origine è un numero casuale. La porta di origine è di far sapere al server web in quale porta deve comunicarti. Ogni connessione http stabilita avrà la propria porta aperta sul tuo computer. Prova a eseguire netstat con alcuni siti Web aperti e vedrai immediatamente cosa intendo.

Potresti ridere, ma questo libro è un modo fantastico e veloce per mettere le basi su TCP / IP. Mi ha aiutato molto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.