# L'adressage IP

## 1 - Première approche de l'adressage IP

Commençons par une approche globale et simplifiée pour bien comprendre comment fonctionne l'adressage IP.

### 1.1 - Adressage logique

Nous allons faire une analogie avec le courrier. Imaginons que nous souhaitons envoyer du courrier à des personnes précises. On pourrait attribuer à chaque personne un identifiant à la naissance (son nom par exemple), qui nous permettrait de l'identifier à coup sûr, et mettre cet identifiant sur l'enveloppe. Cet identifiant unique, en informatique, correspond à l'adresse MAC. Il permet d'identifier de manière unique une machine physique. 

Mais ce système à un inconvénient : c'est difficile de savoir où trouver la personne avec son nom seul pour lui donner le courrier.

A la place de ce système, nous avons au contraire un **adressage logique** : logique car en réfléchissant, on peut trouver facilement la boîte aux lettres des personnes. Tout d'abord l'adresse contient un pays, une ville et un code postal, puis une rue, un numéro de rue. Grâce à chacune de ces informations on est capables de restreindre la zone dans laquelle le courrier devra être envoyé. 

C'est comme ça qu'on va fonctionner pour les réseaux informatiques. On va chercher à regrouper les ordinateurs en réseaux logiques, où 
- une partie de l'adresse servira à identifier et localiser le réseau logique auquel appartient l'ordinateur
- une partie spécifique permettra d'identifier de manière unique la machine au sein de ce réseau

Pour autant, si on reprend l'analogie, il y a des grandes villes, dans lesquelles on refait un découpage, des plus petites où ce n'est pas nécessaire, et parfois des maisons situées face à face dans la même rue n'appartiennent pas à la même ville. Alors on ne peut pas toujours se fier à la proximité géographique pour déterminer l'appartenance d'une adresse à une ville ou un code postal. 

C'est la même chose pour les réseaux informatiques : on va regrouper les ordinateurs dans des réseaux logiques pour répondre à des problématiques organisationnelles, et parfois deux ordinateurs côte à côte physiquement ne seront pas dans le même réseau.

```admonish success title='À retenir'
Un **réseau logique** est formé par des **hôtes** (poste informatique, téléphone, objet connecté...) qui appartiennent à un même regroupement que l'on veut pouvoir adresser de manière unique, indépendemment de leur localisation physique. Il faut pour cela définir : 
- une adresse logique pour le réseau
- et pour chaque hôte dans ce réseau, une adresse logique unique dans le réseau.

Dans les réseaux informatiques, nous utilisons le protocole IP (Internet Protocol) pour définir des adresses logiques.
```

### 1.2 - Comment est formée une adresse IP ?

Nous allons parler ici d'adresse IPv4 (IP version 4), le protocole encore majoritairement utilisé dans le monde. Il existe également le protocole IPv6 (IP version 6) qui devrait remplacer IPv4, mais pour de nombreuses raisons techniques et politiques, cette transition tarde depuis des années.

Une adresse IPv4 est composée de 4 valeurs décimales séparées par un point. Chaque valeur est comprise entre 0 et 255 (et peut donc être codée sur un octet).

- La partie gauche de l'adresse identifie le réseau 
- La partie droite de l'adresse identifie l'hôte 

Pour savoir où s'arrêtent les parties gauche et droite, et donc à quelle partie correspond à l'adresse de réseau, et à quelle partie correspond à l'adresse de l'hôte, nous utiliserons le **masque**

Nous verrons plus loin le fonctionnement détaillé de l'adresse IP et du masque.

### 1.3 - Routeur et interconnexion de réseaux logiques

Les réseaux logiques ont pour objectif de retrouver plus facilement l'emplacement d'un hôte sur le réseau. Mais comment ça se passe en réalité pour faciliter cette recherche ?

Si on reprend notre analogie postale, le courrier est envoyé à des relais postaux, qui se chargent ensuite de trier le courrier et de le dispatcher en fonction de sa destination au bon relais postal, puis celui-ci se charge d'apporter le courrier au destinataire.

Dans un réseau IP, c'est le **routeur** qui aura ce rôle d'acheminer les messages. 

Dans un même réseau logique, chaque hôte peut directement communiquer avec les autres hôtes du réseau. Mais pour communiquer avec un autre réseau ils doivent passer par un routeur. C'est à la fois la porte d'entrée et de sortie du réseau logique.

Un routeur sera parfois appelé "passerelle" ou en anglais "gateway".

En pratique, un routeur est une machine qui possède plusieurs cartes réseau, et sera donc connectée à plusieurs réseaux en même temps. Lorsqu'il reçoit un message, le routeur analyse l'adresse du destinataire, et en fonction de la partie réseau de cette adresse, il transmettra :
- soit directement au bon hôte s'il est connecté au réseau via une de ses cartes
- soit à un autre routeur s'il ne connaît pas le réseau qui, lui, fera la même chose.

Les algorithmes impliqués dans le routage seront l'objet d'un autre cours. Pour le moment, contentons nous de savoir comment les réseaux logiques peuvent être interconnectés.

## 2 - L'adresse MAC

```admonish success title="À retenir"
L'**adresse MAC** (*Media Access Control*) ou **adresse physique** est un identifiant physique **unique** stocké directement dans la carte réseau. Toutes les cartes réseau ont une adresse MAC.

Elle est constituée de 48 bits (6 octets) et représentée sous forme hexadécimale en séparant chaque octet par `:`
```

**Exemple :** `5E:FF:56:A2:AF:15`

## 3 - L'adresse IP

### 3.1 - Structure d'une adresse IP

```admonish success title="À retenir"
Une adresse IPv4 (Internet Protocol v4) est une suite de 32 bits (= 4 octets) exprimées sous la forme de 4 nombres décimaux (représentant les 4 octets) séparés par un point.

L'adresse IP d'un hôte permet de définir précisément 
- le réseau sur lequel est connecté l'hôte. Cette partie de l'adresse est l'identifiant réseau (ou "Net ID" en anglais)
- l'adresse de l'hôte sur le réseau. Cette partie de l'adresse est l'identifiant machine hôte (ou "Host ID" en anglais)
```

![Adresse IP](./adresse-ip.svg)

### 3.2 - Le masque

```admonish success title="À retenir"
Le masque est une suite de 32 bits constituée d'une suite de 1 et d'une suite de 0.
- La suite de 1 indique quelle partie de l'adresse correspond à l'identifiant du réseau
- La suite de 0 indique quelle partie de l'adresse correspond à l'identifiant de la machine hôte

On exprime également le masque sous la forme décimale séparée par des points.
```

![Adresse IP et masque](./masque.svg)

Le masque étant constitué d'une suite contigüe de 1 suivie d'une suite de 0, l'information utile est le nombre de 1. Une autre façon d'écrire le masque est la notation dite CIDR (Classless Inter-Domain Routing). C'est la plus utilisée actuellement.

```admonish success title="À retenir"
La notation CIDR consiste à faire suivre l'adresse IP par le nombre de bits à 1 dans le masque, séparés par `/`
```

**Exemple :** 192.168.1.58 avec un masque à 255.255.255.0 sera noté 192.168.1.58 **/24** car 
- 255 s'écrit avec 8 bits à 1
- Les trois premiers octets du masque sont à 255 soit 3x8 = 24 bits à 1

```admonish note title="Remarque"
Le masque n'est pas forcément un multiple de 8 : n'importe quel nombre de bits entre 1 et 32 peut être un masque valide, selon la taille du réseau.
```

### 3.3 - L'adresse de réseau

```admonish success title="À retenir"
Un réseau est un groupe d'hôtes dont la partie réseau de l'adresse est identique. Un ET logique entre l'adresse IP et son masque permettent de déterminer l'adresse de réseau.
```

Pour rappel, quand on applique le ET logique, seul 1 ET 1 = 1, tout le reste vaut zéro.

![Calcul de l'adresse de réseau](./calcul-adresse-reseau.svg)

Si on fait l'opération ET logique, on voit que les bits de la partie hôte sont tous à zéro ( = ils sont masqués) alors que les bits de la partie réseau gardent leur valeur.

### 3.4 - L'adresse de diffusion

```admonish success title="À retenir"
**L'adresse de diffusion** (ou *broadcast* en anglais) permet d'envoyer un message à l'ensemble des hôtes connectés au réseau.

L'adresse de diffusion est la dernière adresse du réseau. Elle est constituée en mettant tous les bits de la **partie hôte** à 1.
```

![Adresse de diffusion](./diffusion.svg)

### 3.5 - Plage adressable et nombre d'hôtes possibles

```admonish success title="À retenir"
La plage adressable est l'ensemble des adresses que peut prendre un hôte sur le réseau.
- La **première adresse** est celle qui suit immédiatement l'adresse de réseau
- La **dernière adresse** est celle qui **précède** l'adresse de diffusion
```

**Exemple :** 

- Sur le réseau 192.168.1.0/24, la partie réseau correspond aux trois premiers octets. 
- La première adresse de la plage adressable est celle qui suit l'adresse de réseau, c'est à dire 192.168.1.1 
- Et la dernière adresse est celle qui précède l'adresse de diffusion, c'est à dire 192.168.1.254


```admonish success title="À retenir"
Le nombre de bits de la partie hôte permet alors de savoir combien d'adresses sont possibles sur un réseau avec la formule : 
$$2^{\mathrm{nombre\,de\,bits}} - 2$$

On utilise toute la plage des valeurs possibles sur ce nombre de bits, mais deux adresses sont réservées et ne sont donc pas adressables :
- La première adresse représente l'adresse de réseau (celle où tous les bits hôte sont à 0)
- La dernière adresse est l'adresse de diffusion (celle où tous les bits hôte sont à 1)
```

**Exemple :**

Dans le réseau 192.168.1.0/24, il y a 32-24 = 8 bits dédiés à la partie hôte, soit 256 valeurs possibles. Comme on enlève l'adresse de réseau et l'adresse de diffusion, il reste 254 valeurs, soit une plage disponible de 254 adresses sur ce réseau. 


## 4 - Les catégories d'adresses

### 4.1 - Adresses publiques

Les adresses IP sont censées être uniques sur chaque hôte. Dans un réseau privé local, c'est plutôt simple, il y a généralement peu de machines, et le réseau est isolé du reste du monde. Sur internet, il y a des milliards d'hôtes, ça devient donc beaucoup plus difficile. Il a fallu confier la gestion des adresses à un organisme chargé d'organiser et garantir l'unicité des adresses IP.

Cet organisme s'appelle l'IANA (Internet Assigned Numbers Authority) et dépend de l'ICANN (Internet Cororation for Assigned Names and Numbers), l'autorité de régulation d'internet. 

L'IANA attribue des plages entières d'adresses IP aux RIR (Registres Internet Régionaux), des organismes chargés d'allouer les adresses IP au niveau continental (environ une instance par continent) et de garantir que le routage se fasse correctement. 

Chacun de ces RIR attribue ainsi des plages à des RIL (Registres Internet Locaux), comme par exemple les fournisseurs d'accès internet (FAI), qui eux-mêmes les donnent à leurs clients. C'est ainsi que les entreprise ou les particuliers se voient attribuer une adresse IP pour accéder à internet, mais également pour pouvoir exposer des services en ligne. 

Toutes ces adresses, distribuées par L'IANA, sont des adresses dites publiques.

### 4.2 - Adresses privées

Les adresses privées sont celles utilisées dans les réseaux privés comme par exemple les réseaux internes des entreprises ou chez des particuliers. Ce sont des plages d'adresses bien définies qui ne seront jamais attribuées par l'IANA pour éviter tout risque d'interférence avec des adresses existant sur internet. 

Vous pouvez les utiliser sans risque pour tout réseau interne (entreprise ou chez vous). Vous pouvez également définir des masques plus restrictifs que ceux proposés par défaut.

### 4.3 - Adresses spéciales

#### 4.3.1 - L'adresse de réseau

Comme dit plus haut, l'adresse de réseau est l'adresse dont la totalité des bits de la partie hôte sont à 0. Cette adresse désigne le réseau en lui-même, pas un hôte en particulier.

#### 4.3.2 - La boucle locale
Les adresses 127.0.0.0/8 sont utilisées pour la boucle locale (c'est à dire atteindre la machine elle-même). On utilise plus généralement l'adresse de bouclage (loopback) 127.0.0.1

- Elle désigne la machine locale
- Elle existe toujours
- Elle simule un accès via le réseau même sans réseau
- On peut l'utiliser pour des communications en local ou des tests

#### 4.3.3 - L'adresse de diffusion (broadcast)

Nous en avons parlé plus haut : c'est la dernière adresse disponible du réseau, celle où tous les bits de la partie hôte sont à 1. Si on veut envoyer un message diffusé à toutes les adresses d'un réseau précis (qui peut être différent du réseau de l'hôte émetteur), c'est cette adresse qu'il faut utiliser.

#### 4.3.4 - L'adresse de diffusion générale

255.255.255.255 : pour diffuser sur le réseau actuel de l'hôte, sans avoir à connaître l'adresse du réseau.

#### 4.3.5 - L'adresse d'initialisation

0.0.0.0 : C'est l'adresse utilisée par un hôte lors de la phase d'initialisation (au moment où une machine cherche à se connecter à un réseau IP). Elle ne peut donc pas être affectée à une machine particulière.

### 4.4 - Classes d'adresses

Historiquement, les adresses IP étaient regroupées en cinq classes. C'était uns sytème rigide, et le masque était implicitement déduit de l'adresse IP (certaines plages d'adresse appartenaient à une classe donnée, et cela suffisait à déterminer le masque). Ce système est devenu obsolète depuis le milieu des années 1990. Nous le mentionnons ici pour que vous en ayez déjà entendu parler.

Les classes A, B ou C définissaient des réseaux d'une certaine taille, et une entreprise se voyait attribuer un bloc complet selon sa taille. 

|Classe|Plage d'adresses|Masque|Nombre de réseaux|Nombre d'hôtes|
|------|----------------|------|-----------------|--------------|
|A|1-127.\*.\*.\*|255.0.0.0|128|16 777 214|
|B|128-191.\*.\*.\*|255.255.0.0|16384|65 534|
|C|192-223.\*.\*.\*|255.255.255.0|2 097 150|254|

Les classes D et E étaient particulières. D servait aux machines diffusant les informations de routage, et E était une plage d'adresses réservées pour un éventuel usage futur.

Des entreprises se voyant attribuer des plages de classe A avaient 16 millions d'adresses IP pour elles seules. Imaginez le gaspillage d'adresses que ça représentait. 

Aujourd'hui ce système n'existe plus, et n'importe quelle adresse IP peut avoir n'importe quel masque. C'est le système sans classe ("classless" comme le C dans CIDR)

Nous manquons déjà cruellement d'adresses IPv4 alors imaginez si on avait gardé ce système.

## 5 - Le plan d'adressage

### 5.1 - Le plan d'adressage

Les organisations ont souvent besoin de segmenter leur réseau interne selon leur mode de fonctionnement. Pour cela, elles vont mettre en place un plan d'adressage précis, qui permettra de distribuer des adresses aux machines hôtes selon leur rôle dans l'organisation, mais également permettre ou empêcher la communication entre certaines machines. L'organisation pourra donc découper son réseaux en sous-réseaux de tailles (et de masques) différents.

Le plan d'adressage devra répondre à certaines contraintes pour être viable, et il faudra ensuite attribuer les adresses IP à chaque machine du réseau selon ce plan.
- chaque machine devra avoir une adresse IP unique dans le réseau. C'est le principe même de l'adressage logique.
- les sous-réseaux devront pouvoir contenir toutes les machines qu'on souhaite y affecter. Il faut donc prévoir des sous-réseaux avec des plages d'adressage suffisamment grandes.

**Exemple :** Une entreprise souhaite créer un réseau pour son service comptabilité. Le service compte 4 postes de travail et un routeur. L'administration réseau souhaite utiliser un sous-réseau de la taille la plus petite possible, à l'intérieur de la plage d'adresses 10.0.0.0/8.

- Il faut donc un sous-réseau comportant une plage d'adresses assez grande pour contenir 5 hôtes (4 postes et le routeur).
- Un réseau comportant 3 bits devrait suffire : 3 bits = 2³ = 8 soit 8 - 2 = 6 hôtes adressables
- On pourra donc utiliser un masque de 29 bits. Nous pouvons fixer l'adresse de sous-réseau à 10.0.0.0/29 et donc avoir un réseau pour notre service comptabilité qui couvre la plage de 10.0.0.1 à 10.0.0.6


### 5.2 - Obtenir une adresse IP

Toutes les machines qui veulent être rattachées au réseau IP doivent donc avoir une adresse IP unique. Pour cela, il y a **deux stratégies** possibles :
- L'adresse IP est configurée de façon **statique** sur la machine. 
    
    L'administrateurice initialise alors la configuration des machines et leur attribue une adresse IP individuellement. Cette stratégie fonctionne mais nécessite beaucoup de rigueur car si l'administrateurice se trompe, il peut en résulter des conflits entre machines. Par ailleurs les changements de plan d'adressage impliquent une intervention sur chaque machine concernée, ce qui peut être fastidieux et chronophage.
- L'adresse IP est attribuée à la demande par un serveur dédié à cet usage. On utilisera pour cela le protocole **DHCP** (*Dynamic Host Configuration Protocol*) et le serveur du même nom.

```admonish success title='À retenir'
Le serveur DHCP attribue les configurations IP aux machines qui en font la demande. Il détient l'ensemble des adresses utilisables qu'il alloue lorsqu'une machine le demande. Les machines restituent les adresses lorsqu'elles quittent le réseau et sont donc réutilisables. Il y a deux mécanismes :

- L'**allocation manuelle** : l'administrateurice configure le serveur pour qu'il attribue de manière **statique** une adresse IP spécifique à une machine spécifique. On se servira généralement de l'adresse MAC pour identifier la machine de façon unique.
- L'**allocation automatique** : l'administrateurice définit une plage d'adresses que le serveur DHCP peut allouer à la demande et **dynamiquement** à toute nouvelle machine. Cette adresse est ensuite conservée par la machine jusqu'à ce qu'elle la libère.
```
