Por que meu navegador fica suspenso quando eu visito google.com:8000, mas erro em google.com:443?

0

Estou aprendendo sobre portos e estava me esquivando. Descobri que, quando visito o link (uma porta que escolhi aleatoriamente), o tempo limite do meu navegador é interrompido após algum tempo.

Mas quando visito o link , recebo um erro imediatamente. (O texto do erro parece ser específico do navegador - o Chrome diz "Resposta vazia", enquanto o Safari afirma que o servidor "desconectou inesperadamente a conexão".)

Eu sei que o 443 é a porta padrão para o protocolo HTTPS, então imaginei que isso poderia ter algo a ver com isso, mas não estou familiarizado o suficiente com esses conceitos para sugeri-lo. Em particular, alguém poderia me mostrar o que está acontecendo quando eu especifico um número de porta ruim e meu navegador trava (por cerca de 1 minuto) antes de expirar?

    
por Eli Rose 15.02.2016 / 07:49

1 resposta

3

Quando você está indo para algum lugar usando um navegador e especificando uma porta, você está tentando fazer uma conexão (TCP) para essa porta.

Quando você executa um serviço (como um servidor da Web, por exemplo), ele é executado em uma porta específica. Se você tentar se conectar a uma máquina e não houver nenhum programa sendo executado associado a essa porta (o termo correto está vinculado à porta), ou se ele estiver com firewall, ele expirará.

Quando você acessou o Google na porta 8000, não havia nenhum serviço em execução, por isso, expirou. (Ele realmente tenta se conectar algumas vezes, há um erro nas primeiras vezes para tornar as coisas mais robustas)

Quando você foi para o Google na porta 443, você fez uma conexão com sucesso, porque o 443 é normalmente usado para HTTPS, ou seja, conexões seguras. Como você não iniciou uma conexão segura de acordo com o protocolo HTTPS, o Chrome e o Firefox se comportaram dessa maneira.

Resposta avançada

Ao fazer uma conexão no TCP, há um "handshake de 3 vias" - o cliente envia um pacote "SYN" para o servidor. O servidor recebe isto, e assumindo que existe um programa rodando, ele retorna uma confirmação "SYN-ACK", então o cliente envia um pacote "ACK" para o servidor - quando os sistemas estabeleceram uma conexão.

No caso de se conectar à porta 8000, o cliente não obtém uma resposta ao pacote SYN, portanto, ele tenta algumas vezes e, em seguida, desiste e expira.

No caso de se conectar à porta 443, uma conexão é estabelecida no nível TCP. Neste momento, o servidor espera negociar uma conexão SSL para segurança (porque ela está configurada para fazer isso na porta 443). Você não sabe como falar SSL, por isso falhou.

Pontos de bônus

Se você tem o TELNET instalado - a maioria dos sistemas, você pode fingir ser um navegador (ou um cliente de e-mail ou o que quer que seja, se você conhece o protocolo), fazendo o seguinte.

1.  type "telnet www.google.com 80"
(wait for a few seconds)
2.  Type GET / HTTP/1.1<enter>
host www.google.com<enter><enter>

O passo 1 diz ao Telnet para criar uma conexão TCP para o servidor Googles na porta 80, e a etapa 2 diz o que obter (GET / significa obter o arquivo raiz), e a linha "host" diz qual servidor você está querendo conectar para - você precisa disso porque muitos sites compartilham um único servidor - a segunda linha informa ao servidor qual site. Você pressiona enter duas vezes para dizer que terminou de enviar seu cabeçalho e depois recebe uma resposta HTTP. (Se você fosse um navegador da Web, enviaria muito mais informações, incluindo detalhes do navegador, cookies etc. - mas, para fins de explicação, não fizemos isso.)

    
por 15.02.2016 / 08:17