Internet et Web

Raconté par Vincent Jugé
sur la base d'un cours créé par Rémi Forax

Internet

Internet Protocol (IP)

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

internet routing

Adresse IP

Adresse unique identifiant une machine sur le réseau internet.

IP address

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 3004 ms
rtt min/avg/max/mdev = 27.293/28.505/29.422/0.782 ms

Routeur

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

router chez soi

Routage

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

internet routing

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.

L'équivalent de traceroute sous Windows est tracert.

TCP/IP

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

Pour fonctionner, TCP s'appuie sur IP.

TCP

DNS

host

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


$ host elearning.univ-eiffel.fr
elearning.univ-eiffel.fr is an alias for rp-edu.univ-eiffel.fr.
rp-edu.univ-eiffel.fr has address 193.55.63.13

$ host univ-eiffel.fr
univ-eiffel.fr has address 193.50.159.150
univ-eiffel.fr mail is handled by 10 mx1.univ-eiffel.fr.
univ-eiffel.fr mail is handled by 50 mx2.univ-eiffel.fr.

L'équivalent de host sous Windows est nslookup.

host avec un DNS externe

en utilisant un des DNS de Google 8.8.8.8


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

elearning.univ-eiffel.fr is an alias for rp-edu.univ-eiffel.fr.
rp-edu.univ-eiffel.fr has address 193.55.63.13

Google DNS

XKCD - Google DNS

xkcd: Google Announcement

Web

URL (1/2)

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

URL

C'est la chose que l'on écrit dans la barre de navigation.

URL (2/2)

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

URL Image
  • 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 de TCP

HTTP/TCP

netcat (nc)

permet d'envoyer une requête HTTP  


$ nc -C igm.univ-mlv.fr 80
GET /ens/ HTTP/1.0
Host: igm.univ-mlv.fr

HTTP/1.1 200 OK
Date: Sun, 15 Jan 2023 18:29:01 GMT
Server: Apache
Content-Length: 2957
Connection: close
Content-Type: text/html; charset=UTF-8
...

Entê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: 2957
Content-Type: text/html; charset=UTF-8

et enfin séparé d'une 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

Error 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: 2957
Content-Type: text/html; charset=UTF-8
Fichier HTML de 2957 octets encodé en UTF-8

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 -C vincentjuge1987.github.io 80
GET / HTTP/1.0

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

$ nc -C vincentjuge1987.github.io 80
GET / HTTP/1.1
Host: vincentjuge1987.github.io

HTTP/1.1 200 OK
Server: GitHub.com
...

Et pour une image ?


$ nc -C 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"
Expires: Sun, 15 Jan 2023 18:44:30 GMT
Cache-Control: max-age=300
Accept-Ranges: bytes
Date: Sun, 15 Jan 2023 18:39:30 GMT
Via: 1.1 varnish
Age: 0
X-Served-By: cache-cdg20745-CDG
X-Cache: MISS
X-Cache-Hits: 0
X-Timer: S1673807970.207009,VS0,VE410

Fichier PNG de 19172 octets

wget

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


$ wget https://vincentjuge1987.github.io/web.html

--2023-01-15 19:41:12--  https://vincentjuge1987.github.io/web.html
Résolution de vincentjuge1987.github.io (vincentjuge1987.github.io)… 2606:50c0:8003::153, 2606:50c0:8001::153, 2606:50c0:8002::153, ...
Connexion à vincentjuge1987.github.io (vincentjuge1987.github.io)|2606:50c0:8003::153|:443… connecté.
requête HTTP transmise, en attente de la réponse… 200 OK
Taille : 19227 (19K) [text/html]
Enregistre : ‘web.html’
web.html            100%[===================>]  18,78K  --.-KB/s    ds 0,005s  
2023-01-15 19:41:12 (3,69 MB/s) - ‘web.html’ enregistré [19227/19227]

curl

curl permet de faire une requête en indiquant des options.


$ curl 'https://elearning.univ-eiffel.fr/pluginfile.php/1/theme_remui/slideimage1/1673448987/slider-amphi.jpg'
-H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:108.0) Gecko/20100101 Firefox/108.0'
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8'
-H 'Accept-Language: fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3'
-H 'Accept-Encoding: gzip, deflate, br'
-H 'Connection: keep-alive'
-H 'Cookie: SERVERID=mdl-node3; MoodleSession=9od810aeg016mlee08usslbeu6'
-H 'Upgrade-Insecure-Requests: 1'
-H 'Sec-Fetch-Dest: document'
-H 'Sec-Fetch-Mode: navigate'
-H 'Sec-Fetch-Site: cross-site'
-H 'Pragma: no-cache'
-H 'Cache-Control: no-cache'
> slider-amphi.jpg

Requêtes HTTP

HTTP request

Une page nécessite plusieurs requêtes HTTP.

http page breakdown

Requêtes HTTP (suite)

Votre site web est trop lent ?

u-pem.elearning.fr

HTTPS

Tunnel de sécurité autour de HTTP

Utilise le principe du chiffrement asymétrique entre le client et le serveur.

La clé publique est recherchée auprès de serveurs (dits serveurs de certificats) donc les clés publiques sont stockées dans le code du client.

Pour des questions de performance, le chiffrement asymétrique n'est utilisé que pour échanger une clef symétrique entre le client et le serveur. Le reste des échanges se fait en utilisant cette clef symétrique.