Brevet FR2840141A1 — publié le 20031128

La présente invention concerne un procédé d'organisation de paquets de données et, plus particulièrement mais pas exclusivement, un procédé d'organisation de paquets de données reçus sur une liaison de données, chaque paquet de données comportant un index associé à celuici, cet index indiquant l'ordre dans lequel on demande que le paquet de données soit fourni en sortie. La présente invention concerne également une mémoire tampon pour la mise en #uvre du procédé ci-dessus. Dans un système de communications de données dans lequel des paquets de données sont émis sur une liaison de données telle que par exemple une connexion de réseau, il est possible que les paquets de données soient reçus en désordre et/ou avec des incohérences de timing entre paquets consécutivement reçus, c'est à dire avec du désordre temporel. Ces écarts peuvent conduire à des problèmes à une extrémité de réception du système, car les données reçues peuvent ne pas constituer une vraie représentation des données émises. Par suite, il est souvent nécessaire de reclasser les paquets de données reçus pour pouvoir les fournir à des étages de traitement ultérieurs dans un ordre correct et/ou avec un minimum de problèmes de timing. Ce tri est habituellement effectué dans un dispositif de mémoire parfois appelé mémoire tampon antidésordre. Le protocole de transport en temps réel (RTP = Real-Time Transport Protocol) est un exemple de protocole de données permettant le transport de paquets de données en temps réel sur un réseau de paquets, les paquets RTP étant émis séquentiellement sur le réseau. Comme le RTP est souvent utilisé pour des protocoles de réseaux de paquets populaires courants, comme par exemple le Protocole Internet (IP = Internet Protocol), les problèmes ci-dessus de désorganisation de séquence et de désordre temporel apparaissent fréquemment. Dans des applications dans lesquelles on a besoin d'un traitement en temps réel, par exemple avec un téléphone IP dans lequel les paquets de données représentent des données de parole en temps réel, ces problèmes peuvent être extrêmement préoccupants. Par suite, pour recevoir les paquets RTP sur la connexion IP et pour traiter les paquets RTP en temps réel, on a besoin d'une mémoire tampon anti-désordre ou instabilité pour classer les paquets RTP en bon ordre et pour lisser leurs intervalles d'arrivée imprévisibles. Un système utilisant une mémoire tampon anti-désordre connue, est représenté dans la figure 1. Le système comprend un émet- teur de données 1 pour émettre des paquets de données, comme par exemple des paquets RTP, une mémoire tampon anti-désordre 3, et un processeur de données en temps réel 5 qui traite les paquets RTP. L'émetteur de données 1 transmet les paquets RTP à la mémoire tampon anti-désordre 3 sur une liaison IP 7. Certains paquets RTP sont reçus par la mémoire tampon anti-désordre 3 à des intervalles imprévisibles et hors de la séquence. La mémoire anti-désordre 3 stocke les paquets RTP et les casse dans la séquence correcte en utilisant un procédé à liste liée, comme cela sera décrit ci-après. Le processeur de données en temps réel 5 envoie à intervalles de temps réguliers un message de demande de données à la mémoire tampon anti-désordre 3 sur un bus 9. En réponse, la mémoire tampon anti-désordre 3 envoie un paquet RTP au processeur de données en temps réel 5 pour chaque message de demande de données reçu. En conséquence, le processeur de données en temps réel 5 reçoit un courant régulier de paquets RTP dans une séquence corrigée. On décrira maintenant, en se référant à la figure 2, le procédé à liste liée selon lequel fonctionne la mémoire tampon anti-désordre conventionnelle 3. En se référant à la figure 2a, une séquence de paquets reçue est représentée par les nombres "0", "1", "2", "4", et "3". Ces nombres sont en fait destinés à représenter un numéro d'index associé à chaque paquet, le numéro d'index indiquant la séquence dans laquelle les paquets ont été réellement émis sur la liaison IP 7. En d'autres termes, le paquet "0" est émis le premier et le paquet "4" est émis le dernier. Cependant, on constatera que, dans le cas présent, le paquet "4" a été reçu avant le paquet "3" de sorte qu'une désorganisation de séquence s'est produite quelque part sur la liaison IP 7. Lorsque le paquet "0" est reçu, ce paquet est stocké dans une zone de mémoire, comme indiqué dans la figure 2b. Ensuite, lorsque le paquet "1" est reçu, ce paquet est stocké dans une nouvelle zone de mémoire qui est liée à la zone de mémoire précédemment créée, comme indiqué dans la figure 2c. Le même processus se produit lorsque les paquets "2" et "4" sont reçus, comme indiqué respectivement dans les figures 2d et 2e. Lorsque le paquet "3" est reçu, la mémoire tampon anti-désordre 3 reconnaît que le numéro d'index "3" est inférieur au numéro d'index associé à un paquet précédemment stocké, c'est à dire le paquet "4". Par suite, la zone de mémoire nouvellement créée, stockant le paquet de numéro d'index "3", est liée entre les zones de mémoire stockant les paquets ayant les numéros d'index "2" et "4". De plus, la liaison entre les zones de mémoire stockant les paquets de numéros d'index "2" et "4", est brisée. Cela est indiqué dans la figure 2f. Comme on le remarquera, à chaque fois qu'un nouveau paquet de données est reçu par la mémoire tampon anti-désordre 3, on demande à cette mémoire tampon anti-désordre d'effectuer une recherche dans la liste liée pour déterminer si le nouveau paquet de données doit être inséré entre deux zones de mémoire précédemment liées et, si c'est le cas, de déterminer l'endroit où le paquet de données doit être inséré. La profondeur de la mémoire tampon anti-désordre est également variable car, lorsqu'on reçoit un plus grand nombre de paquets, le nombre de zones de mémoire augmente. La charge de traitement est donc lourde. Essentiellement, le procédé est encombrant et certainement indésirable pour des applications en temps réel. Selon un premier aspect de l'invention, on crée un procédé d'organisation de paquets de données reçus sur une liaison de données chaque paquet de données comportant un index associé à celui-ci, cet index indiquant l'ordre dans lequel on demande que le paquet de données soit fourni en sortie, le procédé comprenant les étapes consistant à : utiliser une mémoire tampon comportant un certain nombre de zones de mémoire, chaque zone de mémoire étant capable de stocker un seul paquet de données à la fois ; et stocker chaque paquet de données reçu dans l'une, prédéterminée, des zones de mémoire, suivant l'index associé à ce paquet de données respectifs. Comme la zone de mémoire dans laquelle est stocké chaque paquet de données, dépend de l'index associé à chaque paquet de données, et comme l'index est indicatif de l'ordre dans lequel chaque paquet de données respectif doit être fourni en sortie, il en résulte que les paquets de données peuvent être stockés dans des zones de mémoire qui représentent l'ordre dans lequel ces paquets doivent être fournis en sortie. A l'inverse du procédé à liste liée, un paquet de données nouvellement reçu n'est pas automatiquement lié au paquet de données précédemment reçu. De plus, la liste de tous les paquets de données précédemment reçus n'a pas besoin d'être analysée pour décider si un paquet de données nouvellement reçu est hors de la séquence. La charge de calcul est donc réduite. Dans ce procédé, un moyen de lecture de données peut lire périodiquement les paquets de données dans les zones de mémoire respectives dans lesquelles ils sont stockés, cette lecture étant effectuée dans l'ordre dans lequel les paquets de données doivent être fournis en sortie. Une telle opération de lecture périodique permet de transférer les paquets de données stockés, à un étage de traitement de données ultérieur, dans l'ordre dans lequel les paquets doivent être fournis en sortie. L'étage de traitement de données ultérieur peut être un dispositif de traitement de données en temps réel tel qu'un téléphone IP. L'opération de lecture périodique supprime les incohérences de timing, telles qu'un désordre temporel, qui peuvent être introduites dans une séquence de paquets de données transmis par la liaison de données. De préférence, on prévoit N zones de mémoire et les index sont constitués de M nombres, N et M étant des nombres entiers avec M>N et N>1. Ainsi, la mémoire tampon peut être de taille fixe "N". Les paquets de données peuvent être stockés dans les zones de mémoire suivant le résultat de M (Modulo N), M étant le numéro d'index d'un paquet de données reçu. A ce propos, on remarquera que le résultat de cette expression est le reste de la division de M par N. Ainsi, si M = 6 et N = 4, le résultat de 6 (Modulo 4) est alors égal à 2, car 6 divisé par 4 est égal à 1 avec un reste de 2. Les numéros d'index peuvent être répétés après qu'on ait envoyé M paquets de données sur la liaison de données. Dans ce cas, on peut surveiller chaque paquet de données reçu pour déterminer si son numéro d'index associé est une répétition d'un numéro d'index précédemment reçu, les numéros d'index des paquets de données couramment stockés dans la mémoire tampon étant modifiés en réponse à cette détermination, grâce à l'addition d'un multiple entier de N à ces numéros d'index. L'étape permettant de déterminer si le numéro d'index reçu est une répétition d'un numéro d'index précédemment reçu, peut être effectuée en détectant le moment où le numéro d'index du paquet de données reçu est inférieur au numéro d'index du paquet de données précédemment reçu. On peut surveiller la différence entre les numéros d'index de deux paquets de données reçus consécutivement, pour déterminer si les paquets de données devant être fournis en sortie entre les deux paquets de données reçus consécutivement, n'ont pas encore été reçus, l'étape permettant de déterminer si un numéro d'index reçu est une répétition d'un numéro d'index précédemment envoyé, n'étant effectuée que si le nombre de paquets de données non encore reçus dépasse un nombre prédéterminé. Dans ce cas, si l'on détermine que (a) le nombre de paquets de données non reçus dépasse le nombre prédéterminé, et (b) le numéro d'in- dex reçu n'est pas une répétition d'un numéro d'index précédemment envoyé, la mémoire tampon est remise à l'état initial. Tout paquet de données consécutif alloué à une zone de mémoire occupée, peut réécrire sur le paquet de données précédemment stocké dans cette zone. Le procédé décrit ci-dessus peut être appliqué à n'importe quel protocole de transfert de paquets de données dans lequel les paquets comportent un index associé qui indique l'ordre dans lequel ces paquets doivent être fournis en sortie. De préférence, les index indiquent également l'ordre dans lequel les paquets de données respectifs ont été introduits dans la liaison de données. A titre d'exemple, des paquets de données RTP ont un numéro d'index associé (appelé "numéro de séquence" dans la norme de protocole). Lorsque chaque paquet de données RTP est émis sur une liaison de données, les numéros de séquence respectifs des paquets émis consécutivement, augmentent. Par suite, si le premier paquet de données a le numéro de séquence 0, le second doit avoir le numéro de séquence 1 et ainsi de suite, jusqu'au numéro de séquence 65535, après quoi le numéro de séquence 0 est répété. Selon un second aspect de l'invention, on crée un programme d'ordinateur stocké sur un support utilisable par l'ordinateur, le programme d'ordinateur comprenant des instructions lisibles par l'ordinateur pour amener un moyen de traitement de l'ordinateur à mettre en #uvre un procédé d'organisation de paquets de données reçus par l'ordinateur sur une liaison de données, chaque paquet de données comportant un index associé à celui-ci et cet index indiquant l'ordre dans lequel le paquet de données respectif doit être fourni en sortie, le procédé comprenant l'utilisation d'une mémoire tampon comportant une pluralité de zones de mémoire, chaque zone de mémoire étant capable de stocker un seul paquet de données à la fois, de sorte que chaque paquet de données reçu est stocké dans l'une, prédéterminée, des zones de mémoire, suivant l'index associé au paquet de données respectif. Selon un troisième aspect de l'invention, celle-ci concerne une mémoire tampon de données disposée pour organiser des paquets de données reçus d'une liaison de données, chaque paquet de données comportant un index associé à celui-ci et cet index indiquant l'ordre dans lequel on demande au paquet de données d'être fourni en sortie par la mémoire tampon de données, cette mémoire tampon comprenant un certain nombre de zones de mémoire capables chacune de stocker un seul paquet de données à la fois, et la mémoire tampon de données étant disposée pour stocker chaque paquet de données reçu, dans l'une, prédéterminée, des zones de mémoire, suivant l'index associé à ce paquet de données respectif. Suivant d'autres caractéristiques préférées de l'invention, la mémoire tampon de données est en outre disposée pour fournir en sortie des paquets de données stockés dans les zones de mémoire respectives de cette mémoire tampon, en réponse à un signal de demande de données périodique reçu d'un moyen de traitement de données. Elle comprend N zones de mémoire disposées pour stocker des paquets de données ayant des index constitués de M nombres, N et M étant des nombres entiers avec M#N, et N>1. Elle est en outre disposée de façon que les paquets de données soient stockés dans les zones de mémoire suivant le résultat de M (Modulo N). Elle est disposée en outre pour déterminer si le numéro d'index associé à un paquet de données reçu, est une répétition d'un numéro d'index précédemment reçu, les numéros d'index des paquets de données couramment stockés dans la mémoire tampon étant modifiés, en réponse à cette détermination, au moyen de l'addition d'un multiple entier de N à ces numéros d'index. Elle est disposée pour déterminer si le numéro d'index reçu est une répétition d'un numéro d'index précédemment reçu, en détectant le moment où le numéro d'index du paquet de données reçu est inférieur au numéro d'index du paquet de données précédemment reçu directement. Elle est en outre disposée pour déterminer si les paquets de données devant être fournis en sortie entre les deux paquets de données reçus consécutivement, n'ont pas encore été reçus, et pour ne déterminer si un numéro d'index reçu est une répétition d'un numéro d'index précédemment envoyé, que si le nombre de paquets de données non reçus dépasse un nombre prédéterminé. Elle est disposée de façon que tout paquet de données successif alloué à une zone de mémoire inoccupée, soit capable d'être réécrit sur le paquet de données précédemment stocké dans cette zone de mémoire. La présente invention sera décrite ci-après de manière plus détaillée à l'aide d'un mode de réalisation représenté dans les dessins annexés dans lesquels : - la figure 1 est un schéma par blocs d'un système utilisant une mémoire tampon anti-désordre temporel ; - la figure 2 est une représentation schématique du fonctionnement d'une mémoire tampon anti-désordre temporel à liste liée ; - la figure 3 est un schéma par blocs d'un système utilisant une mémoire tampon anti-désordre selon l'invention ; - la figure 4 est un schéma par blocs détaillé de la mémoire tampon anti- désordre représentée dans la figure 3 ; - les figures 5(a) à 5(f) sont des diagrammes schématiques utilisables pour la compréhension d'une partie d'un algorithme de mémoire tam- pon anti-désordre ; - la figure 6 est un diagramme de transitions d'états représentant l'algo- rithme selon lequel fonctionne la mémoire tampon anti-désordre repré- sentée dans les figures 3 et 4 ; - la figure 7 est un ordinogramme représentant les étapes d'un premier état indiqué dans le diagramme de transitions d'états de la figure 6 ; - la figure 8 est un ordinogramme représentant les étapes d'un second état indiqué dans le diagramme de transitions d'états de la figure 6 ; - la figure 9 est un ordinogramme représentant les étapes d'un troisième état indiqué dans le diagramme de transitions d'états de la figure 6. En se référant à la figure 3, celle-ci représente un système utilisant une mémoire tampon anti-désordre temporel 11selon la présente invention. Le système comprend l'émetteur de données 1 et le processeur de données en temps réel 5 représenté dans la figure 1, l'émetteur de données étant disposé pour transmettre des paquets de données RTP à la mémoire tampon anti-désordre 11, sur la liaison IP 7. Le processeur de données en temps réel 5 est disposé pour demander périodiquement des paquets de données RTP à la mémoire tampon anti-désordre 11, en envoyant un message de demande de données sur le bus 9. En réponse à chaque message de demande de données reçu, la mémoire tampon antidésordre 11est disposée pour émettre un paquet RTP vers le processeur de données en temps réel, sur le bus 9. On décrira ci-après plus en détail le procédé selon lequel ce résultat est obtenu. En se référant à la figure 4 qui représente un schéma par blocs de la mémoire tampon anti-désordre 11, on constatera que cette mémoire tampon anti-désordre comprend un processeur 13 connecté à (i) un réseau de mémoires 15 et (ii) une mémoire vive (RAM) 17. Le processeur 13 est connecté à la liaison IP 7 par une ligne d'entrée de données 19, et se connecte au bus 9 en utilisant une ligne de sortie de paquets 21 et une ligne de demande de messages 23. Le processeur de données en temps réel envoie périodiquement des messages de demande de données sur la ligne de demande de messages 23 et, en réponse, le processeur 13 est conçu pour fournir en sortie des paquets de données sur la ligne de sortie de paquets 21. Le réseau de mémoires 15 est réalisé sous la forme d'un certain nombre de zones de mémoire séparées. Dans la figure 4 sont représentées huit zones de mémoire appelées [0] à [7]. En cours d'utilisation, l'émetteur de données 1 envoie un courant de paquets de données RTP pour qu'elles soient ensuite traitées par le processeur de données en temps réel 5. Par exemple, l'émetteur de données 1 et le processeur de données en temps réel 5 peuvent être constitués par les extrémités d'émission et de réception respectives d'un téléphone IP. Cependant, du fait que la liaison IP 7 peut introduire des écarts dans le courant de paquets, comme par exemple une désorganisation de séquence et un désordre temporel, la mémoire tampon anti-désordre 11 est utilisée pour organiser les paquets de données reçus dans un ordre amélioré, de façon que les paquets de données ordonnés puissent être envoyés au processeur de données en temps réel 5 à un rythme régulier voulu. Chaque paquet de données RTP envoyé par l'émetteur de données 1 comporte un numéro d'index associé appelé ci-après "numéro de séquence". Le numéro de séquence associé à chaque paquet de données indique l'ordre dans lequel ce paquet de données respectif est envoyé sur la liaison IP 7. Ainsi, le paquet de données initial doit avoir le numéro de séquence "0", le paquet de données envoyé à la suite doit avoir le numéro de séquence "1", et ainsi de suite. Selon la norme RTP, le numéro de séquence le plus élevé utilisé est de "65535". Le paquet de données envoyé directement après doit avoir le numéro de séquence "0", de sorte que les numéros de séquence se répètent pour les paquets de données ultérieurement transmis. Etant donné que les numéros de séquence indiquent l'ordre dans lequel les paquets de données RTP sont envoyés sur la liaison IP 7, la mémoire tampon anti-désordre 11est configurée pour utiliser cette information de numéro de séquence afin d'organiser les paquets de données reçus dans un ordre correct (ou au moins amélioré) pour leur trans- mission périodique ultérieure au processeur de données en temps réel 5. Spécifiquement, un programme d'ordinateur est mis en #uvre par le processeur 13 de la mémoire tampon anti-désordre 11, ce programme d'ordinateur suivant un algorithme qui sera décrit plus en détail ci-après. On comprendra que, dans une telle application en temps réel, l'ordre dans lequel les paquets de données sont envoyés sur la liaison IP 7, doit être l'ordre dans lequel ces paquets doivent être fournis en sortie au processeur de données en temps réel 5. Le principe essentiel selon lequel la mémoire tampon antidésordre 11organise les paquets de données RTP reçus, est basée sur un calcul dans lequel les paquets de données sont stockés dans l'une, particulière, des huit zones de mémoire du réseau de mémoire 15, suivant le résultat de M (Modulo N), M étant le numéro de séquence associé à chaque paquet de données RTP respectif et N étant le nombre de zones de mémoire dans le réseau de mémoires 15. Le résultat de cette expression est le reste de la division de M par N. Pour démontrer le principe, la figure 5a représente le réseau de mémoires 15 de la mémoire tampon anti-désordre 11 représentée dans la figure 4. Le réseau de mémoires 15 comporte huit zones de mémoire de sorte que N est égal à "8". La figure 5b représente les numéros de séquence pour une séquence de paquets RTP reçus. On remarquera que les paquets RTP ayant les numéros de séquence "4" et "5" ont été reçus dans le désordre. Lorsque le premier paquet RTP est reçu, le résultat de 0 (Modulo 8) est "0" et ce paquet RTP est stocké dans la zone de mémoire [0]. Lorsque les trois paquets RTP suivants sont reçus, il s'ensuit que les résultats de 1 (Modulo 8), 2 (Modulo 8) et 3 (Modulo 8) doivent être respectivement "1", "2" et "3". Par suite, ces trois paquets de données doivent être stockés dans les zones de mémoire [1], [2] et [3]. Lorsque le paquet de données RTP suivant est reçu, comme il a le numéro de séquence "5", le résultat de 5 (Modulo 8) doit être 5 de sorte que ce paquet de données doit être stocké dans la zone de mémoire [5]. La zone de mémoire [4] n'est pas utilisée. Cette situation est représentée dans la figure 5c. Lorsque le paquet RTP suivant est reçu, c'est à dire lorsqu'il a le numéro de séquence "4", ce paquet doit évidemment être stocké dans la zone de mémoire [4], car le résultat de 4 (Modulo 8) est 4. Ainsi, il n'y a pas besoin de reclassement pour placer ce paquet de données à l'endroit approprié dans le réseau de mémoires 15. Le processus ci-dessus se poursuit pour le reste de la séquence de paquets RTP. Au moment où le paquet RTP ayant le numéro de séquence "8" est reçu, le résultat de 8 (Modulo 8) doit être de nouveau "0" (car la division de 8 par 8 ne donne pas de reste) de sorte que ce paquet de données doit être stocké dans la zone de mémoire [0], c'est à dire en ré- écrivant le paquet de données précédemment stocké dans cette zone de mémoire. Cette situation est représentée dans la figure 5d. Cependant, l'algorithme est conçu pour s'assurer qu'un paquet de données soit transmis au processeur de données en temps réel 5, ou jeté, avant que cette opération de réécriture se produise. Lorsqu'on utilise le calcul de M (Modulo N) ci-dessus, il en résulte qu'on peut obtenir un nombre fixe de zones de mémoire au lieu d'un nombre continuellement croissant de zones de mémoire. Cela peut être considéré comme une technique de "classement". Le nombre de zones de mémoire (parfois appelé "profondeur de mémoire tampon") choisi pour le réseau de mémoires 15 doit dépendre du type d'exigences de service. En réalité, la mémoire tampon 11peut nécessiter 500 zones de mémoire pour une liaison IP pratique. Si une connexion Intranet pratiquement parfaite forme la liaison, la mémoire tampon peut alors ne nécessiter que 100 zones de mémoire. Une situation intéressante apparaît lorsqu'un paquet de données ayant le numéro de séquence disponible le plus élevé (c'est à dire "65535" dans le cas des paquets RTP) est atteint. Cela est dû au fait que le paquet de données suivant doit inévitablement avoir un numéro de séquence inférieur ("0" si le paquet de données suivant n'est pas reçu hors de la séquence). Cette situation est appelée "portefeuille". Pour en démontrer le principe, on considère la séquence représentée dans la figure 5e et le réseau de mémoires 15 représenté dans la figure 5f. Pour faciliter l'explication, on suppose ici que les numéros de séquence se répètent après que le numéro "4" ait été envoyé par l'émetteur de données 1. Ainsi, après qu'un paquet de données ait été envoyé avec le numéro de séquence "4", le paquet de données suivant a le numéro de séquence "0", comme indiqué par la flèche de la figure 5e. Lorsque cela se produit, on obtient un enveloppement en portefeuille. Cette condition est détectée par la mémoire tampon anti-désordre, comme cela sera décrit ci-après ; sinon, le paquet de données RTP suivant doit être stocké dans la zone de mémoire [0] au lieu d'être stocké dans la zone de mémoire [5]. Cela peut poser des problèmes si le processeur de données en temps réel 5 n'a pas encore reçu de données valides stockées dans la zone de mémoire [0]. Lorsqu'on détecte une condition d'enveloppement en portefeuille, un multiple entier de N (c'est à dire "8" dans le cas présent) est ajouté aux numéros de séquence avant la poursuite du processus. Cela a pour effet de déplacer les numéros de séquence "vers le haut" de sorte que les numéros reçus ensuite n'ont plus de numéros de séquence inférieurs. Une autre situation que la mémoire tampon anti-désordre est configurée pour traiter, est ce qu'on appelle une condition de "discontinuité hors plage". Cela se produit lorsqu'un nombre prédéterminé de paquets de donnes RTP consécutifs n'arrivent plus dans leurs positions prévues à l'intérieur de la séquence de données reçues. Cela peut être dû au fait qu'un grand nombre de paquets de données consécutifs sont perdus. En surveillant les numéros de séquence lorsqu'ils arrivent, et en détectant le moment où la différence entre paquets de données reçus consécutivement, est supérieur à un seuil prédéterminé, on configure la mémoire tampon anti-désordre 11 pour qu'elle détecte une telle discontinuité hors plage et pour qu'elle rejette les paquets manquants comme étant perdus. Les tests d'enveloppement en portefeuille et de discontinuité hors plage indiqués ci-dessus sont de préférence effectués avant l'étape d'organisation M (Modulo N). En fait, lorsque les paquets RTP sont reçus dans la mémoire tampon anti-désordre 11, ces paquets sont momentanément stockés dans la RAM 17 de façon que les tests décrits ci-dessus puissent être effectués. Ensuite, les paquets de données sont organisés dans leurs zones de mémoire appropriées à l'intérieur du réseau de mémoires 15. Après avoir résumé les principales opérations et les principaux tests devant être effectués par la mémoire tampon anti-désordre 11, on donnera maintenant une explication plus détaillée de l'algorithme de mémoire tampon anti-désordre. Comme indiqué ci-dessus, l'algorithme est mis en #uvre par un programme d'ordinateur passant sur le processeur 13, mais peut également être mis en oeuvre dans du matériel. L'algorithme utilise les constantes et les variables suivantes pour traiter les paquets de données RTP reçus. On donne également une brève explication du rôle de chaque constante/variable, bien que leurs fonctions particulières doivent apparaître plus clairement d'après la description qui suit. A. Constantes MAX-RTP-SEQ : Numéro de séquence maximum pour RTP (c'est à dire 65535). BUF-DEPTH : Profondeur de la mémoire tampon anti-désordre (sur la base du type d'exigences de services). NO-PACKET : Constante utilisée pour indiquer qu'un paquet n'a pas encore été reçu. PACKET-UNREAD : Constante utilisée pour indiquer qu'un paquet a été reçu mais n'a pas encore été envoyé au processeur en temps réel 5. PACKET-READ : Constante utilisée pour indiquer qu'un paquet a été envoyé au processeur en temps réel 5. B. Variables RecvSeq : Numéro de séquence d'un paquet RTP nouvellement reçu MostRecentSeq : Numéro de séquence du paquet RTP le plus récent stocké dans le réseau de mémoires 15 de la mémoire tampon anti-désordre 11. LeastRecentSeq : Numéro de séquence du paquet RTP le moins récent indiqué dans le réseau de mémoires 15 de la mémoire tampon anti-désordre 11. SendSeq : Numéro de séquence du paquet RTP suivant qui doit être envoyé au processeur en temps réel 5 pour traitement. PacketStore [BUF-DEPTH] : Stockage mémoire tampon anti-désordre de taille fixe. PackletStatus [BUF-DEPTH] : Etat stockage mémoire tampon antidésordre. PacketIndex : Index de la zone de mémoire devant être utilisée pour stocker le paquet RTP reçu. JitterThreshold : Seuil de commande du débit de données. JitterHysteresis : Seuil d'hystérésis. JitterMax : Valeur de seuil de désordre maximum. JitterMin : Valeur de seuil de désordre minimum. JitterAdjTime : Période de réglage de seuil de désordre. LateSeq : Nombre de paquets qui sont arrivés trop tard pour être envoyés au processeur en temps réel 5. LateSeqLimit : Limite du nombre de paquets en retard reçus avant le réglage du seuil de désordre. MaxDropOut : Limite du nombre de paquets lâchés avant que la mémoire tampon anti-désordre 11soit remise à l'état initial. En se référant à la figure 6 qui représente un diagramme de transitions d'états de l'algorithme mis en oeuvre dans la mémoire tampon anti-désordre 11, on constatera qu'il y a six états. Dans un premier état 30 la mémoire tampon anti-désordre 11est initialisée. Une fois que cela est réalisé, la mémoire tampon anti-désordre 11entre dans un autre état 32 dans lequel soit (i) on attend l'arrivée d'un nouveau paquet RTP provenant de la liaison IP 7, soit (ii) on attend la réception d'un message de demande de données provenant du processeur de données en temps réel 5. A la réception d'un nouveau paquet RTP, la mémoire tampon antidésordre 11entre dans un nouvel état 34 dans lequel on effectue les étapes d'organisation principales indiquées ci-dessus, comme par exemple le test de discontinuité hors plage, le test d'enroulement en portefeuille, et l'étape d'organisation de paquets. Dans le cas où un paquet RTP valide est reçu, ce paquet doit être stocké dans une zone de mémoire appropriée du réseau de mémoires 15, et les paramètres (c'est à dire les variables) de la mémoire tampon anti-désordre 11sont gérés en conséquence dans autre étape 36. Une fois que cela est terminé, on attend un nouveau paquet RTP en revenant à l'étape 32. Si un paquet de données non valide est reçu, par exemple si ce paquet est périmé du fait qu'il a été reçu trop tard, ou si une discontinuité hors plage est détectée, l'étape 36 de gestion des paramètres n'est alors pas introduite et l'on attend le paquet RTP suivant, là encore en revenant à l'étape 32. Si un message de demande de données est reçu du processeur de données en temps réel 5, la mémoire tampon anti-désordre 11introduit l'état 38 de manipulation de demandes de données dans lequel un paquet de données est lu dans une zone de mémoire du réseau de mémoires 15. Suivant qu'un paquet RTP demandé est envoyé de manière valide ou ne l'est pas du fait qu'il n'a pas encore été reçu ou qu'il a déjà été précédemment envoyé, on introduit alors un état 40 de réglage de débit de données dans lequel le débit de données de la mémoire tampon antidésordre 11est convenablement réglé pour assurer une transmission efficace des paquets de données envoyés ultérieurement. Une fois que cela est terminé, on attend le paquet RTP suivant en revenant encore à l'étape 32. On décrira maintenant le fonctionnement de chaque étape de l'algorithme de la mémoire tampon anti-désordre. Comme indiqué, la première étape 30 introduite par l'algorithme est l'initialisation de la mémoire tampon anti-désordre 11. Essentiellement, cela met en oeuvre le réglage des variables de la mémoire tampon anti-désordre à leurs valeurs initiales, en effectuant les opérations suivantes consistant à : 1. Régler MostRecentSeq et LAteSeq à zéro ; 2. Régler LeastRecentSeq à (MAX~RTP~SEQ~BUF~DEPTH+1) ; 3. Régler tous les octets de PacketStatus à NO-PACKET ; 4. Régler JitterMax, JitterMin, JitterHysteresis, JitterAdjTime et LateSe- qLimit à des valeurs de défauts ; 5. Régler JitterThreshold à une valeur quelconque entre JitterMax et Jit- terMin ; et 6. Régler SettingSendSeq à (MAX-RTP-SEQ-JitterThreshold + 1). Comme indiqué dans le diagramme de transitions d'états de la figure 6, dès que l'étape 30 est terminée, on introduit l'étape suivante 32 dans laquelle on attend le paquet RTP suivant ou un message de demande de données. Dans cet état, si un paquet RTP est reçu sur la liaison IP 7, la mémoire tampon anti-désordre 11doit continuer en introduisant l'étape 34 de façon que les étapes d'organisation principales soient effectuées. Les étapes de l'algorithme qui sont effectuées dans l'étape 32, seront maintenant décrites en se référant à la figure 7. Comme indiqué dans la figure 7, une boucle initiale est établie dans l'étape 44 de façon que si aucun paquet RTP n'est reçu, l'algorithme retourne à l'étape 32 et qu'ainsi le processus se répète. Les étapes numérotées qui suivent indiquent les opérations ultérieures. 1. Une fois qu'un nouveau paquet RTP est reçu, l'algorithme compare le numéro de séquence du paquet RTP (RecvSeq) au numéro de séquence RTP le plus récemment reçu (MostRecentSeq) et au numéro de sé- quence RTP le moins récemment reçu (LeastRecentSeq) pour les pa- quets RTP déjà stockés dans le réseau de mémoires 15. 2. Ensuite, dans l'étape 46, on effectue un test de discontinuité hors plage dont le principe a été décrit précédemment. Dans cet algorithme, cela se produit si la valeur absolue de (MostRecentSeq-RecvSeq) est supérieure à MaxDropOut+BUF-DEPTH), et si la valeur absolue de (LeastRecentSeq-RecvSeq) est supérieure à MaxDropOut+BUF- DEPTH). Si aucune discontinuité hors plage n'est détectée, on intro- duit alors une autre étape 52 (décrite ci-après). 3. Si une discontinuité hors plage est détectée, on effectue un autre test dans l'étape 48 pour déterminer si une condition d'enveloppement en portefeuille existe. Une telle condition existe si RecvSeq est inférieur à (MaxDropOut+BUF-DEPTH) et LeastRecentSeq est supérieur à MAX- RTP-SEQ-(MaxDropOut+BUF-DEPTH). 4. Si une condition d'enveloppement en portefeuille existe, on introduit alors un mode d'enveloppement en portefeuille dans l'étape 50. L'algo- rithme fonctionne dans ce mode d'enveloppement en portefeuille pour tous les paquets de données RTP reçus ultérieurement, jusqu'à ce que la fin d'une condition d'enveloppement en portefeuille soit détectée. A cet égard, la condition d'enveloppement en portefeuille existe lorsque MostRecentSeq est inférieur à LeastRecentSeq, et la condition d'enveloppement en portefeuille existe lorsque MostRecentSeq est su- périeur à LeastRecentSeq. 5. Dans le mode d'enveloppement en portefeuille, c'est à dire dans l'étape 50, les valeurs de RecvSeq, MostRecentSeq, LeastRecentSeq, SendSeq sont décalées de manière à retirer la condition d'enveloppement en portefeuille au moyen de l'addition de Q x BUF-DEPTH où Q est une constante entière. La valeur de décalage doit se trouver dans la plage comprise entre (MaxDropOut+BUF-DEPTH) et (MAX-RTP-SEQ-1). On introduit ensuite l'étape 52. 6. Si aucune condition d'enveloppement en portefeuille n'est détectée dans l'étape 48, l'algorithme remet alors à l'état initial la mémoire tampon anti-désordre 11dans une autre étape 56, car toutes les don- nées stockées dans le réseau de mémoires 15 sont semble-t-il péri- mées du fait de l'existence de la discontinuité hors plage précédemment détectée. On remet à l'état initial la mémoire tampon anti-désordre 11en réglant MostRecentSeq à RecvSeq, en réglant éga- lement LeastRecentSeq à (RecvSeQ-BUF-LEN+1) et en réglant encore SendSeq à (RecvSeq-Jitter Threshold+1). Le paquet RTP reçu est en- suite stocké dans une zone de mémoire du réseau de mémoires 15, suivant la détermination de M (Modulo N) résumée précédemment. Comme on le remarquera, cela est effectué en calculant RecvSeq (Mo- dulo BUF-DEPTH). Le PacketStatus[PacketIndex] correspondant à cette zone de mémoire est ensuite réglé à PACKET-UNREAD pour indi- quer que le paquet est prêt à être lu dans le processeur de données en temps réel 5. L'algorithme retourne ensuite à l'état d'attente 32. 7. A la suite de ce qui précède, si aucune discontinuité hors plage n'est détectée dans l'étape 46, ou après qu'on ait effectué l'opération de dé- calage dans l'étape 50, on entre dans l'étape 52. Dans l'étape 52, on vérifie la validité du paquet RTP reçu. Si RecvSeq est inférieur à Send- Seq, on juge que le paquet est arrivé trop tard pour être lu dans le processeur de données en temps réel 5, de sorte qu'on juge ce paquet invalide. Par suite, le paquet RTP est écarté dans une autre étape 58. Tout décalage introduit dans le mode d'enveloppement en portefeuille (étape 50) est retiré dans les étapes 60,62, et l'algorithme retourne une fois encore à l'état d'attente 32. Si RecvSeq n'est pas inférieur à SendSeq, on juge alors le paquet RTP valide. 8. Si le paquet RTP est jugé valide dans l'étape 52, ce paquet est stocké dans le réseau de mémoires 15 suivant le calcul de M (Modulo N). En d'autres termes, le paquet RTP est classé dans le réseau de mémoires, tandis que l'index stocké est égal à RecvSeq (Modulo BUF-DEPTH). Le paquet RTP est ensuite transféré dans la zone de mémoire appropriée en utilisant la valeur calculée de PacketStore [PacketIndex]. PacketS- tatus [PacketIndex] est ensuite réglé à PACKET-UNREAD pour indi- quer que le paquet stocké dans cette mémoire est prêt à être envoyé au processeur de données en temps réel 5 lorsqu'un message de de- mande de données est reçu. L'algorithme entre ensuite dans l'état 36 dans lequel les divers paramètres de mémoire tampon anti-désordre sont gérés. A la suite des exemples d'étapes d'organisation principales décrits ci- dessus (en se référant à la figure 5), on décrira maintenant un certain nombre d'autres exemples. Exemple 1 - Détection d'une discontinuité hors-plage Si l'on suppose que BUS-DEPTH est 16, que MaxDropOut est 16, et que les numéros de séquence reçus d'une séquence de paquets RTP sont 0, 1, 2, 3,4, 67,68, 69, une discontinuité hors-plage doit alors être détectée lorsque le paquet ayant le numéro de séquence 67 est reçu. En se référant à l'équation indiquée ci-dessus, concernant l'étape 46 de l'algorithme, la valeur absolue de MostRecentSeq (c'est à dire 4) moins RecvSeq (c'est à dire 67) doit être de 63, ce qui est supérieur à 32 (MaxDropOut+BUS-DEPTH). De plus, la valeur absolue de LeastRecentSeq (c'est à dire 0) moins RecvSeq (c'est à dire 67) doit être de 67, ce qui est encore supérieur à 32. Cependant, aucun enveloppement en portefeuille de séquence ne se produit (ce qu'on comprendra en suivant l'équation détaillée ci-dessus à propos de l'étape 48). Exemple 2 - Détection d'enveloppement en portefeuille Si l'on suppose que BUS-DEPTH est 16, que MaxDropOut est 16, que Q est 10 et que les numéros de séquence reçus d'une séquence de paquets RTP sont 65533,65534, 65535,0, 1,2, 3, un enveloppement en portefeuille de séquence est alors détecté au moment où le paquet RTP ayant le numéro de séquence 0 est reçu. Là encore, cela sera compris en mettant en #uvre l'équation détaillée ci-dessus à propos de l'étape 48. Par suite, les numéros de séquence sont décalés de (Q x BUF-DEPTH) en utilisant Modulo Max-RTP-SEQ avant que tout traitement ultérieur se poursuive. Ainsi, le décalage est égal à 160 de sorte que les numéros de séquence décalés doivent être 157,158, 159,160, 161,162 et 163. Exemple 3 - Organisation de paquets RTP hors-séquence Comme indiqué ci-dessus, cela est effectué en utilisant l'équation M (Modulo N), ou en utilisant la terminologie de l'algorithme, RecvSeq (Modulo BUF-DEPTH). Ainsi, si BUF-DEPTH est 16, si MaxDropOut est 16, et si l'on reçoit la séquence 20,21, 22,25, 23,24, les paquets 20,21 et 22 doivent alors être stockés dans les zones de mémoire auxquelles sont affectés respectivement les numéros d'index [4], [5] et [6]. A la réception du paquet ayant le numéro de séquence 25, aucune discontinuité hors plage n'est détectée (car MaxDropOut est 16) et le paquet RTP est stocké dans une zone de mémoire ayant le numéro d'index [9]. Les paquets ayant les numéros de séquence 23 et 24 doivent être stockés respectivement dans les zones de mémoire [7] et [8]. Comme indiqué précédemment, les tests d'organisation et les opérations ci-dessus sont effectués avant de stocker le paquet RTP couramment reçu (RecvSeq) dans l'emplacement de mémoire approprié du réseau de mémoires 15. Dans ce but, le paquet RTP reçu est transféré dans la RAM 17, après quoi les tests d'organisation et les opérations cidessus sont effectués. Les étapes mises en #uvre pour effectuer la gestion des paramètres de mémoire tampon anti-désordre, c'est à dire dans l'état 36, seront maintenant décrits en se référant à la figure 8. Cet état n'est introduit que si un paquet RTP valide est stocké dans le réseau de mémoires 15. Dans une étape initiale 64, on détermine si RecvSeq est supérieur à MostRecentSeq. Si c'est le cas, on met alors à jour MostRecentSeq dans l'étape 66, de façon qu'il soit égal à RecvSeq. En d'autres termes, le numéro de séquence courant devient maintenant MostRecentSeq et le numéro de séquence du paquet reçu ensuite doit être RecvSeq. Dans l'étape 68, si l'on détermine que le paquet RTP courant réécrit sur le paquet RTP reçu le moins récemment dans le réseau de mémoires 15, ce qui est indiqué par LeastRecentSeq tRecentSeq est alors mis à jour à (MostRecentSeq-BUF-DEPTH+1) dans l'étape 70. Dans l'étape 72, si l'on a le temps de régler la valeur courante de JitterThreshold (suivant que de nouveaux paquets RTP sont reçus), on surveille alors le nombre cumulé des paquets en retard (LateSeq). Comme indiqué précédemment, les paquets sont "en retard" si RecvSeq est inférieur à SendSeq. Si c'est le cas, on détermine alors, dans l'étape 74, si le nombre cumulé dépasse la valeur prédéfinie de LateSeqLimit pendant la période de temps prédéfinie JitterAdjTime. Si c'est le cas, on incrémente, dans l'étape 76, la valeur courante de JitterThreshold. Si ce n'est pas le cas, on décrémente alors, dans l'étape 78, la valeur courante de JitterThreshold. JitterThreshold est limité entre JitterMax et JitterMin. A la suite des étapes de réglage, on détermine, dans l'étape 80, s'il existe une condition d'enveloppement en portefeuille. Si c'est le cas, les décalages introduits dans les numéros de séquence de l'état précédent (addition de Q fois BUF-DEPTH) sont alors retirés dans l'étape 82 en utilisant Modulo MAX-RTP-SEQ. L'état d'attente 32 est ensuite réintroduit après l'enlèvement de ces décalages. L'état d'attente 32 est réintroduit directement s'il n'y a pas de temps de réglage disponible, déterminé dans l'étape 72, ou s'il n'y a pas de condition d'enveloppement en portefeuille détectée dans l'étape 80. On décrira maintenant les étapes effectuées par l'algorithme dans l'état de manipulation de demandes de données 38. Comme indiqué, cet état est introduit lorsqu'un message de demande de données est reçu du processeur de données en temps réel 5. Après la réception d'un message de demande de données, si le paquet RTP suivant correspondant à SendSeq est déjà reçu et stocké dans le réseau de mémoires 15 de la mémoire tampon anti-désordre 11(indiqué par le fait que Packet-Status pour ce paquet de données est égal à PACKET-UNREAD), le paquet RTP doit alors être envoyé au processeur de données en temps réel 5. Le PacketStatus associé pour ce paquet de données doit ensuite être réglé à PACKETREAD. Si le paquet RTP correspondant à SendSeq n'est pas disponible, aucun paquet n'est envoyé au processeur de données en temps réel 5. Dans tous les cas, SendSeq est incrémenté de un, et l'algorithme introduit ensuite l'état 40 de réglage de débit de données. On décrira maintenant le fonctionnement de l'algorithme de mémoire tampon anti-désordre dans l'état 40 de réglage de débit de données, en se référant à la figure 9. Dans une première étape 84 de l'état 40 de réglage de débit de données, si l'on détermine que l'algorithme a été mis en oeuvre dans le mode d'enveloppement en portefeuille (indiqué par MostRecentSeq Dans l'étape 88, l'algorithme détermine si SendSeq est inférieur ou égal à (MostRecentSeq-JitterThreshold-Hysteresis). Cela indique que la position de la zone de mémoire courante qui est regardée (ou lue) par le processeur de données en temps réel 5, est au-dessus de la valeur de JitterThreshold. Le paquet RTP suivant devant être envoyé au processeur de données en temps réel 5, doit être abandonné dans l'étape 90 en incrémentant SendSeq. Si le résultat de l'étape 88 est "non", on détermine, dans l'étape 92, si SendSeq est supérieur à (MostRecentSeqJitterThreshold+Hysteresis), ce qui indique que la position de la zone de mémoire courante qu'on regarde se trouve au-dessous de la valeur de JitterThreshold. Si c'est le cas, on peut alors ignorer le message de demande de données suivant en décrémentant la valeur de SendSeq dans l'étape 94. Dans l'étape 96, si l'on détermine que SendSeq est inférieur à LeastRecentSeq, on règle alors SendSeq à (LeastRecentSeq+1) dans l'étape 98. Tous décalages quelconques introduits par une condition d'enveloppement en portefeuille, sont détectés dans l'étape 100 et retirés dans l'étape 102 par Modulo MAX-RTP-SEQ. L'état d'attente 32 est ensuite réintroduit de façon que l'algorithme attende un nouveau paquet RTP provenant de la liaison IP 7, ou un nouveau message de demande de données provenant du processeur de données en temps réel 5. On remarquera qu'une bande d'hystérésis est utilisée dans les étapes de réglage de JitterThreshold ci-dessus. Par suite, la valeur maximum de JitterMax ne doit pas être réglée au-dessus de (BUF-LENHysteresis-1). De la même manière, la valeur minimum de JitterMin ne doit pas être réglée au-dessous de (Hysteresis+1). Bien que l'algorithme ci-dessus soit mis en #uvre dans un logiciel fonctionnant sur le processeur 13 de la mémoire tampon antidésordre 11, on comprendra que l'algorithme pourrait également être mis en #uvre dans du matériel mobile ou fixe. Le système de classement Modulo BUF-DEPTH pourrait être mis en #uvre en masquant les bits les moins significatifs (LSB) des numéros de séquence (en supposant que BUF-DEPTH est une puissance de deux), par exemple en masquant les quatre derniers LSB pour une BUF-DEPTH de 16. L'addition de valeurs BUF-DEPTH multiples pour traiter un enveloppement en portefeuille, peut être mise en #uvre sous la forme d'une conversion de complément à deux, là encore en supposant que DUF-DEPTH est une puissance de deux. L'algorithme indiqué ci-dessus peut être adapté à n'importe quel protocole de réseau à base de paquets ou de trame mettant en #uvre un classement séquentiel de paquets de données à une extrémité de sortie, et dans lequel l'index de séquence est limité et s'enveloppe autour de zéro lorsque l'index maximum est atteint. REVENDICATIONS 1 ) Procédé d'organisation de paquets de données reçus sur une liaison de données (7), chaque paquet de données comportant un index associé à celui-ci, cet index indiquant l'ordre dans lequel on demande que le paquet de données soit fourni en sortie, caractérisé en ce qu' il comprend les étapes consistant à : utiliser une mémoire tampon (11) comportant un certain nombre de zones de mémoire, chaque zone de mémoire étant capable de stocker un seul paquet de données à la fois ; et stocker chaque paquet de données reçu dans l'une, prédéterminée, des zones de mémoire, suivant l'index associé à ce paquet de données respectifs. 2 ) Procédé selon la revendication 1, caractérisé en ce qu' un moyen de lecture de données lit périodiquement les paquets de données dans la zone de mémoire respective dans laquelle ces paquets sont stockés, dans l'ordre dans lequel on demande que les paquets de données soient fournis en sortie. 3 ) Procédé selon la revendication 1 ou la revendication 2, caractérisé en ce qu' on prévoit N zones de mémoire ; et les index sont constitués de M nombres, N et M étant des nombres entiers avec M#N, et N> 1. 4 ) Procédé selon la revendication 3, caractérisé en ce que les paquets de données sont stockés dans les zones de mémoire suivant le résultat de M (Modulo N), M étant le numéro d'index associé à chaque paquet de données respectifs. 5 ) Procédé selon la revendication 3 ou 4, caractérisé en ce que les numéros d'index se répètent après que M paquets de données aient été envoyés sur la liaison de données (7) ; et on surveille chaque paquet de données pour déterminer si son numéro d'index associé est une répétition d'un numéro d'index précédemment re- çu, les numéros d'index des paquets de données couramment stockés dans la mémoire tampon étant modifiés, en réponse à cette détermination, au moyen de l'addition d'un multiple entier de N à ces numéros d'index. 6 ) Procédé selon la revendication 5, caractérisé en ce que l'étape permettant de déterminer si le numéro d'index reçu est une répétition d'un numéro d'index précédemment reçu, est effectuée en détectant le moment où le numéro d'index du paquet de données reçu est inférieur au numéro d'index du paquet de données précédemment reçu directement. 7 ) Procédé selon la revendication 5 ou la revendication 6, caractérisé en ce que la différence entre les numéros d'index de deux paquets de données reçus consécutivement, est surveillée pour déterminer si des paquets de données devant être fournis en sortie entre les deux paquets de données reçus consécutivement, n'ont pas encore été reçus, l'étape permettant de déterminer si un numéro d'index reçu est une répétition d'un numéro d'index précédemment reçu, n'étant effectuée que si le nombre de paquets de données non reçus dépasse un nombre prédéterminé. 8 ) Procédé selon la revendication 7, caractérisé en ce que si l'on détermine que (a) le nombre de paquets de données non reçu dépasse le nombre prédéterminé, et (b) le numéro d'index reçu n'est pas une répétition d'un numéro d'index précédemment envoyé, la mémoire tampon (11) est remise à l'état initial. 9 ) Procédé selon l'une quelconque des revendications précédentes, caractérisé en ce que tout paquet de données successif alloué à une zone de mémoire inoccupée, est disposé pour être réécrit sur le paquet de données précédemment stocké dans cette zone de mémoire. 10 ) Procédé selon l'une quelconque des revendications précédentes, caractérisé en ce que les index indiquent également l'ordre dans lequel les paquets de données respectifs ont été introduits dans la liaison de données (7). 11 ) Programme d'ordinateur stocké sur un support utilisable par l'ordinateur, caractérisé en ce que ce programme d'ordinateur comprend des instructions lisibles par l'ordinateur pour amener un moyen de traitement (5) de l'ordinateur à mettre en oeuvre le procédé selon l'une quelconque des revendications précédentes. 12 ) Mémoire tampon de données (11) disposée pour organiser des paquets de données reçus d'une liaison de données (7), chaque paquet de données comportant un index associé à celui-ci et cet index indiquant l'ordre dans lequel on demande au paquet de données d'être fourni en sortie par la mémoire tampon de données (11), caractérisée en ce que cette mémoire tampon (11) comprend un certain nombre de zones de mémoire capables chacune de stocker un seul paquet de données à la fois ; et la mémoire tampon de données (11) est disposée pour stocker chaque paquet de données reçu, dans l'une, prédéterminée, des zones de mémoire, suivant l'index associé à ce paquet de données respectif. 13 ) Mémoire tampon de données (11) selon la revendication 12, caractérisée en ce qu' elle est en outre disposée pour fournir en sortie des paquets de données stockés dans les zones de mémoire respectives de cette mémoire tampon (11), en réponse à un signal de demande de données périodique reçu d'un moyen de traitement de données (5). 14 ) Mémoire tampon (11) selon la revendication 12 ou la revendication 13, caractérisée en ce qu' elle comprend N zones de mémoire disposées pour stocker des paquets de données ayant des index constitués de M nombres, N et M étant des nombres entiers avec M#N, et N> 1. 15 ) Mémoire tampon de données (11) selon la revendication 14, caractérisée en ce qu' elle est en outre disposée de façon que les paquets de données soient stockés dans les zones de mémoire suivant le résultat de M (Modulo N). 16 ) Mémoire tampon de données (11) selon la revendication 14 ou la revendication 15, caractérisée en ce qu' elle est disposée en outre pour déterminer si le numéro d'index associé à un paquet de données reçu, est une répétition d'un numéro d'index précédemment reçu, les numéros d'index des paquets de données couramment stockés dans la mémoire tampon (11) étant modifiés, en réponse à cette détermination, au moyen de l'addition d'un multiple entier de N à ces numéros d'index. 17 ) Mémoire tampon de données (11) selon la revendication 16, caractérisée en ce qu' elle est disposée pour déterminer si le numéro d'index reçu est une répétition d'un numéro d'index précédemment reçu, en détectant le moment où le numéro d'index du paquet de données reçu est inférieur au numéro d'index du paquet de données précédemment reçu directement. 18 ) Mémoire tampon de données (11) selon la revendication 16 ou la revendication 17, caractérisée en ce qu' elle est en outre disposée (a) pour déterminer si les paquets de données devant être fournis en sortie entre les deux paquets de données reçus consécutivement, n'ont pas encore été reçus, et (b) pour ne déterminer si un numéro d'index reçu est une répétition d'un numéro d'index précédemment envoyé, que si le nombre de paquets de données non reçus dépasse un nombre prédéterminé. 19 ) Mémoire tampon de données (11) selon l'une quelconque des revendications 12 à 18, caractérisée en ce qu' elle est disposée de façon que tout paquet de données successif alloué à une zone de mémoire inoccupée, soit capable d'être réécrit sur le paquet de données précédemment stocké dans cette zone de mémoire.