Come vengono effettuate più connessioni client al singolo server Web?


16

In realtà sto imparando le reti di computer e mentre ci sono, sono confuso su come un server web mantiene connessioni multiple?

Semplicemente per dirlo, ho appreso tramite google che è che socket gestisce una richiesta di ogni client.

Supponiamo quindi che esista un server Web e diciamo 2 client con IP

Client A: 5.5.5.5
Client B: 10.10.10.10 

Entrambi provano a connettersi al server sulla porta 80.

Ora, cercando su Google ciò che ho ottenuto, il server è in ascolto sulla porta 80 per le richieste in arrivo. Quindi diciamo che un client A tenta di connettersi al server (crea una connessione TCP / IP). Durante il quale viene creato un socket tra questi due. Quindi viene eseguito come thread separato per la sua ulteriore comunicazione, facendo sì che il server ascolti nuovamente le richieste di altri client su quella particolare porta. E il client B si collega allo stesso modo.

Ora la mia prima domanda è:

1. How does server communicate with these two clients simultaneously  
   after the connection has been established?

Ora praticamente non solo 2 client ma migliaia e milioni di utenti possono connettersi a un server.

Quindi la mia prossima domanda è:

2. Now, how do those thousands of clients get connected to a single server?

   If we assume every client is connected to the server through wire, it is not 
   practically possible to maintain that many sockets on a hardware for
   connection. How those thousands connections are made and handled?

Infine, la mia terza domanda è:

3. Above I said (actually heard) how **client A** connected to the the server
   and similarly the client B.

   But I didn't get the part stating "after a TCP/IP connection is made they
   continue separately in a separate socket and making server to listen for 
   other client requests." What does that mean? If one client is communicating
   to the server, how come other can communicate at the same time to same server.

   Isn't it like while a student is asking question to a teacher, other can't
   ask at the same time since that particular student is busy or occupying the
   teacher at the moment so others should wait, which we compare than client B 
   should wait when client A is communicating.

Queste sono le mie domande di base che non sto ricevendo. Per favore, correggimi se sbaglio tutto. Puoi suggerirmi alcuni libri / pdf da leggere se le risposte sono dettagliate o non focalizzate in modo particolare su una parte specifica. Grazie


Qualche risposta ti è stata d'aiuto? In tal caso, dovresti accettare la risposta in modo che la domanda non continui a comparire per sempre, cercando una risposta. In alternativa, potresti fornire e accettare la tua risposta.
Ron Maupin

Risposte:


6

Ora, cercando su Google ciò che ho ottenuto, il server è in ascolto sulla porta 80 per le richieste in arrivo.

In effetti, più specificamente esiste un tipo speciale di socket chiamato socket di "ascolto".

Normalmente un socket è associato a una combinazione di IP locale, porta locale, IP remoto e porta remota.

Una presa di ascolto è diversa. Non è associato a nessun IP e porta remoti specifici. È associato a una porta locale specifica. Potrebbe essere associato o meno a un IP locale specifico.

Normalmente il tuo server web avrà un socket di ascolto con una porta locale di 80

Quindi diciamo che un client A tenta di connettersi al server (crea una connessione TCP / IP). Durante il quale viene creato un socket tra questi due.

Una coppia di socket in realtà uno sul client, uno sul server.

L'applicazione client crea un socket e chiede al sistema operativo client di collegarlo al server.

Il sistema operativo client alloca una porta locale casuale, sceglie un IP locale (normalmente in base all'interfaccia su cui verrà inviato il pacchetto) e inserisce l'IP remoto e la porta richiesti dall'applicazione client. Quindi avvia il processo di connessione al server.

Il sistema operativo del server notifica al titolare del socket di ascolto che sta arrivando una nuova connessione. L'applicazione server accetta la connessione e viene creato un nuovo socket per gestirla.

Più thread o processi possono monitorare lo stesso socket di elenco. Il sistema operativo garantirà che uno di questi accetti esattamente una determinata connessione.

Quindi viene eseguito come thread separato per la sua ulteriore comunicazione

Dipende dall'implementatore dell'applicazione server. Possono scegliere di utilizzare più thread o possono scegliere di utilizzare un'API come "select" o "poll" che consente a un singolo thread di monitorare più socket per l'attività.

  1. Come comunica il server con questi due client contemporaneamente
    dopo aver stabilito la connessione?

Il sistema operativo del server abbinerà i pacchetti ai socket mediante la combinazione di IP di origine, porta di origine, IP di destinazione e porta di destinazione e li invierà al socket appropriato.

  1. Ora, come fanno quelle migliaia di client a connettersi a un singolo server?

    Se supponiamo che ogni client sia connesso al server tramite cavo, non è praticamente possibile mantenere molti socket su un hardware per la connessione. Come vengono create e gestite quelle migliaia di connessioni?

"Socket" in questo contesto non si riferisce a un socket fisico, ma solo a una struttura di dati all'interno del sistema operativo.

Ci sono ancora dei limiti, migliaia sono facilmente realizzabili su un server moderno, milioni diventano difficili.

Non è come quando uno studente fa domande a un insegnante, gli altri non possono fare allo stesso tempo poiché quel particolare studente è occupato o sta occupando l'insegnante al momento, quindi gli altri dovrebbero aspettare, che confrontiamo rispetto al cliente B dovrebbe aspettare quando il client A sta comunicando.

I computer sono molto più bravi a dividere la loro attenzione rispetto alle persone. Ovviamente se il server ha un solo core del processore, può fare solo una cosa alla volta, ma se può passare da una cosa all'altra abbastanza rapidamente i client non se ne accorgeranno.

E ovviamente molti server al giorno d'oggi hanno più core del processore.


Viene creata una nuova connessione, non socket. Penso che stai estendendo la confusione del PO su cosa sia un socket.

Sembra che il problema sia che RFC differisce dalla pratica reale nella sua definizione di socket.

Sono appena andato a cercare la documentazione di "accetta" per tre principali sistemi operativi, tutti parlano di accettare la creazione di un nuovo socket.

http://man7.org/linux/man-pages/man2/accept.2.html

https://www.freebsd.org/cgi/man.cgi?query=accept&sektion=2

https://msdn.microsoft.com/en-us/library/windows/desktop/ms737526%28v=vs.85%29.aspx


Per la risposta di 1. Conosco l'unicità del socket. Quello che intendevo chiedere è se ci sono 2 socket univoci e il server sa che sono diversi. Quindi il server fornisce a ogni socket una fascia oraria da eseguire gestendo la richiesta contemporaneamente? Ad esempio, se mi connetto a Google e sto elaborando la mia richiesta, ciò non significa che altri milioni di utenti richiedano di essere in sospeso?
Sagaryal

Anche 2. Intendevo le porte come quella reale quando si desidera connettersi a una rete, come in LAN. Potrei interpretare male le parole qui. Diciamo che mi collego di nuovo a Google. E come milioni di altre persone si connettono a quel singolo server di Google. Mi collego a google in modalità wireless da casa mia e in modo simile quei milioni di persone. Come vengono gestite queste connessioni dal server. Come per il mio computer per utilizzare Internet, devo collegarmi a una porta sul mio router o in modalità wireless. Hanno milioni di tali porte fisicamente? Ora penso che non si tratti del server ma della connessione wireless?
Sagaryal

" Normalmente un socket è associato a una combinazione di IP locale, porta locale, IP remoto e porta remota. " Un socket , per definizione di RFC, è l'indirizzo IP locale e la porta TCP e non ha nulla a che fare con gli indirizzi remoti . Una connessione è la combinazione dei socket locali e remoti, quindi l'indirizzo IP locale, la porta TCP locale, l'indirizzo IP remoto e la porta TCP remota. Hai confuso il problema.
Ron Maupin

2
" Il sistema operativo del server notifica al titolare del socket di ascolto che sta arrivando una nuova connessione. L'applicazione server accetta la connessione e viene creato un nuovo socket per gestirla. " Viene creata una nuova connessione , non socket . Penso che stai estendendo la confusione del PO su cosa sia un socket.
Ron Maupin

" Il sistema operativo del server abbinerà i pacchetti ai socket mediante la combinazione di IP di origine, porta di origine, IP di destinazione e porta di destinazione e li invierà al socket appropriato. " Ancora una volta, si confonde il socket con la connessione .
Ron Maupin
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.