Révision Réseau (couche intermédiare): TDs et CCs¶
TD3¶
- Protocol ARP (Address Resolution Protocol)
Paquet ARP / EtherType (0x0806) : paquet de la couche réseau [3] qui est broadcasté sur la couche de liaison et qui demande à qui appartient une IPv4.
Requête :
| 1 | 0x0800 | 6 (taille réseau) | 4 (taille liens) | 1 | S MAC | S IP | NIL | D IP |
|---|
Réponse :
| 1 | 0x0800 | 6 (taille réseau) | 4 (taille liens) | 2 | S MAC | S IP | D MAC | D IP |
|---|
- TD : Trames Ethernet et ARP
On considère un petit réseau où toutes les machines sont configurées avec des adresses IP fixes. On considère quatre machines avec une carte réseau chacune. Chacune connait sa propre IP et son adresse MAC :
- M1 : MAC : D8:3B:8D:C1:BF:C9 - IP : 192.168.1.101/24
- M2 : MAC : 01:00:5E:7F:FF:FA - IP : 192.168.1.102/24
- M3 : MAC : 01:00:5E:7F:AE:15 - IP : 192.168.2.101/24
- M4 : MAC : 01:00:5E:FA:65:12 - IP : 192.168.2.102/24
Question 1¶
Donnez la liste des sous-réseaux, et les machines qu’elles contiennent
Il y a deux sous réseaux:
192.168.1.0/24 (255.255.255.0):
- M1 : MAC : D8:3B:8D:C1:BF:C9 - IP : 192.168.1.101/24
- M2 : MAC : 01:00:5E:7F:FF:FA - IP : 192.168.1.102/24
192.168.2.0/24 (255.255.255.0):
- M3 : MAC : 01:00:5E:7F:AE:15 - IP : 192.168.2.101/24
- M4 : MAC : 01:00:5E:FA:65:12 - IP : 192.168.2.102/24
Question 2¶
On suppose un câble Ethernet par sous-réseau qui connecte les machines correspondantes. Quelle trame ARP doit envoyer la machine M1 pour découvrir l’adresse MAC de la machine M2 ? Quelle trame ARP doit envoyer la machine M2 pour découvrir l’adresse MAC de la machine M3 ? Quelle trame ARP répond la machine M3 ? Décrire les trames octet par octet.
M1 -> M2 (Requête):
| 1 | 0x0800 | 6 (taille réseau) | 4 (taille liens) | 1 | D8:3B:8D:C1:BF:C9 | 192.168.1.101 | FFFFF (on connait pas) | 192.168.1.102 |
|---|
M1 <- M2 (Réponse):
| 1 | 0x0800 | 6 (taille réseau) | 4 (taille liens) | 2 | 01:00:5E:7F:FF:FA | 192.168.1.102 | D8:3B:8D:C1:BF:C9 | 192.168.1.101 |
|---|
M2 -> M3 (Requête):
M2 n'est pas dans le même sous réseau que M3 ce qui signifie que le protcole ARP ne fonctionnera pas. La seul moyen d'envoyer un paquet à M3 et de lui envoyer son IP.
Question 3¶
On donne deux adresse IPv4 : 143.2.128.1 et 143.2.131.1. Calculer un masque de sous réseaux tel que ces IP soient dans le même sous réseau mais pas 143.2.132.3
resultat = ~(128^131) & 0xFF
print(bin(resultat))
0b11111100
Masque: 11111111.11111111.11111100.00000000 255.255.252.0\22
Le masque de sous réseaux de 143.2.128.1 et 143.2.131.1 et 255.255.252.0\22
r1 = (143&255) & 0xFF
r2 = (2&255) & 0xFF
r3 = (128&252) & 0xFF
r4 = (1&0) & 0xFF
print("{}.{}.{}.{}".format(r1,r2,r3,r4))
r5 = (143&255) & 0xFF
r6 = (2&255) & 0xFF
r7 = (131&252) & 0xFF
r8 = (1&0) & 0xFF
print("{}.{}.{}.{}".format(r5,r6,r7,r8))
143.2.128.0 143.2.128.0
Question 5¶
On considère le réseau IPv4 constitué d’un routeurs R1 et 3 machines P11, P12, P2. Le routeur R1 est connecté à internet avec l’adresse IP 143.2.12.187 avec un routeur à 143.2.12.1 et le masque de sous réseau 255.255.240.0 (/20), la topologie du réseau est décrite ci-dessous : pour chaque interface l’adresse IPv4 est soit donné soit manquante (?.?.?.?). Remplir les IPs manquantes avec les plus grandes adresses possibles. voir le td3 pour l'image
# Sous masque A
resultat = ~(128 ^ 131) & 0xFF
print(bin(resultat))
# Masque /22
m1 = 255
m2 = 255
m3 = 252
m4 = 0
# Interface (adresse réseau)
r1 = 143 & m1
r2 = 2 & m2
r3 = 128 & m3
r4 = 1 & m4
print("Interface: {}.{}.{}.{}".format(r1, r2, r3, r4))
# Broadcast
b1 = r1 | (~m1 & 0xFF)
b2 = r2 | (~m2 & 0xFF)
b3 = r3 | (~m3 & 0xFF)
b4 = r4 | (~m4 & 0xFF)
print("Broadcast: {}.{}.{}.{}".format(b1, b2, b3, b4))
0b11111100 Interface: 143.2.128.0 Broadcast: 143.2.131.255
L'IP la plus grande disponible pour P2 est 143.2.131.254
CC1¶
Partie 1¶
On considère le réseau suivant ou toutes les interfaces de chaque machine ont une IPv4 et une adresse MAC:
Question 1¶
On considère que la machine D vient de se connecter, que se passe-t-il, en termes de requête ARP ? Chaque ligne correspond à l'en-tête d'une trame des paquets ARP. Quelles sont les adresses MAC source, MAC destination, les adresses IPv4 source, destination. Utiliser le nombre de lignes nécessaire et rentrer l'IP 0.0.0.0 et l'adresse MAC 00:00:00:00:00:00 pour les (potentielles) lignes non utilisées.
| Mac source | Mac destination | IPv4 source | Ipv4 destination |
|---|
28:ca:60:23:3b:5c | ff:ff:ff:ff:ff:ff | 210.128.252.103 | 210.128.252.199 | |be:41:33:ed:e4:91 | 28:ca:60:23:3b:5c |210.128.252.199| 210.128.252.103| |00:00:00:00:00:00| 00:00:00:00:00:00 | 0.0.0.0 | 0.0.0.0 | |00:00:00:00:00:00|00:00:00:00:00:00|0.0.0.0|0.0.0.0|
Question 2¶
On considère que le masque de tous les sous réseaux est 255.255.255.0. Un paquet est émis par A avec l’en-tête suivant (on ne s’intéresse qu’aux champs d’adresses) :
| Mac source | Mac destination | IPv4 source | Ipv4 destination |
|---|---|---|---|
| 20:5e:94:36:dc:86 | 91:a7:d6:4a:46:45 | 83.101.128.38 | 210.128.252.103 |
Quels sont les champs du paquet lorsqu'il est réémis par B ?
| Mac source | Mac destination | IPv4 source | Ipv4 destination |
|---|---|---|---|
| a0:0a:84:30:72:d4 | 1d:e2:ad:a2:37:55 | 83.101.128.38 | 210.128.252.103 |
Question 3¶
On considère maintenant que le paquet contient les données "Query:xF.com" et qu'il n'a pas d'option
Quelle est la taille en octets de la trame complète y compris avec le CRC: 50 ( Mac (18) + trame IPv4 (20) +données (12))
Quelle est la taille en octets du paquet tel qu'il sera indiqué dans l'en-tête IPv4 : 32 (trame IPv4 (20) +données (12))
Partie 2¶
On considère le réseau IPv4 constitué de deux routeurs R1 et R2 et 4 machines P11, P12, P21, P22. Le routeur R1 est connecté à internet avec l’adresse IP 119.248.157.180 avec un routeur à 119.248.157.181 et le masque de sous réseau 255.255.255.252 (30), la topologie du réseau est décrite ci-dessous : pour chaque interface l’adresse IPv4 est soit donnée soit manquante (?.?.?.?). Les questions de cet exercice sont liées.
Question 1¶
Donnez le plus petit (celui qui contient le moins d'adresses) masque de sous réseaux (sous la forme (X.X.X.X)) possible pour:
- A: 255.255.255.0
- B: 255.255.255.240
- C: 255.255.255.252
Question 2¶
Donnez la plus grande adresse IP disponible aux interfaces de
- R1 dans le sous réseau A : 119.248.156.253
- R2 dans le sous réseau B : 119.248.152.98
- P21 dans le sous réseau C : 119.248.159.253 (Broadcast (Interface (241 & 240) = 240) | not (240) )= 255 - 2 (Ip 254 existe déjà)
Question 3¶
Remplissez la table de routage de R1? On notera les sous réseaux en notation CIDR (X.X.X.X/X) ou "default" pour la route par default. On notera chaque routeur par son IP ou "local" si le sous-réseau est localement accessible. On nommera chaque interface par le sous-réseau auquel elle appartient A,B,C et I (pour internet)
| Sous réseau | Routeur | Interface |
|---|---|---|
| default | 119.248.157.181 | I |
| 119.248.159.240/30 | 119.248.152.98 | B |
| 119.248.156.0/24 | local | A |
| 119.248.152.96/30 | local | B |
Question 4¶
Remplissez la table de routage de P21? On notera les sous réseaux en notation CIDR (X.X.X.X/X) ou "default" pour la route par défaut. On notera chaque routeur par son IP ou "local" si le sous-reseau est localement accessible. On nommera chaque interface par le sous-réseau auquel elle appartient A,B,C et I (pour internet)
| Sous réseau | Routeur | Interface |
|---|---|---|
| default | 119.248.159.241 | C |
| 119.248.152.240/28 | local | C |
TD 4: Internet Protocol (IP)¶
Question 1¶
On considère l’adresse IP 85.170.85.171:
- Calculez la représentation binaire de cette adresse.
- Dites quelle est l’adresse de son sous-réseau si son CIDR est /4.
- Même question pour les CIDR /8, /16, /20, /24 et /28.
85.170.85.171
- représentation binaire : 01010101.10101010.01010101.10101011
- 80.0.0.0/4
- 85.0.0.0/8, 85.170.0.0/16, 85.170.80.0/20, 85.170.85.0/24, 85.170.85.160/28
Question 2¶
On considère les adresses IP 170.85.170.85 et 170.85.171.85.
- Sont-elles dans le même sous-réseau si le CIDR est /8?
- Même question pour les CIDR /16, et /24.
- Quelle est la plus grande valeur de CIDR pour laquelle elles sont dans le même sous-réseau?
- OUI
- OUI et NON
- 23
CC3 (Examen) - REVISION¶
Question 1¶
Attribué une addresse de réseaux à A, telle qu’il contienne le plus d’addresse possible ? Combien compte t’il d’addresse ?
- 35.136.239.0/24
Question 2¶
Donnez le plus petit (celui qui contient le moins d’adresse) masque de sous réseaux (sous la forme (X.X.X.X)) possible pour B et C
- B: 35.136.238.21/30
- C: 35.136.231.80/29
Question 3¶
Donnez une adresse IP disponible aux interfaces de R2 dans le sous réseaux B et P21 dans le sous réseaux B.
- R2 a: 35.136.238.85
- P21 c: 35.136.231.82
Question 4¶
Question 4 Donnez la table de routage de R2? On notera les sous réseaux en notation CIDR (X.X.X.X/X) ou "default" pour la route par default. On notera chaque routeur par son IP ou "local" si le sous-reseau est localement accessible.
| SOUS RÉSEAU | NEXT HOP | INTERFACE | COST |
|---|---|---|---|
| default | 17.180.221.33 | C | 15 |
| 35.135.231.80/29 | local | B | 9 |
| 35.136.238.84/30 | local | A | 6 |
| 35.136.239.0/24 | 35.136.238.85 | A | 15 |
Question 5¶
L’ordinateur P22 veut charger la page web http://www.u-pec.fr/index.html d’adresse IP 194.214.24.150 en HTTP. Dessinez la quatrième trame échangée entre les deux ordinateurs,en supposant que le client HTTP envoie la requête la plus simple possible. On suppose que le client choisit comme premier numéro de séquence (4109650) et le serveur choisit (2334876). Vous pouvez ignorer les sommes de contrôle, les tailles de fenêtre et la durée de vie.
- Ethernet:
| MAC SOURCE | MAC DESTINATION | TYPE | -- | CRC |
|---|---|---|---|---|
| 68:25:b4:de:4b:f1 | 99:b2:1f:c7:39:0f | 0x0800 | DATA | CRC |
- IPv4 (DATA):
| Version | IHL | DSCP | ECN | TAILLE TOTALE DU PAQUET | IDENTIFICATION DE FRAGMENT | FLAGS | FRAGMENT OFFSET | DURÉE DE VIE | PROTOCOLE | SOMME DE CONTROLE DE L'EN-TETE | ADRESSE IPV4 SOURCE | ADRESSE IPV4 DEST | DATA2 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 4 | 4 | 0x0 | 0x0 | 20 + 20 + 48 = 88 | 0 | 0b010 | 0 | 255 | 6 | CRC | 35.136.231.86 | 194.214.24.150 | DATA2 |
- TCP (DATA2)
| PORT SOURCE | PORT DESTINATION | NUM SEQ | NUM ACQ | DECALAGE | 0000 | FLAGS | TAILLE FENETRE | SOMME DE CONTROLE | POINTEUR D'URGENCE | OPTION... | DATA3 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 666 | 80 | 4109651 | 2334877 | 4 | -- | ACK | -- | -- | -- | -- | DATA3 |
- HTTP (DATA3)
| HEADER + DATA |
|---|
| "GET /index.html HTML/1.1\r\nHost: www.u.pec.fr\r\n\r\n" |
4. Programmation Réseau¶
On souhaite implémenter un serveur de temps (Network Time Protocol NTP). Ce protocole est basé sur UDP et permet de synchroniser les horloges des ordinateurs sur un réseau. Dans cet exercice, tous les temps sont stockés sous forme de nombres à virgule flottante de 64 bits (double). Le protocole utilisé reçoit un message contenant l’heure d’envoi par le client Tec. Le serveur retient l’heure de réception Trs du message et répond par un message contenant les heures Tec, Trs et Tss, l’heure d’envoi du message par le serveur.
Question 6¶
Implémentez un tel serveur en Python sur le port 123 sur la machine P22. Vous pourrez utiliser la liste de fonctions à la fin de ce sujet. Notamment, pour écrire un nombre en virgule flottante dans un bytearray, vous pouvez utiliser la fonction struct .pack(format, v1, v2, ...) qui a la même syntaxe que printf en utilisant ’d’ pour double. La fonction struct .unpack(format, bytearray) fait l’opération inverse.
import socket
from time import time
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
s.bind(("127.0.0.1", 12300))
data, addr = s.recvfrom(64)
t_rs = time()
t_ec = data.decode()
t_ss = time()
s.sendto(str(f"{t_rs} {t_ec} {t_ss}").encode(), addr)