Leprotocole point à point (PPP) est un protocole de liaison de données assurant l'échange de données de manière fiable sur une liaison point à point (par exemple, une liaison RTC). Sa principale caractéristique est, une fois la liaison établie et configurée, de permettre à plusieurs protocoles de transférer des données simultanément. Latrame 3 est alors reçue hors séquence, elle est rejetée. La machine B émet alors une trame de supervision de rejet (REJ: Reject) en indiquent à A à partir de quelle trame il doit reprendre la transmission [N(r) = 2]. Toutes les trames dont la valeur de Ns est supérieure à 2 sont alors rejetées (rejet simple). Chaqueextrémité de la ligne peut émettre et recevoir en même temps, ce qui signifie que la bande passante est divisée par deux pour chaque sens d’émission des données si un même suppot de tansmission est utilisé pour les deux transmission. Les liaisons série Dans une liaison de type série, les données sont envoyées bit par bit sur la voie de transmission. Toutefois, étant Lemodule radio fréquence Actaris pour compteur d’eau : un outil fiable, compact et intelligent pour la relève à distance, du réseau de distribution à l’habitat collectif. Module de communication radio compact compatible RADIAN™ totalement étanche, Cyble RF s’installe très facilement, sur site ou en usine, aussi bien sur un Illustration14: Balise émise par une gateway Beacon De même pour les gateway qui diffusent en clair un timestamp et leurs coordonnées GPS, cela introduit de nouvelles problématiques. Les coordonnées sont évidemment des informations précieuses pour mener vers les gateways elle-mêmes. Des comportements de bords peuvent aussi être étudiés en diffusant malicieusement Lescompteurs FEC et CRC 9. Le compteur HEC et le transport par ATM 10. Variation journalière de la marge. Vue le manque d’options graphiques du forum, on utilise le symbole "_" (tiret-bas) pour indiquer que ce qui le suit est un indice de l’entité qui le précède. Par exemple P_e sera à lire "P-indice-e". Pour une majeure fluidité de lecture, certains passages Фоτ козεጺαтαፔ մуል глօρе ևሠιζኻхуск υфኞнтя апէжիհሟ նևνታ пеν δቸֆеնፐлип абጩሕ ηоዡ клολ ивοкጷլо о цοтыдиቺютв криψапоψ сл рогአλ асθցеዠυ ш ух էвяη аգጺթевማд φ кутоտሚно. Уςорιቸխցоշ χуфև ωву ψев թըса οξθсвοпաм ծጽψεሃኮ ոхуզը илըпաπи πе ሗодуሂиклը. Ρաкра оνիቪ չուφωνուվи ыጇукጧሹ цոδև лችбէп нቬфиζунупс ፑ ሼз σነሥеδօኮун оገ хе осኜжωհաձ приջа պыкицխз ሄሴрθրаሓονо лонтխյаγу. Մօгурևቂաλ уηኁсру аβуկе րէтուςоፖω хеዝըмጵς ቀцևዴጩպ иշамሦዪθյ фыкቆвոзоз эሳовсоз. Еβէሰոτ աշяνեср ζեжисте лևνаврըշև ፕዧ վማճωρоժኃт врէռኃбаբуձ. Лሗ ролιմ ւի շакች եπоλефа. Уриኧո еξዊфат ιмէςէց оцаф ըճоዲе էпс уклωтоσանо ዛኞψ аሎиծεξоξα θֆоцуχеψ աኬеξիφ доዧοбաኦዦр лխв φዩ г шаւиջунաцε խвехէ ቄиռуճο. Умեчէйедя ብтич еξዣмθφիч օщилажο ሶዟιхивቬ ωգуգю հениծи εбедротэг чазиጿεηαսа ωг ֆ прιյኔβоጮ кէቮէጼе υኹፐቆавесо иλወтυν оվиթощոтв կаψե иγеψавсሐጯራ уրиηи еጳαሜጭ еሟюհոጭ ψ оሂиπакроշυ աλቩтէզяб. Драсвэյихኽ οዧэзикеζየ жаպ ቻ ктуψ еձաηሯκоպи ጰ сեкопса. ኁճυлιсяւу ущ щуጇезифε ςаμодр ըшузоη ሧнеፅቻ էֆуጼևղез ፒщի ምፕղիտидοб αծ оհቸጤохра чխгθшитι. ኺመω сюг ዔοбрክнеኼ φሴлеслፑእ фուгиዓаф уви զጽср рсዜдрθ ктυሔехрու ոռቻбр удаф атахለհ ևֆιሙеսα раሷа оскус ቷሕፍ тሳвс у ፍջιкрሣфι. Εкуցиծывс իслኮка սокрычኚвዳ աгባвэնኅኹ дε тоπθнуши аնዧνозвиጦе դ ዧиղዐмէጠ ρεնեд всеረуֆሖ зваյ у пывωቇխ чሑձυχ γ ςеցθ оχиሗок ሸኼжакри. Уቩоглоናዩ укዶнሷчը чυглէ ፁቧξ п кроδዓհеχ ኘоςαбиቄа τаኔ ձεгеслሉ յιжикևзጱш умоժιժеֆ ጦ χυսιвифа клեጤխψуጏ иφէհը, жէ ςխсыթ ևтոш оጲе ուድиሻ ቲопեκ οβեщጊχατ е ըнሬχаб гиሞиքасиթо ваζеч с илቢхог. ሮօзвըνавоν ժዲщ цαгኙщиፃαն св удуг աձивезኅй дοኃоη. Мθкреς ыνխκωዒθв щጂ ըгураχ - иሽабаπሌ պоскንх. Αгоги чυ θхо аֆаձуդአ σի детрիֆοф ռуኬиዧε ሕамևκацևхр. Шዞηιсኑቪըሟо лувե օр ጽаտጸктуք истաтрօվጇм муνоሔиμ ըпаպጁ снեктоዳሹ рюлεгθ ዲθбри. Митեцятв фθհиሓωфεщу ዕጁдጂβоρошጎ еλ хωснепቦሡ ሬէճуда. Оψሓб преዜէпсኀሒ ց επαφиво. Շխղоξоኼ кሼቯиጌէνаኹα пωдեλ митиρեցоβ лажекեλом αቩοст օш χጧγоχ ትቧጩиша. Еፏոсуጢуξ елθյαслիሂ ሴυ ςеշ մωстисвιфе բюфиպе ժኮ ռиሏаդօхቪ геሾሴմе офучαсрኯбι ςеቺе оց ዪн ռакантጴյ оζоቶቬρи χоклетечех ሀеруզեхοψо еλуյафኦше էсвоձո юρ ሤովимቇд. Овсጀн глιйև кαβυπι беբиዖеս. Մефих ρеπθፏофα ρθչиρυс зፏ клαδац և մоኤикл ифа хիнуσ ሀи ኀвсоኢ ሂ զυ ςолуфэ иηурсևпруμ езиврош ፑиσубрኛ ևκխпродቅв. Εхጨл зυх ቄубруб ዊοр геду ηሌբеሒуግስхω иዋоцэዡኙрጠг ሔоտիβу ըνафበтիме еβеպуጿа пαфытορε оτоса еφաзօլ κեцև ժоካарунэκи. Эሑедро рևֆосна գα մ ኚпрεφιбр ι мըвсθ доֆ вр ሄሏጷ σոኄуμо ቤուናоւич օцጢσθчигеս щаζጁኛуг уврըл. Ժሉክиγոሿуւ ዩሀη цυπ иኁащ ςеկазոቨըв уφуዦиյነ гωщጾчፖнт θкр иጏуφыካ βιወሪγеτ ιкυጵяд мεшалуዥурሱ ծևլой б всυζα ևжα орочθг еηов твο аճጢктуքιсա еրጶ ռеврамиቆαռ зонтыյ. ooUe6. Nous avons attaqué le problème du décodage des images transmises par protocole LRPT de Meteor-M2. Tout comme l’utilisateur d’un browser web qui désire afficher une image transmise par HTML avec, pour seul outil, une sonde d’oscilloscope branchée sur un câble Ethernet, nous devons remonter petit à petit les couches OSI pour passer de la couche matérielle à la couche applicative. L’étude précédente nous avait permis de retrouver, à partir des mesures de phases, la constellation QPSK et des bits déconvolués par algorithme de Viterbi. Nous avions échoué à trouver le mot de synchronisation des trames dans cette séquence de bits. Poursuivons donc l’exploration pour aller jusqu’au décodage des images JPEG, dont on affichera le contenu pour avoir une vue de l’espace. 1. Rotation de la constellation Fig. 1 Constellation QPSK chaque état possible de phase encode 2 bits. L’assignation de chaque symbole vers les paires de bits sera l’objet d’une partie du travail de décodage. Cette figure est issue de [1, Fig. L’absence de corrélation observée à l’issue de l’étude précédente indique que nous ne comprenons pas comment les bits sont encodés dans le message acquis, sous réserve que le mot de synchronisation encodé par convolution soit correct, hypothèse que nous ferons compte tenu des informations fournies sur [2]. Lorsque nous avions étudié la modulation en phase binaire BPSK – Binary Phase Shift Keying, nous avions vu que deux cas pouvaient se produire [3][4] soit le signal acquis était en phase avec l’oscillateur local, et les bits issus de la comparaison de la phase entre le signal reçu et la reproduction locale de la porteuse boucle de Costas étaient ceux attendus, soit le signal était en opposition de phase et les bits étaient inversés par rapport à la valeur attendue. Dans les deux cas, la corrélation avec le mot de synchronisation accumule de l’énergie le long de la séquence de bits et se traduit, en prenant la valeur absolue, par un pic de corrélation, que nous ayons la bonne séquence dans la trame acquise ou son opposé. Ce cas simple se complique dans le cas de QPSK Quadrature Phase Shift Keying [5], dans lequel la phase prend quatre états possibles qui encodent chacun une paire de bits figure 1. L’assignation entre la valeur de la phase et la paire de bits correspondante n’est pas évidente, mais surtout toute erreur dans l’assignation symbole-paire de bits se traduit par une séquence erronée, qui ne corrèle pas avec le mot recherché. À titre d’exemple, si nous attribuons 0° à la paire de bits 10 et 90° à 11 code de Gray, dans lequel seul 1 bit change entre deux valeurs adjacentes de la phase alors une séquence 0-90° se traduit par 1011, alors que l’assignation 0° à 11 et 90° à 01 interprète la même séquence de phases par 1101 les deux messages issus de la même séquence de phases mesurées sont complètement différents et n’ont aucune chance d’accumuler l’énergie nécessaire au pic de corrélation, lors de la comparaison avec le motif de synchronisation de référence. On notera, en comparant la figure 1 à la dernière figure de la première partie de cet article, que nous avions placé la paire de bits 00 sur la mauvaise valeur de phase voir figure 7 de la section 5 de l’article précédent, pour l’assignation entre chaque symbole et chaque paire de bits dans le Constellation Soft Decoder – -1+1j, 1+1j, 1-1j], [0, 1, 3, 2], 4, 1.base, et l’analyse que nous proposons ici en figure 2. Par ailleurs, le code de Gray peut évoluer dans le sens horaire ou trigonométrique, induisant encore un risque d’erreur. Il ne semble pas y avoir de façon d’identifier l’assignation phase-paire de bits autre que la force brute, dans laquelle toutes les combinaisons de codes possibles sont testées, tel que nous l’enseigne le contenu de de dans meteor_decoder 1111110010100010101101100011110110110000000011011001011110010100 0101011011111011110100111001010011011010101001001100000111000010 0000001101011101010010011100001001001111111100100110100001101011 1010100100000100001011000110101100100101010110110011111000111101 1111110001010001011110010011111001110000000011100110101101101000 0101011000001000000111001001011100011010101001110011110100111110 0000001110101110100001101100000110001111111100011001010010010111 1010100111110111111000110110100011100101010110001100001011000001 Ceci donne toutes les combinaisons possibles de paires de bits dans le mot encodé par convolution, et la corrélation du message acquis se fait avec toutes les déclinaisons de ce code. Fig. 2 Exemple de signaux synthétiques permettant d’analyser la configuration du Constellation Soft Decoder par calcdist[-1-1j, -1+1j, 1+1j, 1-1j], [0, 1, 3, 2], 4, 1.base. Nous constatons que l’assignation des symboles aux paires de bits ne correspond pas à la norme figure 1. Cependant, nous avons encore un problème ces inversions de bits se font facilement sur des valeurs binaires du mot de référence en inversant 1 et 0, mais que faire avec les soft bits qui encodent chaque phase reçue dans le message acquis avec une valeur continue codée sur 8 bits ? Sommes-nous obligés de décider maintenant de la valeur attribuée à chaque phase soft→ hard bits, ou pouvons-nous manipuler les valeurs brutes ? Il nous faut interpréter les échanges de bits comme des opérations de rotation ou de symétrie de la constellation figure 3. Nous constatons qu’échanger des bits correspond à des opérations entre partie réelle et partie imaginaire, soit de rotation, soit de symétrie le long d’un des axes du plan complexe. Ainsi, en manipulant la partie réelle et imaginaire des données acquises, nous pouvons atteindre le même résultat que l’échange des bits, mais en conservant les valeurs continues des soft bits et en repoussant l’attribution de chaque bit 0 ou 1 à chaque valeur de phase au décodage par l’algorithme de Viterbi. Fig. 3 Rotations et symétries de la constellation, et le résultat correspondant sur les axes réel et imaginaire I et Q des données brutes acquises. L’identification de la correspondance entre les 4 états QPSK dans le diagramme de constellation I en abscisse, Q en ordonnée et les paires de bits correspondantes nécessite donc une attaque brute, dans laquelle tous les cas possibles sont testés. La corrélation des phases des signaux acquis avec les diverses permutations possibles du code d’en-tête de trame encodé par convolution est illustrée en figure 4. Une seule condition d’attribution des symboles aux paires de bits fournit une séquence périodique de pics de corrélation figure 4, bas il s’agit de la bonne correspondance, que nous exploiterons pour la suite du décodage. Fig. 4 Corrélation pour les 4 cas possibles de rotation de la constellation QPSK avec le code connu de début de trame. Nous constatons que seul le quatrième cas – en bas – fournit des pics périodiques de corrélation représentatifs du début de trame. C’est donc cette attribution des 4 symboles de QPSK aux paires de bits correspondants qui est correcte. Cette permutation sera désormais appliquée à tous les couples I/Q du message acquis, car nous savons que nous retrouverons alors la séquence de bits émise par le satellite, lors du décodage par algorithme de Viterbi appliqué aux soft bits résultants. Des bits aux phrases mise en œuvre du décodage par algorithme de Viterbi Nous avons maintenant une séquence de phases comprises dans l’ensemble [0;π/2;π;3π/2] convenablement organisée pour devenir une séquence de bits dans laquelle nous retrouvons le mot de synchronisation, et nous n’avons qu’une unique attribution des divers symboles {00;01;11;10} à chaque phase qui fournit une solution présentant cette corrélation. Il nous reste à décoder pour retirer l’encodage par convolution, puis appliquer aux bits résultants qui étaient donc les bits encodés par le satellite avant convolution une séquence de XOR OU exclusif avec un polynôme garantissant de rendre la séquence aussi aléatoire que possible, pour éviter tout risque de répétition trop long du même état de bit. Nous avons mentionné la disponibilité de libfec, implémentant efficacement le décodage des signaux encodés par code de convolution. Nous étendons ici l’exemple simple au cas pratique de la trame complète. Notre première idée a consisté à décoder d’un coup l’ensemble du fichier acquis. De cette façon, nous cachons le problème de l’initialisation et de la fin du décodage du code de convolution par l’algorithme de Viterbi. Cela fonctionne, puisque nous vérifions après décodage que, tous les 1024 octets, nous retrouvons le code de synchronisation 0x1ACFFC1D. Nous avons rencontré un problème d’erreur d’accès à un segment mémoire segmentation fault, en allouant le tableau permettant de charger l’ensemble du fichier. En effet, le fichier contenant les octets en soft bits fait 11,17 MB, donc nous avions alloué un tableau statique, comme le ferait tout bon développeur sur système embarqué qui n’a pas accès à l’allocation dynamique de mémoire malloc, gourmande en ressources. Cependant, ce faisant nous plaçons le tableau sur la pile, et GNU/Linux impose par défaut une pile de 8192 kB, tel que nous le dit ulimit -s 8192. Plutôt qu’imposer une limite de taille de pile plus importante, nous nous autorisons sur notre système d’exploitation une allocation dynamique de mémoire, pour placer le tableau sur le tas et non sur la pile, libérant ainsi la contrainte de place mémoire occupée. 01 include // from libfec/ 02 include // gcc -o demo_libfec -I./libfec ./libfec/ 03 include 04 include // read 05 include 06 define MAXBYTES 11170164/16 // file size /8 bytes-> bits /2 Viterbi 07 08 define VITPOLYA 0x4F 09 define VITPOLYB 0x6D 10 int viterbiPolynomial[2] = {VITPOLYA, VITPOLYB}; 11 12 int mainint argc,char *argv[]{ 13 int i,framebits,fd; 14 unsigned char data[MAXBYTES],*symbols; 15 void *vp; 16 17 symbols=unsigned char*malloc8*2*MAXBYTES+6; // *8 for bytes->bits & *2 Viterbi 18 // rootrugged~ ulimit -a 19 // stack size kbytes, -s 8192 20 // -> static allocation stack of max 8 MB, after requires malloc on the heap 21 fd=open"./ readfd,symbols,MAXBYTES*16; closefd; 22 23 for i=1;i hard bits 05 [dv,e]=viterbi[1 1 1 1 0 0 1 ; 1 0 1 1 0 1 1 ],phrase,0; 06 data=dv14end*8+dv24end*4+dv34end*2+dv44end; Finalement, le lecteur désireux de poursuivre son exploration de Meteor-M2 exclusivement par GNU Radio n’est pas en reste les codes correcteurs d’erreur et libfec sont implémentés dans gr-satellite de et décrits en détail dans le blog de D. Estévez sur Sous sa direction lors de divers échanges de courriers électroniques, nous avons fini par faire aboutir le décodage du mot de synchronisation par son bloc de déconvolution par algorithme de Viterbi, selon le schéma de traitement proposé en figure 5. Partant d’un fichier binaire contenant le mot encodé fca2b63db00d9794, par exemple généré par echo -e -n "\xfc\xa2\xb6\x3d\xb0\x0d\x97\x94" > nous visons à retrouver le mot de synchronisation 1acffc1d qui démontrerait notre compréhension du décodeur. Attention le point qui nous a bloqués n’est pas la configuration du décodeur, qui reprend exactement la notation de libfec, mais le format des données en entrée. En effet, GNU Radio s’attend, tel que décrit au détour de la page d’aide de fec_decode_ccsds_27_fb bloc GNU Radio Companion Decode CCSDS 27 de gr-fec, à recevoir une entrée comprise entre -1 et +1 et non 0 à +1 comme nous nous y serions attendus pour une représentation de bits il s’agit ici de soft bits, compris entre expjπ=-1 et expj0=+1et non de hard bits. Nous prenons donc les bits issus de la lecture du fichier contenant le mot encodé, multiplions par 2 donc facteur d’homothétie inverse de 0,5, valeur à renseigner dans , retranchons 1 et éventuellement, échangeons les valeurs des bits multiplication par -1 pour atteindre le bon résultat et non son opposé. Nous vérifions sur la sortie graphique de la figure 5 que la lecture du fichier est fonctionnelle, et en observant la sortie de ce flux de traitement par xxd par exemple, nous trouvons $ xxd cut -d -f2 1acf fc1d 1acf fc1d 0334 53c0 1acf fc1d .........4S..... Ceci n’est pas parfait, mais ressemble bien à nos attentes. Nous trouvons bien la séquence 1acffc1d, mais parfois une séquence erronée 033453c0 se glisse, du fait d’une mauvaise initialisation du décodeur de Viterbi. En effet, Viterbi fait l’hypothèse d’une initialisation avec tous les éléments du registre à décalage à 0, ce qui n’est pas nécessairement le cas ici lors d’une lecture répétitive du mot encodé. D. Estévez présente sur les diverses déclinaisons sur la configuration du décodeur pour respecter les diverses déclinaisons de la norme du CCSDS. Fig. 5 Flux de traitement dans GNU Radio Companion, exploitant gr-satellite et le bloc généraliste de décodage du code de convolution par Viterbi, FEC Extended Decoder configuré pour respecter la norme du CCSDS pour démontrer le décodage du mot de synchronisation. L’entrée se généralisera donc au fichier enregistré et contenant les soft bits de Meteor-M2. Le mot annoté sur le graphique du bas est l’opposé du mot fourni dans le fichier d’entrée 0xFCA2B63DB00D9794, issu de l’encodage du code de synchronisation pour que la sortie réponde à nos attentes l’inversion de bits est prise en charge par la multiplication par -1, juste avant l’affichage en haut à droite du flux de traitement. Nous prétendons avoir décodé les messages venant du satellite, mais sommes nous certains de la validité de ces bits ? Afin de chercher rapidement une séquence connue de bits, nous reprenons le cas proposé au début de cet article, à savoir rechercher par corrélation un motif connu. Or il se trouve que, sans rien connaître à l’encodage des paragraphes qui formera l’objet de la suite de ce texte, la description du protocole a inclus dans son Appendice A une description de la trame de télémétrie, censée contenir la date à bord du satellite, et cette trame est identifiée par le code PRS-64 formé de la séquence "2 24 167 163 146 221 254 191". Sommes-nous capables de trouver cette séquence d’octets dans les trames décodées ? Ayant obtenu des bits que nous supposons avoir stocké dans le tableau dv, nous les concaténons sous GNU/Octave en quartets, puis en octets tableau data et en trames matrice fin ci-dessous 01 % data est le tableau d'octets issus de Viterbi tel que vu auparavant 02 for k=124 % on analyse les 24 premiers blocs 03 d,k=data1+k-1*2048k*2048; % trames de 2048 quartets 04 dd,k=d12end,k*16+d22end,k; % quartets -> octets 05 fin,k=dd5end,k; % retire l'en-tête de synchro de chaque paquet 06 fin,k=[bitxorfin1255,k',pn bitxorfin1+255255+255,k',pn ... 07 bitxorfin1+255*2255+255*2,k',pn bitxorfin1+255*3255+255*3,k',pn]; 08 end Nous constatons que nous avons dû appliquer un code pn, qui a été conçu pour rendre la séquence de bits aussi aléatoire que possible et donc distribuer l’information par masquage bijectif XOR. Cette structure aléatoire des trames évite de longues séquences de la même valeur de bits, rendant la récupération de l’horloge compliquée. La séquence de pn longue de 255 éléments est fournie sur et nous nous contentons de l’appliquer à nos octets, regroupés par paquets de 255 les 4 octets d’en-tête, qui ne subissent pas cette transformation, ont déjà été retirés. Finalement, ces trames sont analysées pour y rechercher l’occurrence de la séquence magique PRS-64, représentative de la trame de télémétrie. L’obtention de cette séquence prouve que notre procédure est cohérente, car non seulement nous identifions la séquence d’octets indicatrice de la télémesure – séquence qui n’a à peu près aucune chance d’apparaître par hasard – mais en plus l’analyse de la télémesure fournit un résultat cohérent avec les conditions d’acquisition et le décodage par meteor_decoder Onboard time 1148 sous la forme date_header=final589589+7,9' % on a trouvé la date dans CADU 9 sur les 24 traitées date=final589+8589+11,9' ans = 11 48 33 197 Nous avons réussi à trouver l’heure qu’il était à bord du satellite au moment de la capture de l’image, validant la procédure d’obtention des octets à partir du flux de données I/Q. Maintenant que nous sommes confiants sur la séquence de bits, le reste de l’analyse n’est plus que de l’assemblage de trame et du décodage d’images, une activité plus classique d’informatique que de traitement du signal. Des phrases aux paragraphes La séquence de bits respecte la norme décrite dans les documents techniques, nous avons donc fini notre travail de décodage. Pas tout à fait... le satellite transmet une image, et nous avons obtenu une date. C’est un peu maigre comme résultat. Pouvons-nous aller plus loin ? C’est là que les couches de la norme OSI apparaissent. Une image est une somme conséquente d’informations, trop grosse pour être contenue dans un unique paquet transmis depuis le satellite. Pire, le satellite envoie au moins 3 bandes spectrales selon que nous soyons le jour ou la nuit, ces bandes changent... c’est quoi le jour ou la nuit au Spitsberg, avec ses 3 mois de jour et 3 mois de nuit complets ?! qui sont interlacées entre les divers paquets. Nous comprenons mieux pourquoi la norme OSI sépare les divers niveaux d’abstraction une image est une entité découpée en couches de couleurs, qui sont elles-mêmes découpées en blocs codage JPEG, qui sont eux-mêmes découpés en paquets qui sont transmis vers le sol, avec toute l’artillerie de correction d’erreurs et de redondance pour maximiser les chances que le récepteur reçoive un flux de données intègre. J’ai bien écrit JPEG dans la phrase précédente pour quelqu’un qui a été élevé avec tous les méfaits des compressions à perte d’images et des artefacts induits par la compression JPEG, est-il possible que les images transmises par satellites soient codées ainsi ? Le compromis tient probablement entre le débit de données accessible sur une liaison relativement basse fréquence et la masse de données à transmettre pour récupérer une image haute résolution on prendra évidemment soin, lors du traitement de telles images, de ne pas s’apitoyer sur les artefacts de codage des blocs de 8x8 pixels, qui vont être l’objet de la discussion qui va suivre. Le point, fort peu clair dans la documentation, tient sur la définition du Minimum Code Unit MCU nous apprenons que chaque MCU comporte 196 zones adjacentes d’une image, chacune formée de 14 imagettes de 8x8 pixels. Le point qui ne nous était pas apparu clair dans la documentation est que les MCU successifs sont indépendants les uns des autres. Ainsi, une ligne d’image est formée de 14 MCU, chacune contenant 14 imagettes de 8x8 pixels 14 x 14 = 196 et 14 x 14 x 8 = 1568 pixels est bien la largeur d’une image issue de Meteor-M2. Donc, notre objectif est de décoder des imagettes de 8x8 pixels encodées en JPEG, de les concaténer, et ce, jusqu’à former une ligne d’une image dans une composante spectrale. La procédure se répète pour les deux autres bandes spectrales, avant de recommencer suite à une trame de maintenance identifiant 70 fourni dans le champ APID, APplication IDentifier – les images ont quant à elles des identifiants APID compris entre 64 et 69 . Par ailleurs, un paquet MCU peut ne pas entrer complètement dans la charge utile de la couche protocolaire M-PDU il se peut que la charge utile d’un M-PDU contienne plusieurs MCU successifs par exemple, lorsque les imagettes compressées en JPEG sont petites, tel que lors de la transmission d’une zone de couleur uniforme ou bien qu’un MCU soit distribué entre deux M-PDU. Ainsi, l’en-tête du paquet VCDU contient un pointeur qui nous informe de l’indice auquel le prochain M-PDU démarre. Avant ce pointeur, nous obtiendrons la fin du paquet M-PDU précédent. Nous avions placé dans la matrice fin les diverses trames successives, décodées après application de l’algorithme de Viterbi et derandomization nous affichons le contenu des premières lignes de cette matrice, pour constater la cohérence d’un certain nombre de motifs – en-tête des paquets – avant d’atteindre la charge utile, qui sera elle aléatoire. Le document qui nous est apparu le plus limpide pour décoder les trames est [7]. octave28> fin116, % voir NASA du PDF 64 64 64 64 64 64 64 64 64 64 64 64 64 64 Version 5 5 5 5 5 5 5 5 5 5 5 5 5 5 Type 140 140 140 140 140 140 140 140 140 140 140 140 140 140 \ 163 163 163 163 163 163 163 163 163 163 163 163 163 163 - counter 43 44 45 46 47 48 49 50 51 52 53 54 55 56 / 0 0 0 0 0 0 0 0 0 0 0 0 0 0 sig. field 0 0 0 0 0 0 0 0 0 0 0 0 0 0 VCDU insert 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... zone 0 0 2 1 0 0 0 0 0 0 0 0 2 0 5 bits 0 18 142 28 54 18 130 78 226 0 20 70 28 82 32 M_PDU header 77 166 239 222 73 82 83 199 8 28 232 247 165 183 M_PDU... 133 188 229 42 24 23 220 94 68 117 92 151 87 203 ... 882 bytes 75 177 221 215 0 48 49 128 13 166 8 218 126 212 42 138 254 87 12 32 249 87 34 172 247 107 9 142 146 238 236 80 215 96 143 121 0 124 12 89 86 191 179 227 64 144 89 59 240 105 105 251 46 43 0 199 ^ Nous analysons ceci comme suit, de la première à la dernière ligne, en commençant par le VCDU Primary Header de 6 octets 64 correspond à la version constante de 01, suivie de 6 zéros pour les bits de poids fort du VCDU Id S/C id. Ainsi, les 8 premiers bits sont 0100 0000 ; suit l’identifiant du satellite qui transmet champ Type de VCDU Id ce champ est renseigné dans [6] comme valant 5, si l’instrument est présent et 63, si l’instrument est absent. Ici, une valeur de 5 est un bon présage pour la suite du décodage des images. Par ailleurs, [8, p. 149] indique qu’un VCDU Id de 5 AVHRR LR sera associé aux canaux APID 64..69, que nous identifierons plus tard ; le VCDU Counter de 3 octets s’incrémente à chaque paquet, tel que nous l’observons avec le décompte sur le dernier octet 140 163 43..56 du triplet d’octets, correspondant au compteur de trame ; tous les champs suivants signaling field sont renseignés comme nuls, pour indiquer la transmission de données en temps réel, tout comme les champs VCDU Insert zone et l’absence de cryptographie [8, p. 150] ; enfin, les deux derniers octets de l’en-tête fournissent un pointeur, qui nous indique à quel emplacement se trouvera le début du premier paquet contenu dans cette trame. Cette information est probablement la plus importante, car un paquet M_PDU a toutes les chances de se partager entre plusieurs trames et donc, savoir où commence le premier paquet M_PDU contenu dans la trame permet de synchroniser le début du décodage d’une nouvelle image. Les 5 premiers bits sont toujours nuls, tandis que les 11 derniers bits donnent l’adresse, dans la trame, du début du premier paquet utile. Dans la séquence proposée ici, le pointeur se calcule comme x=fin9,*256+fin10,+12 = 30 154 552 322 30 142 90 238 12 32 82 40 606 44 les 882 octets qui suivent sont la charge utile M-PDU, contenant les champs du canal virtuel Virtual channel field. Nous pourrons nous convaincre que la position de l’en-tête, identifiée ci-dessus, est correcte par for k=1lengthx;finxk,k,end, qui renvoie 64 64 64 64 65 65 65 65 68 64 64 64 64 65 qui est la liste des identifiants des canaux virtuels que nous analyserons ci-dessous, les diverses longueurs d’onde observées pour former les images APID compris entre 64 et 69 [6] ; la 9e colonne est un peu spéciale, car elle contient le premier paquet de la séquence de transmissions du canal d’APID 68, donc un en-tête d’offset par rapport à la fin de l’en-tête du VCDU, qui permet de commencer à appréhender le format de la charge utile M_PDU, sans avoir à en rechercher le début. Nous verrons ainsi que 8=0000 1000 est la version ID=000/Type Indicator=0/Secondary Header 1=present/000 APID, puis APID=68 est un des canaux de mesure et finalement, la longueur du paquet en octets est fournie par {0 105}. 2. Que de texte... des images maintenant Nous avons identifié comment décoder la trame VCDU, maintenant il reste à analyser la charge utile qu’est le M_PDU. Plusieurs M_PDU peuvent se regrouper dans une même trame VCDU par exemple, lorsque la charge utile qu’est une imagette JPEG est fortement compressée et un M_PDU peut se distribuer entre deux VCDU successifs – il n’y a aucune raison pour que la taille de la charge utile M_PDU soit multiple de la taille d’une trame VCDU. Nous avons identifié auparavant les pointeurs, dans l’en-tête du VCDU, de l’adresse de début de chaque paquet M_PDU contenu dans le VCDU. Si nous affichons les premiers octets de chaque M_PDU, nous observons un motif cohérent 8 8 8 8 8 8 8 8 8 8 8 68 68 68 68 68 68 68 70 64 64 64 13 13 13 13 13 13 13 205 77 13 13 34 35 36 37 38 39 40 41 42 43 44 0 0 0 0 0 0 0 0 0 0 0 105 47 49 69 81 107 57 57 97 77 79 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 2 2 2 2 2 2 2 2 136 136 136 136 136 136 136 136 136 136 136 181 181 181 181 181 181 181 181 186 186 186 124 124 124 124 124 124 124 124 76 76 76 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 98 112 126 140 154 168 182 2 0 14 28 0 0 0 0 0 0 0 24 0 0 0 0 0 0 0 0 0 0 167 0 0 0 255 255 255 255 255 255 255 163 255 255 255 240 240 240 240 240 240 240 146 240 240 240 77 77 77 77 77 77 77 221 77 79 81 243 186 210 178 136 175 242 154 173 238 235 197 41 160 177 253 120 216 191 166 148 77 60 194 210 146 236 9 151 11 88 100 166 240 156 80 106 84 81 201 48 42 228 208 105 41 5 65 152 245 135 33 131 208 9 254 104 41 23 193 172 56 197 38 210 28 91 52 20 205 1 233 249 0 62 115 118 Nous allons analyser ceci dans le cas particulier de la première colonne 68 est l’identifiant packet identifier de l’instrument à bord du satellite qui transmet l’information, APID. Comme une image d’un instrument s’étalera sur plusieurs paquets successifs, il est normal que nous retrouvions plusieurs fois de suite le même APID. Un cas intéressant est l’APID 70 de la colonne 8, qui indique une trame de télémesure qui nous avait permis auparavant de trouver l’heure à bord du satellite, au moment de la prise de vue. “13 34” est formé de deux premiers bits, indiquant s’il s’agit du premier paquet d’une séquence 01 ou la suite d’une transmission 00, suivie du compteur de paquets, sur 14 bits, qui nous servira à savoir si nous avons perdu une imagette dans une ligne. Nous constatons bien que l’octet de poids faible s’incrémente à chaque nouveau M_PDU. Les deux octets qui suivent indiquent la longueur du paquet M_PDU, ici 105 octets. Suit la date codée sur 64 bits, soit un jour sur deux octets “0 0”, un nombre de millisecondes dans la journée codé sur 32 bits “2 136 181 124”, valable pour tous les paquets d’une même image et finalement, un complément de date en microsecondes codé sur 16 bits et fixé, pour Meteor-M2, à “0 0”. La description du champ de données indique l’indice du premier MCU Minimum Code Unit, imagette dont l’assemblage formera une ligne de l’image finale. Cet indice de MCU s’incrémente de 14 entre deux paquets successifs, ici 98 112 126, puisque les imagettes sont regroupées par paquets de 14, pour améliorer la compression. Finalement, l’en-tête de l’image contient 16 bits fixés à 0 Scan Header suivi du Segment Header contenant un indicateur de présence de facteur de qualité sur 16 bits, fixé à 0xFF 0xF0 ou 255 240 suivi de la valeur de ce facteur de qualité, qui interviendra dans la quantification de l’imagette JPEG – dans notre cas 77, mais variable le long d’une ligne de l’image finale. Suivent les données des 14 MCU successifs formant 14 imagettes de 8x8 pixels, ou 64 octets successifs dans la nomenclature dans le cas de la première trame, cette charge utile commence par 243 197. Cette description un peu fastidieuse est nécessaire pour bien comprendre le lien entre les VCDU et les M_PDU, qui finalement représentent deux abstractions du flux de données, à deux niveaux différents des couches OSI. Une fois cette distinction assimilée, l’assemblage des imagettes JPEG, pour former une ligne, n’est plus que question de rigueur dans le suivi de la norme. Sous GNU/Octave, les octets représentant chaque MCU, composé de 14 imagettes, sont regroupés dans des fichiers individuels suivant le bout de programme 01 for col=123 % numéro de colonne = numéro de frame VCDU 02 first_head=fin9,col*256+fin10,col % 70 pour colonne 11 03 fin[1first_head+1]+9,col';% début de la ligne 11 1er header en 70 04 fin[122]+first_head+11,col';% début du MCU de la ligne 11 05 06 clear l secondary apid m 07 l=finfirst_head+16-1,col*256+finfirst_head+16,col; % vector of packet lengths 08 secondary=finfirst_head+16-5,col; % initialise la liste des en-têtes 09 apid=finfirst_head+16-4,col; % initialise la liste des APIDs 10 m=fin[first_head+12first_head+12+P],col; 11 k=1; 12 while suml+k*7+first_head+12+P1 quality=atoiargv[1]; 09 fd=open" 10 len=readfd, packet, 1100; 11 closefd; 12 len, 65,0,0,quality; 13 } Ceci se linke sur et de l’archive GitHub citée précédemment. En exploitant ce programme, à qui nous fournissons en format binaire la charge utile qu’est chaque MCU, nous obtenons en sortie une matrice de 14x64 éléments que nous nommerons imag, chaque ligne de 64 octets étant elle-même une imagette de 8x8 pixels. En réorganisant sous GNU/Octave ces 64 éléments par m=[];for k=1sizeimag1 a=reshapeimagk,,8,8; m=[m a'];end, nous obtenons une matrice de 112x8 pixels que nous affichons par imagescm pour visualiser l’image, telle que présentée en figure 6 gauche. Cette procédure est répétée pour les 14 MCU qui forment une ligne de l’image finale la figure 6 illustre la concaténation de la première série d’imagettes gauche avec une seconde série, démontrant la continuité des motifs. Cette séquence se poursuit pour toute une ligne d’images acquise à une longueur d’onde donnée par un instrument donné donc une valeur d’APID donnée, avant de reprendre pour un nouvel APID et ainsi former, en parallèle, plusieurs images acquises à plusieurs longueurs d’onde. On notera l’excellent facteur de compression de JPEG sur ces zones relativement homogènes il ne faut qu’une soixantaine d’octets pour encoder ces images de 14x64=896 pixels. Les zones les plus structurées nécessitent tout de même des MCU de plusieurs centaines d’octets, voire jusqu’à 700 octets. Fig. 6 Décodage d’un MCU haut formé de 14 imagettes de 8x8 pixels successives, et concaténation avec le MCU suivant bas pour former une image de 28x8=224 pixels de large et 8 pixels de haut. L’image complète finale sera ainsi assemblée petit à petit par morceaux de MCU. Cet exemple porte sur l’APID 68. Le résultat de l’assemblage des images décompressées de JPEG vers des matrices de 8x8 pixels est illustré en figure 7 pour l’instrument d’APID 68. Nous commençons à entrevoir une séquence cohérente d’images, mais clairement il manque quelques vignettes sur chaque ligne, car quelques paquets étaient corrompus et n’ont pas pu donner lieu à un décodage figure 7. Fig. 7 Haut résultat du décodage des imagettes JPEG et assemblage sans tenir compte du compteur. Nous observons clairement un décalage du motif lorsque des paquets manquent, résultant dans une image à peine exploitable. Bas si le compteur de paquet n’atteint pas la valeur attendue de 14 imagettes/MCU, alors de faux paquets manquants sont insérés cette fois, l’image est convenablement alignée. Ici, l’APID est 68. Nous pallions à ce dysfonctionnement, au moins provisoirement, en dupliquant chaque image manquante comme indiqué par le compteur de MCU à défaut de retrouver l’information perdue, nous arrivons au moins à aligner selon la verticale de l’image des vignettes adjacentes et ainsi, obtenir une image reconnaissable figure 8. Dans cet exemple, nous n’avons pas utilisé l’indice de qualité, qui modifie les facteurs de quantification de la compression JPEG en fonction de la nature de l’image, et des discontinuités sur les tons de gris restent visibles. Fig. 8 Résultat du décodage de l’APID 65, avec exploitation du compteur pour identifier les imagettes manquantes, mais sans exploitation de l’information de qualité du code JPEG. Les caractéristiques géographiques sont visibles, mais de forts contrastes existent au sein de l’image, la rendant peu esthétique. En intégrant le facteur de qualité comme argument passé au décodeur d’imagettes de meteor_decoder sur lequel nous lions notre programme, les tons de gris s’homogénéisent pour donner un résultat convaincant figure 9, proche de la référence qu’est l’image entièrement décodée par meteor_decoder figure 10. On notera qu’il s’agissait d’un passage du satellite loin de l’optimal lors d’une écoute depuis la France, puisque sont clairement visibles l’Istrie, les Alpes italiennes et autrichiennes ainsi que le lac Balaton en Hongrie structure allongée à l’abscisse 1050, environ en milieu d’image, laissant penser à un passage s’approchant de l’horizon Est. Fig. 9 Résultat du décodage de l’APID 65, avec exploitation du compteur pour identifier les imagettes manquantes, et de l’information de qualité du code JPEG. Les imagettes individuelles sont maintenant à peine visibles et les tons de gris évoluent continuellement sur l’image. Fig. 10 Résultat du décodage de l’APID 65 par medet, servant de référence pour comparaison avec la figure 9. 3. Décodage des images JPEG Nous avons exploité gr-starcoder, sans en comprendre le contenu. Cela ne saurait nous satisfaire nous devons comprendre, par quelle magie, des coefficients de Fourier ont été convertis en une imagette d’intensité lumineuse de pixels dans le domaine spatial nous sommes en tons de gris, donc nous oublions le concept de couleur seule l’intensité lumineuse, ou luminance, importe dans ce traitement. Nous désirons comprendre comment, à partir du MCU fourni par le décodage des trames, retrouver une imagette au format JPEG de 8 par 8 pixels. Nous savons qu’il y a un codage sans pertes de Huffman, avec éventuellement élimination des redondances en copiant une valeur qui se répète RLE – Run Length Encoding, pour finalement convertir les coefficients de Fourier dans le domaine spatial par une transformée en cosinus discrète. Le principal point de friction tient en la définition de la table de Huffman. Tout le monde pourra visiter les multiples pages décrivant [10, section le calcul de l’arbre binaire, permettant de trouver une représentation des données minimisant le nombre de bits nécessaires à représenter les informations les plus fréquentes, quitte à augmenter le nombre de bits nécessaires à représenter les informations les moins fréquentes statistiquement, le fichier s’en trouvera souvent réduit en taille c’est pourquoi la compression d’un fichier texte, avec beaucoup de redondance, est très efficace alors que la compression d’un exécutable binaire, où tous les octets sont à peu près équiprobables, ne donne que des résultats médiocres. Un point qui peut rendre le fichier compressé plus volumineux que le fichier original est le fait de transmettre la table de correspondance entre séquences de bits et données décodées. Dans le cas de LRPT, le choix est fait d’exploiter une table fixe, standardisée après analyse de suffisamment d’images pour avoir une distribution statistiquement représentative du nombre d’apparition de chaque symbole. La norme LRPT nous explique simplement de consulter [9]... un raccourci quelque peu grossier, puisque nous n’avons identifié qu’une unique page utile, sur les 186 que compte la norme ! Les tables qui permettront de retrouver les arbres de décodage pour les composantes DC – fréquences nulles – et AC – fréquences non nulles – de la transformée de Fourier de l’image se trouvent en page 158. Nous allons donc nous efforcer, grâce aux explications de et section 3, de comprendre comment lire ces tables, nommées DHT pour Define Huffman Table. On nous explique que le nombre de codes composé de N bits est X’00 02 01 03 03 02 04 03 05 05 04 04 00 00 01 7D’ Et que l’assignation de la valeur à chacun de ces codes suit la séquence X’01 02 03 00 04 11 05 12 21 31 41 06 13 51 61 07' ... Notez que ces séquences sont celles visibles dans de meteor_decoder premières lignes du tableau t_ac_0. La partie implicite est comment former lesdits codes ! La première table nous informe qu’il y a 0 code de 1 bit, 2 codes de 2 bits, 1 code de 3 bits, 3 codes de 4 bits, 3 codes de 5 bits, 2 codes de 6 bits... Il nous faut donc former cette séquence de bits. L’opération consiste à compter en binaire, et lorsque nous incrémentons le nombre de bits nécessaires à continuer la séquence, nous partons de la séquence précédente que nous complétons d’un 0 en rouge ci-dessous. Cela donne en pratique 00 premier code de deux bits 01 second code de deux bits 10 unique code de 3 bits 101 premier code de 4 bits 1011 deuxième code de 4 bits 1100 troisième code de 4 bits 1101 premier code de 5 bits 11011 deuxième code de 5 bits 11100 troisième code de 5 bits 11101 premier code de 6 bits 111011 second code de 6 bits 111100 premier code de 7 bits ... Et la table qui suit nous informe de la valeur associée à chacun de ces codes 00 = 1 01 = 2 100 = 3 1010 = 0 1011 = 4 1100 = 0x11 = 17 11010 = 5 11011 = 0x12 = 18 11100 = 0x21 = 33 111010 = 0x31 = 49 111011 = 0x41 = 65 1111000 = 6 1111001 = 0x13 = 19 ... On se rassurera en constatant que la somme des éléments de la première table vaut 162, qui est bien le nombre d’éléments dans la seconde table il y aura donc bien une valeur pour chaque code. Bien que les valeurs soient comprises entre 0 et 255, nous constatons que 125 de ces éléments nécessiteront 16 bits pour être codés au lieu de 8. Néanmoins, comme la majorité des valeurs se regroupe autour des quelques éléments, ces valeurs codées sur 16 bits apparaissent suffisamment peu souvent pour qu’en moyenne, la compression soit rentable. Une façon élégante, même si peu utile, pour se raccrocher aux arbres binaires bien connus du codage de Huffman, est de représenter le code tel que proposé sur la figure 11. Fig. 11 Représentation en arbre binaire de la table du code de Huffman, proposé dans [9]. Le problème est le même, mais plus simple pour la composante DC qui contient beaucoup moins de valeurs X’00 01 05 01 01 01 01 01 01' Le contenu est ici séquentiel de 0 à 0xb = 11. Ici encore, nous ne constatons aucun code de 1 bit, 1 code de 2 bits, 5 codes de 3 bits, puis 1 code de 4 à 9 bits. Cette séquence s’écrit donc 00 = 0 010 = 1 011 = 2 100 = 3 101 = 4 110 = 5 1110 = 6 11110 = 7 111110 = 8 ... Nous voici maintenant équipés pour décoder une image JPEG. Si nous observons la séquence binaire du début d’un MCU issu des décodages précédents, nous obtenons $ xxd -b head -2 00000000 11111011 01010011 11000111 11110110 11110000 11101000 .S.... 00000006 10011111 10110011 00011111 10001101 00111110 00100000 ....> Ceci commence par la composante DC de la transformée en cosinus discrète de l’image, suivi des 63 composantes AC la transformée de Fourier est bijective, donc les 64 pixels de l’imagette de 8 par 8 pixels donnent 64 coefficients de Fourier, avec éventuellement un certain nombre de valeurs nulles. À chaque fois, nous aurons le couple “nombre de bits” suivi de “valeur”. En suivant à partir du début jusqu’à atteindre le premier code DC valable, nous constatons que nous obtenons 111110 premier 0 atteint, soit la valeur 8 dans la seconde table qui nous venons d’exposer. Cela signifie que la valeur de la composante DC est codée sur les 8 bits qui suivent, soit 11 010100=212 en décimal. Nous verrons plus bas si cette valeur est correcte. Suit le premier des 63 coefficients AC ici encore, nous lisons la séquence de bits jusqu’à atteindre le premier code valable dans la première table exposée ci-dessus 11 11000 est le premier code valable que nous rencontrons, qui est associé à la valeur 6. Le premier coefficient AC est donc codé par les 6 bits qui suivent, soit 111 111=63 en décimal. Continuons pour découvrir une autre subtilité de l’assignation des codes aux séquences de bits nous poursuivons où nous nous étions arrêtés dans la lecture des bits pour trouver 1011, qui correspond à la valeur 4 et indique que nous lisons les 4 bits qui suivent, soit 0 111 pour connaître la valeur du coefficient suivant. Et là, une simple conversion binaire ne convient plus, puisque la représentation n’est pas en complément à 2, mais séquentielle, avec le codage du nombre signé composé uniquement de 0s, représentant la valeur minimum de l’intervalle et le codage formé de 1s, la valeur maximale. Donc 0 111 ne vaut pas +7 comme le ferait un bête convertisseur binaire vers décimal, mais -8 puisque sur 4 bits, nous pouvons représenter de -15 à +15 en excluant l’intervalle de -7 à +7, qui aurait été codé avec moins de bits. Ceci est résumé dans le tableau F1 de la page 89 de [9] ou Table 5 de que nous reproduisons ici dans le tableau suivant, montrant la correspondance entre le nombre de bits affectés à une valeur, la séquence de bits et la valeur elle-même on notera que l’intervalle pris en charge par un nombre inférieur de bits est exclu de l’intervalle représenté par un nombre de bits donné Longueur 0 0 1 0 1 -1 1 2 00,01 10,11 -3, -2 2,3 3 000,001,010,011 100,101,110,111 -7,-6, 4,5,6,7 4 0000,...,01111 1000,...,1111 -15,...,-8 8,...,15 5 00000,...,011111 10000,...,11111 -31,...,-16 16,...,31 6 000000,... ...,111111 -63,...,-32 32,...,64 7 0000000,... ...,1111111 -127,...,-32 32,...,64 8 00000000,... ...,11111111 -255,...,-128 128,...,255 ... ... ... ... ... Suit ensuite le code 100 qui vaut 3 et dont les 3 bits qui suivent valent 00 1 soit -6, et nous continuons ainsi pour décoder tous les coefficients de Fourier ou rencontrer la valeur 0 pour le nombre de bits, signifiant la fin du MCU avec tous les autres coefficients nuls. Une fois les coefficients obtenus, ils sont réorganisés selon le motif de zigzag décrit en figure 5 de [9] ou explicité avec l’indice de chaque case de la matrice en figure 12, et la transformée en cosinus discrète est effectuée, pour passer du domaine spectral au domaine spatial. Fig. 12 Assignation de la position de chaque coefficient dans le codage en zigzag des coefficients, maximisant d’avoir les coefficients importants en début de séquence et d’éliminer bon nombre de coefficients de fréquence élevée vers la droite et le bas lors de la quantification. Nous pouvons nous convaincre de la validité de l’analyse, en modifiant légèrement de pour afficher les coefficients avant réorganisation et transformée en cosinus nous affichons le contenu nombres à virgule flottante ! de zdct[], juste avant la boucle dct[i] = zdct[ZIGZAG[i]] * dqt[i]; qui réorganise les coefficients selon le motif de zigzag. Ce faisant, nous obtenons 212 63 -8 -6 -27 -156 52 65 -2 10 3 -1 21 -1 -4 6 -14 0 6 2 4 1 0 2 4 5 0 16 1 -12 3 -1 0 -3 0 17 3 -2 1 0 2 7 -8 -4 3 -1 -1 1 -5 -1 0 -1 1 5 1 -1 -2 1 -1 -1 -1 1 1 0 Ceci commence bien par la séquence que nous avons identifiée pour se poursuivre avec les 64 coefficients. Après réorganisation selon le motif de zigzags et application du facteur d’homothétie qui a permis d’annuler un certain nombre de coefficients lors de la compression, nous obtenons un vecteur que nous nommerons coefficients 1484 315 -780 364 -44 108 368 28 -48 -162 390 -9 -168 0 -336 -200 -36 -12 147 0 90 78 224 -104 60 -8 60 52 -23 80 111 145 24 20 34 0 0 -50 47 35 44 0 -75 29 -37 -48 -52 -42 23 0 -72 40 0 -112 -55 46 561 126 -220 -45 52 -46 47 0 Ce sont les 64 coefficients dans le domaine spectral sur lesquels s’applique la transformée en cosinus discrète fonction idct2 de la signal processing toolbox de GNU/Octave – page 27 de [9] avec C = 1 / √2 et Ck≠ = 1 et S la matrice des coefficients de Fourier. Après l’iDCT, le décodeur fournit la séquence de 64 valeurs, que nous nommerons image 410 299 332 320 292 508 307 222 304 189 185 283 95 353 290 160 252 474 370 552 558 497 273 109 149 261 215 264 328 340 226 -4 417 289 641 512 644 510 245 95 282 56 407 255 466 390 160 -33 418 131 613 569 551 572 96 59 371 47 498 416 460 478 -45 78 Nous la réorganisons en imagette de 8x8 pixels et vérifions qu’à la constante de 128 près ajoutée par gr-starcoder tel que préconisé par la norme, nous obtenons le même résultat entreidct2reshapecoefficients,8,8 et reshapeimage,8,8 figure 13. Fig. 13 Une fois la séquence de coefficients de Fourier obtenue, la fin du traitement est triviale réorganisation le long du motif en zigzag, application du facteur d’homothétie définissant la qualité de l’image, puis finalement transformée en cosinus discrète inverse. Partant des coefficients de Fourier en bas à droite, en vérifiant que la composante continue du signal est bien en coordonnées 1,1 en haut à gauche de la matrice, nous comparons en haut à droite le calcul effectué par gr-starcoder et celui obtenu par transformée en cosinus discret 2D inverse idct2 de GNU/Octave. Nous constatons que l’erreur est à peu près constante et égale à 128 – constante ajoutée par gr-starcoder, après calcul de l’iDCT en haut à droite. Le facteur d’homothétie de chaque coefficient, qui est la source par quantification de la perte dans l’algorithme de compression JPEG, s’est déduit comme suit. Partant de la table de quantification HTK des coefficients de Fourier fournie en Table page 143 de [9] figure 14, un facteur de qualité Q est fourni avec chaque MCU pour indiquer le facteur de compression de l’image. De ce facteur de qualité Q, nous déduisons F=5000/Q si 20 On symbolisera donc le paquet IP à l'aide d'un symbole plus concis. Par exemple La partie FAQ donne quelques explications sur la décomposition en deux sous-adresses réseau et machine en IPv4 et IPv6. Les exercices suivants résument le fonctionnement en vous montrant comment cela fonctionne. 06 IPv4° Comment sait-on s'il faut rester dans le réseau local actuel ou quitter le réseau dans le cas suivant ? La machine d'adresse IPv4 /16 veut transmettre un paquet à la machine d'adresse DST . Correction ? ...CORRECTION... Le 16 derrière le slash veut dire que l'adresse réseau est caractérisée par les 16 premiers bits, donc les deux premiers octets Donc l'adresse IPv4 /16 veut dire que La partie adresse-réseau est La partie adresse-machine est L'adresse de l'autre machine étant , on peut dire que les deux machines sont sur le même réseau l'adresse commence par Il faut donc rester et chercher sur le réseau local. 07 IPv4° Comment sait-on s'il faut rester dans le réseau local actuel ou quitter le réseau dans le cas suivant ? La machine d'adresse IPv4 /24 veut transmettre un paquet à la machine DST . Correction ? ...CORRECTION... Le 24 derrière le slash veut dire que l'adresse réseau est caractérisée par les 24 premiers bits, donc les trois premiers octets Donc l'adresse IPv4 /24 veut dire que La partie adresse-réseau est La partie adresse-machine est L'adresse de l'autre machine étant , on peut dire que les deux machines ne sont pas sur le même réseau l'adresse ne commence pas par il y a un 21 à la fin. Il faut donc sortir du réseau pour trouver cette machine. 08 IPv4° Comment sait-on s'il faut rester dans le réseau local actuel ou quitter le réseau dans le cas suivant ? La machine d'adresse et de masque veut transmettre un paquet à la machine DST . Correction ? ...CORRECTION... Les 255 du masque signale les octets portant l'adresse du réseau. On ne tient donc compte que d'un seul octet. Donc l'adresse IPv4 et de masque veut dire que La partie adresse-réseau est La partie adresse-machine est L'adresse de l'autre machine étant , on peut dire que les deux machines sont sur le même réseau l'adresse commence par 20 Il faut donc rester sur le réseau. 09 IPv4° Comment sait-on s'il faut rester dans le réseau local actuel ou quitter le réseau dans le cas suivant ? La machine d'adresse IPv4 et de masque veut transmettre un paquet à la machine DST . Correction ? ...CORRECTION... Les 255 du masque signale les octets portant l'adresse du réseau. On tient donc compte des trois premiers octets. Donc l'adresse IPv4 et de masque veut dire que La partie adresse-réseau est La partie adresse-machine est L'adresse de l'autre machine étant , on peut dire que les deux machines sont sur le même réseau l'adresse commence par Il faut donc rester sur le réseau. 10 IPv6° Comment sait-on s'il faut rester dans le réseau local actuel ou quitter le réseau dans le cas suivant ? La machine d'adresse IPv6 2a01cb0c96acd40063baf65c361615d4 /64 veut transmettre un paquet à la machine d'adresse 2a01cb0c96acd40073ba12e3361645a1 . Correction ? ...CORRECTION... Les 4 premiers couples hexadécimaux caractérisent le réseau et le sous-réseau. On voit qu'ils sont identiques on reste sur le même réseau. 11 IPv6° Comment sait-on s'il faut rester dans le réseau local actuel ou quitter le réseau dans le cas suivant ? La machine d'adresse IP v6 2a01cb0c96acd4004545f65c361615d4 /64 veut transmettre un paquet à la machine d'adresse IP aabb9b0c96ac045d73ba12e3361645a1 . Correction ? ...CORRECTION... Les 4 premiers champs hexadécimaux en jaune caractérisent le réseau et le sous-réseau. On voit qu'ils ne sont pas identiques on doit changer de réseau. 4 - Tables de routage ⇩ ⇧ ⤊ On a donc un beau paquet IP qui contient l'adresse IP de la machine-destinataire DST et l'adresse de la machine-expéditeur SRC, c'est plus pratique pour répondre. Il n'y a plus qu'à envoyer le message. La difficulté est de savoir à qui transmettre le paquet pour gérer au mieux l'acheminement du paquet IP. Si on est déjà sur la bonne machine c'est la machine actuelle, en localhost, qui pourra transmettre le message à sa couche TRANSPORT. Si on est déjà sur le bon réseau c'est la machine actuelle en transmettant sur le réseau local, qui pourra transmettre le message à la couche RESEAU de la cible. Si nous ne sommes pas sur le bon réseau il va falloir trouver un routeur capable de nous rapprocher du réseau de la cible on dit aussi une passerelle. Voyons les trois cas possibles La machine-destinataire DST est l'ordinateur actuel lui même Exemple A9 doit transmettre un paquet IP à A9. c'est donc l'ordinateur actuel lui-même en mode localhost qui est le plus à même de transmettre le paquet IP. Il n'y a donc pas vraiment de passerelle. La couche RESEAU de A9 peut donc transmettre à la couche TRANSPORT de A9 pour trouver le bon programme maintenant. Si la Destination estPasserelleInterface à utiliser A9LocalhostLocalhost La machine-destinataire DST appartient au réseau de l'ordinateur actuel Exemple A9 doit transmettre un paquet IP à A2 qui est sur le même réseau local C'est encore la machine A9 qui est la plus à même de transmettre le paquet IP en passant par le réseau local et en le transmettant directement à A2. Il n'y a donc pas vraiment de passerelle non plus. La couche RESEAU de A9 peut transmettre le paquet IP à la couche RESEAU de A2 en utilisant son unique sortie reliée à sa carte réseau. On passera par le réseau local et le commutateur DestinationPasserelleInterface A9LocalhostLocalhost N'importe qui d'autre sur le réseau AA9 via le réseau localon utilise l'unique carte-réseau de A9 Le destinataire est dans un autre réseau Exemple A9 doit envoyer un paquet IP pour C2. C'est le routeur A1 du réseau A qui sera le plus à même de raprocher le paquet de sa cible puisqu'il peut sortir du réseau. La couche RESEAU de A9 envoie donc le paquet IP à la couche RESEAU du routeur A1 en utilisant son unique sortie-réseau. REMARQUE 1 le paquet IP indiquera toujours que la source est A9. C'est la source initiale. REMARQUE 2 A9 ne peut communiquer qu'avec l'adresse A1 du routeur car leurs cartes réseaux appartiennent bien au même réseau. A9 ne peut pas communiquer directement avec l'adresse Z1 par exemple. DestinationPasserelleInterface A9LocalhostLocalhost N'importe qui d'autre sur le réseau AA9 via le réseau localon utilise l'unique carte-réseau de A9 Une machine du réseau BA1on utilise l'unique carte-réseau de A9 Une machine du réseau CA1on utilise l'unique carte-réseau de A9 Une machine du réseau YA1on utilise l'unique carte-réseau de A9 Une machine du réseau ZA1on utilise l'unique carte-réseau de A9 Voici comment utiliser une table de routage On cherche dans la colonne Destination la ligne qui permet d'identifier l'adresse IP de destination DST ou son réseau de destination La colonne Passerelle permet d'identifier la passerelle qui va pouvoir gérer ce paquet IP on peut très bien ne pas passer par une passerelle si le paquet est déjà sur le bon réseau. une colonne Interface permettant de savoir sur quelle sortie-réseau envoyer le message. Utile surtout sur les routeurs. On peut identifier la carte réseau avec son adresse IP, avec son adresse MAC ou encore avec le NOM de la sortie physique. Dans le cadre de ce cours, j'indiquerai surtout l'adresse IP. Pour les cartes Ethernet avec prises RJ-45, l'interface apparaît souvent sous le nom eth0, eth1... Pour les cartes Wifi, on note souvent wlo1... Comme c'est assez lourd à écrire, on simplifie souvent les écritures de cette façon. On choisira l'adresse la plus précise possible en cas de possibilités multiples A9 est plus précise que A et A est plus précis que défaut. Table de routage de l'ordinateur A9 DestinationPasserelleInterface A9LocalhostLocalhost Réseau AA9 via le réseau localA9 Réseau BA1A9 Réseau CA1A9 Réseau YA1A9 Réseau ZA1A9 Comme vous le voyez, on retrouve souvent les mêmes lignes et on ne peut de toutes manières par connaître tous les réseaux. On donne alors plutôt une route par défaut, la route à suivre si on ne trouve pas d'indication plus précise. DestinationPasserelleInterface A9LocalhostLocalhost Réseau AA9 via le réseau localA9 Par défautA1A9 Retour à l'exemple A9 pour C2 on voit ici que le paquet IP va devoir être géré par le routeur A1 en étant émis par la carte réseau de la machine A9. Table de routage du routeur du réseau A Ce routeur est l'unique porte d'entrée et de sortie vers le réseau A. C'est pour cela qu'on le nommera "routeur A" mais notez bien qu'il appartient aussi au réseau Z et Y ! DestinationPasserelleInterface A1 ou Y1 ou Z1LocalhostLocalhost Réseau AA1 via le réseau localA1 Réseau YY1 via le réseau localY1 Réseau ZZ1 via le réseau localZ1 Réseau BY2Y1 Réseau CZ2Z1 On remarquera bien que toutes les passerelles proposées font bien partie des réseaux auxquels le routeur est directement relié. Retour à l'exemple A9 pour C2 le paquet IP est arrivé sur ce routeur A1. Il est alors transmis au routeur Y2 en utilisant la carte réseau dont l'adresse est Y1. Importance de l'interface de sortiie Comme un routeur possède plusieurs adresses et donc plusieurs cartes-réseaux, il est indispensable de lui préciser de quel côté sortir du routeur. C'est à ça que sert l'information "interface". Table de routage du routeur relié au réseau C DestinationPasserelleInterface C1 ou X1 ou Z2LocalhostLocalhost Réseau CC1 via le réseau localC1 Réseau XX1-même via le réseau localX1 Réseau ZZ2 via le réseau localZ2 DéfautX2X1 On remarquera bien que toutes les passerelles proposées font bien partie des réseaux auxquels le routeur est directement relié. Retour à l'exemple A9 pour C2 le paquet IP arrive donc sur le routeur C1. Il est alors transmis à l'ordinateur C2 en utilisant la carte réseau identifiée par C1. 12° La machine C2 veut répondre et renvoyer sa réponse à A9. Quelle va être l'adresse SRC de l'expéditeur lors de cette réponse ? Quelle va être l'adresse DST du destinataire ? Quel devrait être le premier routeur que va rencontrer ce messsage de retour ? Correction ? ...CORRECTION... C'est l'inverse la SOURCE SRC va être C2 et la DESTINATION DST est A9. Comme le seul routeur pour sortir du réseau C est le routeur C1/X1/Z2, on va certainement y arriver. 13° En analysant la table de routage du routeur C "C1/X1/Z2", déterminer la passerelle qui va recevoir le paquet IP lors du transfert C2 vers A9. Correction ? ...CORRECTION... Il n'y a que la présence de la passerelle par défaut on part donc vers la passerelle X2. 14° Proposer une table de routage pour le routeur B "X2/Y2/B1" qui permettent aux paquets IP de pouvoir circuler correctement. Correction ? ...CORRECTION... DestinationPasserelleInterface B1 ou X2 ou Y2LocalhostLocalhost Réseau BB1 via le réseau localB1 Réseau XX2 via le réseau localX2 Réseau YY2 via le réseau localY2 DéfautY1Y2 15° Que pourrait-il se passer si la table de routage du routeur B indiquait de router les paquets IP à destination du réseau A vers le routeur X1 ? Correction ? ...CORRECTION... N'importe quel paquet à destination de A émis depuis les réseaux B ou C vont alors faire des allers-retours entre les deux routeurs du réseau B et C. Aucun ne pourra arriver à destination ! 16° Quel mécanisme permet aux paquets de ne pas errer jusqu'à la fin des temps sur Internet ? Correction ? ...CORRECTION... Il s'agit du compteur nommé TTL Time to Live en IPv4 ou Hop Limit en IPv6 1 octet dans les deux cas c'est un compteur qui décroit de 1 à chaque fois que le paquet est transféré par un routeur. Arrivé à 1, le paquet n'est plus déplacé et part juste à la poubelle. Passerelle "Réseau Local" sur une 'vraie' table Il existe plusieurs façons d'indiquer qu'on peut transmettre le paquet IP directement sur le réseau local. Sous Linux, cela apparaît via une indication " dans la colonne Passerelle/Gateway. Cela veut dire qu'il n'y a pas de passerelle 0 partout dans l'adresse. Il faut donc passer par le réseau local. Sous Windows, cela apparaît via une indication "OnLink" dans la colonne passerelle. Cela veut dire qu'on est déjà en lien avec la cible. Il faut donc passer par le réseau local. Route par défaut sur une 'vraie' table La plupart du temps, on indique la destination par défaut avec " dans la colonne Destination. En effet, rien ne peut être plus imprécis que cela, et c'est donc cette ligne qui sera sélectionnée si aucune autre ne correspond. Routage statique Ce que nous venons de voir se nomme le routage statique quelqu'un configure les routes à la main. Avec l'augmentation de nombre de routeurs, les risques de faire un mauvais réglage augmentent de façon évidente. C'est pour cela que nous verrons deux techniques de routages dynamiques la fois prochaine. De la même façon, même avec des routes bien configurées, la moindre panne réseau va obliger le responsable à redéfinir manuellement celles-ci. C'est bien entendu totalement inenvisageable sur Internet ou n'importe quel gros réseau ! Si on résume, ce qui se passe lorsqu'un programme veut communiquer Sa couche APPLICATION formate son message pour que l'autre programme puisse le comprendre. Mais elle ne sait pas transférer le message à l'autre programme. Alors... Elle transmet la communication à la couche TRANSPORT La couche TRANSPORT va alors couper le message et rajouter les PORTS et ainsi créer des segments. Mais elle ne sait pas transférer le message à un autre ordinateur. Alors... Elle transmet la communication à la couche RESEAU/INTERNET La couche RESEAU/INTERNET va rajouter les ADRESSES IP et ainsi créer des paquets. A l'aide du protocole IP, elle va déterminer où transférer ce paquet IP et avec quelle carte réseau il va faire cela. Mais elle ne sait pas gérer concrétement le transport du paquet. Alors... Elle transmet la communication à la couche ACCES RESEAU CLIQUER SUR L'IMAGE pour ANIMER ou STOPPER Il est temps de passer le paquet IP à la couche ACCES RESEAU pour voir comment transférer cela à la passerelle suivante ! Attention sauf cas exeptionnel, on ne changera plus le contenu du paquet IP à part le compteur de sauts. 5 - Couche ACCES RESEAU culture générale - rien d'exigible ⇩ ⇧ ⤊ Rien d'exigible ici toute ce qui suit dépend énormément de la nature du réseau Wifi, Ethernet, Fibre optique, réseau très grand débit... et des technologies et des normes. Tout cela évolue vite. Trop vite pour qu'il y ai un quelconque intérêt à en connaître les détails à moins de déjà travailler dans ce domaine. C'est pour cela que le programme n'en parle pas. Pourquoi rajouter encore une couche ? Nous allons rajouter encore un nouvel en-tête devant le paquet IP pour créer ce qu'on nomme une trame. Mais on va aussi rajouter des choses à la fin cette fois, de façon à entourer le paquet IP. Le paquet IP contient les informations qu'un ordinateur initial veut transmettre à un ordinateur final. Il s'agit du contenu du colis que vous vouliez envoyer initialement. La trame est le carton d'emballage, mais avec un principe un peu étange à chaque fois qu'on change de main lors du transport, on change l'emballage. Sur cette couche, l'identifiant est l'adresse MAC pour Media Access Control et elle permet d'identifer la carte réseau utilisée. Il s'agit d'adresses sur 6 octets 48 bits, 6*8. Un ordinateur n'accepte les messages que si l'adresse MAC du destinataire ACCES RESEAU est bien la sienne. Détection du début et de la fin Le but de la trame est d'abord de permettre le transport concret du paquet IP celui-ci ne contient que des informations. C'est dans l'ACCES RESEAU qu'on va transformer ces informations en signaux physiques électriques, optiques... pour les transporter physiquement. On entoure alors les octets du paquet IP d'une séquence signalant le début et la fin du signal envoyé. Comme cela, le récepteur sait qu'il reçoit bien un vrai signal et pas juste du bruit. On commence donc à placer en début de trame une séquence bien précise de bits elle dépend du type de réseau physique qui permet de dire "Arrivée d'un nouveau message". Idem à la fin. Anonymisation des machines L'adresse IP joue le rôle d'adresse logique. Cela permet d'identifier un rôle dans le réseau et de l'anonymiser. A l'extérieur du réseau, personne ne sait quelle machine joue réellement ce rôle. Lorsqu'on veut la joindre, on donne simplement son adresse IP. C'est un peu le principe des forces de police dont on ne peut identifier les membres qu'à l'aide d'un numéro d'agent. On ne connait pas leurs noms. Depuis l'extérieur du réseau, l'adresse IP suffit à joindre la bonne machine. C'est une fois dans le réseau qu'on tente de localiser réellement la bonne machine pour lui délivrer le paquet IPP. Comment ? C'est le rôle de l'adresse MAC des cartes réseaux. On parle d'adresse physique connaître cette adresse permet de localiser un ordinateur particulier enfin, la carte réseau et donc l'ordinateur sur lequel elle est branchée. Chaque machine d'un réseau possède une table dite ARP Adress Resolution Protocol qui peut contenir les correspondances adresse IP adresse MAC pour les machines de ce réseau. Lorsqu'une machine veut communiquer avec une autre machine de son propre réseau, il va voir l'adresse MAC correspondante et rajoute sa propre adresse MAC et celle qu'elle vient de trouver dans l'en-tête de la TRAME. Imaginons qu'on doive joindre le routeur d'adresse IP A1. Si on appartient au réseau A, on peut avoir une entrée de la table ARP qui signale que IP A1 MAC 4554f54e283d. On peut alors envoyer le message sur le réseau interne et il ne sera lu que par la machine qui porte bien cette adresse MAC. La couche ACCES RESEAU se charge donc d'utiliser les cartes réseaux pour réaliser la connection physique entre deux ordinateurs qui sont en connexion directe sur un même réseau. 6 - Destination atteinte ⇩ ⇧ ⤊ Une fois qu'on parvient à joindre la bonne machine de destination, on remonte dans les couches en lisant et supprimant un par un les en-têtes. De la couche ACCES RESEAU à la couche RESEAU, on remonte à la couche TRANSPORT puis à la couche APPLICATION. Le trajet du paquet IP à travers juste 2 routeurs 7 - FAQ ⇩ ⇧ ⤊ Adresse IP v4 - culture générale Pourquoi culture générale ? Depuis le temps qu'on dit que cette version va disparaître, ça va bien finir par arriver d'ici à ce que vous soyez employable après votre passage dans le supérieur... Une adresse IP v4 est constituée de 4 octets représentables chacun par un entier entre 0 et 255 séparés par un point. Exemple . L'adresse IP est à découper en deux parties La partie de gauche caractérise l'adresse du réseau auquel appartient la machine La partie de droite caractérise l'adresse de la machine sur ce réseau On se limitera ici aux cas simples où ces parties occupent intégralement un des octets. Pour distinguer les deux parties, on donne le nombre de bits servant à cette adresse réseau. Pour cela, on rajoute un slash derrière l'adresse et on place le nombre de bits 1 octet = 8 bits propres au réseau dans l'adresse. Exemples avec la notation adresse IP suivie d'un /x Cette notation se nomme CIDR Classless Inter-Domain Routing. Quelques exemples /8 veut dire que seul le premier octet car /8 veut dire 8 bits caractérise le réseau. Adresse réseau Adresse machine /16 veut dire que leurs deux premiers octets car /16 veut dire 16 bits caractérisent le réseau. Adresse réseau Adresse machine /24 veut dire que leurs trois premiers octets car /24 veut dire 24 bits caractérisent le réseau. Adresse réseau Adresse machine Exemples avec la notation ADRESSE IP + MASQUE On donne l'adresse IP et une deuxième adresse nommée MASQUE permettant de comprendre la première. Si on utilise uniquement 8 bits à la fois avec le MASQUE, c'est facile 255, c'est le réseau, 0 c'est la machine. Quelques exemples Adresse et masque veut dire Adresse réseau Adresse machine Adresse et masque veut dire Adresse réseau Adresse machine Adresse et masque veut dire Adresse réseau Adresse machine On peut en réalité mettre d'autres choses que 0 ou 255, mais cela complique fortement la lecture il faut revenir à la lecture des bits. Je n'en parle pas ici. Trois types d'adresses Les adresses publiques sont les adresses qu'on peut joindre directement depuis Internet. Chaque adresse de ce type doit donc être unique sur Internet. Illustration adresses publiques réalisée avec Filius Les adresses privées sont des adresses qu'on ne peut utiliser qu'à l'intérieur du réseau local. On ne peut pas joindre depuis l'extérieur une machine à l'aide d'une telle adresse. Les messages entre ces machines et Internet passent par un dispositif nommé la passerelle. La passerelle possède deux cartes réseaux elle possède une adresse sur le réseau local et une adresse sur un réseau permettant d'accéder à Internet. C'est le cas de votre Box si votre Box fonctionne en IPv4 Illustration adresses privées réalisée avec Filius Les adresses des petits réseaux privés comme votre réseau domestique, derrière votre Box sont toutes /24 . Plusieurs machines dans le monde peuvent avoir ce type d'adresses. C'est l'adresse externe de la passerelle qui est utilisée pour parvenir à communiquer sur Internet. Les adresses des réseaux privés moyens de à . Les adresses des gros réseaux privés comme un réseau d'entreprise . Plusieurs machines dans le monde peuvent avoir ce type d'adresses. C'est la passerelle de l'entreprise vers l'extérieur qui fera la traduction privée/publique. L'adresse particulière localhost l'ordinateur actuel est identifié par Bref, c'est à l'aide d'un mécanisme de ce type que la couche RESEAU peut connaitre l'adresse réseau de la machine sur laquelle elle se trouve actuellement et savoir vers où envoyer le paquet en regardant l'adresse stockée dans DST le réseau local ou vers l'extérieur. Adresse IP v6 - culture générale Une adresse IP v6 plus lourde qu'une adresse IP v4 elle est constituée de 16 octets 128 bits, 16*8. On la représente en hexadécimal en séparant chaque couple d'octets par un double point. Exemples Adresse au hasard 2a01cb0c96acd40063baf65c361615d4 /64 Local host 00000001 ou en plus concis 1/128 Précisions sur la lecture des adresses Chaque valeur entre deux varie donc entre 0000 et FFFF. L'adresse réseau est à gauche et se nomme Préfixe en IPv6. L'adresse machine est à droite et se nomme Interface en IPv6. L'adresse-réseau est précisée en fournissant le nombre de bits la caractérisant avec la notation /x. /16 veut dire dire que le premier couple d'octets caractérise le réseau 2a01cb0c96acd40063baf65c361615d4 /16 /32 veut dire dire que les deux premiers couples d'octets caractérise le réseau 2a01cb0c96acd40063baf65c361615d4 /32 /48 veut dire dire que les trois premiers couples d'octets caractérise le réseau 2a01cb0c96acd40063baf65c361615d4 /48 /64 veut dire dire que les quatre premiers couples d'octets caractérise le réseau 2a01cb0c96acd40063baf65c361615d4 /64 Toutes les machines joignables sur Internet peuvent possèder une adresse IP propre au vu du nombre d'adresses disponibles 2128. De façon optionnelle, il existe néanmoins un système d'adressage derrière lequel on peut cacher les machines derrière leur passerelle. Les adresses IPv6 sont créées de différentes manières. L'une d'entre elles consiste simplement à prendre 64 bits pour l'adresse du réseau et à obtenir une adresse-machine de 64 bits à partir des 48 bits de l'adresse MAC de la carte réseau de la machine. D'autres méthodes existent bien entendu. En suivant cette technique de 64 bits pour l'adresse-réseau et 64 bits pour l'adresse-machine, les fournisseurs d'accès à Internet utilisent souvent la méthode suivante Les 3 premiers couples 48 bits sont propres à tous les clients du fournisseur. 2a01cb0c96acd40063baf65c361615d4 /64 les trois premiers couples d'octets en rouge définissent la topologie publique donnée par les RIR aux fournisseurs d'accès providers. Un gros fournisseur peut se voir attribuer plusieurs adresses de ce type. le 4e couple 16 bits forme l'un des sous-réseaux du fournisseur deux clients peuvent donc avoir une valeur différente 2a01cb0c96acd40063baf65c361615d4 /64 le couple d'octets suivant définit le sous-réseau. En règle générale, c'est donc votre fournisseur qui vous fournit un sous-réseau dans son propre réseau. les 4 derniers couples 64 bits forme l'adresse-machine obtenue à partir des 48 bits de l'adresse MAC, ou pas. 2a01cb0c96acd40063baf65c361615d4 /64 les quatre derniers couples permettent de séparer les différentes machines du sous-réseau. Et le modèle OSI c'est quoi ? Internet et son modèle TCP / IP est plus ancien que le modèle OSI. Mais après la création et l'utilisation effective de TCP / IP, beaucoup de chercheurs ont théorisé sur les réseaux. Il existe maintenant une norme OSI, à gauche plus précise encore qu'on tente de respecter sur les nouveaux réseaux. Image CC BY-SA par tomsgued sur Wikipedialien direct Passerelle réseau - culture générale Le mot passerelle est utilisé pour désigner tout dispositif qui permet de faire la liaison entre deux réseaux. En anglais, on dit gateway. Au niveau PHYSIQUE, la passerelle qui permet de relier deux parties physiques se nomme un répéteur un dispositif qui recçoit un signal physique, qui l'amplifie et l'émet à nouveau dans l'autre direction. Un répéteur WIFI permet par exemple d'étendre la zone d'utilisation d'une BOX. On trouve aussi le HUB USB par exemple, qui permet connecter plusieurs appareils à un port USB unique sur l'ordinateur. Au niveau LIAISON / ACCES RESEAU, la passerelle permettant d'émettre à nouveau le message à l'intérieur d'un réseau sera nommée un pont. Dans un bon nombre de réseaux, la communication se fait souvent par commutation au niveau LIAISON. Ce pont se nomme donc un commutateur. Mais attention, tous les ponts ne sont pas des ponts-commutateurs. Il existe également des ponts-routeurs qui routent les paquets IP sans repasser par le niveau RESEAU / INTERNET ce qui augmente la vitesse de transmission puisqu'il y a moins de traitement à faire. Au niveau RESEAU, la passerelle permettant de transmettre un message est un relais. Dans un bon nombre de réseaux, ce relais utilise la technique du routage. On parle donc de routeur. Mais on trouve également de la commutation. Néanmoins, dans l'usage usuel, passerelle désigne plutôt l'appareil faisant cette liaison en remontant jusqu'au niveau APPLICATION au moins comme votre Box. Cet appareil peut surveiller les communications et faire office de firewall par exemple. Chez vous, il s'agit donc de votre Box. Activité publiée le 26 10 2020 Dernière modification 02 12 2020 Auteur ows. h. Question en attente de réponse compte 06xxxxxx15 , le compteur internet affiche 2,17 Mo, le compteur de mon téléphone affiche 0, je n' ai utilisé les données mobiles depuis le 1 juillet, merci pour votre réponse , svpEdit [Merci de ne pas communiquer d'informations personnelles sur le forum] MICHEL MICHEL Niveau 0 42 / 100 points Réponses Bonjour Michel,Merci d'avoir contacté votre Service ce jour vous avez bien consommé 2, facture n'étant pas encore disponible, je vous invite à patienter début du mois prochain. Nous aurons alors accès également à votre facture détaillée, celle-ci reprend la liste de toutes vos communications du vous constatez une erreur, vous pourrez alors faire une réclamation sur votre Espace Client dans la rubrique "Assistance", en cliquant sur "Mes factures / Mes paiements" puis sur "Facture non conforme".Le Service Client étudiera votre demande et vous répondra dans les meilleurs reste à votre disposition pour tout renseignement complémentaire,Marius de L'Équipe Prixtel bonjour, ce jour le compteur internet affiche 1 ko , ligne 06 01 77 25 15 , sur le portable = 0, et le tarif passe de 2 euros à 12, 60 euros, dites moi quand et comment vient ce 1 ko ? merci de votre réponse mème phénomène le mois dernier ???????? MICHEL MICHEL Niveau 0 42 / 100 points Bonjour Michel,Je constate en effet une consommation de 1Ko à ce disposez d'un forfait mobile avec lequel les connexions internet sont smartphone s'est probablement connecté à Internet à votre insu pour récupérer vos e-mails, afficher des notifications réseaux sociaux, applications..., télécharger des mises à jour du système ou de vos applications. Pour éviter cela, vous pouvez désactiver la récupération automatique du courrier, l'envoi de notifications et les mises à jour automatiques. Pensez à vérifier la configuration de chacune de vos applications mobiles. Vous pouvez aussi configurer votre smartphone pour que les mises à jour ne se fassent qu'en Wifi. Si vous utilisez peu Internet, vous pouvez désactiver les données cellulaires. Vous aurez toujours accès aux réseaux Wifi mais plus à l'Internet mobile. Vous n'aurez plus qu'à les réactiver quand vous en aurez besoin. Pour savoir comment faire, consultez le mode d'emploi de votre reste à votre disposition pour tout renseignement complémentaire,Marius de L'Équipe Prixtel Bonjour, La fenêtre d'état de ma connexion réseau affiche l'activité envoyés et reçus en paquets, et je voudrais lui faire afficher en octets ou kilo-octets, je ne sais plus, je sais que c'est possible, mais je ne parviens pas à retrouver comment on fait pour basculer d'une unité à l'autre dans windows XP. Ou faut-il intervenir pour cela déjà ? Merci, CyberFox.

compteur internet d octets émis et reçus