Cette première activité est une présentation générale des réseaux. Elle traite donc de beaucoup de choses mais sans rentrer dans les détails. Les différentes parties seront étudiées plus en profondeur dans plusieurs activités spécifiques.
Cette activité n'a donc pour but que fournir quelques débuts d'explications, de montrer les grandes lignes de la communication par réseau.
Par contre, elle vous permettra de comprendre où fouiller dans votre Box pour que votre PC soit enfin capable d'être un serveur pour jouer avec des amis à votre jeu en ligne préféré ...
A quoi servent les réseaux ? Réponse rapide : à faire communiquer des programmes entre eux, programmes qui sont situés sur des ordinateurs différents.
Pour garantir le transfert d'informations, la technique utilisée a été de découper cette tâche assez complexe en plusieurs tâches plus faciles à réaliser. On travaille ainsi par couche successive d'informations et de traitement de l'information.
Voici le descriptif rapide des différentes couches :
Auteur de l'image : Offnfopt — Travail personnel / Domaine Public
Nous nous limiterons ici aux couches 1 à 4.
Lorsque vous tentez de valider vos identifiants de connexion sur un site Internet, que se passe-t-il ?
Sans trop rentrer dans les détails et avec de grosses approximations :
Nous allons maintenant survoler un peu chacune de ces couches pour tenter de comprendre comment un ordinateur situé dans votre lycée peut parvenir à aller communiquer avec un ordinateur distant de plusieurs centaines de kilomètres.
Internet est composé de l’ensemble des communications permettant l’utilisation des messageries, des navigateurs web et des logiciels de communication.
Il ne faut donc pas confondre Internet et le Web. Le Web constitue l’ensemble des pages affichées par les navigateurs mais il ne s’agit donc que d’une partie des communications qui s’opèrent sur Internet.
A la navigations sur les sites, il faut rajouter les messageries via email, les messageries instantanées, les communications visuelles, le peer-to-peer …
Pour communiquer, il faut connaître l’adresse I.P de l’ordinateur concerné. IP veut dire Internet Protocol.
Cela vous mène jusqu’à la machine voulue.
Les adresses version 4 (Ipv.4) sont composées de 4 octets qui comportent chacun 8 bits. On obtient donc un espace total de 32 bits valant 0 ou 1.
Les octets sont séparés par des points :
Exemple d’adresse IP v4 en binaire :
1010 1100 | . | 0000 1000 | . | 1111 1110 | . | 0000 0010 |
Comme noter l’octet avec ses 8 bits est un peu long à taper et source d’erreur, on ne donne habituellement pas la valeur de l’octet en binaire mais en décimal : un nombre compris entre 0 et 255 (souvenez-vous de l’histoire de 28 donnant 256 possibilités).
Même adresse IP v4 en décimal :
172 | . | 8 | . | 254 | . | 2 |
01° Pourriez-vous vérifier que l’octet de gauche 1010 1100 correspond bien à 172 ?
Un peu d'aide avec un cas presque similaire :
Pour transformer un nombre binaire en nombre en base 10 (notre base naturelle puisqu’on a 10 doigts), il faut savoir que :
Voilà un exemple pour un nombre binaire de 8 bits (on appelle cela un octet), M = 1010 1011 .
Nombre M = | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 1 |
Les bits codent | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
On obtient donc | 128 | 32 | 8 | 2 | 1 |
D'ou la valeur de M en base 10 : M = 128 + 32 +8 + 2 + 1 = 171.
On peut donc écrire que M = ( 171 ) 10 = ( 1010 1011 ) 2
CORRECTION :
Nombre M = | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 |
Les bits codent | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
CLIQUEZ ICI POUR VOIR COMMENT CONVERTIR :
M =
Si vous bloquez, vous pouvez faire un tour dans la partie FICHES, vous y trouverez une fiche sur le binaire :
Avec 32 bits, on a 232 adresses IPv4 différentes, soit plus de 4 milliards d'adresses différentes. Néanmoins, avec l’augmentation du nombre d’objets connectés, les adresses Ipv4 arrivent à saturation : il va finir par ne plus y avoir assez d’adresses différentes !
Nous allons voir les deux techniques utilisées pour pallier à cette pénurie.
La première (vue en 1.2) est le changement de technique d'encodage d'adresse. Nous allons passer de 32 à 128 bits avec les IP v6
La deuxième consiste en attendant à ne pas réellement accorder d'adresses IP individuelles aux équipements des réseaux. Nous allons voir ceci en 1.3
Les adresses IP version 6 ou Ipv.6 prennent donc le relais progressivement. Pour l'instant, il y a coexistence entre les deux versions d'IP.En Ipv.6, on dispose de 128 bits pour coder une adresse IP.
02° Combien d'adresses uniques peut-on obtenir avec ces 128 bits ?
Regardons cela de plus près :
Une adresse Ipv.6 est une adresse sur 16 octets (128 bits). L’adresse est donc 4 fois plus grande que l’IPv4. En terme de nombre d'adresses disponibles, on aura alors 2128 possibilités : plus de 3.1038 possibilités. Si vous voulez vraiment un nombre, cela correspond à plus de 300 milliards de milliards de milliards de milliards d'adresses. Quelqu'un, dont je ne connais pas l'identité, a calculé que cela revient à avoir 1500 appareils possédant une adresse unique par m2. En espérant que ce soit assez !
Une adresse Ipv6 est composée d’une 8 association de 2 octets séparés par des doubles points :
Exemple d’adresse IP v6 en binaire :
10101100 00001000 | : | 10101100 00001001 | : | 10101100 00001010 | : | 10101100 00001011 | : | 00000000 00000000 | : | 00000000 00000000 | : | 00000000 00000000 | : | 00000000 00000000 |
C’est un peu long à taper et à lire …
On donne plutôt chaque association de 2 octets(16 bits) par sa valeur en hexadécimal. Pourquoi ? En décimal 216 donne 65536 valeurs possibles. Un peu moins long qu’un mot binaire de 16 bits mais ça commence à faire beaucoup de chiffres néanmoins.
Exemple d’adresse IP v6 en décimal :
44040 | : | 44041 | : | 44042 | : | 44043 | : | 0 | : | 0 | : | 0 | : | 0 |
On utilisera donc plutôt l’hexadécimal.
Exemple d’adresse IP v6 en hexadécimal :
AC08 | : | AC09 | : | AC10 | : | AC11 | : | 0000 | : | 0000 | : | 0000 | : | 0000 |
Il existe encore d'autres règles, comme le fait de pouvoir remplacer une fois un groupe d'adresses 0 à la suite par deux doubles points à la suite :: de façon à limiter la place de cette adresse.
Exemple :
AC08 | : | AC09 | : | AC10 | : | AC11 | : | 0000 | : | 0000 | : | 0000 | : | 9042 |
Peut devenir :
AC08 | : | AC09 | : | AC10 | : | AC11 | :: | 9042 |
Comme on sait qu'il faut 8 valeurs, il ne reste qu'on combler par des zéros. Ici, on a 5 valeurs. C'est donc que le signe ::
symbolise 3 fois 0000
de suite.
03° Pourriez-vous vérifier que les deux octets de gauche 10101100 00001000 codant 44040 en décimal correspondent bien à AC08 en hexadécimal ?
Au fait, comment fonctionne ce code hexadécimal ?
Le principe est de compter en base 16, donc avec 16 chiffres.
Le 0 vaut 0, le 1 vaut 1, le 2 vaut 2
le 3 vaut 3, le 4 vaut 4, le 5 vaut 5
le 6 vaut 6, le 7 vaut 7 , le 8 vaut 8
le 9 vaut 9.
Et ensuite, c'est embêtant, car il n'existe plus de chiffres différents... Alors, on utilise des lettres :
le A vaut 10, le B vaut 11, le C vaut 12
le D vaut 13, le E vaut 14, le F vaut 15
Ainsi, le nombre 12 en décimal se note (12)10 pour bien comprendre qu'on est en base 10.
En hexadécimal, en base 16 donc, on aurait simplement (C)16.
Lorsqu’on a plusieurs chiffres hexadécimaux à la suite c’est plus compliqué :
Le plus à droite est à multiplier par 1.
Le suivant est à multiplier par 16.
Le suivant est à multiplier par 256 (ou 16 puissance 2).
Le suivant est à multiplier par 4096 (ou 16 puissance 3).
A titre d’exemple, regardons les deux codes numériques permettant d'afficher le symbole de l’euro dans un code HTML : €
en version décimale et €
en version hexadécimale.
Visiblement, on peut écrire M = ( 8364 ) 10 = ( 20AC ) 16 en hexadécimal. Vérifions :
Nombre M = | 2 | 0 | A | C | La case code | 4096 | 256 | 16 | 1 | On obtient | 2x4096 | 0x256 | 10x16 | 12x1 |
Cela donne 2x4096 + 0x256 + 10x16 + 12 = 8192 + 0 + 160 + 12 = 8364 !
Voilà pourquoi il existe deux codes disponibles : il y a un code où le nombre est écrit en décimal et un code où le code est écrit en hexadécimal.
Alors, du coup, parvenez-vous à résoudre le problème de 44040 en décimal correspondant à 8 en hexadécimal ?
CORRECTION :
Nombre M = | A | C | 0 | 8 |
Les bits codent | 4096 | 256 | 16 | 1 |
CLIQUEZ ICI POUR VOIR COMMENT CONVERTIR :
M =
04° Allez sur un site permettant de déterminer votre IP pour trouver votre IP sur Internet. Vous pourriez tester par exemple http://www.mon-ip.com/. Renseignez la case IP. J'ai mis deux case pour que vous puissez indiquer la v4 et la v6 si les deux sont disponibles. Ne remplissez rien dans IP locale pour l'instant.
Une fois que c'est fait, ouvrez la console de votre système et tapez y la commande suivante :
> ipconfig
Remplissez alors la seconde adresse, l'adresse dite locale ici. Récuperez également l'adresse de la passerelle.
Version | 4 | 6 |
Ip | ||
Ip locale sur le réseau | ||
Ip Passerelle |
05° Faire de même avec un deuxième PC de la salle ou de votre maison.
Version | 4 | 6 |
Ip | ||
Ip locale sur le réseau | ||
Ip Passerelle |
06° Comparer les trois adresses sur les deux pc. Que constatez-vous ?
...CORRECTION...
On constate que les 2 PC ont la même adresse IP externe et la même adresse de passerelle.
Par contre, ils possèdent deux adresses réseaux différentes.
07° Trouver l'adresse du site de votre choix en tapant par exemple ceci dans la console :
Une fois que c'est fait, ouvrez la console de votre système et tapez y la commande suivante :
> ping infoforall.fr
Envoi d’une requête 'ping' sur infoforall.fr [185.31.40.11] avec 32 octets de données :
...
Sur l'exemple, on voit donc que pour joindre le site à l'heure où j'ai écrit cette activité, il fallait utiliser l'IP 185.31.40.11.
On peut résumer ceci en image :
Imaginons que mes deux pc me donnent les adresses suivante sur le réseau : 192.168.1.10
et 192.168.1.20
. Ma passerelle possède l'adresse suivante 192.168.1.1
. L'adresse IP obtenue depuis le site utilisé pour trouver mon IP m'a donné 90.47.227.66
.
Le site Internet est joignable avec l'adresse IP 185.31.40.11
.
On voit donc que nos deux PC appartiennent au même réseau VIOLET. Nous verrons plus tard comment le savoir à l'aide de leur IP et de leur masque de réseau.
J'ai rajouté un appareil dans ce réseau. Il s'agit de la passerelle qui permet de sortir du réseau et d'atteindre un autre réseau. Ici, il s'agit d'Internet.
La passerelle a donc une particularité : elle possède deux adresses.
Son adresse privée 'locale' (côté réseau) est 192.168.1.1
. Cette adresse permet de la joindre depuis l'intérieur du réseau.
Son adresse publique 'extérieure' (côté Internet) est 90.47.227.66
.
Nous ne rentrerons pas ici dans les détails exacts. J'ai rajouté des points d'interrogation pour montrer que je n'ai rien expliqué sur le détail des communications dans le réseau (comment le PC 192.168.1.1
parvient à trouver la passerelle ?), ni sur les communications via la partie verte notée 'Internet' (comment notre passerelle parvient-elle à communiquer avec la passerelle du serveur du site ?)
La passerelle a donc une spécificité importante : elle possède deux adresses IP. La passerelle est donc le point de passage obligatoire pour rentrer ou sortir d'un réseau local.
En anglais, la passerelle se nomme gateway.Question : comment un ordinateur sait-il s'il doit sortir du réseau pour en joindre un autre ?
La réponse est complexe en réalité. Vous aurez une activité entière qui traite de cela. En attendant, voici un bout d'explication :
Pour pallier au manque d'adresses IPv4, on a commencé par utiliser les passerelles derrière lesquelles les nombreuses machines du réseau peuvent atteindre le réseau Internet en utilisant l'IP externe de la passerelle. Si votre réseau possède 200 postes, on a donc besoin d'une seule adresse IP publique (celle en vert) et pas 200. Cela s'appelle faire du NAT dynamique. NAT veut dire Network Address Translation..
Cela a donc permis de diminuer de façon massive les besoins d'adresses différentes. Mais, il a alors fallu réserver un certain nombre de plages d'adresses qui sont nécessairement des autres internes de réseaux. Deux ordinateurs sur deux réseaux différents peuvent porter la même adresse IP 192.168.1.1
. Cela ne posera aucun problème. Ils peuvent même communiquer entre eux : s'ils communiquent hors de leurs réseaux respectifs, ils utiliseront l'adresse IP de leurs passerelles respectives.
Ainsi :
192.168.1.10
communique sur Internet, la communication sera émise avec l'IP externe de la passerelle violette : 90.47.227.66
. 192.168.1.10
communique sur Internet, la communication sera émise avec l'IP externe de la passerelle rouge : 185.31.40.11
.Dans un réseau local, chaque ordinateur est identifié par un numéro IP. Ce numéro doit être dans une plage précise (nous verrons pourquoi dans une autre activité), pourra être utilisé sans aucun problème dans un autre réseau local mais par contre ne pourra pas être l'IP externe d'une passerelle : aucune IP côté internet ne doit être dans ces intervalles.
Pour ces adresses, on parle donc d'adresses privées puisqu'elles ne peuvent pas être données en tant qu'adresse externe d'une passerelle.
Les adresses privées utilisables pour créer un réseau local sont :
Pour un très gros réseau local : 10.0.0.0
où chaque 0 peut être remplacé par un nombre compris entre 0 et 255. On a donc 2563 appareils possibles en théorie.
Pour un réseau local moyen : 172.16.0.0
à 173.31.255.255
Pour un petit réseau local : 192.168.1.0
à 192.168.255.255
.
08° Tenter un ping sur
172.16.1.1
par exemple).Est-ce que ca marche ?
> ping infoforall.fr
> ping google.fr
> ping 172.16.1.1
...CORRECTION...
On parvient à envoyer des pings sur notre propre réseau ou vers des passerelles dont on connait l'IP mais on ne parvient pas à faire un ping vers une machine inexistante sur notre réseau ou vers une autre adresse réservée à un réseau local.
Explorons un peu le réseau local. Nous irons plus loin dans l'activité qui traite particulièrement de cela.
Premièrement, vous pouvez observer sur votre ordinateur les connexions déjà utilisées qui sont encore mémorisées avec la commande arp :
> arp -a
Ensuite, pour savoir le nom d'une passerelle ou le nom d'un PC, il faut rajouter -a derrière le ping. Exemple :
> ping -a 192.168.1.10
09° Fouiller dans la table arp de l'ordinateur puis tenter de trouver le nom de votre propre pc avec le ping -a ainsi que le nom de quelques appareils qui apparaissent dans la table arp.
10° Trouver le nom de la passerelle en utilisant un ping -a avec ses deux adresses.
Il existe une adresse un peu particulière à tester :
> ping -a 127.0.0.1
10° Utiliser la commande ci-dessus sur deux pc de la salle ou de votre maison. Que constatez-vous ?
...CORRECTION...
Vous obtenez le nom de l'équipement sur lequel vous êtes. On nomme cela le LOCAL HOST. Cela permet de lancer des lignes de commandes identiques qui seront adaptés à l'ordinateur sur lequel les lignes sont tapées par exemple.
11° Utiliser la commande ci-dessous avec l'adresse IPv6 ::1
. Que constatez-vous ?
> ping -a ::1
L’adresse localhost est fixée usuellement à l’adresse Ipv4 127.0.0.1 bien qu’elle puisse prendre n’importe quelle valeur entre 127.0.0.1 et 127.255.255.255 . La communication ne passe alors pas du tout par Internet ou le réseau local : elle reste interne à l'ordinateur. En Ipv6, c’est devenu ::1 .
L’adresse 0.0.0.0 n’est pas légale en tant qu’adressage Internet mais elle peut être utilisée localement par une application. Dans le contexte d’un adressage Internet reçu, 0.0.0.0 veut dire que l’adresse n’est pas valide, pas atteignable ou autre.
Dans le cadre d’une utilisation locale, 0.0.0.0 veut dire n’importe quelle adresse valide du localhost : cela veut dire qu'on émet sur tous les ordinateurs et que tous sont destinataires du message. Dans le contexte de l’ordinateur 1 ci-dessus, 0.0.0.0 sera interpété comme 192.168.1.20 ou 90.47.225.174.
Nous venons d'apprendre qu'il existe deux types d'adresses :
Pour gagner un peu d'adresses Ipv4 en attendant le plein déploiement des Ipv6, on peut ainsi cacher plusieurs postes derrière une seule adresse publique.
Pour passer d'un réseau à un autre, il va falloir sortir de votre réseau et rentrer dans l'autre réseau. Cette opération se fait à travers les passerelles.
Voici l'exemple que nous avons vu précédemment :
192.168.1.10
, 90.47.227.66
185.31.40.11
et,Jusque là, hormis le passage final vers le serveur, tout parait presque logique. Oui, mais ensuite, le message doit repartir. Et, on sait juste que l'expéditeur possède l'adresse 90.47.227.66
...
185.31.40.11
90.47.227.66
et semble émis par la passerelle d'adresse 185.31.40.11
.Ok. Et c'est là que commence le problème : comment notre passerelle violette peut-elle savoir si le message est pour elle ou pour l'interieur ? Encore plus grave : à quel ordinateur du réseau est-il destiné ?
C'est tout l'objectif de cette partie que d'expliquer rapidement la technique de la NAT dynamique.
Tout ce que nous venons d'expliquer pour l'instant, n'utilise que l'adresse IP. Il s'agit de l'identifiant de la couche 3, la couche réseau.
Mais en réalité, lorsque le pc 192.168.1.10
veut se connecter sur le site Internet, ce n'est pas lui qui décide de le faire mais bien une application qui est en train de fonctionner sur ce pc. Nous allons donc devoir rajouter ces informations lors de l'envoi du message. Il s'agit d'informations liées à la couche 4, la couche transport.
Lorsqu'une application veut communiquer avec une autre application, elle doit en faire la demande à l'ordinateur. Cette demande est traitée lors du passage de la couche 7 (la couche application) à la couche 4 (la couche transport).
Cette somme d'information nommée segment contient donc les données que l'application veut transmettre mais également qui elle est et qui elle veut joindre.
Imaginez un instant la carte réseau de votre ordinateur comme un immense building commercial. Ce batiment regorge de sociétés différentes qui sont ici vos applications.
Et chacune des sociétés peut utiliser l'une des nombreuses fenêtres sur la facade du batiment pour faire passer ses pigeons voyageurs.
Sur votre ordinateur, chacune de ces fenêtres possèdent un numéro d'identification qu'on nomme port logiciel . Le port logiciel est un identifiant utilisant 2 octets, soit 16 bits. Nous avons donc 216 possibilités de valeurs, soit des ports compris entre 0 et 65536. Ca fait beaucoup de fenêtres.
Lorsque l'ordinateur envoie une demande de connexion à un autre ordinateur, il doit donc fournir plusieurs choses en réalité :
12° Ouvrir la console ( touche Windows+R, cmd sur un système Windows) et lancer la commande netstat –ano
. Vous allez obtenir la liste des connexions actives avec dans l'ordre :
Vous remarquerez qu’après chaque adresse se trouve bien un autre nombre après le :
.
Les connexions sont donc bien établies par un programme (qui possède un PID) à travers un port précis, à paritr d'une adresse IP précise et suivant un protocole précis.
Comme pour les humains, les unités informatiques ont besoin d’utiliser un langage commun pour se comprendre. Si un facteur martien débarque chez vous, vous risquez d’avoir du mal à communiquer avec lui. C’est pareil entre deux ordinateurs : pour qu’ils puissent communiquer, il faut leur dire comment communiquer.
C’est ce qu’on appelle un PROTOCOLE, un ensemble de règles que respecteront les deux ordinateurs afin d’échanger des informations.
On trouve les protocoles de haut niveau : ce sont les protocoles fortement prédéfinis : on peut très facilement les utiliser (si on étudie la documentation) mais on ne peut pas les modifier. S’ils correspondent à l’utilisation qu’on veut faire, c’est bien, sinon ils ne servent à rien. Parmi ceux-ci :
Le protocole HTTP (Hypertext Transfer Protocol) utilise le port 80 du côté serveur. Vous devriez commencer à comprendre pourquoi Firefox utilise le port 80 !
Le protocole FTP (File Transfert Protocol) utilise le port 21. C’est le protocole utilisé par les logiciels permettant de télécharger des fichiers.
Le protocole POP3 (Post Office Protocol) utilise le port 110. C’est le protocole utilisé par les courriels / emails.
Il existe également des protocoles de bas niveau : ce sont des protocoles plus difficiles à utiliser puisqu’il faut les configurer assez fortement. L’avantage est qu’on peut faire à peu près ce qu’on veut.
L’UDP (User Datagram Protocol) est le plus basique : on ne vérifie pas vraiment que la connexion est établie, on envoie et on verra ! Bref, il est rapide mais pas très sur. Si vous avez vraiment besoin de ne pas perdre de paquets d’informations en route, autant utiliser l’autre. Lorsqu’on transmet des signaux vocaux, c’est ce protocole qu’on utilise.
Le TCP (Transmission Control Protocol) est plus lent car il y a trois phases : on établit la connexion (et on vérifie qu’elle existe bien), on envoie les données puis on signale la fin de la transmisson.
Oui mais on ne voit nulle trace d’autres choses que UDP et TCP dans la console ? Firefox n’utilise pas le http ? Si si. Mais en fait les protocoles de haut niveau utilisent les protocoles de bas-niveau pour fonctionner. En gros, ce sont des protocoles de bas niveau prédéfini. Et rien ne vous permet pour l'instant de distinguer deux protocoles TCP entre eux.
13° Ouvrez votre navigateur préféré pour qu'il soit sur un site externe. A l’aide du gestionnaire des tâches (CTRL ALT SUPP), vous pouvez retrouver le programme responsable d’une connexion à l’aide de son PID. Faites donc cela avec une connexion externe utilisant le port 80 vers une adresse externe.
On remarquera que le PID 3692 correspond à Firefox. Une connexion est établie entre :
Voici ce que cela donnerait si le pc 192.168.1.20 pouvait directement se connecter au pc 54.230.197.18 :
Il existe donc deux types d'applications qui tournent :
Les applications serveurs qui doivent pouvoir répondre à une demande. L'ordinateur va donc leur transmettre toutes les données qui arrivent sur le port dont le numéro leur est réservé. La plupart du temps, ce numéro de port est inférieur à 1024. Quelques exemples :
Les serveurs sont programmés pour répondre à toute demande correctement formulé sur le port adapté.
Les clients qui peuvent utiliser n'importe quel port supérieur à 1023 pour envoyer les demandes et recevoir les réponses du serveur. D'ailleurs, l'ordinateur sélectionne en réalité au hasard un port supérieur à 1024 non encore utilisé.
Les clients peuvent faire n'importe quelle demande mais ne vont accepter que les messages issus d'une de leur demande : on doit d'abord demander au logiciel-client de se connecter à un logiciel-serveur avant que le client n'accepte la liaison.
Et c'est avec cette histoire de port que la passerelle va réussir à réagir.
Lorsqu'un programme-client situé sur le pc d'un réseau veut contacter l'extérieur, il se connecte à la passerelle. Nous avons vu que celle-ci transforme alors l'IP émettrice en la remplaçant par sa propre IP publique. La passerelle va plus loin : elle mémorise la demande du pc émetteur puis émet / écoute la réponse à l'aide d'un port choisi au hasard (mais supérieur à 1024) :
La différence par rapport à avant ? A l'émission vers le serveur, aucune, sauf pour le serveur qui croit que c'est l'ordinateur d'ip 90.47.227.66
qui tente de communiquer avec le port 80 du serveur et qui attend une réponse sur le port 22500.
Par contre, la passerelle va mémoriser dans sa mémoire :
192.168.1.20
avec le port 54051 90.47.227.66
avec le port 2250054.230.197.18
via le port 80Et pourquoi ne pas faire de concordance entre le port et le PID ? C'est compliqué pour rien non ?
Oui et non.
Premièrement, un même programme peut parfois être ouvert plus fois. On aura donc besoin du même PID mais de plusieurs ports différents. On fait ça tout le temps avec les navigateurs Web : on ouvre plusieurs onglets qui pointent vers des sites différents.
Deuxièmement, le PID est un numéro d'identification interne au PC, le port est un numéro permettant de faire la liasion avec l'extérieur. Ils permettent de trouver la même chose mais de deux façons différentes en fonction du contexte.
Dernière partie du transfert de communication : pour l'instant, le serveur est tranquillement directement sur Internet. En réalité, il est derrière une passerelle. La passerelle va donc recevoir une communication sur son port 80. Et comme elle n'a rien demandé, et que sa table n'indique pas de faire une liaison entre son port 80 et le port 80 du serveur, et bien ... elle va en rester là. Et le message n'arrivera jamais sur le serveur pour y être traité.
Heureusement, on peut faire encore mieux que la NAT : on peut créer une sorte de transfert automatique entre l'un des ports de la passerelle et l'un des ports d'un des ordinateurs du réseau local qui se cache derrire. Les numéros n'ont même pas besion d'être identiques en réalité.
Et ça se nomme le Port Forwarding, vous l'avez compris.
En image, ça donne ceci :
Je répète la grosse différence avec le NAT : sur un NAT, la passerelle doit d'abord recevoir une demande de la part d'un ordinateur de son réseau local. Ce n'est pas le cas ici. Le serveur ne pourrait donc pas recevoir le message puisque la passerelle ne sait pas à qui fournir le message.
Par contre, maintenant, le serveur va bien recevoir la demande du pc d'ip 90.47.227.66
avec le port 22500.
Le serveur va répondre avec une IP 192.168.1.1
via le port 80
La passerelle de droite va transférer en changeant l'IP en 54.230.197.18
via le port 80.
La passerelle de droite va recevoir une réponse, se rendre compte qu'elle provient d'une communication qu'elle a initié et va donc transmettre au bon pc en allant voir sa table NAT.
Et voilà. Vous pouvez maintenant aller fouiller dans les menus et sous menu de votre Box. Vous pourrez vous rendre compte que vous avez la possibilité de faire de Port Forwarding. C'est pratique lorsque vous voulez que votre PC joue le rôle de serveur.
Au lycée, vous ne pouvez donc pas faire fonctionner un serveur pour qu'il soit joignable depuis l'extérieur : modifier les paramètres de la passerelle demande d'avoir les codes d'accés.
Par contre, on peut très bien créer un serveur local qui ne pourra être joignable que depuis l'intérieur du lycée. Nous verrons cela lorsque nous passerons à XAMP.
Bien, il est temps d'en apprendre un peu plus sur l'ordinateur lui-même, sans passer par un site extérieur.
J'ai pris ici l'exemple de la connexion par un fil (le cable dit RJ-45) et Ethernet. Mais si vous êtes en Wifi ou autre, ça devrait fonctionner aussi. Je crois ...
14° Dans la console, utiliser la commande ipconfig /all
. Vous devriez trouver les informations liées à votre carte réseau. Retrouvez votre adresse IP sur le réseau local (LAN).
Vous trouverez ci-dessous un exemple de ce que vous pourriez avoir :
h:\>ipconfig/all
Configuration IP de Windows
Nom de l'hôte. . . . . . . . . . . . . : e301-poste12
Carte Ethernet Connexion au réseau local :
Suffixe DNS propre à la connexion. . . : lycee.home
Description. . . . . . . . . . . . . . : Broadcom NetXtreme Gigabit Ethernet
Adresse physique . . . . . . . . . . . : 25-CE-55-28-72-CE
DHCP activé. . . . . . . . . . . . . . : Oui
Configuration automatique activée. . . : Oui
Adresse IPv6 de liaison locale. . . . .: ad41::fe80:b1b1:fe80:fe80%13(préféré)
Adresse IPv4. . . . . . . . . . . . . .: 192.168.2.78(préféré)
Masque de sous-réseau. . . . . . . . . : 255.255.0.0
Bail obtenu. . . . . . . . . . . . . . : jeudi 4 mai 2017 10:58:30
Bail expirant. . . . . . . . . . . . . : vendredi 5 mai 2017 10:58:29
Passerelle par défaut. . . . . . . . . : 192.168.0.250
Serveur DHCP . . . . . . . . . . . . . : 192.168.0.250
IAID DHCPv6 . . . . . . . . . . . . . : 270843397
DUID de client DHCPv6. . . . . . . : 00-01-00-01-17-BD-7B-ED-24-BE-05-10-C2-C2
Serveurs DNS. . . . . . . . . . . . . : 192.168.0.253
Serveur WINS principal . . . . . . . . : 192.168.0.253
NetBIOS sur Tcpip. . . . . . . . . . . : Activé
Qu'est-ce que c'est que tout ça ? On retrouve quelque notion vu plus haut, mais pas que ...
Nous allons voir brievement l'ensemble ligne par ligne.
Commençons par ceci :
Configuration IP de Windows
Nom de l'hôte. . . . . . . . . . . . . : e301-numero12
Bien, ça, c'est le nom réseau de votre ordinateur.
Ensuite, nous pouvons voir :
Carte Ethernet Connexion au réseau local :
Adresse IPv6 de liaison locale. . . . .: ad41::fe80:b1b1:fe80:fe80%13(préféré)
Adresse IPv4. . . . . . . . . . . . . .: 192.168.2.78(préféré)
Nous obtenons l'adresse IP de l'ordinateur (en IPv4 et IPv6) dans le réseau local (LAN, Local Area Network).
Bien, nous avons donc le nom et l'adresse IP.
Jusqu'ici, rien de mystérieux.
15° Lancer donc un ping en utilisant le nom de votre pc, pas son IP. Sur mon exemple, ça donne ping e301-numero12
. Alors ?
Et oui, en réalité, avec cette commande, on fait un ping sur l'adresse IP. L'ordinateur a converti le nom en IP.
15° Et si vous tentiez un ping localhost
?
On notera qu'on peut forcer le ping en IP6 ou IP4 avec une commande du type ping -4 localhost
ou ping -6 localhost
.
Dernière remarque : vous pouvez obtenir de l'aide sur les commandes console en taper l'instruction seule suivie de /?. Par exemple ping /?
.
Bon. Puisque nous restons sur l'ordinateur, ça n'a pas l'air particulièrement étrange qu'il connaisse sa propre adresse IP et son propre nom et qu'il fasse le rapprochement. Compliquons un peu les choses : nous allons rechercher d'autres appareils sur le réseau.
16° Taper net view
dans la console. Vous devriez obtenir une liste des autres appareils connectés à votre LAN. Ou non. Cela dépend de votre réseau et de ses paramètres. Sinon, au pire, tentez un arp -a
17° Noter le nom d'un des appareils (au pire, aller voir physiquement sur la carte réseau d'un autre PC) et faire un ping dessus avec son nom, pas son Ip. Vous devriez obtenir son IP lors du ping. Refaire un ping avec juste l'adresse.
Là, ça devient plus étrange. Comment votre pc peut-il avoir accès aux noms et adresses des autres appareils ? Car ça marche avec tous.
Continuons, toujours plus loin.
18° Faire un ping sur le nom de domaine d'un site de votre choix. Par exemple ping infoforall.fr
. Vous allez obtenir l'IP du serveur sur lequel est hébergé ce site.
19° Refaire le ping mais cette fois avec l'IP.
Cette fois, ça devrait vous paraitre étrange que le pc connaisse également les adresses IP d'un site. Vous pouvez tester avec n'importe quel site existant, ça marche !
La raison de cette connaissance totale était en réalité noté lors de la commande ipconfig /all
:
Suffixe DNS propre à la connexion. . . : lycee.home
Serveurs DNS. . . . . . . . . . . . . : 192.168.0.253
DNS veut dire Domain Name System. Il s'agit du système qui permet lorsque vous tapez une adresse de retrouver son adresse IP. Avouons que taper infoforall.fr c'est plus facile que de se souvenir de l'adresse IP du serveur qui héberge le site.
.Il s'agit donc d'un moyen de traduire un nom unique en adresse IP unique.
Expliquons le en quelques lignes (le fonctionnement réel est beaucoup beaucoup plus compliqué, le diable est dans les détails.
Lorsque vous tapez un nom d'équipement ou de site :
Si nous devions simplifier à l'extrême :
Voilà. Et à partir du moment où on dispose de l'IP, on peut continuer.
L'Ip de quoi au fait ? L'IP externe du serveur (un ordinateur capable de supporter beaucoup de connections à la fois) dont le disque dur contient les données et les programmes permettant au site de s'afficher.
C'est l'autre avantage du service DSN : pour l'instant, ce site est chez un hébergeur nommé Always Data. L'IP du site peut donc changer par exemple :
Les serveurs DSN pourront donc faire pointer le site vers sa nouvelle adresse IP mais tout est totalement transparent pour le visiteur.
C'est d'ailleurs un moyen courant d'empêcher les connexions vers les sites non voulues. Si votre administrateur réseau rajoute dans le DSN local donne un IP pour Facebook qui correspond à la page d'accueil du site de l'entreprise, vous ne pourrez pas vous connecter, sauf à taper l'adresse IP directement. C'est également une technique de pirage possible : vous modifier les données d'un serveur DSN pour renvoyer une mauvaise adresse IP. Et le tour est joué. L'utilisateur ne peut pas savoir qu'il n'est pas vraiment sur le bon site.
Pour limiter les requêtes, les serveurs DSN gardent en mémoire cache les demandes récentes. Ainsi, si un site est extrémement demandé, les requêtes DSN seront plus rapides car les serveurs n'auront pas nécessairement à remonter des serveurs DSN en serveurs DSN vers le serveur DSN source.
En français, les serveurs DSN sont nommées Serveurs de noms.
Pour voir votre DNS dans la console, il faut taper ipconfig /displaydns . Si vous voulez enregister cela dans un fichier texte : ipconfig /displaydns >logdns.txt .
20° Essayer de trouver le DNS de votre réseau local. C'est parfois instructif...
Mais comment fait-on pour communiquer à l'extérieur du réseau local ? Même pour aller sur un serveur DSN extérieur, il faut parvenir à le trouver !
Par exemple, si vous tapez infoforall.fr
dans la barre d'adresses de votre navigateur, celui-ci va lancer une requête DSN et recevoir une adresse IP.
Commençons par voir comment on parvient à l'adresse voulue :
21° Utiliser la console avec l'instruction tracert ADRESSE_IP
ou tracert ADRESSE.TRUC
. Vous pouvez utiliser tracert infoforall.fr
si vous n'avez pas d'autres idées.
Il est possible que le pare-feu de votre réseau bloque les retours mais vous allez voir que le signal passe par plusieurs endroits avant d'arriver à destination. Voilà le résultat depuis un réseau privé par exemple :
C:\Users\herve>tracert infoforall.fr
Détermination de l’itinéraire vers infoforall.fr [185.31.40.11]
avec un maximum de 30 sauts :
1 54 ms 05 ms 04 ms livebox.home [192.168.1.1]
2 26 ms 25 ms 26 ms 80.10.182.182
3 27 ms 24 ms 28 ms 10.125.215.74
4 26 ms 27 ms 26 ms ae43-0.nrlil202.Lille.francetelecom.net [193.252.100.125]
5 30 ms 27 ms 27 ms ae42-0.nridf202.Paris.francetelecom.net [193.251.126.133]
6 29 ms 30 ms 30 ms ae43-0.noidf002.Aubervilliers.francetelecom.net [193.252.98.238]
7 28 ms 33 ms 27 ms 193.253.13.202
8 29 ms 29 ms 28 ms ielo.std-1.rt.hopus.net [37.77.38.13]
9 41 ms 28 ms 30 ms alwaysdata.customers-eqx-pa3.fr.rt.ielo.net [212.85.149.34]
10 32 ms 36 ms 28 ms http1.paris1.alwaysdata.com [185.31.40.11]
Sur l'exemple, il y a 10 transferts d'informations, 10 routeurs, entre mon pc et le site voulu.
Expications :
Ce n'est pas très visuel. Heureusement, il existe des sites qui vont vous faire une belle carte.
22° Faire une recherche sur "Traceroute +carte" ou aller sur en.dnstool.ch.
Beaucoup de blabla et de théorie. Nous allons finir cette introduction avec un petit programme de communication chat entre deux pc appartennant au même réseau local.
Plutôt que de réinventer l'eau chaude, nous allons utiliser l'exemple de G.Swinnen qui a fait un très bon livre d'introduction à Python disponible en version papier et disponible en creative communs sous les mêmes termes que ce site : attribution, non commerciale et même conditions de partage.
Voir sa page de présentation du livre et son lien de téléchargement.. Vous y trouverez les couvertures des livres et un lien vers le PDF.
Une version en ligne chez developpez.com.
Nous allons utiliser un principe de communication SERVEUR-CLIENT : l'une des machines sera le serveur qu'il faudra lancer en premier et la seconde machine aura le rôle de CLIENT : elle va se connecter au SERVEUR pour réaliser les actions de communications.
17° Utiliser le fichier python suivant pour lancer un programme SERVEUR.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Définition d'un serveur réseau rudimentaire
# Ce serveur attend la connexion d'un client
import socket, sys
HOST = '192.168.1.13'
PORT = 50000
counter =0 # compteur de connexions actives
# 1) création du socket :
mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2) liaison du socket à une adresse précise :
try:
mySocket.bind((HOST, PORT))
except socket.error:
print("La liaison du socket à l'adresse choisie a échoué.")
sys.exit
while 1:
# 3) Attente de la requête de connexion d'un client :
print("Serveur prêt, en attente de requêtes ...")
mySocket.listen(2)
# 4) Etablissement de la connexion :
connexion, adresse = mySocket.accept()
counter +=1
print("Client connecté, adresse IP %s, port %s" % (adresse[0], adresse[1]))
# 5) Dialogue avec le client :
msgServeur ="Vous êtes connecté au serveur Marcel. Envoyez vos messages."
connexion.send(msgServeur.encode("Utf8"))
msgClient = connexion.recv(1024).decode("Utf8")
while 1:
print("C>", msgClient)
if msgClient.upper() == "FIN" or msgClient =="":
break
msgServeur = input("S> ")
connexion.send(msgServeur.encode("Utf8"))
msgClient = connexion.recv(1024).decode("Utf8")
# 6) Fermeture de la connexion :
connexion.send("fin".encode("Utf8"))
print("Connexion interrompue.")
connexion.close()
ch = input("
if ch.upper() =='T':
break
23° Modifier l'IP pour indiquer votre adresse IP locale.
24° Sur un second PC, créer le fichier python en utilisant l'IP du PC SERVEUR. Si vous n'avez qu'un pc, vous pouvez le lancer sur le même, ça ne devrait pas poser de problème, mais c'est moins visuel...
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Définition d'un client réseau rudimentaire
# Ce client dialogue avec un serveur ad hoc
import socket, sys
HOST = '192.168.1.168'
PORT = 50000
# 1) création du socket :
mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2) envoi d'une requête de connexion au serveur :
try:
mySocket.connect((HOST, PORT))
except socket.error:
print("La connexion a échoué.")
sys.exit()
print("Connexion établie avec le serveur.")
# 3) Dialogue avec le serveur :
msgServeur = mySocket.recv(1024).decode("Utf8")
while 1:
if msgServeur.upper() == "FIN" or msgServeur =="":
break
print("S>", msgServeur)
msgClient = input("C> ")
mySocket.send(msgClient.encode("Utf8"))
msgServeur = mySocket.recv(1024).decode("Utf8")
# 4) Fermeture de la connexion :
print("Connexion interrompue.")
mySocket.close()
25° Bon amusement !
C'est tout pour aujourd'hui.
On pourra omettre les doublets à zéro en partant de la droite. L’adresse précédente sera donc envoyée comme :
Exemple d’adresse IP v6 en hexadécimal : AC08 : AC08 : AC08 : AC08 ::
Les ordinateurs seront complétés automatiquement puisqu’une adresse correcte comporte 8 doublets.
Exemple 2 d’adresse IP v6 en hexadécimal : AC08 : AC08 : AC08 : 0000 : 0000 : 0000 : 0000 : AC08
On peut alors utiliser : AC08 : AC08 : AC08 :: AC08
Nul besoin de comprendre le code hexadécimal pour parvenir à lire ou écrire une adresse. Nous reparlerons néanmoins de l’hexadécimal plus loin dans le chapitre. On le rencontre un peu trop souvent en informatique pour ignorer comment on peut le retranscrire en décimal.