22 octobre 2008

====== Réseaux et protocoles ======

===== Le modèle OSI de l'ISO =====

ISO : International Standard Organization

OSI : Open System Interconnection

En pratique le modèle OSI suit ceci : 

|4 |Application (ftp, ssh, ...)|
|3 |TCP / UDP|
|2 |IP|
|1 |Matériel|

|4 |Application|
|4 |Présentation|
|4 |Session|
|3 |Transport|
|2 |Réseau|
|1 |Liaison|
|1 |Physique|

| TCP | DATE ||

| IP |TCP | DATA |||

Quand on développe une application on travaille au niveau des sockets, donc juste au dessus de la couche transport, entre Session et transport.

==== Physique : Codage ====

Le codage est une suite de bits que nous voulons transformer (passage de l'analogique au numérique).

Théorème de Fournier : Somme infinie de signaux sinusoïdaux.

==== Liaison ====

  * évitement de collision
  * code correcteur
  * adressage MAC

==== Réseau ====

  * Adressage IP => routage

<code>
         (_R2_)
        /     \
-->(_R1_)     (__)
        \     /
         (_R3_)
</code>

==== Transport ====

  * Mécanisme datagramme, d'acquittements ...

===== Adressage IPv4 =====

Sur 4 octets (32bits)

Notation "décimal pointé" A.B.C.D => unique

Découpé en 2 : 

  * adresse de réseau
  * identification locale de la machine

3 principales classes d'adresse :

  * Classe A : 1.x.y.z à 127.x.y.z
    * premier bit à 0
    * 127 réseaux, 16 777 216 machines c'est à dire 2 puissance 24 machines
  * Classe B : 128.0.x.y à 191.255.y.z
    * premier bits à 10
    * 16 384 réseaux, 65 536 machines ((191 - 128 + 1) x 256 )
  * Classe C : 192.0.0.2 à 223.255.255.z
    * premiers bits à 110
    * 2 097 152 réseaux, 256 machines
  * Classe D : réservée au multicast
    * premiers bits à 1110
  * Classe E : destiné à la recherche ... pour le futur ...

==== Adresses non routables ====

  * 10.0.0.0 --> 10.255.255.255
  * 172.16.0.0 --> 172.31.255.255
  * 192.168.0.0 --> 192.168.255.255

  * 169.254.0.0 --> 169.254.255.255 : équivalent sous windows du serveur dhcp

==== Adresse loopback ====

  * 127.0.0.1 : pour la communication interne de la machine
  * Tous les bits de la portée machine à 0 --> le réseau
  * tous les bits de la portée machine à 1 --> broadcast
  * 0.0.0.0 --> pour DHCP

==== CIDR ====

Classless Inter - Domain routing

  * Notation de classe s'est avérée incompatible avec l'évolution de l'internet
  * Cet adressage ne tient plus compte des classes globales et autorise l'utilisation de sous - réseaux au sein de chaque classe.
  * Plus de découpage arbitraire et peu flexible en classe

  * Notation : a.b.c.d/x => adresse/préfixe (nombre de bits pour l'adresse réseau, le rest est pour la machine)

Exemple : 

  * 130.79.90.72/32 => cette machine
  * 130.79.90.72/16 => 2 puissance 16 machines

On fait 2 puissance (32 - x), par exemple pour 130.79.90.72/8, ça fait 2 puissance 24 machines possibles.

On utilise le principe de plus grande correspondance dans la table de routage.

===== Le datagramme IP =====

| 0 | 4 | 8 | 15 / 16 | 31 |
|Version | IHL | Type de service | Longueur totale ||
| Identification ||| Flags | Position Fragment |
| TTL || Protocole | Checksum sur l'entête ||
| @ SRC |||||
| @DST |||||
| DATA |||||

  * Version du protocole IP
  * IHL ou longueur de l'entête sur 4 bits : longueur en nombre de ??? de 32 bits de l'entête
  * Type de service ou TOS : indique la manière dont le datagramme doit être traité
    * 3 premiers bits sur la priorité
    * 4 bits suivants (D,T,R,C) permet de signifier ce qu'on souhaite protéger
  * Les champs identificateur, flags et position sont utilisés pour la fragmentation
    * identificateur : numérotation de l'émetteur
    * Flags : 
      * 001 -> encore des fragments
      * 000 -> dernier framgent
      * 01x -> ne pas fragmenter
    * position : positionnement du fragment dans le datagrame d'origine par multiple de 8 octets commançant par 0
  * TTL : durée de vie, nombre maximal de routeurs que peut traverser le datagramme
  * Protocole : permet de connaître le protocole de plus haut niveau :
    * 1. ICMP
    * 2. IGMP
    * 6. TCP
    * 17. UDP
  * Checksum de l'entête : assume l'intégrité de l'entête
  * Le champ option est de longueur variable mais toujours couplé par des bits de bourrage pour obtenir un mutliple de 32 bits

===== ARP =====

Adress Resolution Protocol

RFC 826

Permet d'associer une adresse IP à une adresse MAC.

===== ICMP =====

Internet Message Control Protocol

  * RFC 792
  * Implémentée dans tous les équipements IP
  * Message encapsulé dans le DATA d'un datagramme IP

| 0 | | 31 |
| Type | Code | Checksum | 
| Identifiant || N° de séquence |
| Masque d'adresse |||

Type sur 8 bits : 

  * 0 : écho reply
  * 3 : destination "unreachable"
  * 4 : source quench (contrôle de flux)
  * 5 : redirects
  * 8 : echo request
  * 11 : TTL exceeded
  * 12 : parameter problem
  * 13 : timestamp request
  * 14 : timestamp reply
  * 30 : traceroute

  * Identifiant (16 bits) : identifie l'échange (en pratique souvent à 0)
  * Numéro de séquence : qualifie les réponses / requêtes


==== L'exemple de traceroute ====

Principe :

  * L'émetteur envoie un datagramme avec TTL=1
  * Le premier routeur envoie un message de type 11
  * L'émetteur affiche l'adresse du premier routeur
  * Il recommence en incrémentant le TTL jusqu'à la destination.

====== Décomposition des couches OSI ======

===== Physique =====

==== Fournier / harmoniques ====

  * D = R log2 (V)
  * Débit binaire
  * Rapidité de modulation
  * Valence

<code>
  R
<--> 
|---+    +----
|   |    |
|---+----+----
|   |    |
    +----+
 <------->
     T
</code>

D'après la formule de Nuquist, on peut aller en Rapidité Max (Rmax) jusqu'à 2 fois la largeur de bande, soit : 
<code>
Rmax : 2H
</code>

==== Shannon ====

  * D = 71 log2 ( 1 + S / B)
  * S : puissance du signal
  * B : puissance du bruit

==== Codage ====

L'idée du codage est tout le temps bouger. Pour permettre la synchronisation, exemple le codage 3 quarts / 1 quart.

À Manchester par exemple : 
<code>
  +--+    +---
     |    |
     |    |
     |    |
     |    |
     +----+

Côté 0 | Côté 1
</code>

===== Couche Liaison =====

On va s'intéresser à deux aspects :

  * Les collisions
  * Code correcteur

Réseau du plus petit au plus grand : 

  * PAN : Bluetooth (ordi - portable)
  * LAN : Bâtiment
  * MAN : Échelle d'une ville
  * WAN : Échelle national

==== Collisions ====

On va s'intéresser au réseau local (LAN). On partage un support (qui peut être physique). Chaque machine veut dialoguer entres elles. Si nous ne sommes pas en full duplex, cela peut créer des collisions (simultanément sur le même canal) : les harmoniques se mélangent, et le récepteur ne pourra plus rien comprendre.

Protocole le plus utilisé dans les LAN : CSMA / CD (partage d'un support donné avec un délai entre chaque trame).

==== Codes correcteurs ====

Les codes correcteurs + les codes détecteurs.

Il faut un code qui détecte une erreur, un autre pour corriger ladite erreur.

Bit de parité : ( |___d____| |_c_| )

  * on prend un mot (bits de données, d), et un bit de codage (c) = n bits de résultats
  * le bit de codage doit être plus petit que les les bits de données

Le bit de parité est assez simple.

Codage linéaire = on peut le transformer en matrice.

Code polynomial = codage linéaire. (le principe de Hamming est le plus joli, car il permet de trouver l'endroit de l'erreur)

Distance de Hamming : distance minimale entre deux mots du code

=== Codage polynomiaux ===

10101 => X^4 + X^2 + X^0, on commence par X^0 pour le dernier bit à droite, puis on remonte.

Ceci donne un polynôme générateur.

  * Première étape, on décale en mettant des 0
  * On prend le mot de base dont on a ajouté les 0, et on le divise par le polynôme. Puis on enlève on soustrait le reste de la division au mot de base ajouté des 0.

==== Spanning Tree protocol ====

Si on ne contrôle pas les données, on fait du broadcast storm (tempête de broadcast).

Donc le spanning tree protocol est un algorithme qui permet de trouver comment supprimer le paquet qui revient.

Il choisit une adresse mac comme racine de l'arbre, puis on choisit les chemins les plus courts. Et si 2 chemins sont de même longueur pour une même adresse MAC, on choisit en fonction du numéro parent le plus courts.

===== Couche Réseau : Le routage =====

Tout ce qui nous intéresse : les adresses.

Il faut prendre en considération les :
  * intra domaine : à travers IGP
  * inter domaine : à travers BGP

Dans le cas des BGP c'est parfois l'argent qui rend les choses plus lentes que le matériel lui même.

As : Domaine régie par la même entité administrative (Free est un AS, système autonome).

On va s'intéresser au routage dynamique (intra domaine). Il en existe deux : 

  * vecteur de distance : RIP, IGRP (Cisco) : fait juste le nombre de sauts
  * états des liens OSPF, ls-is, EIGRP (Cisco) : font attention à la capacité des liens

Le dynamisme provient du fait qu'il recalcule les liens et la route si un lien tombe, sans qu'un administrateur ne soit derrière.

===== Couche Transport =====

Parlons de TCP.

Le premier bit part. Au moment où il arrive, on a le temps de propagation (temps de départ du premier bit jusqu'à arrivée).

Quand tout les bits d'un paquets sont arrivés, on a le temps d'émission.

Temps total = temps de propagation + temps d'émission

On met en place des délais, avec acquittement (ACK) : à chaque émission on enclenche un timer (débranché dès qu'on a l'acquittement).

On a mis en place une autre méthode, nommée le **fenêtrage**. En gros c'est le temps qu'on patiente après avoir envoyé tant et tant de paquets. Ce qui réduit le nombre d'acquittements.

Quand tout va bien on augmente de 1 le fenêtrage, si ça va mal on divise par 2 (on va plus vite dans la descente de débit que dans la montée de débit).


