Introduction Couche physique Couche liaison Couche réseau Couche transport Introduction Couche physique Couche liaison Couche réseau Couche transport Préambule Le modèle hybride Couche 5 Application Protocoles Réseaux Protocole d'application Application Interface 4 Protocole de transport Transport Matthieu Picantin Transport message Réseau é paquet trame Frontière du sous-réseau de communication 3 Réseau seau Réseau Protocoles internes au sous-ré sous-réseau LIAFA CNRS UMR 7089 Université Paris 7 Denis Diderot 13 mars 2009 2 Liaison Liaison Liaison Liaison 1 Physique Physique Physique Physique Hôte ô A Pont Routeur Hôte B Protocole de couche rréseau seau h hôte-routeur te-routeur Protocole de couche liaison de donn données hôte-pont Protocole de couche physique hôte-pont bit Nom des unités échangées 2 / 40 1 / 40 Introduction Couche physique Couche liaison Couche réseau Couche transport Introduction Couche physique Préambule Préambule Rôle de la couche liaison de données Trois catégories de services Couche liaison Couche réseau Couche transport Objectif Communication (fiable et efficace) entre deux machines adjacentes (machines physiquement connectées par un canal de transmission) sans connexion - non acquitté pas de récupération des erreurs (faible taux d’erreurs, temps-réel...) complexité dans les couches supérieures Gestion des trames Les trames encapsulent les paquets de la couche réseau Les flux de bits de la couche physique sont découpés en trames Emetteur Récepteur Paquet Paquet sans connexion - acquitté indication des pertes (retransmissions rapides) débit variable avec connexion - acquitté connexion préalable garanties de réception ordonnée et unique Trame En-tête Champ de données En-queue En-tête Champ de données En-queue 3 / 40 4 / 40 Introduction Couche physique Couche liaison Couche réseau Couche transport Introduction Couche physique Préambule Techniques de délimitation de trames Positionnement du protocole de liaison Technique #1 Couche liaison Couche réseau Couche transport Compter les caractères Utilisation d’un champ taille dans l’en-tête de la trame Problème de désynchronisation en cas d’erreur Processus de la couche liaison de données 2 Processus de routage 3 Décompte des caractères 2 2 3 Protocole de liaison de données Trames Paquets 5 1 2 3 4 5 Trame 1 5 caractères 2 6 7 8 9 8 0 Trame 2 5 caractères 1 Un caractère 2 3 4 5 6 8 7 Trame 3 8 caractères 8 9 0 1 2 3 Trame 4 8 caractères Ligne de transmission vers un routeur Routeur Décompte des caractères 5 / 40 5 Introduction Couche physique Couche liaison Couche réseau Couche transport 1 2 3 Introduction 4 5 6 Trame 1 5 caractères Techniques de délimitation de trames Technique #2 Technique #3 5 8 9 8 1 2 0 1 3 4 5 Trame 3 8 caractères 6 8 7 8 9 0 1 Couche réseau Trame 4 8 caractères 2 3 Couche transport Erreur 3 4 7 6 7 8 9 8 0 1 Utiliser des bits délimiteurs Trame 1 chaînes deTrame 2 un même octet drapeau désigne le début et la fin d’une trame 2 Couche liaison Trame 2 5 caractères Techniques de délimitation de trames Utiliser des drapeaux de signalisation 7 Couche physique 6 / 40 Un caractère (fausse) 2 3 4 5 6 8 7 8 9 0 1 2 3 Nouveau décompte des caractères plus souple et non associée à un codage remplissage d’octets d’échappement ESC utilisation d’un drapeau (par exemple 01111110) problème avec les données binaires présence du drapeau au milieu des données transparence par remplissage de bits (insertion par exemple de 0 dans les chaînes de 1) méthode liée au codage des caractères sur 8 bits 011011111111111111110010 remplissage A drap. B A ESC drap. B A ESC B A ESC ESC B A ESC drap. B A ESC ESC ESC drap. B A ESC ESC B A ESC ESC ESC ESC B 011011111011111011111010010 bits de remplissage 011011111111111111110010 7 / 40 8 / 40 Introduction Couche physique Couche liaison Couche réseau Couche transport Introduction Couche physique Couche liaison Détection et correction d’erreurs Détection et correction d’erreurs Détection-retransmission vs correction Distance de Hamming et qualité d’un code Distance de Hamming Détection-retransmission Correction juste assez de redondance pour que le récepteur puisse détecter d’éventuelles erreurs & demander une retransmission adapté sur canal fiable nombre de bits différents entre 2 mots somme des 1 après un XOR sur 2 mots nombre minimum d’erreurs simples pour passer d’un mot à l’autre suffisamment de redondance pour que le récepteur puisse corriger d’éventuelles erreurs Couche réseau Couche transport Distance de Hamming d’un code distance minimale entre deux mots du code Qualité d’un code adapté sur canal bruité un code C vérifiant dH (C) ≥ k + 1 permet de détecter k erreurs un code C vérifiant dH (C) ≥ 2k + 1 permet de corriger k erreurs Redondance et mots de code mot de code (n bits) = données (m bits) + contrôle (r bits) 2m mots de code légaux parmi 2n mots possibles Un code 1-détecteur Un code 2-correcteur L’ajout d’un bit de parité produit un code de distance de Hamming 2 Le code {00000000000, 0000011111, 1111100000, 1111111111} est de distance de Hamming 5 10 / 40 9 / 40 Introduction Couche physique Couche liaison Couche réseau Couche transport Introduction Couche physique Couche liaison Détection et correction d’erreurs Détection et correction d’erreurs Codes correcteurs d’erreur simple Codes correcteurs d’erreur simple Couche réseau Couche transport En théorie Pouvoir corriger toute erreur simple pour m bits de données demande r bits de contrôle avec m + r < 2r caractère ASCII bits de contrôle H a m m i n g 1001000 1100001 1101101 1101101 1101001 1101110 1100111 0100000 1100011 1101111 1100100 1100101 00110010000 10111001001 11101010101 11101010101 01101011001 01101010110 01111001111 10011000000 11111000011 10101011111 11111001100 00111000101 En pratique : la méthode de Hamming bits numérotés de 1 à n de gauche à droite Le code de Hamming pour de l’ASCII bits puissance de 2 sont les r bits de contrôle (1, 2, 4, 8...) les autres sont les m bits de données (3, 5, 6, 7, 9, 10...) valable seulement pour une erreur simple (1 bit) bits de contrôle = calcul de parité sur les bits de données dont la décomposition en puissances de 2 fait intervenir la position du bit de contrôle concerné correction de rafale d’erreurs à l’aide d’une matrice détection du bit erroné et correction par somme des bits de contrôle non conformes à la parité 11 / 40 c o d e ordre de transmission des bits 00110010000 12 / 40 Introduction Couche physique Couche liaison Couche réseau Couche transport Introduction Couche physique Couche liaison Détection et correction d’erreurs Mécanismes protocolaires Codes polynômiaux détecteurs d’erreurs Rôle de la couche liaison de données Couche réseau Couche transport Codes CRC (Cyclic Redundancy Code) correspondance entre rang des bits et degré des monômes (par exemple, le mot 10011 code le polynôme x 4 + x + 1 ) Fonctions spécifiques Interface de service clairement définie à la couche réseau arithmétique polynomiale (soustraction modulo 2 et division euclidienne) Mécanismes pour assurer la fiabilité de la transmission techniques de détection et correction d’erreurs retour d’informations vers l’émetteur détection des absences par temporisateur politique de retransmission et numérotation Utilisation d’un polynôme générateur G(x) G(x) de degré r et message M(x) ajout de r bits à 0 après le bit de poids faible de M(x) Contrôle du flux de données (éviter de saturer le destinataire) division de x r M(x) par G(x) : reste R(x) r envoi de T (x) = x M(x) − R(x) T (x) est divisible par G(x) (à vérifier par le récepteur !) 14 / 40 13 / 40 Introduction Couche physique Couche liaison Couche réseau Couche transport Introduction Couche physique Mécanismes protocolaires Mécanismes protocolaires Trames de supervision Hypothèses communes Objectif ultime : la fiabilité La gestion de la liaison nécessite l’échange de trames de commande ou trames de supervision Couche liaison Couche réseau Couche transport Hypothèse de conception paquet séq ack somme de contrôle info Chaque couche a son propre processus et communique par échange de message Hypothèse de service Un service fiable orienté connexion est souhaité Règles de fonctionnement coder les informations de commande Hypothèse de disponibilité séparer l’information proprement dite de l’information de commande l’émetteur dispose d’un flux infini de données le récepteur est en attente de réception préciser les séquences valides d’échanges de trames 15 / 40 16 / 40 Introduction Couche physique Couche liaison Couche réseau Couche transport Introduction Couche physique Mécanismes protocolaires Mécanismes protocolaires Protocole simplex non restreint Protocole simplex non restreint Couche liaison paquet paquet séq ack somme de contrôle séq ack Couche réseau Couche transport somme de contrôle info info typedef enum {arrivee_trame} type_evenement; #include "protocole.h" Caractéristiques unidirectionnel void emetteur1 (void) { trame s; paquet tampon; while (true) { depuis_couche_reseau (&tampon); s.info = tampon; vers_couche_physique (&s); } } couches toujours prêtes à émettre ou recevoir tampons infinis canal de communication sans perte void recepteur1 (void) { trame r; type_evenement evenement; while (true) { attendre_evenement (&evenement); depuis_couche_physique (&r); vers_couche_reseau (&r.info); } } 17 / 40 Introduction Couche physique Couche liaison Couche réseau Couche transport 18 / 40 Introduction Couche physique Couche liaison Mécanismes protocolaires Mécanismes protocolaires Protocole simplex de type stop-and-wait Protocole simplex de type stop-and-wait paquet paquet séq ack séq ack somme de contrôle Couche réseau Couche transport somme de contrôle info info typedef enum {arrivee_trame} type_evenement; #include "protocole.h" Caractéristiques unidirectionnel void emetteur2 (void) { trame s; paquet tampon; type_evenement evenement; while (true) { depuis_couche_reseau (&tampon); s.info = tampon; vers_couche_physique (&s); attendre_evenement (&evenement); } } tampons limités (risque d’écrasement de trames) canal de communication sans perte 19 / 40 void recepteur2 (void) { trame r, s; type_evenement evenement; while (true) { attendre_evenement (&evenement); depuis_couche_physique (&r); vers_couche_reseau (&r.info); vers_couche_physique (&s); } } 20 / 40 Introduction Couche physique Couche liaison Couche réseau Couche transport Introduction Couche physique Couche liaison Mécanismes protocolaires Mécanismes protocolaires Protocole simplex pour canal bruité Protocole simplex pour canal bruité Couche réseau Couche transport typedef enum {arrivee_trame, erreur_checksum, timeout} type_evenement; #include "protocole.h" paquet séq ack somme de contrôle void emetteur3 (void) { numero_seq trame_a_envoyer; trame s; paquet tampon; type_evenement evenement; trame_a_envoyer = 0; depuis_couche_reseau (&tampon); while (true) { s.info = tampon; s.seq = trame_a_envoyer; vers_couche_physique (&s); armer_temporisateur (s.seq); attendre_evenement (&evenement); if (evenement == arrivee_trame) { depuis_couche_physique (&s); if (s.ack == trame_a_envoyer) { stopper_temporisateur (s.ack); depuis_couche_reseau (&tampon); trame_a_envoyer = 1 - trame_a_envoyer; } } } } info Caractéristiques unidirectionnel tampons limités (risque d’écrasement de trames) pertes possibles mais détectées temporisations, acquittements, retransmissions, duplications void recepteur3 (void) { numero_seq trame_attendue; trame r, s; type_evenement evenement; trame_attendue = 0; while (true) { attendre_evenement (&evenement); if (evenement == arrivee_trame) { depuis_couche_physique (&r); if (r.seq == trame_attendue) { vers_couche_reseau (&r.info); trame_attendue = 1 - trame_attendue; } s.ack = 1 - trame_attendue; vers_couche_physique (&s); } } } 21 / 40 Introduction Couche physique Couche liaison Couche réseau Couche transport 22 / 40 Introduction Couche physique Vérification et spécification Vérification et spécification Vérification et spécification Automates finis Couche liaison Couche réseau Couche transport Problématique complexité des protocoles réels et de leurs implémentations développement de techniques formelles pour spécifier et vérifier techniques et modèles indépendants des couches 0 00– 01– 7 0 010 7 0 5 Trame Transition Acteur acceptée 1 Automates (à états finis) Réseaux de Petri Quadruplet (S, I, T , M) Quadruplet (P, T , A, M) S ensemble des états P ensemble de places (recevant des (transitoires vs principaux) jetons) I ensemble des états initiaux T ensemble des transitions entre états M ensemble des trames échangées T ensemble des transitions 000 01A 4 2 3 10A 6 (autorisation si chacune des places d’entrée possède au moins un jeton) 0 101 111 0 10– 0 8 11– 0 1 2 3 4 5 6 7 8 – R É R É R R É É Trame émise (trame perdue) 0 A 1 A 0 1 (timeout) (timeout) A 1 A 0 A A 0 1 Vers la couche réseau – Oui – Oui – Non Non – – 8 A ensemble des arcs (place↔transition) M marquage (état du système) 23 / 40 24 / 40 Introduction Couche physique Couche liaison Couche réseau Couche transport Introduction Couche physique Vérification et spécification Vérification et spécification Réseaux de Petri Protocoles duplex Couche liaison Couche réseau Couche transport 0 sur la ligne Émet 0 1 10 C A Attend Ack 0 2 Perte 5 Timeout Traite 0 Deux approches F 8 2 flux simplex : circuits séparés (non optimal) Attend 1 1 flux duplex : circuit bidirectionnel Rejette 0 D 3 Émet 1 11 Superposition (piggybacking) Traite 1 Ack sur la ligne B acquittements associés aux trames de données envoyées Perte 6 Attend Ack 1 4 9 E Timeout réduction du nombre de paquets G Rejette 1 go 1 sur la ligne 7 État de l'émetteur Introduction Couche physique possibilité de temporiser avant de joindre un acquittement à une trame de données Attend 0 Perte État du canal Couche liaison État du récepteur Couche réseau 26 / 40 25 / 40 Couche transport Introduction Couche physique Couche liaison Vérification et spécification Vérification et spécification Protocoles duplex Protocoles duplex avec fenêtres de largeur 1 Protocoles à fenêtre (sliding window) Couche réseau Couche transport typedef enum {arrivee_trame, erreur_checksum, timeout} type_evenement; #include "protocole.h" pipelining : envoi de plusieurs trames avant réception d’un acquittement void protocole4 (void) { numero_seq prochaine_trame; numero_seq trame_attendue; trame r, s; paquet tampon; type_evenement evenement; prochaine_trame = 0; trame_attendue = 0; depuis_couche_reseau(&tampon); s.info = tampon; s.seq = prochaine_trame; s.ack = 1 - trame_attendue; vers_couche_physique(&s); armer_temporisateur(s.seq); ... acquittement par blocs : réception de plusieurs trames avant acquittement taille de la fenêtre d’émission : nombre maximal de trames autorisées à être envoyées taille de la fenêtre de réception : nombre maximal de trames acceptables par le destinataire calcul de la relation entre les deux fenêtres selon le protocole 27 / 40 28 / 40 Introduction Couche physique Couche liaison Couche réseau Couche transport Introduction Couche physique Couche liaison Couche réseau Vérification et spécification Vérification et spécification Protocoles duplex avec fenêtres de largeur 1 Protocoles duplex avec fenêtres de largeur 1 7 ... while (true) { attendre_evenement(&evenement); if (evenement == arrivee_trame) { depuis_couche_physique(&r); if (r.seq == trame_attendue) { vers_couche_reseau(&r.info); trame_attendue = 1 - trame_attendue; } if (r.ack == prochaine_trame) { stopper_temporisateur(r.ack); depuis_couche_reseau(&tampon);/ prochaine_trame = 1 - prochaine_trame; } } s.info = tampon; s.seq = prochaine_trame; s.ack = 1 - trame_attendue; vers_couche_physique(&s); armer_temporisateur(s.seq); } 0 1 6 1 5 2 5 2 3 0 1 5 2 4 fenêtre de réception de largeur 1 numéros de séquence sur 3 bits Fenêtre d’émission 3 7 0 6 k0 ac 29 / 40 Couche réseau Couche transport numéros de séquence de trames émises mais non encore acquittées 1 5 7 fenêtre d’émission de largeur 1 3 e0 6 2 4 Fenêtre de réception 3 0 numéros de séquence de trames attendues mais non encore reçues 1 5 Couche liaison 4 tram 4 7 6 Couche physique 0 6 Protocole stop & wait } Introduction 7 2 4 3 Introduction 30 / 40 Couche physique Couche liaison Vérification et spécification Vérification et spécification Protocoles duplex avec fenêtres de largeur 1 Protocoles duplex avec fenêtre de largeur >1 Scénario normal séq ac k 0 1 A0 Scénario critique séq Couche transport Couche réseau Couche transport Motivation ack 0 1 A0 0 0 0 A0 0 1 Recherche d’un compromis bande passante/taille mémoire tampon B0 0 0 0 B 1 0 A 1 1 1 1 B 1 0 A1 1 0 0 B 1 0 A 0 1 A 2 2 0 0 B 1 1 A1 1 1 B1 1 0 A 3 31 / 40 Fenêtre d’émission de largeur 1 Fenêtre de réception de largeur 1 Envoi d’une trame seulement après acquittement de la précédente Rejet global en cas de perte ou d’erreur Fenêtre d’émission de largeur >1 Fenêtre de réception de largeur >1 Envoi de plusieurs trames avant réception du premier acquittement Rejet sélectif en cas de perte ou d’erreur 32 / 40 Introduction Couche physique Couche liaison Couche réseau Couche transport Introduction Couche physique Vérification et spécification Exemples de protocoles Protocoles duplex avec fenêtre de largeur >1 HDLC vs PPP Couche liaison Couche réseau Couche transport Fenêtre de réception de largeur 1 Délai de temporisation 0 1 2 3 4 5 6 bits 8 7 8 2 3 4 5 6 7 8 D Erreur D D D D D 5 6 Trames supprimées par la couche liaison 7 Temps 2 3 4 5 2 6 7 8 9 10 11 12 13 Erreur 14 nombreuses variantes : SDLC, ADCCP, LAP, LAP-B, etc trafics routeur-routeur & modem-FAI 11 k1 k1 1 1 1 ou 2 1500 2 ou 4 1 11111111 00000011 Protocole Charge utile Total de contrôle 01111110 Adresse Contrôle 3 2 1 0 10 Ac 9 k1 8 PPP (Point-to-Point Protocol) 15 Ac 7 k1 6 Ac 2 Ac Ac 5 k9 Ac 4 Ac Ac k8 k7 Ac k6 k5 Ac 3 k1 k E k1 Na 1 8 01111110 orienté octet octets 1 Ac k1 Ac k0 Ac 0 16 Total de contrôle orienté bit 2 1 0 Données HDLC (Hight-level Data Link Control) 8 Fenêtre de réception de largeur >1 0 8 Contrôle k7 Ac k6 k5 k4 4 Ac 3 Ac 2 Ac k3 k2 E Ac 1 Ac Ac k1 Ac k0 01111110 0 8 Adresse 9 12 13 01111110 14 Trames placées en mémoire tampon par la couche liaison 33 / 40 Introduction Couche physique Couche liaison Couche réseau Couche transport 34 / 40 Introduction Couche physique Exemples de protocoles Exemples de protocoles HDLC HDLC Trois sortes de trames bits 8 01111110 Couche liaison Couche réseau Couche transport Trame I d’information 8 8 0 Adresse Contrôle b0 trame I d'information (transmission effective des données) trame S de supervision (acquittements positifs et négatifs) trame U non numérotée (demande, acceptation, refus, libération de connexion) Données b1 0 b2 b3 Ns 16 8 b0 Total de contrôle 01111110 0 b4 b5 b6 P/F Nr Nr 1 0 s0 s1 P/F 1 1 u0 u1 P/F u2 u3 b1 b2 Ns Un seul type b7 Ns est le numéro de séquence de la trame courante Nr est le numéro de la trame d’information attendue numérotation modulo 8 (3 bits) acquitte les trames de numéro < Nr u4 35 / 40 b3 b4 b5 P/F b6 b7 Nr Le bit P/F Poll/Final (Invitation à émettre/Fin) bit positionné si sa valeur est 1 le bit positionné vaut P si la trame est une commande le bit positionné vaut F si la trame est une réponse l’émission d’une commande exige une réponse immédiate 36 / 40 Introduction Couche physique Couche liaison Couche réseau Couche transport Introduction Couche physique Exemples de protocoles Exemples de protocoles HDLC HDLC Trame S de supervision Couche liaison Couche réseau Couche transport Trame U de gestion b0 b1 b2 b3 b4 1 0 s0 s1 P/F b5 b6 b7 Nr type RR (Receive Ready) 00 type RNR (Receive Not Ready) 10 · acquitte les trames de numéro < Nr · acquitte les trames de numéro < Nr · demande la suspension de la transmission type REJ (REJect) 01 type SREJ (Selective REJect) 11 · acquitte les trames de numéro < Nr · demande la retransmission des trames de numéro ≥ Nr (uniquement HDLC et ADCCP) b0 b1 b2 b3 b4 b5 b6 b7 1 1 u0 u1 P/F u2 u3 u4 type SABM (Set Async Balanced) 11110 type DISC (DISConnect) 11010 · demande de connexion · libération de connexion type UA (Unumbered Ack) 00110 type FRMR (FRaMe Reject) 11011 · acquittement de trame non numéroté · rejet de trame · acquitte les trames de numéro < Nr · demande la retransmission de la trame de numéro Nr 37 / 40 Introduction Couche physique Couche liaison Couche réseau Couche transport 38 / 40 Introduction Couche physique Exemples de protocoles Exemples de protocoles PPP PPP octets 1 Contexte 01111110 liaison louée routeur-routeur Couche liaison Couche réseau Couche transport 1 1 1 ou 2 1500 2 ou 4 1 11111111 00000011 Protocole Charge utile Total de contrôle 01111110 Adresse Contrôle liaison téléphonique commutée modem-FAI Structure des trames Principe contrôle : trame non numérotée une délimitation des trames (orienté octet) protocole : type du paquet contenu dans la charge utile (LCP, NCP, IP, IPX, AppelTalk, etc) des trames multiprotocoles un protocole de contrôle de liaison LCP (Link Control Protocol) : active une ligne, la teste, négocie les options et la désactive négociation via LCP numérotation et fiabilité omission des octets adresse et contrôle réduction du code protocole à 1 octet augmentation du total de contrôle à 4 octets une famille de protocoles de contrôle de réseau NCPs (Network Control Protocol) spécifiques aux différents protocoles de couche réseau 39 / 40 40 / 40