Os navegadores da web usam diferentes portas de saída para diferentes guias?

49

Em um navegador da Web que suporta várias guias, como o Firefox, diferentes guias que acessam domínios de website diferentes usam uma porta dedicada para cada domínio?

Ou o navegador usa uma única porta para gerenciar todas as guias e, portanto, todos os domínios?.

    
por yoyo_fun 20.03.2016 / 21:32

4 respostas

47

Os navegadores usam portas diferentes para se conectarem a sites diferentes?

Sim, eles fazem.

Aqui está um exemplo, mostrando minhas conexões atuais do Firefox (tenho 9 guias abertas) no Windows 7:

Notas:

  • Vocêpodeverqueasportaslocaissãotodasdiferentes.

  • Asportasremotassãogeralmente80(HTTP),443(HTTPS)ou8080(AlternateHTTP).

    • Muitasoutrasportassãousadasparahospedarservidoresdaweb.PesquiseHTTPem Lista de números de porta TCP e UDP para alguns deles.
  • O processo completo de renderização de uma página da web é descrito abaixo. Veja em particular os passos 5, 6, 13 e 15 (que estão em negrito):

    • Em geral, renderizar uma única página da web usa várias conexões, e nem todas elas serão para o mesmo endereço remoto.

    • Isso ocorre porque as páginas da Web geralmente incluem recursos hospedados em outros lugares (arquivos javascript, etc.).

  • Várias conexões com o mesmo site (por exemplo, stackoverflow.com) também têm diferentes portas locais (porque são conexões separadas em diferentes guias que renderizam páginas diferentes).

Renderizando uma página da web - passo a passo

Nota:

  • Os passos 5, 6, 13 e 15 (que estão em negrito) são diretamente relevantes para a questão.

Have you ever thought about what happens when you surf the web? It’s not as simple as it seems:

  1. You type an URL into address bar in your preferred browser.
  2. The browser parses the URL to find the protocol, host, port, and path.
  3. It forms a HTTP request (that was most likely the protocol)
  4. To reach the host, it first needs to translate the human readable host into an IP number, and it does this by doing a DNS lookup on the host
  5. Then a socket needs to be opened from the user’s computer to that IP number, on the port specified (most often port 80)
  6. When a connection is open, the HTTP request is sent to the host
  7. The host forwards the request to the server software (most often Apache) configured to listen on the specified port
  8. The server inspects the request (most often only the path), and launches the server plugin needed to handle the request (corresponding to the server language you use, PHP, Java, .NET, Python?)
  9. The plugin gets access to the full request, and starts to prepare a HTTP response.
  10. To construct the response a database is (most likely) accessed. A database search is made, based on parameters in the path (or data) of the request
  11. Data from the database, together with other information the plugin decides to add, is combined into a long string of text (probably HTML).
  12. The plugin combines that data with some meta data (in the form of HTTP headers), and sends the HTTP response back to the browser.
  13. The browser receives the response, and parses the HTML (which with 95% probability is broken) in the response
  14. A DOM tree is built out of the broken HTML
  15. New requests are made to the server for each new resource that is found in the HTML source (typically images, style sheets, and JavaScript files). Go back to step 3 and repeat for each resource.
  16. Stylesheets are parsed, and the rendering information in each gets attached to the matching node in the DOM tree
  17. Javascript is parsed and executed, and DOM nodes are moved and style information is updated accordingly
  18. The browser renders the page on the screen according to the DOM tree and the style information for each node
  19. You see the page on the screen
  20. You get annoyed the whole process was too slow.

Fonte Renderização de uma página da Web - passo a passo

    
por 20.03.2016 / 21:39
61

Cada conexão a um site usa um soquete diferente com a porta TCP 80 de destino padrão para HTTP simples e 443 para HTTPS. Para que o soquete seja exclusivo, a combinação do endereço IP de origem, da porta TCP de origem, do endereço IP de destino e da porta TCP de destino deve ser diferente.

Se você tiver várias conexões para o mesmo site (assumindo que o site usa apenas 1 endereço IP) do mesmo computador, uma porta TCP de origem diferente deve ser usada. Desta forma, cada conexão é única.

No entanto, deve-se notar que, a partir do HTTP 1.1, todas as conexões são persistentes por um determinado período de tempo (a menos que seja declarado o contrário). Isso significa que a mesma conexão pode ser reutilizada pelo seu navegador se vários recursos do mesmo site forem solicitados (por exemplo, arquivos css / js). Isso também se aplica se você tiver várias instâncias do mesmo website em seu navegador.

Se você estiver no Windows, o comando netstat -no -p TCP mostrará todos os sockets TCP ativos e seus IDs de processo correspondentes, incluindo os do seu navegador:

SevocêestivernoUnix/Linux(Debiannestecaso),vocêpodeusarocomandonetstat-ntpouss-t:

    
por 20.03.2016 / 21:39
10

No que diz respeito a guias para sites diferentes, não há nada no TCP que requeira que a porta local seja diferente, desde que a tupla {IP local, porta local, IP de destino, porta de destino} seja único. Para guias no mesmo site, a situação é muito mais complexa.

O navegador, como qualquer outro software cliente, usa uma porta local diferente por conexão de saída para o mesmo destino. Em geral, ele formará várias conexões para qualquer website, para buscar recursos incorporados, como imagens, CSS, JavaScript, etc. Ele também agrupará essas conexões para possível reutilização.

Não é possível dizer se guias diferentes para o mesmo site usarão conexões distintas, porque (a) geralmente não há uma única conexão por guia e (b) dependendo do tempo e da autenticação, as conexões podem ser reutilizadas entre as guias; e como não é possível identificar as conexões, portanto, não é possível identificar as portas locais.

    
por 20.03.2016 / 22:54
6

Sim. Não Talvez. Depende.

Primeiro, um navegador pode usar qualquer uma dessas estratégias para conexões:

  1. Conexão única (improvável para qualquer navegador mais recente que 1995)
  2. Uma conexão por guia (basicamente igual a # 1, apenas um pouco melhor)
  3. Uma conexão por recurso (ingênuo, mas não funciona tão mal)
  4. Pool de conexões com o keep-alive, reutilizando conexões
  5. Algo diferente (leia-se: coisas estranhas)

Você não tem como saber qual estratégia um navegador usará, embora usar um conjunto de conexões (e reutilizar conexões) seja uma suposição razoável.

Em segundo lugar, a maneira como o TCP funciona, você tem uma porta de origem e uma porta de destino para cada conexão. O par de endereço e porta de origem e destino define a conexão.
Você sempre [1] usa uma porta bem conhecida (como 80 ou 443) para se conectar ao servidor (ao qual escuta em seu endereço anunciado), mas o outra porta é escolhida aleatoriamente. Assim, dependendo de de que lado você olha para uma conexão, ela tem uma ou várias portas possíveis.

Assim, a mesma guia pode (e normalmente irá) usar várias portas diferentes em seu final, mas em princípio diferentes abas podem (se as conexões forem agrupadas e diferentes recursos em diferentes guias são carregados do mesmo servidor) use a mesma porta.

Como a questão menciona explicitamente de saída , no caso "normal", os números de porta seriam os mesmos, independentemente da guia em que estão ou de uma das duas portas possíveis (80 e 443) . Embora, é claro, seja possível solicitar explicitamente uma porta diferente (como 8080) em uma URL. Isso é meio raro, no entanto.

[1] Bem, não sempre ... mas não vamos complicar muito.     
por 21.03.2016 / 20:12