Exercices de la semaine 3
Traduction d'adresses IPv4 en binaire
Traduisez les adresses suivantes de la notation décimale à la notation binaire. À partir du masque réseau fourni, soulignez les bits qui correspondent au sous réseau (subnet).
10.25.127.5/8
192.168.31.2/24
172.217.13.142/28
2001:4860:4802:36::a/64
Par pitié, utilisez un outil de conversion en ligne pour l'adresse IPv6! Ou encore mieux : programmez votre
propre traducteur d'adresse (ex: module ipaddress
dans python)
Réponse
10.25.127.5/8
00001010 00011001 01111111 00000101
-------- -------- --------
Ici, on convertit chaque section de 8 bits de l'adresse en binaire. Par exemple, le 10
est converti en
00001010
car . Ensuite, le /8
nous indique que la partie « réseau » de l'adresse est
constituée de 8 premiers bits. Les 24 bits suivants appartiennent donc au sous-réseau pour assigner sur les interfaces réseau des postes et autres appareils.
192.168.31.2/24
11000000 10101000 00011111 00000010
--------
Similaire au précédent, mais avec seulement 8 bits restants pour le sous-réseau.
172.217.13.142/28
10101100 11011001 00001101 10001110
----
Similaire au précédent, mais avec seulement 4 bits restants pour le sous-réseau. Il ne reste donc que
adresses pour des hôtes sur ce réseau! Le provient des adresses 0
et 143
qui sont réservées au réseau courant et à l'adresse broadcast.
2001:4860:4802:36::a
0010000000000001 0100100001100000 0100100000000010 0000000000110110 0000000000000000 0000000000000000 0000000000000000 0000000000001010
---------------- ---------------- ---------------- ----------------
/64
! On a donc 64 bits pour le réseau et 64 bits pour le sous-réseau. Moitié-moitié, tout le monde est heureux!
Payons hommage à ceux qui ont traduit l'adresse à la main...
Adresse broadcast
Comment est formée une adresse de type broadcast (diffusion), et à quoi sert-elle?
Réponse
L'adresse de broaddcast de sous-réseau IPv4 est formée en définissant la partie réseau/sous-réseau de l'adresse et en mettant tous les bits de la partie hôte à 1.
Cette adresse est utilisée pour envoyer des paquets à tous les hôtes d'un sous-réseau donné.
Adresse broadcast d'un réseau
Vous avez l’adresse IP 192.168.42.7/24
. Quelle est l’adresse IPv4 de type broadcast sur votre réseau?
Réponse
L’adresse broadcast de votre réseau est alors 192.168.42.255
.
Pour obtenir l’adresse IP broadcast sur votre réseau, simplement remplacer les bits utilisés pour
identifier un hôte par des 1
s. Dans le cas de l’adresse 192.168.42.7/24
, les 8 derniers bits de
l’adresse servent à représenter l’hôte. Sous forme binaire :
11000000 10101000 00101010 00000111
--------
Les 8 derniers bits sont à remplacer par des 1
s, ce qui permet d’obtenir :
11000000 10101000 00101010 11111111
--------
Soit 192.168.42.255
en notation décimale.
Fonction pour obtenir une adresse de broadcast
Vous développez des fonctionnalités de routage et vous aurez besoin d’une fonction permettant
d’obtenir l’adresse broadcast d’un sous-réseau à l’aide d’une adresse sous la forme a.b.c.d/x
.
Le répertoire src
contient du code permettant de traiter une adresse IPv4 fournie par un utilisateur pour
obtenir l’adresse broadcast du sous-réseau. Vous devez compléter la fonction get_broadcast_addr
en utilisant les autres fonctions fournies dans le fichier format.c
.
Le code source pour ce travail peut être obtenu à l'adresse suivante: https://github.com/TrickyTroll/gif3001-broadcast-addr
En pratique, s’il vous arrive de programmer des fonctionnalités de la pile Internet, il est très peu probable que vous ayez à programmer ce genre de fonctions. Cependant, cet exercice vous permettra de vous familiariser avec les opérations binaires communément implémentées dans les solutions de communication numérique.
Réponse
Il suffit de convertir l’adresse en entier non signé, puis appliquer un masque de la bonne longueur pour convertir tous les bits servant à identifier l’hôte à 1.
Voici un exemple de solution.
void get_broadcast_addr(char addr[], char *broadcast_addr) {
unsigned int subnet = get_subnet_mask_len(addr);
unsigned int bits = 32-subnet;
// Left shift the complement of 0 the size of the mask,
// then apply the complement again to get a mask of the
// form 000000000 00000000 00000000 11111111 for a /24
// address.
unsigned int mask = ~(~(unsigned int)0 << bits);
// Convert address to int
unsigned int addr_as_int = string_to_integer(addr);
// Apply mask
unsigned int broadcast_addr_as_int = addr_as_int | mask;
// Convert back to string
integer_to_string(broadcast_addr_as_int, broadcast_addr);
}
Adresses IPv4 assignables
On vous assigne le préfixe réseau 10.0.0.0/16
. Quelle est la plage d’adresses assignables (c.-à-d. quelle est
la première et la dernière adresse assignable de la plage).
Réponse
Vous pouvez assigner de l’adresse 10.0.0.1
à l’adresse 10.0.255.254
. L’adresse 10.0.0.0
est
réservée à l’adresse réseau (network ID), alors que l’adresse 10.0.255.255
est l’adresse broadcast.
Première adresse d'un réseau IPv6
On vous assigne le préfixe 2001:db8:d06:f00d::/64
. Devriez-vous assigner l'adresse 2001:db8:d0:f00d::
à une interface sur votre réseau?
Réponse
L'adresse définie par [subnet_addr]::
(lorsque tous les bits de la partie subnet sont à 0) est une
adresse IPv6 de type anycast représentant tous les routeurs sur le réseau. Voir la
section sur les adresse anycast du
RFC4291.
En théorie, les routeurs implémentent tous cette adresse par défaut. Un hôte sur le réseau devrait donc pouvoir utiliser l'adresse correspondante à son préfixe sous-réseau pour communiquer avec un routeur.
En pratique, peu de routeurs écoutent vraiment à cette adresse par défaut.
Cependant, certains appareils pourraient tout de même reposer sur le RFC4291. Associer cette adresse à un hôte sur le réseau est donc une mauvaise pratique.
IPv6 en binaire
Quelle est la représentation binaire de l’adresse 2001:db8::19::1
?
Réponse
Difficile à dire! 😉
Impossible de savoir combien de 0
vont avant et après le 19
. C’est la raison pour laquelle une adresse
IPv6 ne peut utiliser le raccourci ::
plus d’une fois!
Plus courte adresse possible (question ludique)
Quelle-est l’adresse IP nécessitant le moins de caractères à représenter? Est-ce une adresse IPv4 ou IPv6? Est-ce une adresse valide? Quelle-est son utilité?
Réponse
L’adresse ::/128
est l’adresse IP nécessitant le moins de caractères à écrire. C’est une adresse IPv6
faisant appel au raccourci ::
. L’adresse est valide comme adresse source seulement. Elle est utilisée
comme adresse placeholder lorsque l’hôte n’a pas encore d’adresse et désire communiquer sur le
réseau (pour DHCP, par exemple). Cependant, l’adresse n’est pas beaucoup utilisée en pratique puisque
l’adresse link-local est préconfigurée sur toutes les interfaces supportant IPv6.
Adresses valides comme adresse source
Les adresses suivantes sont-elles valides comme adresse source? Le masque sous-réseau est-il respecté?
2001:db8::19::1/64
192.512.31.8/32
132.203.189.82
192.168.43.127/25
ff02::1
fe80::f816:3eff:fe24:989e/64
224.0.0.1
Réponse
- Non, le raccourci
::
ne peut être utilisé plus d’une fois. - Non,
512
ne peut être représenté sur 8 bits. - Oui, c’est une adresse IP de l’Université Laval!
- Non, l’adresse utilisée est une adresse de type broadcast du réseau
192.168.43.0/25
- Non, l'adresse
ff02::1
est une adresse IPv6 multicast, et est utilisée comme adresse de destination seulement. - Oui,
fe80::f816:3eff:fe24:989e/64
est une adresse IPv6 link-local unicast et est valide comme adresse source et destination. - Non,
224.0.0.1
est une adresse IPv4 multicast, et est utilisée comme adresse de destination seulement.
Adresses pouvant être assignées à une interface réseau
Les adresses suivantes pourraient-elles être assignées à une interface réseau physique (Ethernet, Wi-Fi, etc.)?
::1/128
127.0.0.1/8
192.168.31.1/24
169.254.32.3/16
255.255.255.255/32
10.1.1.7/24
::/128
Réponse
- Non, c’est l’adresse loopback. L’adresse loopback est une adresse virtuelle qui route tous les paquets vers l’hôte lui-même. Vous avez probablement déjà remarqué que c’est l’adresse utilisée lorsque vous démarrez un serveur web localement sur votre ordinateur!
- Encore une fois une adresse loopback, mais IPv4 cette fois-ci.
- Oui, c’est une adresse parfaitement valide pouvant être assignée à un hôte. C'est une adresse reservée pour des réseaux privés (section 2.5)
- Oui, mais cette adresse n’est valide que sur le réseau local. Ces adresses de type link-local IPv4 peuvent être assignées automatiquement par un hôte. En contrepartie, elles n’ont aucune garantie d'être uniques en dehors du réseau local. Ce manque de garantie est dû au fait que l’hôte utilise ARP, un protocole de la couche liaison, pour valider l’unicité de l’adresse.
- Non. Adresse de broadcast limitée au réseau local. Valide comme adresse de destination seulement.
- Oui, c’est une adresse valide. C'est une adresse reservée pour des réseaux privés (section 2.5)
- Non. Peut être utilisée temporairement comme adresse source seulement lorsqu’aucune adresse IP n’est configurée sur l’hôte.
Votre réseau IoT
À la maison, vous avez le préfixe 10.1.1.0/24
. Vous venez d’aménager dans votre nouvel
appartement et vous vous êtes acheté des appareils connectés du genre internet of things. Maintenant
que votre salon est illuminé de 1001 couleurs et que votre toaster est programmable, vous apprenez
que certains de ces appareils implémentent de piètres mesures de sécurité. Inquiet.e, vous désirez les
isoler sur leur propre réseau.
Si vous prévoyez éventuellement avoir une quarantaine d’appareils connectés, réalisez une topologie réseau à partir de votre préfixe actuel. Configurez ensuite votre topologie sur un routeur dans GNS3, puis connectez deux appareils au routeur (un appareil par sous-interface). Les appareils devraient pouvoir communiquer entre eux.
Cet exercice nécessite des notions de configuration réseau qui n'ont pas été abordées en classe. C'est voulu! N'hésitez pas à collaborer et à poser des questions sur Teams.
Réponse
Il existe plusieurs manières de diviser la plage d’adresse fournie. En effet, on ne vous demande de ne supporter qu’une quarantaine d’adresses pour un des sous-réseaux, alors qu’il n’y a aucune restriction pour l’autre.
La plage fournie supporte 254 appareils (adresse 10.1.1.1/24
à 10.1.1.254/24
). En divisant la
plage en deux parties, soit 10.1.1.0/25
et 10.1.1.128/25
, vous aurez deux plages supportant
chacune 126 adresses, ce qui est amplement suffisant pour vos besoins.
La configuration GNS3 est jugée fonctionnelle si vous êtes capable de communiquer entre les deux
hôtes (avec ping
par exemple).
ping
fonctionnelle.Vrai ou faux
- Aucune paire d'appareils ne partage la même adresse IP sur Internet.
- Les adresses IPv6 sont deux fois plus longues que les adresses IPv4.
- Les adresses IPv6 sont typiquement représentées en notation décimale.
- Internet moderne groupe les adresses IP par classe (classfull adressing).
- L'adresse 10.28.16.15/8 est routable sur Internet.
- Plus d'une adresse IPv6 peut être configurée par interface réseau.
Réponse
- Faux. Les NATs et les adresses de type anycast permettent la duplicité d'adresses.
- Faux. Elles sont 4 fois plus longues.
- Faux. La notation utilisée est l'hexadécimal.
- Faux.
- Faux. C'est une adresse réservée aux réseaux privés.
- Vrai. Une interface peut posséder à la fois une adresse link-local et une autre adresse routable sur Internet, par exemple.