Servidores WEB e o mito do porto 8080

49 Comentários

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: http://www.pplware.com: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.

04-11-2009 14-24-39

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)

04-11-2009 14-44-45

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.

Comentários

49

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

  1. Avatar de Bruno M.

    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.

      1. Avatar de Pedro Pinto

        eh eh eh boa @Zé dos trukes

        @Bruno M. é indiferente, de certeza que não foi por isso que deixaste de entender o artigo !!!

        1. Avatar de Bruno M.

          foi apenas um reparo 😛 lol Estou habituado a ouvir porta e não porto 😛

          Além do mais deixei explicito que foi um reparo…

          1. Avatar de chicosoft

            Pois, mas Porto é a designação mais correcta.

          2. Avatar de Jamal carvalho
            Jamal carvalho

            eh portugues de portugal… vamos relevar.

      2. Avatar de leitorassiduo
        leitorassiduo

        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 😛

        1. Avatar de leitorassiduo
          leitorassiduo

          Ups.. queria dizer “o post do msn”

    1. Avatar de joao
      joao

      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…

    2. Avatar de a
      a

      http://www.thefreedictionary.com/ports > A port of entry. > tradução para PT: porto e não porta (door).

      1. Avatar de a
        a

        porto (ô) –
        (latim portus, -us, passagem, abertura, entrada de um porto)

    3. Avatar de Mario
      Mario

      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”.

    4. Avatar de Nuno José

      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

    5. Avatar de shadowknight
      shadowknight

      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.

  2. Avatar de TiagoKito
    TiagoKito

    Gostei da explicacao… Parabens Pedro, continua 😉

    Cumps

  3. Avatar de Wilson Silva
    Wilson Silva

    O Pedro é um mestre em redes 😀

  4. Avatar de tony
    tony

    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.

  5. Avatar de Fernando
    Fernando

    Acho que é confusão a mais para quem não percebe nada.Mas parabéns espero que seja útil para alguém.

  6. Avatar de JPedrosa
    JPedrosa

    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

  7. Avatar de Miguel Jeri

    Boa explicação, gostei da onda destes artigos (como o artigo dos portos do MSN).

  8. Avatar de meotux
    meotux

    O Pedro Pinto tem quer ir para a escola, aprender a escrever. 😉

    1. Avatar de Ricardo Ferreira
      Ricardo Ferreira

      Já tem companhia!!

      1. Avatar de Pedro Pinto

        @meotux
        Vou-te dar o globo de cromo pplware – mês Novembro !!!!
        É com cada um….dasss

  9. Avatar de P.G.R.
    P.G.R.

    @ 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

  10. Avatar de HardCode
    HardCode

    “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.

    1. Avatar de Miguel Costa

      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

      1. Avatar de Pedro Pinto

        @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.

      2. Avatar de Bruno M.

        @Miguel Costa.. era aí que eu queria chegar.. Porto = Baía! 🙂 , é a primeira coisa que me vem a cabeça! 😛 lol

        cumps

        1. Avatar de Pedro Pinto

          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…

          1. Avatar de Rui Costa
            Rui Costa

            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

  11. Avatar de Ricardo Mota
    Ricardo Mota

    Muito bom artigo!

  12. Avatar de jose
    jose

    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.

  13. Avatar de Henrique
    Henrique

    “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!

    1. Avatar de Pedro Pinto

      Boas @Henrique
      Sim, já alterei…foi um lapso de escrita.

      Obrigado

      1. Avatar de Tito

        Muito melhor agora.

        Li a feed no Google Reader e até me assustei. Já vinha aqui rabujar.

        Bom trabalho.

        1. Avatar de Pedro Pinto

          eh eh eh..eu sabia que vinhas 🙂

          Abraço

  14. Avatar de Bruno Antunes
    Bruno Antunes

    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 😛

    1. Avatar de Vítor M.

      Obrigado pela preferência 😀

      Isso é o nosso combustível. 😛

      1. Avatar de Bruno Antunes
        Bruno Antunes

        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. 😉

  15. Avatar de softclean
    softclean

    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. 😉

  16. Avatar de leitorassiduo
    leitorassiduo

    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

  17. Avatar de naoliveira

    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.

    1. Avatar de Ana Narciso

      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.

  18. Avatar de Apaxe

    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

    1. Avatar de softclean
      softclean

      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.

  19. Avatar de soho
    soho

    Aqui no Brasil nos referimos sempre ao termo “porta”
    Porém acho que o correto seria porto

    Abraços

  20. Avatar de Tmcr
    Tmcr

    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.