$ ls
Dockerfile README.adoc dist gulp scripts
Makefile assets docker-compose.yml package.json slides
Institut Saint Laurent - 2018
Pour naviguer, utilisez les flèches en bas à droite (ou celles de votre clavier)
Gauche/Droite: changer de chapitre
Haut/Bas: naviguer dans un chapitre
Pour avoir une vue globale : utiliser la touche "o" (pour "Overview")
Pour voir les notes de l’auteur : utilisez la touche "s" (pour "Speaker notes")
Damien DUPORTAL:
Træfik's Developer Advocate @ Containous et Freelancer
Former Training Engineer @ CloudBees
Il y a 10 types de personnes :
Ceux qui comprennent le binaire,
Les autres.
Concept: un chiffre prends une des valeurs suivantes:
0
1
2
..
9
Combien de valeurs ? 10
1 chiffre | 2 chiffres | 3 chiffres |
---|---|---|
0 | 10 | 100 |
1 | 11 | 101 |
2 | 12 | 102 |
etc. |
Utilisé en Chine 1 siècle avant J.C.
Concept: Un chiffre ne peut prendre que 2 valeurs: 0 ou 1
1 chiffre | 2 digits | 3 digits |
---|---|---|
0 | 10 | 100 |
1 | 11 | 101 |
- | 11 | 110 |
- | - | 111 |
etc. |
Décimal :
125 = 100 + 20 + 5 = ( 1 x 102 ) + ( 2 x 101 ) + ( 5 x 100 )
Binaire :
111 = 100 + 10 + 1 = ( 1 x 22 ) + ( 1 x 21 ) + ( 1 x 20 )
Digit : C’est un chiffre, quelque soit la base (10, 2, 16, etc.)
Bit : C’est un chiffre en base 2
Octet : Codage d’une information sur 8 bits
Unité du Système International
Incluant des unité de grandeur: kilo (Ko), mega (Mo), giga, téra, péta, exa, zetta, yotta…
Attention: grandeur par 1000
Unité "binaire" (multiples faciles)
Unité de grandeur alternative: kibi (Kio), mébi (Mio)…
Attention: grandeur par 1024
Base 16: 0, 1,… 9, A, B, .. F
Compromis simplicité / écriture compacte
Pratique en informatique: codé sur 4 bits
Couleurs en CSS : Combien de couleurs possibles,
avec le format #aaaaaa
(6 caractères hexadécimaux) ?
avec le formt RVB(255,255,255) (3 octets) ?
Conclusion ?
Le charactère "dollar" $
en début de ligne indique une invitation de commande
Son absence indique le résultat de la commande executée dans l’invitation
C’est le « verbe » expirmant l’intention de la commande
Example: ls
pour "Lister" le contenu d’un répertoire :
$ ls
Dockerfile README.adoc dist gulp scripts
Makefile assets docker-compose.yml package.json slides
C’est le "compléments d’objet" permettant de désigner la cible de l’intention
Example: "Lister" le contenu du répertoire /usr
:
$ ls /usr
bin include lib libexec local sbin share standalone
Ce sont des « adverbes » pour nuancer l’intention
Example: Lister le contenu du répertoire courant, en affichant 1 élément par ligne avec les détails:
$ ls -l
total 40
-rw-r--r--@ 1 dadou staff 564 Oct 15 15:16 Dockerfile
-rw-r--r--@ 1 dadou staff 1320 Oct 15 15:12 Makefile
-rw-r--r--@ 1 dadou staff 1567 Oct 15 15:12 README.adoc
drwxr-xr-x@ 4 dadou staff 128 Oct 15 15:05 assets
drwxr-xr-x 8 dadou staff 256 Nov 5 13:25 dist
-rw-r--r--@ 1 dadou staff 661 Oct 15 15:12 docker-compose.yml
drwxr-xr-x@ 4 dadou staff 128 Oct 15 15:05 gulp
-rw-r--r--@ 1 dadou staff 778 Oct 15 15:11 package.json
drwxr-xr-x@ 3 dadou staff 96 Oct 15 15:05 scripts
drwxr-xr-x@ 6 dadou staff 192 Nov 4 12:00 slides
Supercommandes: CTRL + * :
Ctrl+C: Interrompre la commande en cours
Ctrl+A / Ctrl+E: Naviguer au début / à la fin de la ligne en cours
Ctrl+D: Equivalent des commandes exit
ou logout
Ctrl+R: Rechercher dans l’historique des commandes
man CMD
pour le "manuel" d’une commande. Example: man ls
.
Si les "manuels" ne sont pas installés : Google !
Arbre :
Racine (/
)
Branches (dossiers)
feuilles (fichiers)
"/" comme racine, et aussi "/" comme separateur
Exemples :
/
: "racine" du disque
/usr
: Dossier usr
à la racine du disque
/home/scrapbook
: Sous-dossier scrapbook
dans le dossier home
à la racine
Changer de répertoire courant: cd
Afficher le répertoire courant: pwd
Créer un fichier: touch
Créer un répertoire: mkdir
Copier un fichier ou répertoire: cp
Déplacer un fichier ou répertoire: mv
Supprimer un fichier ou répertoire: rm
obligatoire; rien d’anonyme !
root
Liste dans /etc/passwd Groupes dans /etc/group
Droits sur les fichiers : owner, group, others.
Binaire
Decimal
Codé
Ls -l en exemple
chmod et chgrp
On souhaite transmettre de l’information entre 2 acteurs éloignés.
Information trop simple: allumé ou éteint
Logistique nécessaire:
Il faut se mettre d’accord au préalable
Fragilité du "réseau"
Quid de la confidentialité ?
source: http://www.leplacide.com
Encodage de l’information dans un dictionnaire
On doit partager ce dictionnaire
Possibilité de chiffrer les messages
Meilleure quantité d’information portée
source: Lucky Luke: Les Collines Noires
Plus grande quantité d’information
Meilleure confidentialité
Meilleur routage
Routage
Télégraphe Optique
"Super Sémaphore"
Télégraphe Electrique
26 Lettres: 26 fils ?
Routage de l’information
Quantité d’information à transmettre
Intégrité de l’information
Protocole d’échange
Source
Destination
Chemin
Découper
Compresser
Diluer
Dupliquer
Chiffrer
Quel language ?
Quel propriétées ?
Quand commencer, et finir ?
Il en tient un couche ce modèle !
Découper un gros problème en sous-problèmes
"Esprit Cartésien"
Faire une seule chose, mais bien la faire
OSI = "Open Systems Interconnection"
Modèle standard International (ISO-7498)
Modèle initial sur fond de combats industriels dans les années 1970s
Concepts:
Chaque couche forme une abstraction des couches inférieures
Entre 2 hôtes, dialogue couche à couche
But: Transfert d’information dans des paquets
Modèle poussé par des industriels
Intérêts
Pérennité
Très complet, mais trop complexe
Inventé par Vinton G. Cerf et Bob Kahn
Issu de la recherche universitaire, puis militaire
Utilisé sur ARPANet en 1983
Couche Applicative:
Communications de haut niveau
Couche Transport:
Garantie des niveaux de service
Couche Réseau:
Gestion des adresses
Couche "Liaison de données":
Gestion de la voie physique
Modèle "Internet Protocol"
Contrôler la transmission de la donnée via la couche physique
Par abus de language: on intègre la couche physique ici
Donc liaison physique + carte associée + pilotes logiciels
Ethernet
Wifi
Bluetooth
Cable Coaxial
Fibre Optique
NFC
Branche des mathématiques qui étudie la géométrie de situation, les propriétés de l’espace.
Topologies Physiques : Palpables
Topologies Logiques : Virtuelles
La plus simple
Très fragile
Temps de parcours dépendant de la distance
Ajout facile
suppression avec coupure
Modèle du "paquet de chips autour du feu de camp"
Moins fragile: Duplication des chemins
Temps de parcours dépendant de la distance
Ajout moyennement couteux
suppression moyennement couteuse
Modèle du "chef scout au feu de camp".
Fragilité limité à la coupure, pas d’impact sur le reste.
Mais Centralisation
Temps de parcours constant
Ajout facile
suppression facile
Variation de l’étoile, mais sans élément central
Temps de parcours constant
Ajout et suppression facile
Interconnexion de topologie en étoiles entre elles
Fragile
Ajout facile, suppression moyennemenet complexe
Parcours constant et facile
Temps de parcours constant
Ajout et suppression complexes
Très solide
Internet: "Inter-network" : Interconnexion de réseaux avec différents topologies
Un exemple d’implémentation de
la couche "Liaison de Données + Physique"
Milieu hypothétique des substances subtiles distinctes de la matière et permettant de fournir ou transmettre des effets entre les corps censé baigner l’Univers.
Ethernet est :
Une mécanisme de connexion physique, à transmission électrique
Un protocole de réseau local à "commutation de paquets"
Une norme internationale : ISO/IEC 8802-3
Problème : Comment faire dialoguer 3+ ordinateurs via Ethernet ?
Solution : Concentrateur ("Hub") Ethernet.
Imaginez une conversation autour d’un feu de camp à 10:
Concept de "collision" : On attends avant de réessayer
Simple mais peu performant. En plus on a des adresses…
Passage à une topologie "étoile"
On était en topologie "bus"
Toutes les cartes Ethernet savent croiser/décroiser en 2018
Solution : Adressage
M.A.C. : "Media Access Control" (rien à voir avec une pomme)
Adresse dites "physique" car déclarée dans le matériel
Peut être surchargée (Confidentialité sur Wifi publics…)
Structure :
Stockée sur 6 octets
Couramment exprimée en hexadécimal
Pourquoi l’hexadécimal?
Localiser l’adresse MAC de votre machine
Problème: Plusieurs interfaces réseau ?
Localiser l’adresse MAC de l’ethernet sur les Raspberry Pis
Modèle "Internet Protocol"
Interconnexion des réseaux:
Gestion des adresses
Gestion du routage
"IP" désigne aussi bien l’adresse que le protocole de communication :
"I.P." == "Internet Protocol"
Adresse logique (virtuelle)
2 normes IPs:
Version 4 : IPv4 (défaut dans ce cours)
Version 6 : IPv6 (raison: épuisement du stock d’adresse IPv4… en théorie)
Taille de 32 bits (4 octets)
Exprimé avec 4 nombres décimaux séparés par des points .
. Exemples:
0.0.0.0
10.0.3.4
192.168.0.1
255.255.255.255
Taille de 128 bits
Exprimé en suite de nombre hexa-décimaux, séparés par des double point `: `
Exemple : 001:0db8:0000:85a3:0000:0000:ac1f:8001
L’adresse IP porte 2 informations:
L’adresse de l’hôte
L’adresse du réseau
Wait, what ?
3 adresses (MAC, IP, Réseau) ?
Les modèles en couches (OSI, TCP/IP) définissent des abstractions
On a une couche physique, toutes les autres sont "logiques":
La couche réseau est donc "virtuelle"
L’adresse MAC est une adresse "physique"
⇒ Plus que 2 adresses !
Simplifions (Rappel: Descartes)
Groupement logique d’hôtes
Abstraction des hôtes pour le monde extérieur
Réseau "local" ("LAN - Local Area Network") :
On parle d’un "segment"
Réseau "global" ("WAN - Wide Area Network) :
Interconnexion de segments
Q: Certes, mais comment l’adresse IP peut-elle embarquer 2 adresses en 1 ?
R: Avec ce qu’on appelle le "masque sous-réseau"
C’est pareil pour le masque sous réseau
Concept:
On applique un "masque" sur l’adresse IP
Le résultat est l’adresse du réseau
Au lieu du bleu/rouge, on utilise le binaire
Si on n’a pas le même nombre de bits, alors on ajoute des 0
On doit donc avoir le même format que l’adresse IP
Utilisation de l’opération "ET logique"
Ressemble à la multiplication:
0 ET 0 = 0
1 ET 0 = 0
0 ET 1 = 0
1 ET 1 = 1
On aligne les bits entre l’IP et le masque
On effectue les opérations de "ET logique" bit à bit
On récupère le résultat
11000000.10101000.00001010.00010100 => 192.168.10.20
ET
11111111.11111111.11111111.00000000 => 255.255.255.0
=
11000000.10101000.00001010.00000000 => 192.168.10.0
Quel est le réseau de l’adresse IP 192.168.1.2
(masque: 255.255.0.0
) ?
Quel est le réseau de l’adresse IP 10.128.4.10
(masque: 255.255.240.0
) ?
Quel est le réseau de l’adresse IP 172.195.4.1
(masque: 255.240.0.0
) ?
Est-ce qu’il y a des bandes rouges dans le verre bleu des lunettes ?
Un masque sous-réseau est toujours séparé en deux parties :
Une série de 1 contigus
Puis une série de 0 contigus
Quelles sont les masques sous réseau valides ?
255.255.128.0
255.255.255.192
192.192.0.0
192.192.0.0
255.248.0.0
255.255.255.252
0.0.0.0
Classe | Bits de départ | Début | Fin |
---|---|---|---|
Classe A | 0 | 0.0.0.0 | 127.255.255.2553 |
Classe B | 10 | 128.0.0.0 | 191.255.255.255 |
Classe C | 110 | 192.0.0.0 | 223.255.255.255 |
(Les classes D et E existaient également pour des adresses réservées)
Bloc | Usage |
---|---|
0.0.0.0/8 | Ce réseau |
127.0.0.0/8 | adresse de bouclage (localhost) |
10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 | Adresses privées |
… | … |
Bloc | Usage |
---|---|
169.254.0.0/16 | adresses locales autoconfigurées |
255.255.255.255/32 | broadcast limité |
100.64.0.0/10 | Espace partagé pour Carrier Grade NAT |
224.0.0.0/4 | Multicast "Multidiffusion" |
… | … |
Depuis 1994, on utilise la notation "CIDR" au lieu des classes d’IP
Beaucoup plus modulaire et adaptable
On ajoute un suffixe à l’adresse IP
Séparateur: caractètre slash /
Valeur du suffixe : nombre décimal indiquant le nombre de "1" du masque
255.255.0.0
= 11111111.11111111.00000000.00000000
⇒ 16 zéros
L’adresse IP 192.168.2.1
associée au masque 255.255.0.0
est donc écrite 192.168.2.1/16
On écrit également son réseau ainsi = 192.168.0.0/16
Donnez la notation CIDR de l’adresse IP 10.172.0.5
avec le masque 255.255.255.0
Donnez la notation CIDR du réseau de l’adresse IP 192.168.2.1
avec le masque 255.240.0.0
Quel est la masque correspondant à l’adresse IP 172.10.16.192/16
?
Comment envoyer un message d’une adresse à une autre ?
Mécanisme de détermination du chemin pour la distribution du message
Unicast
Broadcast
Anycast
Multicast
Depuis 1 hôte vers 1 autre hôte: "Point à point"
Depuis 1 hôte vers tous les hôtes du réseau local
Depuis 1 hôte vers les hôtes les plus "proches" en multi-chemin
Depuis 1 hôte vers les hôtes "abonnés"
Je suis 192.168.2.4
Je veux envoyer un message à 192.168.2.7
(unicast)
Mon réseau est 192.168.2.0/24
Nous sommes dans le même réseau (à vérifier pour le sport)
Le switch connaîtra l’adresse MAC: communication facile
On la respecte !
Mais il faut bien donner un destinataire à la couche "Liaison de Données".
En l’occurence: une adresse MAC.
A.R.P. = "Address Resolution Protocol"
Lien entre les couches 2 (Liaison) et 3 (IP)
Protocole "question / réponse":
On demande une adresse IP
On obtient une (ou plusieurs) adresses MAC
On peut "forger" les messages !
On peut donc "conserver" ces paires d’adresses IP/MAC
But : meilleure performances de communication
"Mise en cache" : notion de durée de vie
Une table ARP par hôte du réseau local
"Ping" est une question, qui attends une réponse "Pong"
Commande permettant de tester l’accessibilité d’une machine via la couche "réseau"
Utilises le protocole "ICMP" (Internet Control Message Protocol)
Encapsulation dans le protocol IP
ping
$ sudo su - # Devenir root
root$ arp -a # Afficher la table ARP (Linux et Windows)
root$ arp -d <IP> # Supprimer l'entrée correspondant à <IP>
root$ arp -a
root$ ping -c3 <IP voisin>
root$ arp -a # Quelle différence ?
Je suis 192.168.2.4
Je veux envoyer un message à 72.54.67.128
(unicast)
Mon réseau est 192.168.2.0/24
Nous sommes dans des réseaux différents
Problème: comment faire ?
Adresse du réseau local
Concept logique
Destination des requêtes extra-réseau
"Porte de sortie" du réseau
Hôte appartenant à 2 (ou plus) réseaux
C’est la machine qui fait "passerelle"
Il faut un retour aux requêtes émises:
Entrée / sortie d’un réseau
Le routeur étant lui-même un noeud du réseau "parent"
Soit le destinataire est dans son réseau parent
Soit il transmet à la passerelle du réseau parent
Et Caetera…
On a pu faire l’aller. Mais quid de la requête retour?
Exemple de ping
qui attend son pong
…
Table stockée sur chaque hôte (routeur inclus)
Liste les passerelles connues sur lesquelles envoyer les requêtes
Ne contient QUE les réseaux de l’hôte
En fonction des adresses IP des destinataires
Contient toujours une route par défaut
Remplir en 3 temps:
Une entrée par réseau d’appartenance
Une entrée par défaut
Une entrée "statique" par réseau à connaître
Les passerelles indiquées dans une table de routage appartiennent toujours à l’un des réseaux auxquels j’appartiens
Toujours une règle par défaut
Reprenons notre double réseau :
Pour une machine "simple", c’est facile. Prenons 192.168.1.10
:
Réseau à joindre | Passerelle |
---|---|
192.168.1.0/24 | 192.168.1.10 |
0.0.0.0/0 | 192.168.1.1 |
Une entrée pour le réseau auquel on appartient
Une entrée par défaut
Reprenons notre double réseau :
Pour le routeur, c’est presque aussi facile :
Réseau à joindre | Passerelle |
---|---|
192.168.1.0/24 | 192.168.1.1 |
10.0.2.0/16 | 10.0.2.1 |
0.0.0.0/0 | 127.0.0.1 |
Une entrée pour chaque réseau auquel on appartient
Une entrée par défaut
On suppose ici que le routeur est autonome
Quel est la table de routage de 192.168.0.1 ?
Quel est la table de routage de "Routeur 1" ?
sudo su - # Become root
netstat -rn # Show Tables
NAT = "Network Adress Translation"
1 IP privée == 1 IP publique
But: Etablir un pont Ethernet <→ Wifi
On a un réseau arrivant en Ethernet (accès en SSH aux pis)
On veut aussi brancher nos smartphones en Wifi
A raison d’un Wifi par Pi, sur le même réseau
Installer les paquets nécessaires (hostapd bridge-utils
)
Arrêter les services utilisés
sudo su -
apt-get update
apt-get install hostapd bridge-utils
systemctl stop hostapd
Configurer manuellement les interfaces (/etc/dhcpcd.conf
)
# Editeur de texte en ligne : nano
nano /tmp/fichier.txt
# Entrainez vous puis valider avec
cat /tmp/fichier.txt
# Maintenant, le vrai fichier
cp /etc/dhcpcd.conf /etc/dhcpcd.conf.backup
nano /etc/dhcpcd.conf
# Ajouter "denyinterfaces wlan0" et "denyinterfaces eth0"
cat /etc/dhcpcd.conf
# En cas de problème:
cp /etc/dhcpcd.conf.backup /etc/dhcpcd.conf
Configurer le point d’accès wifi
echo 'DAEMON_CONF="/etc/hostapd/hostapd.conf"' >> /etc/default/hostapd
cp /etc/hostapd/hostapd.conf /etc/hostapd/hostapd.conf.backup
nano /etc/hostapd/hostapd.conf
interface=wlan0
bridge=br0
ssid=ISL
hw_mode=g
channel=7
wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=ISL2018!
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
Configurer le "pont" (aka. bridge)
brctl addbr br0 # Creation de l'interface réseau
brctl addif br0 eth0 # Mixage des interfaces
# Définition de la configuration de br0
nano /etc/network/interfaces.d/br0
auto br0
iface br0 inet manual
bridge_ports eth0 wlan0
Tout réactiver :
systemctl enable hostapd
reboot
...
systemctl status hostapd
Tester tout ça
Comme pour le bridge, mais avec du routage dans un réseau privé
Il faut configurer un serveur DHCP: dnsmasq
Désactiver ce qu’on vient de faire:
systemctl disable hostapd
rm -f /etc/hostapd/*.conf /etc/network/interfaces.d/br0
reboot
...
systemctl status hostapd
brctl delbr br0
ip addr
Configurer une IP statique publique :
# Décider du plan d'adressage et adapter ci-dessous
nano /etc/dhcpcd.conf
interface wlan0
static ip_address=192.168.4.1/24
nohook wpa_supplicant
Installer dnsmasq avec apt-get
Configurer dnsmasq
:
systemctl stop dnsmasq
cp /etc/dnsmasq.conf /etc/dnsmasq.conf.backup
nano /etc/dnsmasq.conf
interface=wlan0 # Use the require wireless interface - usually wlan0
dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h
Configurer hostapd comme précédemment (sauf la ligne "bridge"):
systemctl disable hostapd
nano /etc/hostapd/hostapd.conf
interface=wlan0
driver=nl80211
ssid=ISL
hw_mode=g
channel=7
wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=ISL2019?
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
Vérifier les changements
systemctl restart dhcpcd
systemctl start hostapd
systemctl enable hostapd
systemctl start dnsmasq
systemctl enable dnsmasq
Il manque le routage !
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
sysctl -p
# Masquerade
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sh -c "iptables-save > /etc/iptables.ipv4.nat"
nano /etc/rc.local
...
iptables-restore < /etc/iptables.ipv4.nat
exit 0
Modèle "Internet Protocol"
Garantie des niveaux de service de la communication
Gestion du niveau d’intégrité des données transmises
Problème :
On sait dialoguer entre machines
Une machine possède plusieurs applications
Comment faire le lien entre X application et 1 machine ?
Il faut une adresse par application
Idée : on associe 1 nombre entier par application
C’est ce qu’on appelle le "port"
On peut donc "multiplexer" pour une même adresse IP
"Adresse" de la couche Transport
"Tube" dans lequel lire et écrire
Couple Adresse IP + Port
Ou un fichier ("Socket Unix" / "Named Pipe" dans Windows)
Le rôle de la couche réseau est de "router" de la donnée d’un hôte à un autre.
Et c’est tout !
Pas sûr que les paquets arrivent (Ping ? ICMP!)
Pas de contrôle d’intégrité
Pas de garantie d’ordre d’arrivée
Il faut des protocoles de communication au dessus de IP
On est dans une couche virtuelle: tout est possible!
Protocoles étudiés:
TCP
UDP
Protocoles "mentionnés"
TCP = "Transmission Control Protocol"
Unité de donnée : "paquets TCP"
Se base sur IP pour la couche réseau
Mode "connecté" entre 2 ports… de 2 hôtes différents
Garantie un bon acheminement des données
Mémorisation des données
Indépendant vis-à-vis des données transportées (comme IP)
"Communication bi-directionnelle" (full duplex) : échange dans les 2 sens en même temps
Complexe
"Couteux" en temps
Délai d’établissement d’une connexion
Nombre d’aller-retours sur le réseau
UDP = "User Datagram Protocol"
Unité de donnée: "datagramme UDP" (comme IP)
Se base sur IP pour la couche réseau
Concept : "Fire and Forget"
Pas de mode connecté: Simple
Pas de garantie d’arrivée de la donnée
Intégrité de la donnée garantie
SI la donnée arrive
Cas d’usages:
Performances
Petite quantité de données
$ sudo netstat -anpt
...
$ sudo netstat -anpt
...
$ sudo netstat -anpu
...
$ sudo netstat -anptu4
...
Vous vous souvenez du NAT?
Problème : On voudrait 1 IP publiques pour X IP privées
Solution : utiliser le port
PAT = "Port Adresse Translation"
Egalement connu comme "NAT Dynamique"
Modèle "Internet Protocol"
C’est ici que se passe votre travail
Communications de haut niveau entre des processus distants
Plein de protocoles connus se trouvent ici: HTTP, SSH, FTP, P2P, etc.
U.R.L. : "Uniform Resource Locator"
C’est l’adresse au niveau des applications
Permet d’identifier de manière unique une ressource sur le réseau World Wide Web
Protocole | Auth. | Hostname | Port | Chemin |
---|---|---|---|---|
Obligatoire (souvent masqué, suivi de "://") | Facultatif (défaut : "") | Obligatoire | Facultatif (défaut : associé au protocole) | Facultatif (défaut : "/") |
http:// | user:pass@ | domain.com | :80 | /admin |
https:// | "" | google.com | "" (:443) | "" (/) |
github.com:443/dduportal
ssh://gitserver:3000/public/project1.git
Ecoute sur un socket ("passif")
Réponds aux requêtes ("actif")
Emets les réponses
Ecrit sur un socket
Emets des requêtes
Reçois les réponses
Protocole applicatif de résolution de nom
Utilise UDP comme protocole, port 53
But: transcrire un nom de domaine en adresse IP
Exemple: google.com
<→ 172.217.17.142
Plusieurs types :
Type NS
: Délégation à un autre serveur DNS
Type A
: 1 nom de domaine == 1 adresse IPv4
Type AAAA
: 1 nom de domaine == 1 adresse IPv6
Type CNAME
: 1 nom de domaine == 1 autre nom de domaine
Type MX
: 1 nom de domaine pour un domain de mail
Type TXT
: 1 champ libre
FQDN : Fully qualified domain name
Nom complet
Jusqu’au domaine de premier niveau ("TLD")
Avec un point final
dig www.google.com
dig @1.1.1.1 www.google.com
dig dduportal.github.com
dig CNAME dduportal.github.com
dig github.github.io.
dig NS dduportal.github.com
HTTP : "Hyper Text Transfert Protocol"
HTTPS : "HTTP + SSL/TLS"
Protocole client / serveur
Clients : Navigateur web, commandes wget
ou curl
Utilise TCP pour le transport, sur le port 80
HTTPS utilisera le port 443
Versioné: 1.0, 1.1, 2.0, etc.
Chaque requête spécifie une "méthode", appliquée sur une ressource distante
URL
La méthode va appliquer une action sur la page distante
Exemple :
GET / HTTP/1.1
Host: www.isl.be
Le serveur HTTP renvoie un code retour
Nombre entier décimal à trois chiffres
Et éventuellement du contenu
Le contenu de la requête distante
GET : demande la représentation de la ressource distante
HEAD : demande d’informations sur la ressource distante
PUT : demande de mise à jour d’une ressource distante
POST : création de ressource (ou mise à jour !)
DELETE : suppression de la ressource distante
Et bien d’autres : https://developer.mozilla.org/fr/docs/Web/HTTP/M%C3%A9thode
1xx
: Information
2xx
: Succès
200, 204…
3xx
: Redirections
301, 302…
4xx
: Erreur du client HTTP
404, 418…
5xx
: Erreur du serveur HTTP
500, 502, 503…
Un "En-tête" (=="header") est un couple clef / valeur
Une requête ou une réponse HTTP possède une collection de headers qui lui sont propres
Permet d’exprimer les "méta-donnée" de la requête (ou réponse)
Exemples :
Host
Location
User-Agent
Si vous êtes chez vous : VirtualBox (gratuit, libre, complet, multi-plateforme)
A l’école ou si VirtualBox ne fonctionne pas : VMWare Player (gratuit, propriétaire, Windows seulement)
Téléchargez l’image Debian.ova
sur votre bureau :
https://www.dropbox.com/s/d2hlxar8skcy44g/Debian.ova?dl=0
Ouvrez VirtualBox
Séléctionner le bouton "Importer" et choisissez le fichier Debian.ova
Laissez les réglages par défaut :
Sélectionner la machine "Debian32" nouvellement créée dans la colonne de gauche
Cliquez sur le bouton "Start" avec la flèche verte pour démarrer la VM
Sautez la section "VMare Player" et accédez à la suite en cliquant ici
Téléchargez l’archive Debian.zip
sur votre bureau :
https://www.dropbox.com/s/ncsz0bmpgdzfdjn/Debian.zip?dl=0
Décompressez l’image pour obtenir un dossier nommé Debian
sur le bureau
Ouvrir VMWare Player
Sélectionner le menu "Player" → "File" → "Open…"
Sélectionner le fichier debian.vmx
qui se trouve dans le dossier Debian
Une fois la VM "Debian" créée, cliquer sur le bouton "Play" :
Si le message "Cannot connect the virtual device …" apparaît, choisissez le bouton "No"
Au bout de quelques secondes apparais l’invitation de connexion
Identifiez-vous :
Utilisateur : isl
Mot de passe : isl2018
(aucun caractère n’est affiché quand vous tapez le mot de passe)
Dans quel dossier vous trouvez-vous ?
Quel est le contenu de ce dossier (fichiers cachés inclus) ?
Quel est le contenu du dossier /etc
(fichiers cachés inclus) ?
Créer un dossier nommé ISL
(majuscules) dans le "home" de l’utilisateur isl
Déplacez-vous dans ce dossier
Créez-y un fichier notes.txt
?
Quel est le chemin absolu de ce fichier ?
Retournez dans le "home" utilisateur de isl
Quel est le chemin relatif du fichier notes.txt
?
Qui est le propriétaire du fichier notes.txt
?
Quels sont les droits du fichier notes.txt
?
Qui est le propriétaire du fichier /bin/ls
?
Afficher la liste des processus ( Indice : ps aux
)
Quel est le PID du processus sshd
(Indice : … | grep 'sshd'
) ?
Terminez la session de l’utilisateur isl
avec la commande logout
puis identifiez-vous en tant que root
OU utilisez la commande sudo su -
Est-ce que la commande arp
existe (Indice : which ls
) ?
Mettez à jour le catalogue de "paquets"
apt-get update
Installer le paquet nommé net-tools
apt-get install net-tools
Commande arp
?
Trouvez les informations suivantes :
Combien d’interfaces réseau ? (Indice : ip addr
)
Quelles sont les adresse IP de ces interfaces ? (Indice : ip addr
)
Addrsse Ip de la passerelle par défaut du réseau ? (Indice : ip route
)
Essayez de "pinguer" 3 fois l’adresse IP de la passerelle
Afficher la table ARP (Indice : arp
)
Supprimez toutes les entrées (Indice : arp --help
)
Pourquoi est-ce qu’une des entrées ré-apparait après quelques secondes ?
Essayez de pinguer une adresse inexistante du réseau local
Quel est la conséquence dans la table ARP ?
Quelle sont les "sockets" TCP (IPv4) en état LISTEN
?
Indice : netstat
Quelles sont les interfaces réseaux associées ?
Indice : utiliser la/les adresse IP associées aux ports
Quels sont les applications associées ?
Indice : Registre de ports IANA
Un peu de NAT : configurez une redirection de port pour SSH
Choisissez le port 2222 sur votre hôte, et le port 22 pour la VM
VirtualBox : Réglages de la VM → Réseau → dépliez le menu "Avancé" → "Redirection de ports"
VMWare Player :
Confirmez la redirection de ports en vous connectant avec Putty (ou SSH sur Mac/Linux)
Donnez une adresse IPv4 d’un serveur derrière le domaine www.google.com
(Indice : dig
)
Même question mais en interogeant le serveur DNS 1.1.1.1
Pourquoi est-ce que les adresses IPs sont différentes ?
Quel est l’alias du domaine dduportal.github.com
(Indice : "CNAME") ?
Donnez une adresse IP d’un serveur DNS d’authorité du domaine dduportal.github.com
(Indice : "NS") ?
Affichez la page web à l’adresse http://google.com/
Quel est le résultat ? Pourquoi ?
Affichez les en-têtes de la requête précédente (et de sa réponse associée)
Comment fonctionne la redirection ?
Confirmez votre hypothèse avec un navigateur et son "inspecteur web"
Installez le serveur web "Nginx" (nom du paquet : nginx
)
Trouvez tous les ports TCP sur lesquels Nginx écoute
Essayer d’afficher la page web de défaut en utilisant 2 adresses IP différentes
Arrêtez le service et vérifier qu’il ne réponds plus aux requêtes HTTP (Indice: Commandes systemctl nginx stop
/ systemctl nginx status
)
Vérifiez avec netstat
et l’option -p
(Indice : ps aux | …
)
Redémarrer le service (Indice: systemctl nginx restart
)
Essayez d’installer le paquet apache2
Que se passe t’il ?
[OpenClassrooms] Les réseau de zéro
[Comment ça marche] TCP/IP
[Wikibooks] : Adressage IP v4
[Developpez.com] : Cours d’introduction à TCP/IP
Wikipedia EN :
[xahlee.info] TCP/IP Tutorial
[Electronic Design] What’s The Difference Between The OSI Seven-Layer Network Model And TCP/IP
[Jeu Linux en ligne pour les commandes] Terminus (Merci Guillaume!)
[RaspberryPi.org] Creating an access point
[Linux Commandes (Fiche mémoire)] http://juliend.github.io/linux-cheatsheet/
[Reddit] Linux Commande Overview
La référence ABSOLUE en livre : Computer Networks by Andrew S. Tanenbaum