Como várias conexões de clientes são feitas para um único servidor web?

16

Na verdade, estou aprendendo redes de computadores e, enquanto estou nisso, estou confuso em como um servidor da web mantém várias conexões?

Simplesmente, eu aprendi através de uma pesquisa no Google que os soquetes lidam com uma solicitação de cada cliente.

Digamos que exista um servidor Web e digamos 2 clientes com IPs

Client A: 5.5.5.5
Client B: 10.10.10.10 

Ambos tentam se conectar ao servidor na porta 80.

Agora, ao pesquisar no Google, o servidor escuta na porta 80 os pedidos recebidos. Digamos que um cliente A tente se conectar ao servidor (faça a conexão TCP / IP). Durante o qual um soquete é criado entre esses dois. Em seguida, ele é executado como um encadeamento separado para sua comunicação adicional, fazendo com que o servidor escute novamente outras solicitações de clientes nessa porta específica. E o cliente B se conecta da mesma maneira.

Agora minha primeira pergunta é:

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

Agora praticamente não apenas 2 clientes, mas milhares e milhões de usuários podem se conectar a um servidor.

Então minha próxima pergunta é:

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?

Por fim, minha terceira pergunta é:

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.

Estas são minhas perguntas básicas que não estou recebendo. Por favor, corrija-me se estou entendendo tudo errado. Você pode me sugerir alguns livros / pdfs para ler se as respostas são detalhadas ou não focadas em partes específicas. obrigado

Sagaryal
fonte
Alguma resposta o ajudou? Nesse caso, você deve aceitar a resposta para que a pergunta não apareça para sempre, procurando uma resposta. Como alternativa, você pode fornecer e aceitar sua própria resposta.
Ron Maupin

Respostas:

6

Agora, ao pesquisar no Google, o servidor escuta na porta 80 os pedidos recebidos.

De fato, mais especificamente, existe um tipo especial de soquete chamado soquete "de escuta".

Normalmente, um soquete está associado a uma combinação de IP local, porta local, IP remoto e porta remota.

Uma tomada de audição é diferente. Não está associado a nenhum IP e porta remotos específicos. Está associado a uma porta local específica. Pode ou não estar associado a um IP local específico.

Normalmente, o servidor da Web terá um soquete de escuta com uma porta local de 80

Digamos que um cliente A tente se conectar ao servidor (faça a conexão TCP / IP). Durante o qual um soquete é criado entre esses dois.

Um par de soquetes, na verdade, um no cliente, outro no servidor.

O aplicativo cliente cria um soquete e solicita ao sistema operacional do cliente que o conecte ao servidor.

O sistema operacional do cliente aloca uma porta local aleatória, escolhe um IP local (normalmente com base em qual interface o pacote será enviado) e preenche o IP remoto e a porta solicitados pelo aplicativo cliente. Em seguida, inicia o processo de conexão com o servidor.

O sistema operacional do servidor notifica o titular do soquete de escuta de que uma nova conexão está chegando. O aplicativo do servidor aceita a conexão e um novo soquete é criado para lidar com isso.

Vários threads ou mesmo processos podem monitorar o mesmo soquete de listagem. O sistema operacional garantirá que exatamente um deles aceite uma determinada conexão.

Em seguida, é executado como um thread separado para posterior comunicação

Isso depende do implementador do aplicativo do servidor. Eles podem optar por usar vários threads ou podem optar por usar uma API como "select" ou "poll" que permite que um único thread monitore vários soquetes quanto à atividade.

  1. Como o servidor se comunica com esses dois clientes simultaneamente
    depois que a conexão é estabelecida?

O sistema operacional do servidor corresponderá os pacotes aos soquetes pela combinação do IP de origem, porta de origem, IP de destino e porta de destino e os entregará no soquete apropriado.

  1. Agora, como esses milhares de clientes se conectam a um único servidor?

    Se assumirmos que todos os clientes estão conectados ao servidor por meio de fio, não é praticamente possível manter tantos soquetes em um hardware para conexão. Como essas milhares de conexões são feitas e manipuladas?

"Soquete" neste contexto não se refere a um soquete físico, apenas a uma estrutura de dados dentro do sistema operacional.

Ainda existem limites, milhares são facilmente executáveis ​​em um servidor moderno, milhões ficam difíceis.

Não é como enquanto um aluno está fazendo uma pergunta a um professor, outro não pode fazer ao mesmo tempo, pois esse aluno em particular está ocupado ou ocupando o professor no momento, para que outros esperem, o que comparamos com o cliente B quando o cliente A estiver se comunicando.

Os computadores são muito melhores em desviar a atenção do que as pessoas. Obviamente, se o servidor tiver apenas um núcleo de processador, ele poderá fazer apenas uma coisa de cada vez, mas se puder alternar entre as coisas com rapidez suficiente, os clientes não perceberão isso.

E, é claro, muitos servidores hoje em dia têm vários núcleos de processador.


Uma nova conexão, não o soquete, é criada. Eu acho que você está estendendo a confusão do OP sobre o que é um soquete.

Parece que o problema é que o rfc difere da prática real em sua definição de soquete.

Eu apenas procurei a documentação para "accept" para os três principais sistemas operacionais, todos eles falam sobre aceitar a criação de um novo soquete.

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

Peter Green
fonte
Para a resposta de 1. Eu sei sobre a singularidade do soquete. O que eu queria perguntar é se existem 2 soquetes exclusivos e o servidor sabe que eles são diferentes. O servidor fornece a cada soquete um intervalo de tempo para executar, manipulando a solicitação ao mesmo tempo? Como se eu me conectar ao Google e estiver processando minha solicitação, isso não significa que outros milhões de solicitações de usuários estão pendentes?
Sagaryal
Também 2. Eu quis dizer as portas como uma porta física quando você deseja se conectar a uma rede, como na LAN. Eu posso estar interpretando mal as palavras aqui. Digamos que eu me conecte ao google novamente. E como milhões de outras pessoas estão se conectando a esse único servidor do Google. Eu me conecto ao google sem fio da minha casa e da mesma forma esses milhões de pessoas. Como essas conexões são tratadas pelo servidor. Como para o meu computador usar a internet, eu preciso conectar a uma porta no meu roteador ou sem fio. Eles têm milhões dessas portas fisicamente? Agora eu acho que não é sobre servidor, mas conexão sem fio é?
Sagaryal
" Normalmente, um soquete está associado a uma combinação de IP local, porta local, IP remoto e porta remota. " Um soquete , por definição da RFC, é o endereço IP local e a porta TCP, e não tem nada a ver com os endereços remotos. . Uma conexão é a combinação dos soquetes local e remoto, portanto, o endereço IP local, a porta TCP local, o endereço IP remoto e a porta TCP remota. Você confundiu o problema.
Ron Maupin
2
" O sistema operacional do servidor notifica o titular do soquete de escuta de que uma nova conexão está chegando. O aplicativo do servidor aceita a conexão e um novo soquete é criado para lidar com isso. " Uma nova conexão , não o soquete , é criada. Eu acho que você está estendendo a confusão do OP sobre o que é um soquete.
Ron Maupin
" O sistema operacional do servidor combinará os pacotes com os soquetes pela combinação de IP de origem, porta de origem, IP de destino e porta de destino e os entregará no soquete apropriado. " Novamente, você está confundindo soquete com conexão .
Ron Maupin