Qu'est ce qu'un port ?

culture générale informatique devops Oct 28, 2022

Hello,

Tu utilises des ports en longueur de journée.
Tu comprends vaguement à quoi ca sert
On va voir aujourd'hui ce que c'est réellement
Tu peux ranger ça dans le dossier : culture générale informatique
Ca t'aide à comprendre la configuration de certaines technos
Ca te sert de base pour la compréhension du fonctionnement d'un firewall
Ca te sert quand tu dois échanger avec un OPS

 

Les ports

Imagine un facteur avec un courrier.

Avec l'adresse, il arrive devant un immeuble immense.

Sur l'enveloppe, c'est précisé "Appartement Numéro 3000"

Ca l'aide vachement à trouver le bon appartement dans tout l'immeuble

Il lit le nom sur la porte de l'appartement "Mme Neaude Jessy"

Ca matche avec l'enveloppe. Hop, le courrier est délivré.

C'est ça, un port sur un serveur. C'est le numéro d'appartement.

Ben, voilà, bon week end à la semaine prochaine...

:D

Non je déconne.

Un serveur informatique possède généralement une adresse IP.

C'est ce qui lui permet de communiquer avec le monde. Et inversement ce qui peut permettre au monde de communiquer avec lui.

Sur un serveur, il peut y avoir plusieurs services qui tournent : par exemple, un serveur web, un serveur de base de données, un serveur SSH ...

Quand tu veux communiquer avec un service en particulier d'un serveur, tu dois pouvoir le trouver sur le serveur

C'est là qu'intervient le port.

Si on reprend l'image du facteur :

  • Le courrier est un message réseau envoyé par quelqu'un

  • L'adresse sur le courrier est l'adresse IP du serveur

  • Le numéro d'appartement est le numéro du Port

  • Dans cet appartement, il y un interlocuteur qui attend de recevoir du courrier

  • Cet interlocuteur, c'est ton service.

Dis autrement, un port est une porte donnant accès à une partie du système d'exploitation, qui lui même abrite des services.

Pas tous les services utilisent un port. Si ton service est local et ne nécessite aucune connexion réseaux entrante, pas besoin de port.

Un port est toujours associé à une adresse IP. Tout comme un numéro d'appartement est associé à un immeuble. Un numéro d'appartement sans immeuble, c'est nul

Par contre, le même port pour être utilisé par plusieurs IP du serveur.

Un serveur a forcément une IP "localhost" en plus de son IP sur le réseau. (là, si tu bug à cette étape, il faut revoir les cours de réseaux)

Exemple : Mysql utilise le port 3306. Quand je configure Mysql pour se lancer, je peux lui dire de se lancer uniquement sur l'IP localhost ou sur toutes les IP du serveur (ou même sur certaines IP en particulier).

Donc un port ouvert sur une IP n'est pas ouvert sur une autre IP.

Un service qui ouvre un port est souvent vu comme un risque : comme tu autorises l'extérieur à envoyer des messages dans ton serveur directement, tu autorises potentiellement une personne malveillante à le faire

C'est pour cela qu'on utilise des firewall, qu'on limite l'ouverture des ports ... (ca peut faire l'objet d'un autre article)

Un numéro de port est codé sur 16 bits, ce qui fait qu'il existe un maximum de 2^16, soit 65 536 ports distincts par machine. Ces ports sont classés en 3 catégories en fonction de leur numéro:

  • les numéros de port de 0 à 1 023 correspondent aux ports "bien-connus" (well-known ports), utilisés pour les services réseaux les plus courants,

  • les numéros de ports de 1 024 à 49 151 correspondent aux ports enregistrés (registered ports), assignés par l'IANA

  • les numéros de ports de 49 152 à 65 535 correspondent aux ports dynamiques, utilisables pour tout type de requêtes autres que celles citées précédemment.

Quand tu lances Node et qu'il dit "node écoute sur le port 3000", ca veut dire que le service Node a ouvert le port 3000 (sur toutes les IP) et que maintenant si tu veux communiquer avec Node, tu dois lui envoyer tes requêtes sur le port 3000

C'est ce que tu fais quand tu ouvres ton navigateur et que tu tapes http://localhost:3000 : tu envoies une requête HTTP sur le port 3000 de l'adresse localhost du serveur.
Quand la requête arrive, l'OS passe le message à Node, qui fait son traitement et te renvoie un résultat.

Autre point : quand tu dois exposer un port de ton conteneur (Docker) sur ton serveur :

docker run -p 127.0.0.1:80:8080 ubuntu bash

L'image ubuntu ouvre un port 8080 qui n'est visible que dans le conteneur.
Ici, on dit à Docker d'ouvrir le port 80 du serveur sur l'ip localhost et de l'attacher au port 8080 du conteneur

Donc maintenant, quand le serveur reçoit une requête sur le port 80 sur son IP localhost, il la transfert à ton conteneur qui fait le traitement et renvoie une réponse.
Même principe que plus haut. C'est juste qu'ici, c'est le service Docker qui ouvre le port.

Petits exo pour toi : sauras tu trouver quels services utilisent les ports suivants ?

  • 20/21

  • 22

  • 23

  • 25

  • 53

  • 80

  • 443

  • 465

  • 3389

  • 5432

  • 25565

  • 27017

Si tu as des questions, tu peux les poser en commentaire.

On se revoit la semaine prochaine

Imrane 🏖

La newsletter pour ne rien louper

Rejoins les 2500 lecteurs de  la newsletter pour obtenir des conseils, des stratégies et des ressources pour développer et monétiser tes compétences Tech.