Web et Internet

Remi Forax

Internet ?

“The Internet is the global system of interconnected computer networks that use the Internet protocol suite (TCP/IP) to link billions of devices worldwide”

source: Wikipedia.org - Internet

Internet ?

“ L'Internet est un système global de réseaux d'ordinateurs interconnectés qui utilise la suite de protocoles Internet (TCP/IP) pour lier des milliards de terminaux dans le monde entier”

source : Wikipedia.org - Internet

Internet Protocol (IP) ?

Plusieurs protocoles d'échange de données permettant à des machines de communiquer entre elles à travers un réseau de machines

Adresse IP

Adresse unique identifiant une machine sur le réseau Internet

ping

La commande ping permet d'envoyer des paquets ICMP
(de contrôle) à une adresse IP


$ ping 193.50.159.151
PING 193.50.159.151 (193.50.159.151) 56(84) bytes of data.
64 bytes from 193.50.159.151: icmp_seq=1 ttl=53 time=27.2 ms
64 bytes from 193.50.159.151: icmp_seq=2 ttl=53 time=29.4 ms
64 bytes from 193.50.159.151: icmp_seq=3 ttl=53 time=28.8 ms
64 bytes from 193.50.159.151: icmp_seq=4 ttl=53 time=28.4 ms
^C
--- 193.50.159.151 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 27.293/28.505/29.422/0.782 ms
                                        

TTL (Time To Live)

Chaque paquet IP possède un compteur (TTL),
décrémenté de 1 à chaque routeur traversé.
Permet d'estimer le nombre de routeurs traversés

Si TTL == 0, le paquet est détruit et un paquet d'erreur ICMP "Time Exceeded" est renvoyé à l'émetteur. Le TTL initial dépend de l'OS (64 Linux/macOS, 128 Windows)

DNS

“The Domain Name System (DNS) is a hierarchical distributed naming system for computers, services, or any resource connected to the Internet”

source: Wikipedia.org - DNS

DNS

“Le système de nom de domaine (DNS) est un système de nommage hiérarchique et distribué pour des ordinateurs, services ou n'importe quelle ressource connectée à l'Internet”

source : Wikipedia.org - DNS

host

La commande host permet de demander au DNS une adresse IP pour un nom de machine


$ host www.univ-eiffel.fr
www.univ-eiffel.fr is an alias for www.univ-gustave-eiffel.fr.
www.univ-gustave-eiffel.fr has address 193.55.45.17

$ host gmail.com
gmail.com has address 172.217.16.229
gmail.com has IPv6 address 2a00:1450:4007:811::2005
gmail.com mail is handled by 10 alt1.gmail-smtp-in.l.google.com.
gmail.com mail is handled by 5 gmail-smtp-in.l.google.com.
gmail.com mail is handled by 20 alt2.gmail-smtp-in.l.google.com.
					

host avec un DNS externe

En utilisant un des DNS de Google 8.8.8.8


$ host www.univ-eiffel.fr 8.8.8.8
Using domain server:
Name: 8.8.8.8
Address: 8.8.8.8#53
Aliases: 

www.univ-eiffel.fr is an alias for www.univ-gustave-eiffel.fr.
www.univ-gustave-eiffel.fr has address 193.55.45.17
                                        

Google DNS

xkcd: Google Announcement

whois

Permet d'interroger les registres qui gèrent les noms de domaine et les blocs d'adresses IP

Infos: le propriétaire du domaine, dates de création/expiration, sa localisation (optionnelle), etc.


$ whois example.com
 Domain Name: NITENDO.COM
 Registrar WHOIS Server: whois.tucows.com
 Registrar URL: http://www.tucows.com
 Updated Date: 2026-04-02T03:48:43Z
 Creation Date: 1998-05-02T04:00:00Z
 Registry Expiry Date: 2027-05-01T04:00:00Z
 Registrar: Tucows Domains Inc.
 ...
    

Routeur

Matériel connecté à plusieurs machines qui sépare différents réseaux IP

Routage

Pour atteindre une machine distante, les données sont acheminées (routées) de proche en proche

traceroute

La commande traceroute permet de savoir
comment sont routées les données


$ traceroute 93.184.220.20
traceroute to 93.184.220.20 (93.184.220.20), 30 hops max, 60 byte packets
 1  router.belkin (192.168.2.1)  * 8.856 ms  8.941 ms
 2  88.167.50.254 (88.167.50.254)  35.054 ms  35.510 ms  37.737 ms
 3  stmaurice-6k-1-a5.routers.proxad.net (213.228.14.254)  40.146 ms  41.482 ms  42.518 ms
 4  bzn-crs16-2-be1008.intf.routers.proxad.net (194.149.160.125)  48.989 ms  46.015 ms  49.999 ms
 5  th2-9k-3-be1000.intf.routers.proxad.net (194.149.163.90)  51.011 ms  55.204 ms  54.792 ms
 6  be4204.ccr21.par04.atlas.cogentco.com (149.11.115.13)  57.950 ms  48.369 ms  51.117 ms
 7  ntt.par04.atlas.cogentco.com (130.117.14.166)  26.249 ms  27.425 ms  27.546 ms
 8  xe-0-2-0-32.r04.parsfr01.fr.ce.gin.ntt.net (81.25.197.190)  27.131 ms
    xe-0-2-0-34.r04.parsfr01.fr.ce.gin.ntt.net (81.25.197.238)  26.901 ms  27.719 ms
 9  93.184.220.20 (93.184.220.20)  26.546 ms  26.683 ms  25.159 ms
					

On voit que les données ont pris deux chemins à l'étape 8

TCP/IP

Transmission Control Protocol (TCP) fait croire à des machines qu'elles sont connectées directement l'une à l'autre

Web ?

“The World Wide Web (WWW) is an open source information space where documents and other web resources are identified by URLs, interlinked by hypertext links, and can be accessed via the Internet”

source: Wikipedia.org - World Wide Web

Web ?

“La toile mondiale (WWW) est un espace d'information à code source ouvert où les documents et autres ressources de la toile sont identifiés par des URLs, interconnectés par des liens hypertextes et auxquels on peut accéder par l'Internet”

source : Wikipedia.org - World Wide Web

URL

Uniform Resource Locator
permet d'identifier une ressource sur le Web

C'est le truc que l'on écrit dans la barre de navigation du browser

URL

Identifie à la fois des documents (au format HTML) ou des images, vidéos, etc. sur le Web

  • protocole : http, https
  • nom de la machine : www.google.fr
  • URI : /images/branding ...

HTTP

HyperText Transfer Protocol : protocole d'échange de documents et d'images au-dessus du protocole TCP

Les versions de HTTP

HTTP/0.9 (1991) juste GET, pas de code de retour
HTTP/1.0 (1996) ajoute les headers + le code de retour + plusieurs types de contenu
HTTP/1.1 (1997) header Host (obligatoire) + connections persistantes

La plupart des sites utilisent HTTP/2 (2015) ou HTTP/3 (2022),
mais HTTP/1.1 reste le plus simple car textuel

netcat (nc)

permet d'envoyer une requête HTTP :)


$ nc www.univ-gustave-eiffel.fr 80
GET / HTTP/1.0
                                         

HTTP/1.1 400 Bad Request
Date: Sun, 27 Sep 2026 10:13:25 GMT
Server: Apache
Content-Length: 338
Connection: close
Content-Type: text/html; charset=iso-8859-1
...
                                       

Le serveur n'implante pas le protocole HTTP 1.0 (trop vieux)

En-tête de la réponse HTTP

La première ligne est un code de réponse


HTTP/1.1 200 OK
					                      
puis d'informations supplémentaires de la forme clé: valeurs

Content-Length: 269
Content-Type: text/html; charset=iso-8859-1
					                      
et enfin, séparé par ligne vide, le contenu
(page web, images, vidéos, etc)

Codes de réponse HTTP

200 OK
301 Moved Permanently
400 Bad Request
401 Unauthorized
404 Not Found

https://en.wikipedia.org/wiki/List_of_HTTP_status_codes

Content-Length / Content-Type

Content-Length définit la taille du contenu, ou -1

Content-Type définit le type du contenu, texte, image, etc
au format MIME.


Content-Length: 269
Content-Type: text/html; charset=iso-8859-1
				                          
Fichier HTML de 269 octets encodé en iso-latin1

Type MIME

Multipurpose Internet Mail Extensions (MIME) définit l'encodage du Content-Type.

text/plain; charset=utf-8 texte simple (encodage UTF8)
text/html; charset=utf-8 texte au format HTML
image/jpeg image JPEG
video/mp4 video au format MPEG4
application/msword contenu lisible par Microsoft Word
Historiquement, le type MIME a été spécifié pour les mails et réutilisé par HTTP.

HTTP 1.1

On doit de plus spécifier un Host car un serveur
peut héberger plusieurs sites


$ nc forax.github.io 80
GET / HTTP/1.0

HTTP/1.1 404 Not Found
Server: GitHub.com
...
                                         

                                         
$ $ nc forax.github.io 80
GET / HTTP/1.1
Host: forax.github.io

HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 6042
Server: GitHub.com
...
                                       

Et pour une image ?


$ nc imgs.xkcd.com 80
GET /comics/google_announcement.png HTTP/1.1
Host: imgs.xkcd.com
                                          

HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 19172
Server: nginx
Content-Type: image/png
Last-Modified: Mon, 28 Apr 2014 04:40:03 GMT
ETag: "535ddba3-4ae4"
Access-Control-Allow-Origin: *
Accept-Ranges: bytes
Age: 0
Date: Sun, 27 Sep 2026 09:58:04 GMT
Via: 1.1 varnish
X-Served-By: cache-par-lfpb1150090-PAR
X-Cache: MISS
X-Cache-Hits: 0
X-Timer: S1790503084.406746,VS0,VE403
...
				                          
Fichier PNG de 19172 octets

wget

wget permet de télécharger une ressource
à partir d'une URL


$ wget http://ligm.univ-eiffel.fr/~forax/index.html
--2026-09-27 12:01:09--  http://ligm.univ-eiffel.fr/~forax/index.html
Resolving ligm.univ-eiffel.fr (ligm.univ-eiffel.fr)... 193.55.61.150
Connecting to ligm.univ-eiffel.fr 193.55.61.150|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://ligm.univ-eiffel.fr/~forax/index.html [following]
--2026-09-27 12:01:09--  https://ligm.univ-eiffel.fr/~forax/index.html
Connecting to ligm.univ-eiffel.fr 193.55.61.150|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 6073 (5,9K) [text/html]
Saving to: ‘index.html’
                                        

Le serveur envoie une redirection vers une URL HTTPS

Requêtes HTTP

Une page nécessite plusieurs requêtes HTTP

Requêtes HTTP (suite)

Avec la première page du Monde (www.lemonde.fr)

HTTPS

Tunnel de sécurité autour de HTTP

Utilise le principe du chiffrement asymétrique entre le client et le serveur pour échanger une clef symétrique
Le reste des échanges se fait en utilisant cette clef symétrique

Chiffrement asymétrique

Chaque machine possède une paire de clés : une clé publique (diffusée à tous) et une clé privée (gardée secrète)

Ce que l'on chiffre avec la clé publique ne peut être déchiffré qu'avec la clé privée correspondante (et vice-versa)

Le serveur envoie sa clé publique au client, qui s'en sert pour chiffrer un secret que seul le serveur (avec sa clé privée) pourra lire

Certificats

Comment être sûr que la clé publique reçue appartient bien au serveur voulu (et pas à un attaquant) ?

Une autorité de certification (Certificate Authority) signe un certificat qui associe un nom de domaine à une clé publique

Le navigateur possède déjà les clés publiques des autorités reconnues, ce qui lui permet de vérifier la signature du certificat