Pourquoi mon navigateur se bloque-t-il lorsque je visite google.com:8000, mais une erreur se produit sur google.com:443?

0

J'en ai appris sur les ports et je me moquais de moi. J'ai découvert que lors de ma visite http://google.com:8000 (un port que je choisis au hasard), mon navigateur expire après une pause de quelques instants.

Mais quand je visite http://google.com:443 , Je reçois une erreur immédiatement. (Le texte de l'erreur semble être spécifique au navigateur - Chrome indique "Réponse vide", alors que Safari affirme que le serveur "a interrompu la connexion de manière inattendue".)

Je sais que 443 est le port par défaut pour le protocole HTTPS, alors j’imaginais que cela pouvait avoir un lien avec cela, mais je ne connais pas suffisamment ces concepts pour en parler. En particulier, quelqu'un peut-il m'expliquer ce qui se passe lorsque je spécifie un numéro de port incorrect et que mon navigateur se bloque (pendant environ 1 minute) avant l'expiration du délai?

Eli Rose
la source

Réponses:

3

Lorsque vous allez quelque part en utilisant un navigateur et en spécifiant un port, vous essayez d’établir une connexion (TCP) avec ce port.

Lorsque vous exécutez un service (comme un serveur Web, par exemple), il s'exécute sur un port spécifique. Si vous essayez de vous connecter à une machine et qu'aucun programme en cours d'exécution n'est associé à ce port (le terme correct est lié au port) ou s'il est protégé par un pare-feu, le délai expire.

Lorsque vous avez accédé à Google sur le port 8000, il n'y avait aucun service en cours d'exécution, donc le délai a expiré. (Il essaie en fait de se connecter plusieurs fois au cas où il y aurait une erreur les premières fois pour rendre les choses plus robustes)

Lorsque vous avez accédé à Google sur le port 443, vous avez réussi à établir une connexion, car 443 est généralement utilisé pour HTTPS, c’est-à-dire des connexions sécurisées. Comme vous n'avez pas établi de connexion sécurisée conformément au protocole HTTPS, Chrome et Firefox se sont comportés de cette manière.

Réponse avancée

Lorsque vous établissez une connexion sur TCP, il existe une "négociation à 3 voies" - le client envoie un paquet "SYN" au serveur. Le serveur le reçoit et, en supposant qu'un programme est en cours d'exécution, il renvoie un accusé de réception "SYN-ACK", puis le client envoie un paquet "ACK" au serveur. Les systèmes ont alors établi une connexion.

Dans le cas d'une connexion au port 8000, le client n'obtient pas de réponse au paquet SYN. ​​Il essaie donc plusieurs fois, puis abandonne et expire.

Dans le cas d'une connexion au port 443, une connexion est établie au niveau TCP. À ce stade, le serveur s'attend à négocier une connexion SSL pour la sécurité (car il est configuré pour le faire sur le port 443). Vous ne savez pas parler SSL, cela a donc échoué.

Points bonus

Si TELNET est installé (la plupart des systèmes le font, vous pouvez prétendre être un navigateur (ou un client de messagerie ou autre, si vous connaissez le protocole), en procédant comme suit.

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>

L'étape 1 indique à Telnet de créer une connexion TCP avec le serveur Googles sur le port 80 et l'étape 2 indique ce qu'il faut obtenir (GET / signifie obtenir le fichier racine), et la ligne "hôte" indique le serveur auquel vous souhaitez vous connecter - vous besoin parce que beaucoup de sites Web partagent un seul serveur - la deuxième ligne indique au serveur quel site. Vous appuyez deux fois sur Entrée pour indiquer que vous avez fini d'envoyer votre en-tête, puis vous recevez une réponse HTTP. (Si vous étiez un navigateur Web, vous enverriez beaucoup plus d'informations, y compris les détails du navigateur, les cookies, etc., mais ceci n'a pas été expliqué.)

davidgo
la source
Merci pour la réponse approfondie. Donc, si je spécifie un port sur lequel aucun service n'est exécuté, que se passe-t-il au niveau du matériel du côté serveur? Est-ce que les paquets sont "livrés", mais pas ramassés? Ce concept s'applique-t-il même? Je pense à un port en tant que référentiel de paquets, mais peut-être que je suis totalement déconnecté. S'agit-il plutôt d'une balise fournie avec chaque paquet?
Eli Rose
Les paquets sont livrés (au serveur) mais non récupérés (c'est-à-dire ignorés par le service). Notez que cela se produit dans le logiciel, pas le matériel. Votre ordinateur est doté d’une pile réseau «tcp / ip». Il s’agit essentiellement d’un pilote réseau - qui communique avec votre carte réseau et fournit les protocoles de communication sous-jacents.
davidgo