{"id":3504,"date":"2025-05-16T01:18:28","date_gmt":"2025-05-15T23:18:28","guid":{"rendered":"https:\/\/blog.nanuq.me\/?p=3504"},"modified":"2025-05-16T01:18:28","modified_gmt":"2025-05-15T23:18:28","slug":"comment-fonctionne-internet","status":"publish","type":"post","link":"https:\/\/blog.nanuq.me\/?p=3504","title":{"rendered":"Comment fonctionne internet ?"},"content":{"rendered":"<p>Qu&rsquo;est-ce qui se passe quand on tape https:\/\/www.google.fr dans notre navigateur ?<\/p>\n<p><!--more--><\/p>\n<h2>Disclaimer<\/h2>\n<p>Cet article a \u00e9t\u00e9 initialement \u00e9crit en anglais (conform\u00e9ment \u00e0 la consigne) mais le blog \u00e9tant en fran\u00e7ais, je me suis permis de le traduire ci-dessous :<\/p>\n<h2>Introduction<\/h2>\n<p dir=\"auto\">Dans le cadre de ma reconversion en informatique, je dois apprendre \u00e0 coder, mais aussi \u00e0 communiquer avec d\u2019autres personnes et, en particulier, \u00e0 r\u00e9diger de la documentation technique. Dans cette optique, nous devons r\u00e9diger un article de vulgarisation au sujet du r\u00e9seau et du fonctionnement d&rsquo;Internet.<\/p>\n<h1>C&rsquo;est quoi internet ?<\/h1>\n<p>Tout d&rsquo;abord, il faut bien comprendre ce qu&rsquo;est <strong>Internet<\/strong> pour comprendre ce qui va suivre : Internet c&rsquo;est de l&rsquo;<strong>interconnexion de r\u00e9seau<\/strong> (c&rsquo;est dans le nom d&rsquo;ailleurs : <em>inter-network<\/em> (ou r\u00e9seau de r\u00e9seau dans la langue de Michel Drucker) L&rsquo;id\u00e9e fondamentale qui a derri\u00e8re cette id\u00e9e, c&rsquo;est de se dire que chaque point du r\u00e9seau, chaque ordinateur, est \u00e0 la fois <strong>\u00e9metteur et r\u00e9cepteur<\/strong>. Ce qui permet une r\u00e9silience du r\u00e9seau et une d\u00e9centralisation <em>by design.<\/em><br>\nMaintenant que cette base est pos\u00e9e, revenons \u00e0 nos moutons \u00e9lectriques et connectons-nous \u00e0 \u00ab\u00a0https:\/\/www.google.fr\u00a0\u00bb<\/p>\n<h1>TCP\/IP<\/h1>\n<p>La premi\u00e8re \u00e9tape, consiste \u00e0 savoir par quelle magie on va relier notre ordinateur, \u00e0 la machine sur laquelle est h\u00e9berg\u00e9 le site web de google&#8230; Et pour r\u00e9aliser cette prouesse, notre ordinateur va envoyer une requ\u00eate ; c&rsquo;est-\u00e0-dire un genre de message destin\u00e9 au serveur de google : \u00ab\u00a0S&rsquo;il te pla\u00eet gentil serveur, montre-moi la page internet que tu abrites s&rsquo;il te pla\u00eet\u00a0\u00bb. Et pour faire \u00e7a, il va utiliser le protocole <strong>TCP\/IP<\/strong>.<br>\nIl s&rsquo;agit de deux protocoles; et si vous \u00eates un peu malin vous avez devin\u00e9 qu&rsquo;il s&rsquo;agit de <strong>TCP<\/strong> et <strong>IP<\/strong> !<br>\nOn confond souvent les deux, car ils vont souvent ensemble, mais c&rsquo;est bien deux protocoles <strong>distincts<\/strong><\/p>\n<h2>TCP<\/h2>\n<p>Le protocole <strong>TCP<\/strong>, organise les donn\u00e9es afin qu&rsquo;elles puissent \u00eatre transmises sur le r\u00e9seau<br>\nC&rsquo;est ce protocole qui \u00e9tablit la connexion entre la source et la destination, et garantit que cette connexion reste active du d\u00e9but \u00e0 la fin de la communication.<\/p>\n<p>C&rsquo;est \u00e9galement <strong>TCP<\/strong> qui divise les grosses quantit\u00e9s de donn\u00e9es en petits morceaux qu&rsquo;on appelle des paquets.<\/p>\n<p>Pour faire une analogie, au lieu d&rsquo;envoyer tout un livre d&rsquo;un coup, c&rsquo;est comme si on envoyait le livre <strong>page par page<\/strong>, en demandant \u00e0 chaque fois :<br>\n<em>\u00ab\u00a0Je viens de t&rsquo;envoyer la page 53, tu l&rsquo;as bien re\u00e7ue ? Oui ? Alors j&rsquo;envoie la suivante ! Non ? Eh bien, c&rsquo;est pas grave, je te la renvoie !\u00a0\u00bb<\/em><br>\n\u00c0 l&rsquo;autre bout de la cha\u00eene, c&rsquo;est \u00e9galement <strong>TCP<\/strong> qui reprend les pages une par une pour <strong>reconstituer<\/strong> le livre complet.<br>\nOn parle alors de <strong>recomposition de donn\u00e9e.<\/strong><\/p>\n<h2>IP<\/h2>\n<p>Le protocole <strong>IP,<\/strong> lui, permet de d\u00e9finir les <strong>adresses de d\u00e9part et d&rsquo;arriv\u00e9e<\/strong> de la requ\u00eate, et pour chaque paquet, il va trouver <strong>un chemin<\/strong> possible (sans garantir que tous les paquets suivent le m\u00eame chemin)<\/p>\n<h3>Trouver un chemin<\/h3>\n<p>Il faut imaginer que chaque paquet a une petite <strong>\u00e9tiquette<\/strong> avec l&rsquo;<strong>adresse<\/strong> <strong>de<\/strong> <strong>destination<\/strong> et l&rsquo;<strong>adresse<\/strong> <strong>de<\/strong> <strong>d\u00e9part<\/strong>. Et \u00e0 chaque routeur crois\u00e9 sur le chemin regarde l&rsquo;adresse de destination. Le routeur ne conna\u00eet pas forc\u00e9ment l\u2019adresse finale, mais il conna\u00eet ses voisins et sait dans quelle <strong>direction<\/strong> il doit envoyer le paquet pour se rapprocher de la destination. Il renvoie donc le paquet \u00e0 un autre routeur, qui fait la m\u00eame chose, et <strong>ainsi de suite<\/strong>, jusqu\u2019\u00e0 ce que le paquet atteigne le bon serveur.<br>\nEn revanche, c&rsquo;est <strong>TCP<\/strong> qui est charg\u00e9 du <strong>suivi<\/strong> des paquets, de la <strong>v\u00e9rification<\/strong>, et de la <strong>remise en ordre<\/strong> des paquets.<\/p>\n<p>C&rsquo;est pourquoi ces deux technologies sont utilis\u00e9es ensemble dans ce qu&rsquo;on appelle <strong>TCP\/IP<\/strong> car elles vont de pair, et comme j&rsquo;expliquais plus t\u00f4t : on en arrive \u00e0 confondre parfois qui fait quoi.<\/p>\n<h1>Les num\u00e9ros gagnants<\/h1>\n<p>Maintenant qu&rsquo;on sait \u00e7a, on pense que le plus dur est fait et qu&rsquo;on peut envoyer nos paquets \u00e0 la bonne adresse&#8230; <strong>Et ben non !<\/strong><br>\nEn effet, les humains parlent avec des noms. Exemple <code>google.fr<\/code>, <code class=\"\">wikipedia.org<\/code> ou <code>blog.nanuq.me<\/code><br>\nMais les machines elles&#8230; elles parlent avec des num\u00e9ros ! Respectivement \u00e7a correspondrait en IPv4 aux num\u00e9ros suivants pour les exemples ci-dessus :<\/p>\n<ul>\n<li>142.250.201.163<\/li>\n<li>141.94.212.184<\/li>\n<li>46.231.240.132<\/li>\n<\/ul>\n<p>et en IPv6 pour les num\u00e9ros suivants :<\/p>\n<ul>\n<li>2a00:1450:400e:805::2003<\/li>\n<li>2a02\\:ec80:600\\:ed1a::1<\/li>\n<li>2a0c\\:e303:0:8400\\:aaf5:6906:834d\\:a605<\/li>\n<\/ul>\n<p>Or, le protocole IP qui trouve le chemin entre le point de d\u00e9part, et le point d&rsquo;arriv\u00e9e a justement <strong>besoin de ces num\u00e9ros !<\/strong><br>\n<strong>Et avant d&rsquo;aller plus loin, vous vous demandez s\u00fbrement pourquoi il y a deux num\u00e9ros diff\u00e9rents ?<\/strong><\/p>\n<h2>IPv4 &amp; IPv6<\/h2>\n<p>C&rsquo;est pas vraiment le but de l&rsquo;article mais pour faire court&#8230; Dans des temps imm\u00e9moriaux : au d\u00e9but de l&rsquo;\u00e9mergence d&rsquo;internet fin des ann\u00e9es 80, d\u00e9but des ann\u00e9es 90, le monde d\u00e9couvre <strong>la version 4 de IP<\/strong> qui ne devait servir qu&rsquo;\u00e0 <strong>faire des tests \u00e0 l&rsquo;\u00e9chelle mondiale<\/strong> chez les gros acteurs du moment comme IBM, les universit\u00e9s, ou les agences gouvernementales. (Les versions pr\u00e9c\u00e9dentes de IP \u00e9taient exp\u00e9rimentales et n&rsquo;ont \u00e9t\u00e9 utilis\u00e9es en laboratoire dans les d\u00e9partements de R&amp;D et \u00e0 tr\u00e8s petite \u00e9chelle.) Au d\u00e9part, personne ne pensait que cette <strong>technologie d\u00e9passerait ce cercle restreint<\/strong>. Mais \u00e7a fonctionnait bien, et Internet a commenc\u00e9 \u00e0 <strong>se populariser<\/strong> \u00e0 partir des ann\u00e9es 90 et ce prototype qui ne devait \u00eatre que temporaire pour une phase de test est devenu la norme.<br>\nOr, <strong>IPv4 un syst\u00e8me d&rsquo;adresse en 4 blocs de chiffres allant de 0 \u00e0 255.<\/strong> Il y a quelques adresses r\u00e9serv\u00e9es et quelques exceptions mais en gros \u00e7a repr\u00e9sente donc <strong>4 milliards<\/strong> d&rsquo;adresses diff\u00e9rentes. Et ce nombre n&rsquo;est pas extensible. Il y a un nombre fini d&rsquo;adresses, mais le nombre d&rsquo;utilisateurs augmente, ainsi que le nombre de machines, et il fallait plus d&rsquo;adresses !<\/p>\n<p>C&rsquo;est pourquoi a \u00e9t\u00e9 cr\u00e9\u00e9 <strong>IPv6<\/strong> qui lui, propose des adresses \u00e9crites sur <strong>8 blocs en hexad\u00e9cimal<\/strong> comme par exemple : <em>2a0c:e303:0:8400:aaf5:6906:834d:a605<\/em><\/p>\n<p>Et le nombre possible d&rsquo;adresses avec ce syst\u00e8me est <strong>gigantesque<\/strong> ! On dit que ce nombre est tellement grand qu\u2019on dit souvent qu\u2019il d\u00e9passe le nombre d\u2019atomes dans l\u2019univers observable. Autant dire qu\u2019on est <strong>tranquilles pour un moment.<\/strong><\/p>\n<p>Et pour les petits malins du fond de la salle qui se demandent <em>\u00ab\u00a0Et IPv5 ? On passe de 4 \u00e0 6 ?\u00a0\u00bb<\/em> Et oui ! IPv5 est lui aussi exp\u00e9rimental et n&rsquo;a servi qu&rsquo;\u00e0 faire des tests th\u00e9oriques dans les laboratoires de R&amp;D<\/p>\n<p>Vous me direz que ce petit cours d&rsquo;histoire \u00e9tait vachement sympathique, mais on fait quoi avec de nos adresses et de nos num\u00e9ros ?<\/p>\n<p>C&rsquo;est l\u00e0 que le DNS intervient !<\/p>\n<h2>DNS<\/h2>\n<p><strong>DNS<\/strong> pour <em>Domain Name Server<\/em> est une technique qui permet de faire<strong> le lien entre les noms et les num\u00e9ros.<\/strong><br>\nImaginez un monde o\u00f9 les noms de domaine n&rsquo;existeraient pas et qu&rsquo;il faudrait se souvenir de tous les num\u00e9ros&#8230; Pas pratique hein ?<br>\nLe DNS un peu \u00e0 la mani\u00e8re d&rsquo;un agenda de t\u00e9l\u00e9phone, indiquera pour chaque nom de chaque site, son num\u00e9ro d&rsquo;adresse IP.<\/p>\n<p>On trouve souvent sur internet cette explication : que les DNS ont \u00e9t\u00e9 invent\u00e9s <strong>uniquement pour faciliter la vie aux humains qui pr\u00e9f\u00e8rent des noms uniques et m\u00e9morisables<\/strong> comme<em> \u00ab\u00a0mon-super-site.bidule\u00a0\u00bb<\/em> plut\u00f4t que <em>\u00ab\u00a0195.042.217.12\u00a0\u00bb.<\/em> C&rsquo;est en partie vrai.<\/p>\n<p>L&rsquo;autre explication c&rsquo;est que ces noms permettent <strong>une stabilit\u00e9<\/strong> par rapport aux adresses IP. En effet, les adresses IP sont distribu\u00e9es par les fournisseurs, et elles peuvent changer.<\/p>\n<p>Pour faire une analogie, je sais que <strong>Bob<\/strong> habite au <em>42 Ada Lovelace Street \u00e0 Gen\u00e8ve<\/em>, mais s&rsquo;il d\u00e9m\u00e9nage, je dois conna\u00eetre sa nouvelle adresse postale.<br>\nMais dans les faits, je m&rsquo;en fiche de savoir o\u00f9 il habite, moi je veux juste voir mon ami <strong>Bob<\/strong> !<\/p>\n<p>De la m\u00eame fa\u00e7on, utiliser un nom de domaine avec un syst\u00e8me de DNS permet de (presque) toujours vous rediriger vers la bonne adresse de serveur (sans que vous n&rsquo;ayez rien \u00e0 faire car tout \u00e7a se passe dans votre dos) m\u00eame quand la machine ou le fournisseur d&rsquo;acc\u00e8s change (et par cons\u00e9quent les adresses IP).<\/p>\n<p>Il suffit d&rsquo;une requ\u00eate qui demande gentiment \u00ab\u00a0<em>O\u00f9 se trouve l&rsquo;adresse de &lsquo;mon-super-site.fr&rsquo; s&rsquo;il te pla\u00eet ?\u00a0\u00bb<\/em> et le DNS nous r\u00e9pond !<br>\nC&rsquo;est quand m\u00eame plus sympa pour b\u00e2tir une marque ou une identit\u00e9 sur internet !<\/p>\n<h1>Les r\u00e9solveurs DNS et les serveurs faisant autorit\u00e9<\/h1>\n<p class=\"\" data-start=\"213\" data-end=\"459\">Maintenant que l&rsquo;on a vu qu&rsquo;il faut une adresse IP pour que les machines puissent discuter, et qu&rsquo;un serveur DNS sur le principe permet de faire le lien entre les noms et les adresses IP, il faut s&rsquo;int\u00e9resser au fonctionnement de la <strong>r\u00e9solution DNS. <\/strong><\/p>\n<p data-start=\"213\" data-end=\"459\">Et pour comprendre \u00e7a, il faut d&rsquo;abord que je vous explique les diff\u00e9rents niveaux&#8230;<\/p>\n<h2>Les niveaux<\/h2>\n<p>Les noms de domaines sont \u00e9crits d&rsquo;une certaine fa\u00e7on avec plusieurs niveaux. Quelques exemples de nom de domaine :<\/p>\n<ol>\n<li>www.wikipedia.fr<\/li>\n<li>translate.google.fr<\/li>\n<li>nanuq.me<\/li>\n<\/ol>\n<ul>\n<li>Tout d&rsquo;abord le niveau <strong>\u00ab\u00a0root\u00a0\u00bb<\/strong> (la racine). On ne la voit pas car elle est repr\u00e9sent\u00e9e par un point et il est souvent invisible pour les usagers. Mais si on tape une commande sur un terminal on peut vite le voir.<\/li>\n<\/ul>\n<figure id=\"attachment_3505\" aria-describedby=\"caption-attachment-3505\" style=\"width: 654px\" class=\"wp-caption aligncenter\"><img decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-3505\" src=\"https:\/\/blog.nanuq.me\/wp-content\/uploads\/2025\/05\/Capture-decran-du-2025-05-15-21-31-15.png\" alt=\"\" width=\"654\" height=\"470\"><figcaption id=\"caption-attachment-3505\" class=\"wp-caption-text\">Remarquez la pr\u00e9sence du point final (en jaune sur l&rsquo;image)<\/figcaption><\/figure>\n<ul>\n<li>Vient ensuite ce qu&rsquo;on appelle le <strong>TLD<\/strong> (<em>Top Level Domain<\/em>) comme <strong>.fr<\/strong>, <strong>.com<\/strong>, <strong>.me<\/strong>, ou <strong>.ninja <\/strong>(oui il existe vraiment). On parle aussi d&rsquo;extension mais techniquement, c&rsquo;est un nom de domaine c&rsquo;est d&rsquo;ailleurs dans le nom : Top Level <strong>Domain<\/strong><\/li>\n<li>Puis les domaines de deuxi\u00e8me niveau. Si on reprend les exemples pr\u00e9c\u00e9dents : <strong>google<\/strong>, <strong>wikipedia<\/strong>, <strong>nanuq<\/strong><\/li>\n<li>Puis les domaines de troisi\u00e8me niveau. Avec les exemples pr\u00e9c\u00e9dents : <strong>www<\/strong> ou <strong>translate. <\/strong>On parle aussi de sous-domaine mais c&rsquo;est techniquement un domaine de troisi\u00e8me niveau.<\/li>\n<li>Puis les domaines de quatri\u00e8me&#8230; cinqui\u00e8me&#8230; etc etc&#8230;<\/li>\n<\/ul>\n<p><strong data-start=\"47\" data-end=\"62\">En pratique<\/strong>, on utilise <strong data-start=\"75\" data-end=\"106\">g\u00e9n\u00e9ralement 2 ou 3 niveaux<\/strong> (comme <code data-start=\"114\" data-end=\"129\" data-is-only-node=\"\">www.google.fr<\/code>), mais <strong data-start=\"141\" data-end=\"158\">techniquement<\/strong>, rien n&#8217;emp\u00eache d\u2019avoir <strong data-start=\"183\" data-end=\"200\">beaucoup plus<\/strong>, tant que le <strong data-start=\"214\" data-end=\"229\">nom complet<\/strong> ne d\u00e9passe pas <strong data-start=\"245\" data-end=\"263\">253 caract\u00e8res<\/strong> ! Un petit exemple avec une adresse fictive :<\/p>\n<figure id=\"attachment_3506\" aria-describedby=\"caption-attachment-3506\" style=\"width: 1032px\" class=\"wp-caption aligncenter\"><img decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-3506\" src=\"https:\/\/blog.nanuq.me\/wp-content\/uploads\/2025\/05\/Capture-decran-du-2025-05-15-21-47-28.png\" alt=\"\" width=\"1032\" height=\"338\"><figcaption id=\"caption-attachment-3506\" class=\"wp-caption-text\">Les diff\u00e9rents niveaux (notez l\u2019ordre des niveaux est de droite \u00e0 gauche)<\/figcaption><\/figure>\n<h2>Les r\u00e9solveurs DNS<\/h2>\n<p>Maintenant que l&rsquo;on conna\u00eet la structure des noms de domaine, voyons comment c&rsquo;est traduit en adresse IP.<br>\nReprenons notre exemple de <code>bilbo.baggins.hobbiton.middleearth.lotr<\/code><\/p>\n<p>Au d\u00e9part, la demande est faite \u00e0 une machine qu&rsquo;on appelle le r\u00e9solveur DNS qui est g\u00e9n\u00e9ralement situ\u00e9 chez votre FAI, mais elle peut \u00eatre aussi sur un r\u00e9seau local d&rsquo;entreprise, ou d&rsquo;universit\u00e9 par exemple.<\/p>\n<p>Cette machine ne conna\u00eet pas l&rsquo;adresse de <code>bilbo.baggins.hobbiton.middleearth.lotr<\/code> . Pour ainsi dire, elle ne sait rien. Elle est b\u00eate. Et tout ce qu&rsquo;elle conna\u00eet c&rsquo;est l&rsquo;adresse des serveurs root. Et elle va donc demander successivement \u00e0 plusieurs \u00ab\u00a0personnes\u00a0\u00bb :<\/p>\n<ul>\n<li>D&rsquo;abord au serveur root (racine)\n<ul>\n<li>Vous demandez alors : <em>\u00ab\u00a0\u00d4 V\u00e9n\u00e9r\u00e9 Serveur Racine, connais-tu <code>bilbo.baggins.hobbiton.middleearth.lotr<\/code> ?\u00a0\u00bb<\/em><\/li>\n<li>Et le serveur racine vous r\u00e9pond <em>\u00ab\u00a0Ha non mon enfant, moi je connais seulement tous les domaines du premier niveau : les TLD. D&rsquo;ailleurs voici l&rsquo;adresse du serveur qui g\u00e8re <code>.lotr<\/code> &#8230; Lui il saura te renseigner !\u00a0\u00bb<\/em><\/li>\n<\/ul>\n<\/li>\n<li>Puis au serveur <code>.lotr<\/code>\n<ul>\n<li>Vous demandez : <em>\u00ab\u00a0\u00d4 Grand Serveur de Premier Niveau (TLD), connais-tu <code>bilbo.baggins.hobbiton.middleearth.lotr<\/code> ?\u00a0\u00bb<\/em><\/li>\n<li>Le serveur vous r\u00e9pond : <em>\u00ab\u00a0Ha non mon enfant, moi je connais seulement tous les domaines du deuxi\u00e8me niveau ! D&rsquo;ailleurs, voici l&rsquo;adresse du serveur qui g\u00e8re <code>.middleearth.lotr<\/code> &#8230; Lui il saura te renseigner !\u00a0\u00bb<\/em><\/li>\n<\/ul>\n<\/li>\n<li>Puis au serveur <em><code>.middleearth.lotr<\/code><\/em>\n<ul>\n<li>Vous demandez : <em>\u00ab\u00a0\u00d4 Estim\u00e9 Serveur de Deuxi\u00e8me Niveau, connais-tu <code>bilbo.baggins.hobbiton.middleearth.lotr<\/code> ?\u00a0\u00bb<\/em><\/li>\n<li>Le serveur vous r\u00e9pond : <em>\u00ab\u00a0Ha non mon enfant, moi je connais seulement tous les domaines du troisi\u00e8me niveau ! D&rsquo;ailleurs, voici l&rsquo;adresse du serveur qui g\u00e8re <code>.hobbiton.middleearth.lotr<\/code> &#8230; Lui il saura te renseigner !\u00a0\u00bb<\/em><\/li>\n<\/ul>\n<\/li>\n<li>Puis au serveur <em><code>.hobbiton.middleearth.lotr<\/code><\/em>\n<ul>\n<li>Vous demandez : <em>\u00ab\u00a0\u00d4 Respect\u00e9 Serveur de Troisi\u00e8me Niveau, connais-tu <code>bilbo.baggins.hobbiton.middleearth.lotr<\/code> ?\u00a0\u00bb<\/em><\/li>\n<li>Le serveur vous r\u00e9pond : <em>\u00ab\u00a0Ha non mon enfant, moi je connais seulement tous les domaines du quatri\u00e8me niveau ! D&rsquo;ailleurs, voici l&rsquo;adresse du serveur qui g\u00e8re <code>.baggins.hobbiton.middleearth.lotr<\/code> &#8230; Lui il saura te renseigner !\u00a0\u00bb<\/em><\/li>\n<\/ul>\n<\/li>\n<li>Puis au serveur <em><code>.baggins.hobbiton.middleearth.lotr<\/code><\/em>\n<ul>\n<li>Vous demandez en soupirant parce que \u00e7a commence \u00e0 \u00eatre long \u00ab\u00a0H\u00e9, toi l\u00e0, tu connais <em><code>bilbo.baggins.hobbiton.middleearth.lotr<\/code><\/em> ?\u00a0\u00bb<\/li>\n<li>Le serveur vous r\u00e9pond : <em>\u00ab\u00a0Mais oui mon enfant ! Et voici son adresse IPv6 : 2001:0db8\\:abcd:1234:5678:9abc\\:def0:0001\u00a0\u00bb<\/em><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><strong>Note :<\/strong> L&rsquo;adresse et le nom sont fictifs<br>\nL&rsquo;ensemble des serveurs auquel on a demand\u00e9 notre chemin s&rsquo;appelle des <strong>serveurs faisant autorit\u00e9 (\u00e0 ne pas confondre avec le serveur r\u00e9solveur) <\/strong>parce que ces serveurs ont une base de donn\u00e9es (comme expliqu\u00e9 plus t\u00f4t) qui connaissent la liste de tous les domaines du niveau inf\u00e9rieur qui sont enregistr\u00e9s chez eux.<br>\nEt ainsi, de proche en proche on sait retrouver l&rsquo;adresse IP du site.<\/p>\n<p>Et vous vous dites s\u00fbrement \u00ab\u00a0Mais \u00e7a doit \u00eatre super long !\u00a0\u00bb Et oui, \u00e7a l&rsquo;est. Mais il faut savoir que le serveur r\u00e9solveur <strong>met en cache<\/strong> les requ\u00eates qu&rsquo;il a d\u00e9j\u00e0 effectu\u00e9es. \u00c7a veut dire qu&rsquo;il <strong>garde de c\u00f4t\u00e9<\/strong> certaines informations pendant un certain temps, <strong>pour ne pas aller redemander \u00e0 chaque fois .<\/strong><\/p>\n<p>Dans notre exemple si dessus, si maintenant on veut acc\u00e9der \u00e0 <em><code>map.hobbiton.middleearth.lotr<\/code><\/em> et bien notre r\u00e9solveur sait d\u00e9j\u00e0 qu&rsquo;il faut demander \u00e0 <em><code>hobbiton.middleearth.lotr<\/code><\/em> et il a d\u00e9j\u00e0 enregistr\u00e9 l&rsquo;adresse du serveur faisant autorit\u00e9 sur ce domaine, et va donc lui demander directement sans repasser par racine, TLD, deuxi\u00e8me niveau, troisi\u00e8me niveau&#8230;<\/p>\n<p>Youpi !<\/p>\n<h1>HTTP<\/h1>\n<p>Maintenant qu&rsquo;on a <strong>r\u00e9cup\u00e9r\u00e9<\/strong> l&rsquo;adresse via le <strong>DNS<\/strong>, et qu&rsquo;on sait <strong>envoyer des paquets<\/strong> vers cette adresse via <strong>TCP\/IP<\/strong>, comment on envoie la demande ?<br>\nC&rsquo;est au tour de <strong>HTTP<\/strong> (<em>Hypertext Transfer Protocol<\/em>) d&rsquo;entrer en jeu.<br>\nCe protocole permet de d\u00e9finir les r\u00e8gles pour \u00e9changer les documents web (pages, images, texte, etc&#8230;). Comme on l&rsquo;a vu pr\u00e9c\u00e9demment <strong>TCP\/IP<\/strong> s&rsquo;occupe du transport du paquet, par analogie, <strong>HTTP<\/strong> \u00e7a serait ce qu&rsquo;on met dedans par exemple \u00ab\u00a0<em>Donne-moi la page d&rsquo;accueil<\/em>\u00a0\u00bb ou \u00ab\u00a0<em>Envoie-moi telle image<\/em>\u00a0\u00bb<\/p>\n<p>Le probl\u00e8me, c&rsquo;est que avec <strong>HTTP<\/strong>, les demandes sont <strong>envoy\u00e9es en clair,<\/strong> c&rsquo;est-\u00e0-dire que n&rsquo;importe qui de mal intentionn\u00e9 sur le r\u00e9seau pourrait voir votre demande et la r\u00e9ponse. Un peu \u00e0 la mani\u00e8re d&rsquo;une carte postale : tout le monde peut voir ce qui est \u00e9crit dessus. C&rsquo;est pourquoi on utilise <strong>HTTPS !<\/strong><\/p>\n<h1>HTTPS &amp; SSL\/TLS<\/h1>\n<p>HTTPS pour <em>Hypertext Transfer Protocol<\/em> <em>Secure <\/em>permet de chiffrer les \u00e9changes entre le client et le serveur avec le chiffrement <strong>SSL\/TLS.<\/strong><\/p>\n<h2>SSL\/TLS<\/h2>\n<p>SSL\/TLS est un protocole qui permet de chiffrer les \u00e9changes. <strong>SSL<\/strong> (Secure Sockets Layer) est l&rsquo;ancien nom du protocole qui n&rsquo;est normalement plus utilis\u00e9. Et <strong>TLS<\/strong> (<em>Transport Layer Security<\/em>) est sa version moderne et s\u00e9curis\u00e9e qui permet de prot\u00e9ger les donn\u00e9es, d&rsquo;assurer qu&rsquo;elles ne soient pas modifi\u00e9es, et de v\u00e9rifier qu&rsquo;on parle au bon serveur via un certificat.<\/p>\n<h2>Les certificats<\/h2>\n<p>Afin de s&rsquo;assurer qu&rsquo;on parle au bon serveur, et que notre requ\u00eate n&rsquo;est pas redirig\u00e9e par des petits malins sur un autre serveur, on utilise un principe de certificat. Concr\u00e8tement, lorsqu&rsquo;on tente de se connecter \u00e0 un serveur, ce dernier commence par envoyer un certificat. C&rsquo;est en quelque sorte un document qui stipule : <em>\u00ab\u00a0Hey, je suis google.fr et voici ma cl\u00e9 publique ! D&rsquo;ailleurs, \u00e7a \u00e9t\u00e9 v\u00e9rifi\u00e9 par une autorit\u00e9 de confiance !\u00a0\u00bb<\/em><br>\nVous vous dites peut-\u00eatre, mais n&rsquo;importe qui peut dire que <em>\u00ab\u00a0Je suis google.fr faites-moi confiance !\u00a0\u00bb <\/em> Et bien pas vraiment.<br>\nParce que le navigateur va regarder la signature du certificat, et g\u00e9n\u00e9ralement on ne fait confiance qu&rsquo;\u00e0 des organismes reconnus comme Let&rsquo;s Encrypt par exemple.<\/p>\n<p>Si un vilain pirate voulait falsifier ce certificat, il faudrait que Let&rsquo;s Encrypt lui donne sa signature. Or Let&rsquo;s Encrypt va demander une preuve pour \u00eatre s\u00fbr et certain qu&rsquo;il fournit sa signature au propri\u00e9taire du serveur et pas \u00e0 un vilain pirate. Et une des m\u00e9thodes utilis\u00e9es c&rsquo;est de demander un <strong>enregistrement DNS sp\u00e9cifique. <\/strong>C&rsquo;est-\u00e0-dire que le propri\u00e9taire du site doit ajouter une ligne dans l&rsquo;annuaire du domaine <em>\u00ab\u00a0Le site web est \u00e0 l&rsquo;adresse 123.123.123.123 type A, et voici une preuve pour lets encrypt : Blablabla&#8230;\u00a0\u00bb<\/em><br>\nSi on peut faire \u00e7a, c&rsquo;est qu&rsquo;on a les mots de passe pour aller faire \u00e7a et donc qu&rsquo;on est propri\u00e9taire du serveur.<\/p>\n<h1>Le firewall<\/h1>\n<p>On a bien avanc\u00e9 dans notre voyage ! On a commenc\u00e9 par trouver l&rsquo;adresse <strong>IP<\/strong> de notre serveur via les <strong>DNS<\/strong>, puis on a chiffr\u00e9 notre demande via <strong>HTTPS, <\/strong>et TCP s&rsquo;est occup\u00e9 de mettre tout \u00e7a dans des petits paquets et de les envoyer sur le r\u00e9seau, et <strong>IP<\/strong> de trouver un chemin pour les distribuer !<br>\nMais avant de pouvoir rentrer dans le serveur, les paquets passent souvent par un firewall (ou pare-feu en fran\u00e7ais).<\/p>\n<p>Ce pare-feu agit comme un filtre \u00e0 l&rsquo;entr\u00e9e du serveur. Il v\u00e9rifie qui a le droit d&rsquo;entrer (on peut filtrer par adresse, par port, par protocole par exemple) et permet ainsi de bloquer certaines attaques, ou du spam.<\/p>\n<p>C&rsquo;est une v\u00e9ritable barri\u00e8re de s\u00e9curit\u00e9 qui permet de bloquer certaines connexions avant m\u00eame qu&rsquo;elles atteignent le serveur.<\/p>\n<p>Typiquement le protocole HTTPS utilise le port 443, on peut donc param\u00e9trer le serveur pour dire \u00ab\u00a0Je ne veux accepter que des communications chiffr\u00e9es et s\u00e9curis\u00e9es, donc je n&rsquo;accepte que les connexions entrantes sur le port 443.\u00a0\u00bb<br>\nCe qui revient \u00e0 dire que si on utilise HTTP (sans le S) sur le port 80, le pare-feu bloquera l\u2019entr\u00e9e et on restera dehors, porte close !<\/p>\n<h1>On se sert la main ?<\/h1>\n<p class=\"\" data-start=\"136\" data-end=\"315\">Une fois le pare-feu pass\u00e9, le client ne parle pas encore directement en HTTPS totalement chiffr\u00e9. La premi\u00e8re chose qu\u2019il fait, c\u2019est demander le certificat du serveur. Alors le serveur lui pr\u00e9sente gentiment (prouvant son identit\u00e9 comme expliqu\u00e9 plus haut) ; et le client <strong data-start=\"416\" data-end=\"448\">v\u00e9rifie que tout est correct<\/strong> (signature par une autorit\u00e9 de confiance, domaine, etc.). Si tout est bon, <strong data-start=\"526\" data-end=\"555\">le chiffrement est activ\u00e9<\/strong>.<\/p>\n<p class=\"\" data-start=\"558\" data-end=\"665\">La <strong data-start=\"561\" data-end=\"584\">vraie requ\u00eate HTTPS<\/strong> commence alors : <strong data-start=\"604\" data-end=\"664\">tout est d\u00e9sormais chiffr\u00e9 et donc illisible pour les curieux<\/strong>.<\/p>\n<p data-start=\"558\" data-end=\"665\">C&rsquo;est ce qu&rsquo;on appelle le <em>TLS Handshake <\/em>dans le jargon<\/p>\n<h3 class=\"\" data-start=\"667\" data-end=\"692\">Une petite analogie :<\/h3>\n<p class=\"\" data-start=\"694\" data-end=\"934\">C\u2019est comme envoyer une carte postale disant :<br data-start=\"744\" data-end=\"747\"><em data-start=\"747\" data-end=\"835\">\u00ab\u00a0Salut copain, on se parle avec notre super code secret pour les prochains \u00e9changes ?\u00a0\u00bb<\/em><br data-start=\"835\" data-end=\"838\">Et d\u00e8s que votre ami r\u00e9pond oui, vous commencez \u00e0 chiffrer tous les \u00e9changes suivants.<\/p>\n<h1>Le load balancer<\/h1>\n<p>\u00c7a y est ! On a pass\u00e9 la \u00ab\u00a0s\u00e9curit\u00e9\u00a0\u00bb on est dans le serveur ! On arrive alors \u00e0 une esp\u00e8ce d&rsquo;aiguillage. Car imaginons que le site est tellement populaire qu&rsquo;un seul serveur ne suffit pas \u00e0 traiter toutes les demandes; il faudrait r\u00e9partir le flux de visiteurs vers plusieurs serveurs. Un peu comme au supermarch\u00e9, y&rsquo;a plusieurs caisses enregistreuses pour g\u00e9rer le flux des visiteurs, et on dispatch les visiteurs vers les caisses libres.<br>\nLe load balancer va donc recevoir toutes les connexions entrantes pour les r\u00e9partir entre plusieurs serveurs derri\u00e8re lui. Et pour \u00e7a il peut utiliser diff\u00e9rents algorithmes :<\/p>\n<ul>\n<li><strong>Round Robin <\/strong>En Round Robin, le load balancer va envoyer les clients sur les serveurs tour \u00e0 tour, de mani\u00e8re cyclique sans v\u00e9rifier leur charge, leur temps de r\u00e9ponse, ou d&rsquo;autres param\u00e8tres. C&rsquo;est utilis\u00e9 parce que c&rsquo;est tr\u00e8s simple \u00e0 mettre en place mais c&rsquo;est pas le plus optimal<\/li>\n<\/ul>\n<ul>\n<li><strong>IP Hash <\/strong>Le load balancer va envoyer les requ\u00eates d&rsquo;une m\u00eame IP toujours sur le m\u00eame serveur. \u00c7a permet une continuit\u00e9 et une stabilit\u00e9 pour le client<\/li>\n<\/ul>\n<ul>\n<li><strong>Least Connection <\/strong>Le load balancer va envoyer les requ\u00eates sur le serveur qui g\u00e8re le moins de client \u00e0 la fois. Une analogie par rapport au super march\u00e9 : <em>\u00ab\u00a0La caisse avec le moins de client\u00a0\u00bb<\/em><\/li>\n<\/ul>\n<ul>\n<li><strong>Least response time <\/strong>Le load balancer va envoyer les requ\u00eates sur le serveur qui r\u00e9pond le plus rapidement. C&rsquo;est tr\u00e8s utilis\u00e9 quand il y a des serveurs un peu partout dans le monde, et qu&rsquo;on veut se connecter au serveur le plus proche g\u00e9ographiquement de chez soi.<\/li>\n<\/ul>\n<ul>\n<li><strong>Least bandwidth <\/strong>Le load balancer va envoyer les requ\u00eates sur le serveur qui utilise le moins de bande passante.<\/li>\n<\/ul>\n<p>Il existe d&rsquo;autres fa\u00e7ons de faire, mais ce sont les algorithmes les plus courants.<br>\nLe <strong data-start=\"398\" data-end=\"415\">load balancer<\/strong> agit donc comme <strong data-start=\"432\" data-end=\"462\">un r\u00e9partiteur intelligent<\/strong>, pour que <strong data-start=\"477\" data-end=\"522\">personne ne fasse la queue trop longtemps<\/strong> et que <strong data-start=\"530\" data-end=\"568\">le site reste rapide et disponible<\/strong>, m\u00eame en cas de <strong data-start=\"589\" data-end=\"608\">forte affluence<\/strong>.<\/p>\n<h1>Le web server<\/h1>\n<p>On arrive enfin au <strong>web server<\/strong> apr\u00e8s toutes ces p\u00e9rip\u00e9ties !<br>\nC&rsquo;est le logiciel qui \u00e9coute sur un port <strong>HTTP<\/strong> ou <strong>HTTPS<\/strong> (80 ou 443 par d\u00e9faut donc) et qui s&rsquo;occupe de recevoir les requ\u00eates <strong>HTTP<\/strong>, de servir des pages, ou dans des cas plus \u00e9labor\u00e9s de transf\u00e9rer la requ\u00eate \u00e0 une application. (On parle alors de <strong data-start=\"225\" data-end=\"242\">reverse proxy<\/strong> : le web server devient un <strong data-start=\"270\" data-end=\"287\">interm\u00e9diaire<\/strong> entre le client et l\u2019application).<\/p>\n<p>Voici les web server les plus utilis\u00e9s :<\/p>\n<ul>\n<li>Nginx<\/li>\n<li>Apache<\/li>\n<li>Caddy<\/li>\n<\/ul>\n<h1>Application server<\/h1>\n<p>Partons du principe que le <strong>web server<\/strong> ne nous a pas servi une page mais a fait office de reverse proxy pour nous envoyer vers un <strong>serveur applicatif<\/strong> (ou<strong> application server)<\/strong><br>\nC&rsquo;est le serveur qui contient l&rsquo;application comme son nom l&rsquo;indique, et la logique m\u00e9tier, il va effectuer les calculs, traiter les donn\u00e9es. Par exemple quand on remplit un formulaire, le web server va transmettre la demande et l&rsquo;application va lire les donn\u00e9es, interagir avec la base de donn\u00e9es, pr\u00e9parer une r\u00e9ponse, et renvoyer le tout au serveur web.<\/p>\n<p>Typiquement, c&rsquo;est ce qui se passe avec une <strong>API<\/strong> \u00e0 la diff\u00e9rence que l&rsquo;<strong>API<\/strong> ne renvoie pas des pages web, mais des donn\u00e9es (souvent au format <strong>JSON<\/strong>)<\/p>\n<h1>La base de donn\u00e9e<\/h1>\n<p>On arrive presque \u00e0 la fin du voyage, terminons par la base de donn\u00e9es. Le serveur applicatif ne travaille pas tout seul. Il doit souvent stocker et g\u00e9rer des informations (imaginez que vous cr\u00e9ez un compte sur un site, il faut bien stocker votre pseudo quelque part) ; et c&rsquo;est la base de donn\u00e9es qui g\u00e8re \u00e7a.<br>\nC&rsquo;est une esp\u00e8ce de grosse biblioth\u00e8que, ou de gros tableau Excel qui enregistre des informations (Votre nom, votre adresse, vos commandes sur un site marchand etc&#8230;). Cette base de donn\u00e9es s&rsquo;occupe d&rsquo;aller chercher ses informations de les servir quand on les demande, et de les mettre \u00e0 jour le cas \u00e9ch\u00e9ant.<\/p>\n<p>Quelques exemples de base de donn\u00e9es :<\/p>\n<ul>\n<li><strong>MySQL<\/strong> : la plus courante<\/li>\n<li><strong>MariaDB <\/strong>: fork communautaire de MySQL<\/li>\n<li><strong>PostgreSQL <\/strong>: pour des projets plus complexes<\/li>\n<li><strong>MongoDB <\/strong>: stockage des documents \u00e0 la mani\u00e8re de fiche au format JSON<\/li>\n<li><strong>SQLite<\/strong> : pour des petites bases de donn\u00e9es locales<\/li>\n<\/ul>\n<h1>Voila, c&rsquo;est fini !<\/h1>\n<p>Pfiou ! Notre balade \u00e0 cheval touche \u00e0 sa fin !<br>\nOn a tap\u00e9 <em>\u00ab\u00a0https:\/\/www.google.fr\u00a0\u00bb<\/em>, le serveur <strong>DNS<\/strong> nous a trouv\u00e9 l&rsquo;<strong>adresse<\/strong>, faire notre demande avec <strong>HTTPS<\/strong> et avec <strong>TCP\/IP<\/strong> on a pu trouver un chemin et envoyer les paquets contenant notre demande !<br>\nLe firewall nous a laiss\u00e9 passer sur le <strong>port<\/strong> 443, puis le <strong>load balancer<\/strong> nous a redirig\u00e9 vers un <strong>serveur<\/strong> <strong>disponible<\/strong>, qui a <strong>trait\u00e9<\/strong> notre demande dans une <strong>application<\/strong>, utilis\u00e9 des donn\u00e9es venant d\u2019une <strong>base de donn\u00e9es<\/strong>, et nous a <strong>servi la page demand\u00e9e !<\/strong><\/p>\n<p>J&rsquo;esp\u00e8re que cet article vous aura plu, que vous aurez appris deux ou trois trucs.<\/p>\n<p><strong>Et pour conclure tout \u00e7a voici un beau sch\u00e9ma pour r\u00e9capituler tout ce que j&rsquo;ai expliqu\u00e9 !<\/strong><\/p>\n<figure id=\"attachment_3508\" aria-describedby=\"caption-attachment-3508\" style=\"width: 1842px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/blog.nanuq.me\/wp-content\/uploads\/2025\/05\/dns.drawio.png\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-3508 size-full\" src=\"https:\/\/blog.nanuq.me\/wp-content\/uploads\/2025\/05\/dns.drawio.png\" alt=\"Sch\u00e9ma du fonctionnement d'internet\" width=\"1842\" height=\"1329\"><\/a><figcaption id=\"caption-attachment-3508\" class=\"wp-caption-text\">Sch\u00e9ma du fonctionnement d&rsquo;internet<\/figcaption><\/figure>\n<p>&nbsp;<\/p>\n<p>Et d&rsquo;ici l\u00e0 : n&rsquo;oubliez jamais d&rsquo;apprendre !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Qu&rsquo;est-ce qui se passe quand on tape https:\/\/www.google.fr dans notre navigateur ?<\/p>\n","protected":false},"author":1,"featured_media":3510,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[4],"tags":[65,100,107],"_links":{"self":[{"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=\/wp\/v2\/posts\/3504"}],"collection":[{"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3504"}],"version-history":[{"count":0,"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=\/wp\/v2\/posts\/3504\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=\/"}],"wp:attachment":[{"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3504"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3504"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3504"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}