Une adresse IPv4 est composée de 4 octets. On la note
sous la forme a.b.c.d
où a
,
b
, c
et d
sont
les écritures décimales des octets. En Python on
représente une adresse IP par une liste (ou un tuple) de
longueur 4.
On effectue un changement de base, avec comme base le nombre 256 (le plus petit entier non représentable par un octet) :
def int2ip(n): assert 0<=n<2**32 t = [] for k in range(4): t = [n%256] + t n //= 256 return t
def ip2int(L): assert len(L)==4 assert all (0<=x<256 for x in L) n = 0 for k in range(4): n *= 256 n += L[k] return n
Taille du masque :
16
adresse IP | . | . | . | 0.0.0.0 |
||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
masque | . | . | . | 255.255.0.0 |
||||||||||||||||||||||||||||||||
adresse réseau | . | . | . | 0.0.0.0/16 |
On sépare les 32 bits en deux parties :
Les n premiers bits de l'adresse IP représentent la partie « réseau ». Les machines ayant les mêmes n premiers bits sont connectées à un même réseau local. Les n premiers bits constituent l'adresse du réseau local.
Les 32-n derniers bits représentent l'adresse machine.
On note a.b.c.d/n
l'adresse IP d'une
machine pour indiquer la longueur de la partie réseau.
La partie machine ne peut pas être constituée que
de zéros (en binaire) ni que de 1 (en binaire). Par
exemple une adresse IP de la forme a.b.c.0/24
n'est pas l'adresse d'une machine mais celle du réseau
local. Et l'adresse a.b.c.255/24
dont
les 8 derniers chiffres binaires sont à 1 est
l'adresse de diffusion du réseau local.
Un réseau de type a.b.c.d/n
peut
inclure 232-n adresses IPv4. Mais deux
d'entre elles étant réservées comme adresse réseau et
adresse de diffusion, un réseau a.b.c.d/n
permet le branchement de 232-n-2 machines.
Voici quelques exemples
n | 31 | 30 | 29 | 28 | 26 | 24 |
---|---|---|---|---|---|---|
nombre de machines | 0 | 2 | 6 | 14 | 62 | 254 |
Les machines des utilisateurs sont reliées par des switchs à un routeur appelé passerelle car il est entre le réseau local et les routeurs constituant Internet.
Alice 👩 voudrait envoyer à Bob 👨 un fichier
[ABC]
trop volumineux pour être envoyé d'une
traite. Alors elle le découpe en trois paquets
[A]
, [B]
et [C]
.
Ces paquets (IP) sont à leur tour englobés dans
trois paquets TCP
notés (A,0)
, (B,1)
et (C,0)
.
Le deuxième élément du tuple est de rang n
est égal à n%2
: c'est la parité du
rang. Donc dans l'ordre des paquets cet entier prend
alternativement les valeurs 0, 1, 0, 1, 0, 1 etc d'où
le nom de protocole du bit alterné.
Voici une chronologie possible pour l'envoi du fichier de Alice à Bob :
(A,0)
à Bob.(A,0)
.(A,0)
.(A,0)
encore.OK_0
qui signifie qu'il a reçu un paquet pair.(A,0)
à Bob.OK_0
.OK_0
de Bob, en déduit que Bob a reçu le premier paquet, et envoie donc (B,1)
à Bob.OK_0
de Bob donc n'envoie rien.(B,1)
et envoie le message OK_1
disant qu'il a reçu un paquet impair.(B,1)
puisqu'elle ne sait pas que Bob a reçu ce paquet.OK_1
.OK_1
et en déduit que Bob a reçu le second paquet. Elle envoie alors le dernier paquet (C,0)
.OK_1
.(C,0)
.(C,0)
et envoie le message OK_0
piusqu'il vient de recevoir un paquet pair. Comme le paquet est le dernier du fichier, Bob ferme ensuite la connexion de son côté.(C,0)
jusqu'à ce qu'elle reçoive le message OK_0
.OK_0
, elle sait que le fichier est arrivé entier et ferme à son tour la connexion.