{"id":639,"date":"2017-05-07T18:18:33","date_gmt":"2017-05-07T16:18:33","guid":{"rendered":"http:\/\/www.gatoux.com\/?page_id=639"},"modified":"2017-05-07T20:56:31","modified_gmt":"2017-05-07T18:56:31","slug":"connexions-et-echanges","status":"publish","type":"page","link":"https:\/\/racine.gatoux.com\/lmdr\/index.php\/connexions-et-echanges\/","title":{"rendered":"Connexions et \u00e9changes"},"content":{"rendered":"<p>Ce chapitre pr\u00e9sente le mode d&rsquo;\u00e9tablissement d&rsquo;une connexion HDLC (LAP B) ainsi que le principe des \u00e9changes de trames de donn\u00e9es. Nous \u00e9tudierons notamment la gestion du s\u00e9quencement des trames.<\/p>\n<h2>Initialisation de la connexion de niveau 2 &#8230;<\/h2>\n<p>Lorsque le niveau 1 est activ\u00e9 et que le train binaire (7E) est lanc\u00e9, le r\u00e9seau va commencer \u00e0 \u00e9mettre \u00e0 intervalle de temps r\u00e9gulier des trames <strong>DM<\/strong> (<strong>D<\/strong>isconnect <strong>M<\/strong>ode) qui indiquent \u00e0 l&rsquo;U (nous dirons dor\u00e9navant U pour Utilisateur et R pour R\u00e9seau) que le r\u00e9seau est pr\u00e9sent mais qu&rsquo;il n&rsquo;y a pas de connexion \u00e9tablie.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-664 alignleft\" src=\"http:\/\/racine.gatoux.com\/lmdr\/wp-content\/uploads\/2017\/05\/S5P4I2.gif\" alt=\"\" width=\"400\" height=\"334\" \/>Ci-contre <strong>R<\/strong> \u00e9met des trames \u00e0 intervalles <strong>T1<\/strong>. <strong>T1 est le timer de r\u00e9\u00e9mission<\/strong>. Ce timer est param\u00e9trable dans les \u00e9quipements mais doit \u00eatre identique des deux cot\u00e9s (U et R). Nous aurons l&rsquo;occasion d&rsquo;y revenir. Les trames <strong>DM<\/strong> sont r\u00e9p\u00e9t\u00e9es <strong>N2<\/strong> fois (valeur param\u00e8trable). Puis il n&rsquo;y a plus que des \u00e9changes de synchro (7E).<\/p>\n<p><strong>R<\/strong> \u00e9met ses <strong>DM<\/strong> avec un champ <strong>A<\/strong>dresse \u00e9gal \u00e0 <strong>01<\/strong> (A:01) car <strong>DM<\/strong> est une trame de r\u00e9ponse r\u00e9seau ! (<em>H\u00e9 ! H\u00e9 ! un petit retour dans le paragraphe pr\u00e9c\u00e9dent ? V\u00e9rifiez la position du bit c\/r et du bit e\/a et v\u00e9rifiez le type de trame dans le tableau !<\/em>).<\/p>\n<p>La trame <strong>SABM<\/strong> (<strong>S<\/strong>et <strong>A<\/strong>synchronous <strong>B<\/strong>alanced <strong>M<\/strong>ode) \u00e9mise par l&rsquo;U a son bit <strong>P<\/strong> positionn\u00e9 \u00e0 <strong>1<\/strong> pour \u00e9viter qu&rsquo;un croisement entre SABM et DM (comme ici sur le sch\u00e9ma) am\u00e8ne l&rsquo;U \u00e0 penser que la DM du R est la r\u00e9ponse \u00e0 sa SABM, et que donc le r\u00e9seau refuse la connexion (cas tr\u00e8s improbable). L&rsquo;UA en r\u00e9ponse a donc son bit <strong>F<\/strong> positionn\u00e9 en r\u00e9ponse au bit <strong>P<\/strong> de la SABM. Si le r\u00e9seau voulait r\u00e9ellement refuser la connexion, il retournerait une <strong>DM<\/strong> avec <strong>F=1<\/strong>.<\/p>\n<p>La connexion niveau 2 est \u00e9tablie \u00e0 r\u00e9ception de l&rsquo;UA (<strong>U<\/strong>numbered <strong>A<\/strong>cknowledge) par l&rsquo;U. <strong>Les compteurs Ns et Nr sont mis \u00e0 z\u00e9ro<\/strong>.<\/p>\n<p>Les \u00e9changes de donn\u00e9es peuvent commencer !<\/p>\n<h2>Echange de donn\u00e9es simple &#8230;<\/h2>\n<p>Dans ce paragraphe nous allons \u00e9tudier la gestion des compteurs <strong>Ns<\/strong> et <strong>Nr<\/strong> ainsi que le param\u00e8tre <strong>T2<\/strong> dit \u00ab\u00a0<strong>Temporisateur d&rsquo;acquittement<\/strong>\u00a0\u00bb dans un \u00e9change de donn\u00e9es simple.<\/p>\n<p><strong><u><span style=\"color: #ff0000;\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-665 alignleft\" src=\"http:\/\/racine.gatoux.com\/lmdr\/wp-content\/uploads\/2017\/05\/S5P4I3.gif\" alt=\"\" width=\"400\" height=\"384\" \/>Acquittement par RR :<\/span><\/u><\/strong> Dans l&rsquo;exemple ci-contre, l&rsquo;<strong>U<\/strong> \u00e9met sa premi\u00e8re trame <strong>INFO<\/strong>. C&rsquo;est une trame de commande Utilisateur <strong>son champ Adresse est donc \u00e0 01h<\/strong>. Le compteur <strong>Ns<\/strong> est \u00e0 la valeur <strong>0<\/strong> puisque c&rsquo;est la premi\u00e8re trame \u00e9mise par U. Comme U n&rsquo;a encore jamais re\u00e7u de trame de R, il indique dans <strong>Nr<\/strong> que la prochaine trame qu&rsquo;il attend de lui est la trame <strong>0<\/strong> (Nr=0). <strong>D\u00e8s la fin d&rsquo;\u00e9mission de la trame, U active un timer T1 associ\u00e9 \u00e0 cette trame<\/strong>. Il faudra que R l&rsquo;acquitte avant expiration du T1 sinon U va r\u00e9\u00e9mettre la trame (nous verrons le cas plus tard !).<\/p>\n<p>R n&rsquo;a pas de donn\u00e9es \u00e0 \u00e9mettre, il acquitte donc la trame par une trame <strong>RR<\/strong> qui ne v\u00e9hicule pas de donn\u00e9es. Cette trame est une r\u00e9ponse du r\u00e9seau elle a donc le champ adresse \u00e0 <strong>01h<\/strong>. Le compteur <strong>Nr<\/strong> valide la r\u00e9ception de la trame 0 en indiquant qu&rsquo;il attend la <strong>1<\/strong> (Nr=1).<\/p>\n<p>Lorsque la Nr est re\u00e7ue par U, <strong>elle d\u00e9sactive le timer T1<\/strong> de la trame 0 qui n&rsquo;\u00e9tait pas encore arriv\u00e9 \u00e0 expiration.<\/p>\n<p>Peu de temps apr\u00e8s, U \u00e9met une nouvelle trame <strong>INFO<\/strong>. Son <strong>Ns<\/strong> est \u00e0 <strong>1<\/strong> puisque c&rsquo;est la deuxi\u00e8me trame. Son <strong>Nr<\/strong> est toujours \u00e0 <strong>0<\/strong> puisque U n&rsquo;a toujours pas re\u00e7u de trames INFO de R. <strong>R acquitte la trame par une RR avec Nr = 2<\/strong>. Et ainsi de suite &#8230;<\/p>\n<p>Cette partie illustre donc parfaitement le fonctionnement des compteurs Ns et Nr lors d&rsquo;un acquittement au fil de l&rsquo;eau. <em>Passons \u00e0 quelque chose d&rsquo;un peu plus compliqu\u00e9 &#8230;<\/em><\/p>\n<p><strong><u><span style=\"color: #ff0000;\">Acquittement par trame INFO :<\/span><\/u><\/strong> Au troisi\u00e8me envoi de trame par U (Ns=2), R a des informations \u00e0 envoyer. <strong>Il va donc acquitter la trame de U par une trame INFO plut\u00f4t que d&rsquo;utiliser une RR<\/strong>. Cette trame est une trame de commande R\u00e9seau, son champ Adresse est donc \u00e0 <strong>03h<\/strong>. Comme c&rsquo;est la premi\u00e8re trame INFO \u00e9mise par R, son compteur <strong>Ns<\/strong> est \u00e0 <strong>0<\/strong>. Par contre cette trame acquitte \u00e9galement la trame <strong>Ns:2<\/strong> de U, son compteur <strong>Nr est donc \u00e0 3<\/strong>.<\/p>\n<p><strong><u><span style=\"color: #ff0000;\">Emission par anticipation d&rsquo;acquittement :<\/span><\/u><\/strong> Dans la deuxi\u00e8me partie du sch\u00e9ma on autorise U \u00e0 envoyer plusieurs trames cons\u00e9cutives sans avoir re\u00e7u d&rsquo;acquittements. Nous verrons plus tard que l&rsquo;on appelle \u00e7a <strong>le facteur d&rsquo;anticipation d&rsquo;acquittement<\/strong> (K). U \u00e9met donc les INFO Ns=3, 4 et 5 sans avoir re\u00e7u les acquittements correspondants. Le Nr des trames est \u00e0 1 car il a re\u00e7u pr\u00e9c\u00e9demment une trame INFO Ns=0 de R. Chaque fois que R re\u00e7oit une trame il enclenche un timer T2 associ\u00e9. Il peut attendre de disposer d&rsquo;une trame INFO pour \u00e9mettre son acquittement \u00e0 l&rsquo;\u00e9metteur (U ici) pendant T2. Si aucune trame INFO n&rsquo;est \u00e0 \u00e9mettre pendant ce laps de temps, R \u00e9mettra obligatoirement une RR d&rsquo;acquittement (<em>oui, oui, je sais ! Ca se corse ! Attendez c&rsquo;est pas fini !<\/em>). <strong>Ceci suppose donc qu&rsquo;il y a une correspondance entre le T1 de U et le T2 de R <\/strong>? Oui, il y a une correspondance, mais les deux timers n&rsquo;ont pas du tout la m\u00eame fonction !<\/p>\n<blockquote dir=\"ltr\"><p><strong>T2 est un temporisateur d&rsquo;acquittement<\/strong>. Plut\u00f4t que d&rsquo;\u00e9mettre sans cesse des RR pour acquitter les donn\u00e9es re\u00e7ues parce que R a pas de donn\u00e9es \u00e0 \u00e9mettre, LAP B lui permet de patienter un peu pour acquitter en esp\u00e8rant qu&rsquo;il ait des donn\u00e9es \u00e0 \u00e9mettre. En v\u00e9rit\u00e9, on pr\u00e9f\u00e9re acquitter avec des trames INFO plut\u00f4t qu&rsquo;avec des RR, ceci permet de rentabiliser la liaison et les \u00e9quipements en \u00e9vitant la construction et l&rsquo;\u00e9mission incessante de trames RR. L&rsquo;ordre de grandeur de T2 est seulement de quelques millisecondes &#8230; pas des heures !<\/p>\n<p>Il appara\u00eet \u00e9vident qu&rsquo;<strong>il faut que T2 soit inf\u00e9rieur \u00e0 T1<\/strong>. Car si le r\u00e9cepteur peut temporiser l&rsquo;acquittement plus longtemps que l&rsquo;\u00e9metteur n&rsquo;est pr\u00eat \u00e0 attendre l&rsquo;acquittement, on court au drame ! C&rsquo;est la seule vrai relation entre T1 et T2 : <strong>T2 &lt; T1<\/strong>.<\/p><\/blockquote>\n<p><strong>Nr : Num\u00e9ro de trame attendue<\/strong> : Dans le cercle gris du sch\u00e9ma vous remarquez que R a une trame INFO \u00e0 \u00e9mettre apr\u00e8s r\u00e9ception de la trame 4 de U (Ns:4). Il envoie donc une trame INFO avec un Nr = 5. Et c&rsquo;est l\u00e0 qu&rsquo;est la beaut\u00e9e du geste ! En indiquant 5 dans Nr, il dit \u00ab\u00a0j&rsquo;attends la trame 5, donc je t&rsquo;acquitte les trames 3 et 4 qui \u00e9taient en instance d&rsquo;acquittement\u00a0\u00bb ! C&rsquo;est bien plus performant que d&rsquo;indiquer le num\u00e9ro de trame que l&rsquo;on acquitte ! Bien s\u00fbr l&rsquo;acquittement a pour effet de stopper les timers T2 des trames correspondantes.<\/p>\n<p><strong>Expiration du T2 :<\/strong> Dans le cercle bleu du sch\u00e9ma, j&rsquo;illustre ce qui arrive si R n&rsquo;a plus de donn\u00e9es \u00e0 \u00e9mettre. Le timer T2 de la trame 5 arrive \u00e0 expiration, R \u00e9met donc une trame RR (Nr=6) pour acquitter cette trame \u00e0 U.<\/p>\n<p>Au passage vous remarquerez que U n&rsquo;a absolument pas \u00e9t\u00e9 choqu\u00e9 de recevoir de R un acquittement des trames 3 et 4 (par la trame INFO) seulement alors qu&rsquo;il avait d\u00e9j\u00e0 \u00e9mis la trame 5 ! Peu importe ! U veut seulement que R acquitte avant expiration du timer T1 de la trame 5. R peut prendre son temps s&rsquo;il veut ! De toute fa\u00e7on R n&rsquo;avait pas fini de recevoir la trame 5 donc il ne pouvait pas l&rsquo;acquitter.<\/p>\n<p>Ceci m&rsquo;am\u00e8ne \u00e0 vous pr\u00e9ciser, pour ceux qui ne l&rsquo;aurait pas d\u00e9vin\u00e9, que la pente des fl\u00e8ches sur les sch\u00e9mas, repr\u00e9sente les d\u00e9lais de transmissions des donn\u00e9es. Et dans le m\u00eame temps vous avez ici la d\u00e9monstration que le fonctionnement est bien full-duplex.<\/p>\n<h2>Synth\u00e8se<\/h2>\n<p>Que savons-nous maintenant ? Nous connaissons :<\/p>\n<ul>\n<li>le format d&rsquo;une trame HDLC et la fonction des champs la composant<\/li>\n<li>le principe d&rsquo;\u00e9tablissement d&rsquo;une connexion HDLC et identifions les entit\u00e9s R\u00e9seau\/Utilisateur, Commande\/R\u00e9ponse<\/li>\n<li>le principe d&rsquo;\u00e9change des trames de donn\u00e9es, notamment la gestion des compteurs Nr\/Ns et l&rsquo;importance des timers T1\/T2 pour les d\u00e9lais d&rsquo;acquittements.<\/li>\n<\/ul>\n<p>Etudions maintenant un peu plus avant l&rsquo;importance des param\u00e8tres T2, T1, K et N2.<\/p>\n<h5 align=\"center\"><a href=\"http:\/\/www.gatoux.com\/index.php\/la-trame-lap-b\/\">Page pr\u00e9c\u00e9dente<\/a> | <a href=\"http:\/\/www.gatoux.com\/index.php\/acquittements-et-echanges\/\">Page Suivante<\/a><\/h5>\n","protected":false},"excerpt":{"rendered":"<p>Ce chapitre pr\u00e9sente le mode d&rsquo;\u00e9tablissement d&rsquo;une connexion HDLC (LAP B) ainsi que le principe des \u00e9changes de trames de donn\u00e9es. Nous \u00e9tudierons notamment la gestion du s\u00e9quencement des trames. Initialisation de la connexion de niveau 2 &#8230; Lorsque le niveau 1 est activ\u00e9 et que le train binaire (7E) est lanc\u00e9, le r\u00e9seau va\u2026 <span class=\"read-more\"><a href=\"https:\/\/racine.gatoux.com\/lmdr\/index.php\/connexions-et-echanges\/\">Lire la suite &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":56,"comment_status":"closed","ping_status":"closed","template":"page-templates\/full-width.php","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"footnotes":""},"class_list":["post-639","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/racine.gatoux.com\/lmdr\/index.php\/wp-json\/wp\/v2\/pages\/639","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/racine.gatoux.com\/lmdr\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/racine.gatoux.com\/lmdr\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/racine.gatoux.com\/lmdr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/racine.gatoux.com\/lmdr\/index.php\/wp-json\/wp\/v2\/comments?post=639"}],"version-history":[{"count":3,"href":"https:\/\/racine.gatoux.com\/lmdr\/index.php\/wp-json\/wp\/v2\/pages\/639\/revisions"}],"predecessor-version":[{"id":682,"href":"https:\/\/racine.gatoux.com\/lmdr\/index.php\/wp-json\/wp\/v2\/pages\/639\/revisions\/682"}],"wp:attachment":[{"href":"https:\/\/racine.gatoux.com\/lmdr\/index.php\/wp-json\/wp\/v2\/media?parent=639"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}