Réseaux

I/ IPv4

1) Adresse IP

Une adresse IPv4 est composée de 4 octets. On la note sous la forme a.b.c.da, 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.

2) Conversion entier→tuple

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

3) Conversion tuple→entier

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

II/ Masque

1) Masque de sous-réseau

Taille du masque : 16

adresse IP . . . 0.0.0.0
masque . . . 255.255.0.0
adresse réseau . . . 0.0.0.0/16

2) Adresses réseaux et machines

On sépare les 32 bits en deux parties :

a) Adresse réseau

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.

b) Adresse machine

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.

c) Adresses invalides

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.

3) Nombre de machines sur un réseau

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 

n313029282624
nombre de machines0261462254

4) Architecture du réseau

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.

III/ TCP

1) Paquets

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 :

  1. Alice envoie le paquet (A,0) à Bob.
  2. N'ayant pas de nouvelles de Bob, Alice envoie à nouveau (A,0).
  3. Bob reçoit le paquet (A,0).
  4. Alice ne le sait pas donc elle envoie (A,0) encore.
  5. Bob envoie à Alice le message OK_0 qui signifie qu'il a reçu un paquet pair.
  6. Alice, toujours sans nouvelle, envoie (A,0) à Bob.
  7. Bob, lui aussi sans nouvelle, renvoie OK_0.
  8. Alice reçoit le message OK_0 de Bob, en déduit que Bob a reçu le premier paquet, et envoie donc (B,1) à Bob.
  9. Alice reçoit à nouveau le message OK_0 de Bob donc n'envoie rien.
  10. Bob reçoit le paquet (B,1) et envoie le message OK_1 disant qu'il a reçu un paquet impair.
  11. Alice envoie le paquet (B,1) puisqu'elle ne sait pas que Bob a reçu ce paquet.
  12. Bob qui n'a pas de nouvelle envoie à nouveau OK_1.
  13. Alice reçoit le message OK_1 et en déduit que Bob a reçu le second paquet. Elle envoie alors le dernier paquet (C,0).
  14. Bob, sans nouvelle, envoie le message OK_1.
  15. Alice, sans nouvelle, envoie à nouveau le paquet (C,0).
  16. Bob reçoit le paquet (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é.
  17. Alice continue à envoyer (C,0) jusqu'à ce qu'elle reçoive le message OK_0.
  18. Quand Alice reçoit OK_0, elle sait que le fichier est arrivé entier et ferme à son tour la connexion.