Servidores WEB e o mito do porto 8080
Como é que um servidor WEB (HTTP) recebe e trata pedido simultâneos?
Em termo de brincadeira às vezes costumo fazer a seguinte pergunta: “Como é que um servidor WEB/HTTP recebe um pedido?” Ao que me respondem: então usa-se o endereço e ele vai fazer um pedido ao porto 80 do servidor. Ok até aqui tudo bem, então faço uma segunda pergunta: “Então se o porto 80 já está ocupado com o primeiro pedido, como é possível receber outros pedidos?” E eis que a resposta é normalmente a mesma…usa-se o porto 8080. O porto 8080, pergunto eu???
Vamos lá então explicar isto melhor !!!
Os servidores WEB/HTTP funcionam por omissão no porto 80 (HTTP) ou no porto 443 (HTTPS). No entanto, o administrador do sistema pode configurar o serviço para este funcionar em qualquer porto, sendo que nesse momento o serviço/página WEB é acessível usando o endereço da seguinte forma: <endereço_maquina>:<porto_maquina> (exemplo: https://pplware.sapo.pt:85).
Mas considerando que o nosso servidor apenas está configurado para receber pedidos no porto 80, como trata ele pedidos em simultâneo, deixando que o porto 80 esteja sempre livre para receber novos pedidos?
A resposta é relativamente simples…quando um servidor recebe um pedido no porto 80 procede a um mecanismo de threading (prefork,worker), deixando assim sempre o porto 80 à escuta.
Para exemplificar vou usar o XAMPP e o Currports . Fazemos start ao Apache e abrimos o currports para ver o que se está a passar.
Como podemos verificar pela imagem, depois de fazer start ao Apache ele criou 2 instâncias do serviço. Neste momento temos o serviço à espera de pedidos no porto 80 (HTTP) e 443 (HTTPS)
Vamos agora abrir o browser e escrever o endereço http://localhost ou http://127.0.0.1 (já agora deixo aqui uma dica, o endereço do localhost é qualquer um endereço da gama 127.0.0.0/8)
Como podem verificar foram criadas várias instâncias do apache, que possuem a informação do remote port ou seja o porto pelo qual o cliente iniciou a comunicação. Como referido no artigo anterior “Como é que o meu MSN comunica com o teu?” existem portos que são atribuídos dinamicamente pelo sistema operativo (Portos 49152 a 65535), isto é, quando um cliente inicia uma ligação ao servidor é-lhe atribuído um porto de forma dinâmica e do outro lado o servidor recebe o pedido num porto conhecido (ex.80) e passa-o para uma thread (worker) que se encarregará de “servir” o pedido”. O número de pedidos simultâneos pode ser definido nas configurações do servidor Web.
Para finalizar, já que falamos aqui em processos e thread, aqui fica a diferença entre o que é um processo e o que é uma thread: processos são independentes e têm seus próprios endereços de memória enquanto threads pertencem a um processo e partilham o mesmo endereço de memória e outros recursos.
Quanto ao porto 8080, esse só existe mesmo quando configuramos o nosso servidor para operar nesse porto.
Este artigo tem mais de um ano
Porto ou porta??? Que eu saiba chama-se porta… 😛 Já que ports em inglês significa porta e não porto no contexto informático.. 🙂
Apenas este reparo.. de resto boa noticia.
Isto: http://tinyurl.com/yls3alw
eh eh eh boa @Zé dos trukes
@Bruno M. é indiferente, de certeza que não foi por isso que deixaste de entender o artigo !!!
foi apenas um reparo 😛 lol Estou habituado a ouvir porta e não porto 😛
Além do mais deixei explicito que foi um reparo…
Pois, mas Porto é a designação mais correcta.
eh portugues de portugal… vamos relevar.
Boa.. lol
Isto já foi explicado noutro post (o posto do msn referido neste artigo), não estou a ver ninguém com paciência para voltar a explicar 😛
Ups.. queria dizer “o post do msn”
Eu diria que em inglês “porta” é “door”
port 1 |pôrt|
noun
a town or city with a harbor where ships load or unload, esp. one where customs officers are stationed.
Ou seja…As pessoas é que têm tendência a dizer “porta”, mas na realidade deveriam dizer “porto”!!
Quanto ao artigo…Está bom realmente. Só o acho um pouco superficiais às vezes…
http://www.thefreedictionary.com/ports > A port of entry. > tradução para PT: porto e não porta (door).
porto (ô) –
(latim portus, -us, passagem, abertura, entrada de um porto)
Chama-se Porto. O nome correcto é mesmo porto embora possamos designar pelos dois.E tens que melhorar o teu inglês. Port (em inglês) é Porto. Porta é “door”.
Por acaso o termo correcto deve ser porto, assim como fikle devia ser ficha e não ficheiro, database banco de dados e não base de dados, etc etc etc
Não amigo, porta em inglês é Door. É porto que se diz. Não te esqueças que é Port e nao Ports. Compreendo a tua confusão, pois ao inicio tambem me questionei sobre isso.
Gostei da explicacao… Parabens Pedro, continua 😉
Cumps
Bom artigo, Pedro.
O Pedro é um mestre em redes 😀
Sobre o porto 8080, bem… penso que muitas das vezes é referenciado, porque em grande parte das configurações de proxy WEB este é o porto utilizado. Dai a confusão.
Acho que é confusão a mais para quem não percebe nada.Mas parabéns espero que seja útil para alguém.
Pedro Pinto,
melhor do que os temas que expões, é a forma como o fazes.
bom trabalha pá.
Apenas uma dúvida,
como leigo, embora lide com algumas destas coisas de forma diária, ficou-me uma dúvida.
Tenho na minha empresa, alguns túneis vpn feitos com clientes, e tipicamente nos pedidos à equipa de rede, o que eu refiro como portos a abrir é o 80.
Ora, como o porto 80 apenas serve de porto de escuta e a comunicação é feita é feita em outro, como é que o túnel funciona? Ou seja, parece-me que o que fica aberto não será o porto 80, mas sim o protocolo http e que depois tem todas as regras que descreves por trás, é isso? Senão o mapeamento para portas altas não iria servir de nada, dado que estariam fechadas.
cumps,
JP
Boa explicação, gostei da onda destes artigos (como o artigo dos portos do MSN).
O Pedro Pinto tem quer ir para a escola, aprender a escrever. 😉
Já tem companhia!!
@meotux
Vou-te dar o globo de cromo pplware – mês Novembro !!!!
É com cada um….dasss
@ meotux
Do inglês Port o mais correcto será mesmo “porto” (apesar de usualmente se designar por “porta” em PT). Isto deve-se ao facto das traduções nem sempre funcionarem, razão pela qual nunca deveríamos traduzir os termos técnicos.
Por outro lado antes de mandares “uma boca” dessas, devias ler tudo com atenção… E o P.P. não precisa de ir para a escola, dado que passa lá o dia… na Universidade onde dá aulas.
Um abraço
“Mas considerando que o nosso servidor apenas está configurado para receber pedidos no porto 80, como trata ele pedidos em simultâneo, deixando que o porto 80 esteja sempre livre para receber novos pedidos?
A resposta é relativamente simples… quando um servidor recebe um pedido no porto 80 ele mapeia-o para um porto livre atribuído dinamicamente pelo sistema operativo, deixando assim sempre o porto 80 à escuta.”
Isto apenas acontece no exemplo porque foi realizado numa máquina local. Na verdade esse mapeamento dinâmico é feito apenas nos clientes.
A porta 80 é/pode ser comum a todos os pedidos…
Relativamente à forma como os pedidos são processados, depende sempre das “Threads” do servidor. Se o servidor tiver activa apenas uma thread, o que acontece é que enquanto um pedido está a ser processado, os restantes pedidos que chegam vão para uma Queue.
Se o servidor tiver várias Threads, então cada um responde a um pedido simultaneamente e cada um tem a sua Queue.
Não confundam por favor as portas de servidor e cliente.
Sem dúvida.. estás correcto.. HardCode
Pedro Pinto.. quais são as tuas fontes? é que estás a criar alguma confusão com os termos que utilizas 😉
Quanto à questão porto e porta.. cada um chame-lhe o que entender melhor.
Mas para mim, e reforço !para mim! um porto está relacionado com as baías…
e uma porta relacionada com firewall’s 😉
um abraço a todos
@HardCode
Sim, o que acontece realmente é o mecanismo de threading do lado do servidor. Do lado do cliente o SO encarrega-se de atribuir um porto dinâmico. Vou rever essa frase.
@Miguel Costa.. era aí que eu queria chegar.. Porto = Baía! 🙂 , é a primeira coisa que me vem a cabeça! 😛 lol
cumps
Meus caros, volto a referir…é indiferente !!!!
Há quem chame porto, há quem chame porta…mas que confusão por causa de 2 termos que são a mesma coisa !!!
Na minha terra há gasalhos…em outras terras chama sarrolhos…
Pedro,
Qual é a tua terra? É que gasalhos refugados com carne, feitos pela sogra são 5*.
E míscaros ou sanchas? Está a chegar o tempo delas.
Saudações portistas
Muito bom artigo!
Aprecio o facto de se procurar escrever os artigos em português correcto, mas também se deve ter a mesma preocupação nos comentários.Acredito que a falta de tempo não ajuda.
“A resposta é relativamente simples…quando um servidor recebe um pedido no porto 80 ele mapeia-o para um porto livre atribuído dinamicamente pelo sistema operativo, deixando assim sempre o porto 80 à escuta.”
Isto não é verdade… Os pedidos são todos recebidos no porto 80 (do lado do servidor), o que é “atribuido” dinamicamente é do lado do cliente! Podes observar isso nos traces que recolheste.
De resto, bom trabalho!
Boas @Henrique
Sim, já alterei…foi um lapso de escrita.
Obrigado
Muito melhor agora.
Li a feed no Google Reader e até me assustei. Já vinha aqui rabujar.
Bom trabalho.
eh eh eh..eu sabia que vinhas 🙂
Abraço
Boas Pedro, bom post sem dúvida.
Já no outro dia tinha andado a pensar como é que é feito este tipo de gestão, mas com a falta de tempo ainda não tinha ido ver.
Ter o pplware como homepage é sempre uma mais valia 😛
Obrigado pela preferência 😀
Isso é o nosso combustível. 😛
Sempre em cima dos acontecimentos.
Admiro a tua disponibilidade (a actualmente a dos restantes membros) para com este site Vitor.
Sou cliente assíduo desde 2005 e tenho visto este site crescer desde então. 😉
Artigo bastante esclarecedor e bem escrito, ao contrário de outros que dizem que o autor tem de “aprender a escrever”…
Parabéns pela iniciativa, gostei bastante da forma como o tema foi abordado, sem ser demasiado básico, nem cair nos profundos detalhes técnicos de redes. 😉
Muito bom este artigo, já agora, para quem quiser mais uma explicaçãozita da diferença entre threads e processos:
http://ibiblio.org/java/course/week11/02.html
e já que estamos a falar de tasks concorrentes, talvez também seja interessante para aqueles que não conhecem o seguinte conceito:
http://en.wikipedia.org/wiki/Semaphore_%28programming%29
Pedro,
depois de ler os comentários sobre se é porta ou porto (neste e em outros artigos) e como já se viu o pessoal reclama mas depois diz que até nem se importa como é que se designa, proponho que nos próximos artigos passes a designar de sanita. E porquê sanita?
1ª porque é para onde deviam de ir estes comentários (incluindo este) depois porque não vai aparecer ninguém a dizer que não é sanita mas sanito (não mesmo?!?!?)
off topic
no artigo devia estar mais explícito que a sanita 80 é só para iniciar/negociar a comunicação entre os 2 computadores, depois de negociada, a comunicação é continuada na sanita escolhida, que como referes no artigo será no intervalo 49152 a 65535.
LOL!
Não te passa pela cabeça o quanto me ri ao ler o teu comentário! Genial!
E sim, estás perfeitamente correcto no que dizes!
Nunca mais me vou esquecer… sanita 80… demais.
para quem quizer perder 12 minutos da sua via a ver como a net funciona: warriors of the net
Site:
http://www.warriorsofthe.net/
Trailer:
https://www.youtube.com/watch?v=c3YjrtILbik
Download Filme EN-EN
http://www.warriorsofthe.net/cgi-bin/download.pl/warriors-700-VBR?url=ftp://ftp.luth.se/pub/misc/www.warriorsofthe.net/warriors-700-VBR.mpg
ou
http://www.warriorsofthe.net/cgi-bin/download.pl/warriors-700-VBR?url=http://ftp.sunet.se/pub/tv+movies/warriors/warriors-700-VBR.mpg
Download Filme PT-BR
http://www.warriorsofthe.net/cgi-bin/download.pl/warriors-700-br-VBR?url=http://ftp.sunet.se/pub/tv+movies/warriors/warriors-700-br-VBR.mpg
ou
http://www.warriorsofthe.net/cgi-bin/download.pl/warriors-700-br-VBR?url=http://ftp.warriorsofthe.net/mirror/warriors-700-br-VBR.mpg
Pedro Pinto & companhia,
Após uma Porta ser atribuída dinamicamente pelo sistema operativo esta fica em escuta para a resposta ao pedido. Pergunto por quanto tempo estas Portas ficam neste estado? Após receberem o pedido passam ao modo Fechado?
Podem explicar melhor como isto se processa, caso saibam?
Obrigados
Tens um timeout, que se não houver comunicação, fecha. Isto para ligações “keep-alive”, pois também há o tipo de comunicação, em que é aberta a ligação, dá-se a troca de dados, e a ligação é fechada.
Aqui no Brasil nos referimos sempre ao termo “porta”
Porém acho que o correto seria porto
Abraços
A identificação e isolamento de cada flow, na maioria dos serviços é efetuada pela source port do originador (cliiente) sendo este o fator diferenciador que permite identificar um determinado flow num universo de centenas ou ate milhares de flows concorrentes.