FR 3030961 A1 20160624 FR 1463022 A 20141219 Procédé de traitement d'un paquet dans un réseau défini par logiciel L'invention se situe dans le domaine des réseaux de communication, plus précisément de ceux définis par logiciel, connus également sous le nom de réseaux SDN (pour Software Defined Networking). L'invention concerne plus particulièrement une technique de traitement d'un paquet de données. Les réseaux définis par logiciel, ou réseaux SDN, reposent sur une architecture de réseau de communication dissociant plan de contrôle et plan de données. Le plan de contrôle d'un réseau défini selon une telle architecture est déployé au travers d'entités de contrôle, ou contrôleurs SDN, offrant une gestion centralisée du réseau. Les entités de transfert comprennent des moyens pour recevoir des instructions de contrôle et des moyens pour traiter les paquets dans le plan de données. Ces entités de contrôle communiquent par exemple par l'intermédiaire du protocole OpenFlow avec des entités de transfert appartenant à un plan de données, ou commutateurs OpenFlow (en anglais « OpenFlow switch »). Les décisions de routage sont prises par les entités de contrôle pour chaque flux de données, puis sont ensuite transmises aux entités de transfert sous forme de simples instructions de commutation. Un tel réseau de communication présente l'avantage d'être simple à déployer et à administrer. Le document « OpenFlow Switch Specifïcation » version 1.4.0 de l'Open Networking Foundation décrit les composants d'une entité de transfert et un procédé de traitement d'un paquet de données mis en oeuvre par une entité de transfert dans une architecture de réseau SDN. Une telle entité de transfert comprend une ou plusieurs tables de flux utilisées lors du routage des paquets de données arrivant en entrée de l'entité de transfert. L'ensemble des tables de flux d'une entité de transfert, liées entre elles et qui permettent de mettre en oeuvre des fonctions d'identification de champs, d' acheminement, et de modification d'un paquet de données, forme un processus chaîné, ou selon la terminologie du document de l'Open Networking Foundation, un «pipeline ». Lorsqu'un paquet de données arrive en entrée d'une entité de transfert, il est traité par l'intermédiaire de ce processus chaîné. L'entité de transfert détermine à partir de la première table de flux du processus chaîné si une correspondance existe entre une entrée de cette table et un ou plusieurs champs du paquet. Lorsqu'une telle correspondance existe, une séquence d'instruction associée à l'entrée de la table de flux est exécutée. Dans le cas contraire, le paquet est, selon la configuration du processus chaîné, envoyé à une entité de contrôle, supprimé, ou soumis de nouveau à une vérification de l'existence d'une correspondance entre une entrée d'une prochaine table de flux du processus chaîné et un ou plusieurs champs du paquet. Les instructions exécutées lors du traitement du paquet par l'intermédiaire du processus chaîné permettent plus particulièrement au paquet, d'être transmis à destination d'une autre table du processus chaîné afin que soient par exemple exécutées de nouvelles instructions, ou encore permettent de communiquer des informations entre les tables du processus chaîné. Le traitement du paquet par l'intermédiaire du processus chaîné cesse lorsque la séquence d'instruction associée à une entrée d'une table de flux ne renvoie pas vers une autre table du processus chaîné. En outre, la séquence d'instruction obtenue depuis une table de flux peut également consister à appliquer directement des actions sur le paquet traité, ou encore à ajouter des actions à un groupe d'actions associé au paquet. Ce groupe d'actions est appelé « Action Set » selon la terminologie du document de l'Open Networking Foundation. Une action est quant à elle définie par ce même document comme une opération de transmission d'un paquet vers un port ou de modification d'un paquet. Le groupe d'actions à appliquer au paquet est initialement vide et est transmis d'une table de flux à une autre lors du traitement du paquet par l'intermédiaire du processus chaîné. Des actions à appliquer au paquet sont ajoutées à ce groupe d'actions, ou supprimées de ce groupe d' actions, au cours du traitement de ce dernier par l'intermédiaire des tables de flux du processus chaîné. Les actions du groupe d'actions sont finalement exécutées en sortie du processus chaîné. Le procédé de traitement d'un paquet décrit dans le document de l'Open Networking Foundation comporte cependant des inconvénients. Le procédé impose en particulier un ordonnancement des instructions à exécuter en fonction d'un type d'instruction. Cet ordonnancement peut notamment donner lieu à des recouvrements d' actions à appliquer à un paquet susceptibles d'alourdir et de ralentir le traitement des paquets de données à acheminer. Un traitement dégradé de ces paquets peut s' accompagner d'une diminution importante de la qualité d'expérience utilisateur, et s'avérer particulièrement néfaste pour des services ne supportant pas un temps de traitement élevé des paquets de données à acheminer (e.g. streaming, jeux en ligne). Un des buts de l'invention est de remédier à des insuffisances/inconvénients de l'état de la technique et/ou d'y apporter des améliorations. Selon un premier aspect, l'invention propose un procédé de traitement d'un paquet de données, dans un réseau de communication défini par logiciel comprenant un plan de contrôle mis en oeuvre par une entité de contrôle et un plan de transfert mis en oeuvre par une entité de transfert. Le procédé comprend dans le plan de transfert : - une obtention, pour au moins une valeur d'un champ du paquet, d'une séquence d'instruction à exécuter sur un groupe d'actions à appliquer au paquet et associé au paquet, dit groupe en entrée ; - une vérification que la séquence comprend pour le groupe en entrée une instruction de suppression d'action, dont l'ordre précède une instruction d'ajout d'action ; - une exécution de la séquence d'instruction pour obtenir un groupe d'actions à appliquer au paquet, dit groupe en sortie, au cours de laquelle, lorsqu'une action à supprimer du groupe en entrée correspond à une action à ajouter au groupe en entrée, l'action reste mémorisée suite à l'exécution de l'instruction de suppression dans une mémoire locale de l'entité de transfert. Par mémoire locale, on entend une mémoire de l'entité de transfert à accès rapide. Il peut s'agir d'une mémoire de travail ou d'une mémoire cache. Une mémoire de travail permet de stocker des données utilisées lors de la mise en oeuvre de traitement. Une mémoire cache permet de mémoriser temporairement des copies de données par exemple pour diminuer le temps d'accès (en lecture ou en écriture) à ces données par l'entité. Le procédé, grâce à la mise en oeuvre d'une mémoire locale, permet d'accélérer le temps d'exécution de la séquence d'instruction associée à un paquet de données à traiter. Une action mémorisée dans une mémoire locale est notamment accédée rapidement et peut être réutilisée lors de l'exécution d'une instruction d'ajout suivant en ordre l'instruction de suppression d'une même séquence d'instruction. Ceci permet notamment de réduire le temps de traitement de l'instruction d'ajout par un processeur de calcul d'une entité de transfert mettant en oeuvre le procédé. En outre, l'exécution accélérée de la séquence d'instruction a pour effet un traitement moins long des paquets de données. L'expérience utilisateur, notamment pour des paquets de données issus de flux temps réels, est ainsi améliorée. Le procédé trouve un intérêt particulier pour une mise en oeuvre en utilisant un jeu d'instructions conforme par exemple à celui défini dans le document « OpenFlow Switch Specification ». En effet, pour cette mise en oeuvre, un ordonnancement des instructions à exécuter est défini et une instruction de suppression précède toujours en ordre une instruction d'ajout. Ainsi, elle est toujours exécutée avant une instruction d'ajout. Par conséquent, le procédé peut être mis en oeuvre dans une infrastructure réseau définie par logiciel existante sans nécessiter d'adaptation des entités de contrôle chargées de configurer les entités de transfert du plan de transfert. Le déploiement du procédé est notamment facilité. Dans un mode de réalisation particulier, lors de l'exécution de l'instruction d'ajout, l'action ayant préalablement été mémorisée dans la mémoire locale est ajoutée au groupe en entrée à partir de la mémoire locale. Ainsi dans ce mode de réalisation, les actions à ajouter au groupe d'actions en entrée sont obtenues depuis la mémoire locale. Le procédé permet ainsi de conserver une syntaxe de l'instruction d'ajout connue de l'état de la technique tout en permettant un traitement plus rapide de cette instruction. Le procédé permet de même d'utiliser une syntaxe existante pour les autres instructions de la séquence d'instruction. Dans un mode de réalisation particulier, suite à l'exécution de l'instruction de suppression, l'action n'est pas supprimée du groupe en entrée. Le procédé permet ainsi une économie des opérations d'écriture mémoire d'une action d'ajout dans le groupe d'actions associé au paquet à traiter. En effet, dans ce mode de réalisation, une suppression de l'action dans le groupe d'actions associé au paquet à traiter alors que cette action est déjà présente dans le groupe d'actions est notamment évitée. Selon une caractéristique particulière, la séquence d'instruction est obtenue à partir d'une table de flux mémorisant des associations entre des champs du paquet et des séquences d'instructions. Selon une caractéristique particulière, les étapes d'obtention, de vérification et d'exécution sont mises en oeuvre pour un groupe de tables de flux ordonnées formant un processus chaîné. Les économies d'opérations mémoires obtenues pour une séquence d'instruction au niveau d'une table de flux peuvent ainsi être réitérées pour l'ensemble des tables de flux d'un processus chaîné. Le traitement d'un paquet de données reçu en entrée du processus chaîné est accéléré à chaque modification du groupe d'actions à appliquer au paquet au cours du processus chaîné. Selon un deuxième aspect, l'invention concerne une entité de transfert, mettant en oeuvre, pour traiter un paquet de données, un plan de transfert d'un réseau défini par logiciel. L'entité de transfert comprend : - un module d'obtention, agencé pour obtenir, pour au moins une valeur d'un champ du paquet de données, une séquence d'instruction à exécuter sur un groupe d'actions à appliquer au paquet et associé au paquet, dit groupe en entrée ; - un module de vérification, agencé pour vérifier qu'une séquence comprend pour un groupe d'actions une instruction de suppression d'action, dont l'ordre précède une instruction d'ajout d' action ; - une mémoire locale ; - un module de traitement, agencé pour obtenir un groupe d'action à appliquer au paquet, dit groupe en sortie, en exécutant une séquence d'instruction sur un groupe d'action en entrée et en laissant mémorisée dans la mémoire locale une action à supprimer du groupe en entrée correspondant à une action à ajouter au groupe en entrée suite à l'exécution de l'instruction de suppression. Selon une caractéristique particulière, le module de traitement est en outre agencé pour, lors de l'exécution d'une instruction d'ajout, ajouter une action à un groupe d'actions à partir de la mémoire locale. Selon une caractéristique particulière, le module de traitement est en outre agencé pour, lors de l'exécution d'une instruction de suppression, ne pas supprimer une action à un groupe d'actions. Selon une caractéristique particulière, le module d'obtention est agencé pour obtenir la séquence d'instruction à partir d'une table de flux mémorisant des associations entre des champs d'un paquet et des séquences d'instructions. Selon une caractéristique particulière, l'entité de transfert comprend en outre : - au moins une table de flux, agencée pour mémoriser des associations entre des champs d'un paquet et des séquences d'instructions ; - le module de traitement étant en outre agencé, pour mettre en oeuvre un processus chaîné constitué des tables de flux, les modules d'obtention, de vérification, et d'exécution étant activés pour chaque table de flux du processus chaîné ; - un module d'envoi/réception, agencé pour recevoir un groupe d' actions en entrée d'une table de flux, et pour envoyer un groupe d'actions en sortie de la table de flux à une table de flux suivant en ordre la table de flux dans le processus chaîné. Les avantages énoncés pour l'une quelconque des caractéristiques du procédé de traitement selon le premier aspect sont directement transposables à l'entité de transfert selon le deuxième aspect. Selon un troisième aspect, l'invention concerne également un programme pour une entité de transfert, comprenant des instructions de code de programme destinées à commander l'exécution des étapes du procédé précédemment décrit, lorsque ledit programme est exécuté par ladite entité et un support d'enregistrement lisible par une entité de transfert sur lequel est enregistré un programme pour une entité de transfert. La technique de traitement sera mieux comprise à l'aide de la description suivante de modes de réalisation particuliers, en référence aux dessins annexés sur lesquels : - la figure 1 représente un réseau de communication défini par logiciel selon un mode particulier de réalisation ; - les figures 2a et 2b représentent des étapes d'un procédé de traitement d'un paquet de données selon deux modes particuliers de réalisation ; - la figure 3 représente une entité de transfert selon un mode particulier de réalisation. La figure 1 représente un réseau de communication défini par logiciel 1 selon un mode de réalisation particulier. Le réseau de communication défini par logiciel 1 comprend plus particulièrement un plan de contrôle 2 mis en oeuvre par une entité de contrôle 20 et un plan de transfert 3 mis en oeuvre par une entité de transfert 10. L'entité de contrôle 20 communique avec l'entité de transfert 10 afin de lui transmettre des instructions de contrôle. Ces instructions de contrôle permettent notamment d'ajouter, supprimer ou encore modifier des entrées dans les tables de flux d'une entité de transfert 10. Par la suite, la communication entre l'entité de contrôle 20 et l'entité de transfert 10 est supposée réalisée au moyen du protocole OpenFlow décrit dans le document « OpenFlow Switch Specification ». L'entité de transfert 10 met en oeuvre un processus chaîné 15, (ou « Pipeline » en anglais) constitué de tables 11-13, dites « tables de flux » (ou « Flow Table » en anglais). Chacune de ces tables de flux 11-13 contient un ensemble d'entrées, dites « entrées de flux » (ou « Flow Entty » en anglais). L'entité de contrôle 20 permet d'ajouter, de modifier ou encore de supprimer des entrées de flux dans les tables de flux 11-13. Tel que précédemment décrit en introduction, lorsqu'un paquet de données 30 arrive en entrée d'une entité de transfert, il est traité par l'intermédiaire du processus chaîné 15 mis en oeuvre par l'entité de transfert 10. Ce processus chainé vise à déterminer un groupe d'actions (ou « Action Set » en anglais) à appliquer au paquet à traiter. Une action correspond à une opération appliquée au paquet pour son acheminement. Dans un contexte OpenFlow, un groupe d'actions est initialement vide en entrée du processus chaîné 15. Une action du groupe d'actions correspond à une des actions définies dans la section 5.12 du document « OpenFlow Switch Specification ». Il s'agit notamment des actions : - output, pour transmettre le paquet à traiter vers un port OpenFlow ; - set-queue, pour définir un identifiant de file d'attente pour le paquet à traiter ; - drop, pour indiquer que le paquet à traiter doit être supprimé ; - push-tag/pop-tag, pour insérer ou supprimer un champ d'entête du paquet à traiter ; - set-field, pour modifier la valeur d'un champ d'entête du paquet à traiter ; - change-TTL, pour modifier les valeurs des champs lPv4 TTL, IPv6 Hop Limit ou MPLS TTL susceptibles d'être associées au paquet à traiter. L'entité de transfert 10 détermine à partir de la première table de flux s'il existe une correspondance entre une entrée de flux de cette table et des champs du paquet de données en entrée 30. Lorsqu'une correspondance existe, une séquence d'instruction est exécutée sur le groupe d'actions, dit groupe d'actions en entrée, pour obtenir un groupe d'actions en sortie. Cette séquence d'instruction, lorsqu'il ne s' agit pas de la dernière table de flux du processus chaîné 15, comprend également une instruction permettant de déterminer la prochaine table de flux 11-13 du processus chaîné 15 utilisée pour traiter le paquet de données 30. Dans le cas contraire, c'est-à-dire lorsqu'il n'existe pas de correspondance entre une entrée de flux de la table de flux 11 et un ou plusieurs champs du paquet en entrée 30, le paquet 30 est selon la configuration du processus chaîné 15, envoyé à l'entité de contrôle 20, supprimé, ou transmis en entrée d'une prochaine table de flux 12-13 du processus chaîné 15. Le groupe d'actions est transmis d'une table de flux 11-13 à une autre, et est susceptible d'être modifié par chacune des séquences d'instructions exécutées au cours du processus chaîné 15. Le traitement du paquet par l'intermédiaire du processus chaîné 15 cesse lorsque la séquence d'instruction associée à une entrée d'une table de flux 11-13 ne comporte pas d'instruction renvoyant vers une autre table de flux 11-13. Une fois le processus chaîné mis en oeuvre, le groupe d'actions 19 en sortie est alors appliqué au paquet 30, permettant d'obtenir en sortie du processus chaîné 15 un paquet traité 40. Ce groupe d'actions 19 est associé au paquet de données 30. Il est par ailleurs à noter que le mode de réalisation décrit en relation avec la figure 1 est une représentation simplifiée d'un réseau de communication défini par logiciel 1 afin d'en faciliter la compréhension. Aucune limitation n'est attachée au nombre d'entités de transfert 10. De même, aucune limitation n'est attachée au nombre de tables de flux 11-15 constituant le processus chaîné 15. La figure 2a représente des étapes d'un procédé de traitement d'un paquet de données selon un premier mode particulier de réalisation. Par la suite, on suppose pour le présent mode de réalisation qu'une entité de transfert 10 met en oeuvre un processus chaîné constitué de deux tables de flux TBL1 et TBL2. Le processus chaîné mis en oeuvre est par exemple un processus chaîné tel que spécifié dans le document « OpenFlow Switch Specification». Ce processus chaîné prend également en compte un numéro de port en entrée de l'entité de transfert. Par la suite, à titre illustrant un paquet PktIn est reçu lors d'une étape El sur un port identifié par le numéro deux en entrée de l'entité de transfert 10. Ce paquet PktIn est par exemple une trame Ethernet et est plus particulièrement constitué d'un en-tête (en anglais « header ») et d'une partie appelée « données utiles » (en anglais « payload ») regroupant des données correspondant au contenu du message à transmettre. Le paquet PktIn comprend à titre d'exemple dans son en-tête un champ « source » valorisé à « 00:0c:29: lc:ca:3e », un champ « destination » valorisé à « 00:0c:29:0b:4a:33 », et un champ « type » valorisé à « ipv4 ». L'entité de transfert 10 crée et associe en outre un groupe d'actions à appliquer au paquet PktIn. A l'initialisation, lorsque le paquet est reçu par l'entité de transfert 10, le groupe d'actions nouvellement créé est vide. Lors d'une étape E2, les champs du paquet PktIn sont mis en correspondance avec les entrées de la première table de flux TBL1 afin de déterminer si l'une d'elles comporte un champ ou une combinaison de plusieurs champs du paquet pour lequel/lesquels il existe une séquence d'instruction associée dans la table de flux TBL1. Les champs du paquet pris en compte lors de l'étape E2 sont par exemple des champs d'en-tête du paquet et un numéro de port en entrée. A titre d'exemple la table TBL1 se présente sous la forme suivante : Matches Instructions in_port: 2 Clear_Actions eth_dst: 00:0c:29:0b:4a:33 eth_src: 00:0c:29: lc:ca:3e eth_type: arp Write_Actions(output, push_tag) Goto-Table TBL2 in_port: 2 Clear_Actions eth_dst: 00:0c:29:0b:4a:33 eth_src: 00:0c:29: lc:ca:3e eth_type: ipv4 Write_Actions(output, set_field) Goto-Table TBL2 La colonne « Matches » indique les valeurs de champ, qui identifiées dans le paquet PktIn déclencheront la séquence ordonnée d'instructions associée de la colonne « Instructions ». La table TBL1 indique plus précisément que les instructions « Clear-Actions », « WriteActions(output, push_tag) » et « Goto-Table TBL2 » sont à exécuter pour un paquet à traiter reçu sur un port en entrée in_port d'identifiant 2, comportant un champ « destination » eth_dst valorisé à « 00:0c:29:0b:4a:33 », un champ « source » eth_src valorisé à « 00:0c:29: lc:ca:3e », et un champ « type » valorisé à « arp ». De même la table TBL1 indique que les instructions « Clear-Actions », « Write-Actions(output, set_field) » et « Goto-Table TBL2 » sont à exécuter pour un paquet à traiter reçu sur un port en entrée in_port d'identifiant 2, comportant un champ « destination » eth_dst valorisé à « 00:0c:29:0b:4a:33 », un champ « source » eth_src valorisé à « 00:0c:29: lc:ca:3e », et un champ « type » valorisé à « ipv4 ». Les entrées de la table TBL1 sont parcourues depuis la première entrée jusqu'à la dernière entrée de la table jusqu'à ce qu'une correspondance soit identifiée avec des champs d'un paquet passé en entrée de la table TBL1. Dans l'exemple donné, le paquet PktIn comprend une combinaison de champs dont les valeurs correspondent à la deuxième entrée de la table TBL1. Lors d'une étape E3, l'entité de transfert 10 obtient la séquence d'instruction associée à la combinaison de champs identifiée à l'étape E2. Pour le paquet PktIn donné à titre illustratif, la séquence d'instruction obtenue comprend en ordre les instructions suivantes : « Clear_Actions », « Write_Actions(output, set_field) » et « Goto-Table TBL2 ». Lors d'une étape E4, l'entité de transfert 10 vérifie que la séquence d'instruction obtenue comprend dans l'ordre une instruction de suppression suivie d'une instruction d'ajout d'action au groupe d'actions associé au paquet PktIn. La séquence d'instruction obtenue à l'étape E3 pour le paquet PktIn comprend bien en ordre une instruction de suppression d'action, l'instruction « ClearActions », suivie d'une instruction d'ajout d'action, l'instruction « Write-Actions ». Dans une étape E5, l'entité de transfert 10 vérifie si une action à supprimer du groupe en entrée correspond à une action à ajouter au groupe en entrée. Dans l'exemple considéré, l'instruction « Clear-Actions » s'applique à l'ensemble des actions du groupe d'actions associé au paquet PktIn. Ce groupe d'actions est lors de cette première mise en oeuvre de l'étape E5 vide, puisqu'il n'a pas encore été modifié depuis sa création à l'étape El. Les actions auxquelles s'appliquent l'instruction « Write-Actions » sont en outre au nombre de deux : « output » et « set_field ». Aucune action n'est donc commune aux deux instructions d'ajout et de suppression. Le procédé de traitement passe alors à une étape E7 d'exécution de la séquence d'instruction précédemment obtenue à l'étape E3 pour obtenir un groupe d'actions en sortie. Une séquence d'instruction telle que définie par le document « OpenFlow Switch Specification », est susceptible de comprendre dans l'ordre les instructions « Meter », « Apply-Actions », « Clear- Actions », « Write-Actions », « Write-Metadata » et « Goto-Table ». Les instructions « Meter », « Apply-Actions », « Clear-Actions », « Write-Metadata » et « Goto-Table » sont optionnelles et ne sont exécutées respectivement dans des sous-étapes E71, E72, E73, E75 et E76, que lorsqu'elles sont présentes dans la séquence d'instruction obtenue à l'étape E3. L'instruction « Write-Actions » est quant à elle exécutée dans une sous-étape E74. Dans l'exemple considéré, la séquence d'instruction ne comprend que les instructions « Clear-Actions », « Write-Actions » et « Goto-Table ». Les sous-étapes E73, E74 et E76 sont donc seules mises en oeuvre conformément à ce qui est décrit dans le document « OpenFlow Switch Specification ». Plus précisément, toutes les actions du groupe d'actions en entrée associé au paquet PktIn sont supprimées par l'instruction « Clear-Actions » à la sous-étape E73, ce qui a pour effet de laisser le groupe d'actions inchangé, ce dernier étant initialement vide lors de la première mise en oeuvre de cette étape. Puis les actions « output » et « set_field » sont ajoutées au groupe d'actions à la sous-étape E74. Le groupe d'actions associé au paquet PktIn à l'issue de l'exécution de la sous-étape E74 est donc constitué des deux actions « output » et « set_field ». L'instruction « GotoTable » est ensuite exécutée lors de la sous-étape E76. Cette dernière instruction renvoie le paquet PktIn vers la table de flux TBL2, afin de déterminer lors de l'étape E2, si une entrée de la table de flux TBL2 comporte un champ ou une combinaison de plusieurs champs du paquet pour lequel/lesquels il existe une séquence d'instruction associée dans cette table de flux TBL2. La table TBL2 comprend à titre d'exemple une unique entrée : Matches Instructions in_port: 2 Clear_Actions eth_dst: 00:0c:29:0b:4a:33 eth_src: 00:0c:29: lc:ca:3e eth_type: ipv4 Write_Actions(output, set_field, change_TTL) L'unique entrée de la table TBL2 indique que les instructions « Clear-Actions », « Write- Actions(output, set_field, change_TTL) » sont à exécuter pour un paquet à traiter reçu sur un port en entrée in_port d'identifiant 2, comportant un champ « destination » eth_dst valorisé à « 00:0c:29:0b:4a:33 », un champ « source » eth_src valorisé à « 00:0c:29: lc:ca:3e », et un champ « type » valorisé à « ipv4 ». Dans l'exemple donné, le paquet PktIn comprend une combinaison de champs dont les valeurs correspondent à l'entrée de la table TBL2. De même que décrit précédemment pour la table TBL1, l'entité de transfert 10 obtient, lors de l'étape E3, la séquence d'instruction associée à la combinaison de champs identifiée à l'étape E2 pour la table TBL2. Pour le paquet PktIn donné à titre illustratif, la séquence d'instruction obtenue comprend en ordre les instructions suivantes « Clear_Actions » et « Write_Actions(output, set_field, change_TTL) ». Puis lors de l'étape E4, l'entité de transfert 10 vérifie que la nouvelle séquence d'instruction obtenue comprend dans l'ordre une instruction de suppression suivie d'une instruction d'ajout d'action au groupe d'actions associé au paquet PktIn. La séquence d'instruction nouvellement obtenue à l'étape E3 pour le paquet PktIn comprend bien une instruction de suppression d'action « Clear-Actions » suivie d'une instruction d'ajout d'action « Write-Actions ». A l'étape E5, l'entité de transfert 10 vérifie qu'une action à supprimer du groupe en entrée correspond à une action à ajouter au groupe en entrée. Plus précisément, l'entité de transfert vérifie si au moins une action à laquelle s'appliquent les instructions « Clear-Actions » et « Write-Actions » est commune à ces deux instructions de la séquence d'instruction obtenue à partir de la table TBL2. Telle que spécifiée pour OpenFlow, l'instruction « Clear-Actions » s'applique à l'ensemble des actions du groupe d'actions en entrée, qui comprend à ce stade deux 10 actions : « output » et « set_field ». Les actions auxquelles s'applique l'instruction « Write- Actions » sont en outre au nombre de trois : « output », « set_field » et « change_TTL ». Deux actions sont donc communes aux deux instructions d'ajout et de suppression, à savoir les actions « output » et « set_field ». Le procédé de traitement passe alors à une étape E6 de mémorisation de la ou des actions communes dans une mémoire locale 106 de l'entité de transfert, au cours de laquelle les actions « output » et « set_field » sont mémorisées dans la mémoire locale 106. Cette mémoire locale 106 est une mémoire à accès rapide, par exemple une mémoire cache. De même que précédemment décrit, la séquence d'instruction obtenue à partir de la table TBL2 est exécutée lors de l'étape E7. Cette séquence d'instruction comprend deux instructions : « Clear-Actions » et « Write-Actions(output, set_field, change_TTL) ». L'instruction « Clear- Actions » est d'abord exécutée lors de la sous-étape E73. Cette instruction a pour effet un effacement de toutes les actions du groupe d'actions en entrée. Il est cependant rappelé qu' avant d'être effacées du groupe d'actions, les actions « output » et « set_field » ont été mémorisées dans la mémoire locale 106 lors de l'étape E6. Lors de la sous-étape E75, l'instruction « Write-Actions » est exécutée conformément à l'invention, à savoir, l'instruction « Write-Actions » met en oeuvre un contrôle pour chaque action à écrire dans le groupe d'actions en entrée, consistant à vérifier la présence de l'action à écrire en mémoire locale 106, et le cas échéant à obtenir cette action depuis la mémoire locale 106 pour l'écrire dans le groupe d'actions en cours de traitement. Ainsi il n'est pas nécessaire de lire les actions à écrire depuis une mémoire non optimisée pour des accès rapides, et le traitement de la séquence d'instruction est de fait accéléré. Il est également souligné que ce mode de réalisation ne requiert pas de modifications relatives à la syntaxe des instructions. Le procédé peut ainsi aisément être mis en oeuvre sans adaptation du protocole OpenFlow tel que connu de l'état de l'art. Les actions « output » et « set_field » sont ainsi vérifiées présentes dans la mémoire locale 106, avant d'être ajoutées au groupe d'actions à partir de la mémoire locale 106. La séquence d'instruction ne comportant pas d'autres instructions, et en particulier ne comportant pas d'instruction « Goto-Table », le paquet n'est pas renvoyé vers une autre table de flux. Le processus chaîné cesse lors d'une étape E8, et les actions du groupe d'actions associé au paquet PktIn obtenu en sortie de processus sont appliquées au paquet PktIn. Par ailleurs, lors de l'étape E2, lorsqu' aucune correspondance n'est identifiée entre les champs d'un paquet de données à traiter et les entrées d'une table de flux, l'entité de transfert 10, lors d'une étape E9, vérifie s'il existe dans la table de flux en cours une entrée particulière correspondant à une absence de correspondance entre les champs du paquet de données et une entrée de la table de flux. Si une telle entrée existe, l'entité de transfert 10 repasse à l'étape E3 où la séquence d'instruction associée à cette entrée particulière de la table de flux est obtenue. Les étapes suivantes du procédé de traitement étant mises en oeuvre telles que décrites précédemment. Lorsqu'à l'étape E9, aucune entrée particulière correspondant à une absence de correspondance entre les champs du paquet de données et une entrée de la table de flux n'est identifiée, le paquet de données est supprimé (étape E10). Le procédé a été décrit avec une mise en oeuvre utilisant le protocole OpenFlow. Il peut néanmoins aisément être adapté à tous jeux d'instructions comportant des instructions s'appliquant en ordre sur des paramètres communs, comportant une instruction de suppression suivie d'une instruction d'ajout d'un même paramètre. En outre il est également souligné que le protocole OpenFlow prévoit que l'instruction de suppression « Clear » supprime toutes les actions d'un groupe d'actions. Le procédé peut également être mis en oeuvre lorsque l'instruction de suppression s'applique à une ou plusieurs actions. La figure 2b représente des étapes d'un procédé de traitement d'un paquet de données selon un deuxième mode particulier de réalisation. Dans ce mode de réalisation, les étapes El à E5 et E8 à El0 sont identiques à ce qui a précédemment été décrit en relation avec la figure 2a. Par simplification l'exemple choisi pour le premier mode de réalisation décrit en relation avec la figure 2a est également repris pour ce deuxième mode de réalisation. On se place pour ce deuxième mode de réalisation lors de l'itération associée à la table TBL2. De même que décrit précédemment en relation avec la figure 2a, l'entité de transfert 10 obtient, lors de l'étape E3, la séquence d'instruction associée à la combinaison de champs identifiée à l'étape E2 pour la table TBL2. Pour le paquet PktIn donné à titre illustrant la séquence d'instruction obtenue comprend en ordre les instructions suivantes « Clear_Actions » et « Write_Actions(output, set_field, change_TTL) ». Puis lors de l'étape E4, l'entité de transfert 10 vérifie que la nouvelle séquence d'instruction obtenue comprend dans l'ordre une instruction de suppression suivie d'une instruction d'ajout d'action au groupe d'actions associé au paquet PktIn. La séquence d'instruction nouvellement obtenue à l'étape E3 pour le paquet PktIn comprend bien une instruction de suppression d'action « Clear-Actions » suivie d'une instruction d'ajout d'action « Write-Actions ». A l'étape E5, l'entité de transfert 10 vérifie qu'une action à supprimer du groupe en entrée correspond à une action à ajouter au groupe en entrée. Plus précisément, l'entité de transfert 10 vérifie si au moins une action à laquelle s'appliquent les instructions « Clear-Actions » et « Write-Actions » est commune à ces deux instructions de la séquence d'instruction obtenue à partir de la table TBL2. Telle que spécifiée pour OpenFlow, l'instruction « Clear-Actions » s'applique à l'ensemble des actions du groupe d'actions en entrée, qui comprend à ce stade deux actions : « output » et « set_field ». Les actions auxquelles s'applique l'instruction « WriteActions » sont au nombre de trois : « output », « set_field » et « change_TTL ». Deux actions sont donc communes aux deux instructions d'ajout et de suppression, à savoir les actions « output » et « set_field ». Le procédé de traitement passe alors à une étape E60 de mémorisation des actions du groupe associé au paquet PktIn 30, dans une mémoire locale 106 dite mémoire de travail. Les instructions de la séquence d'instruction sont ensuite exécutées dans cette mémoire de travail. Il est ici souligné que cette étape E60 fait partie des opérations mises en oeuvre de manière classique lorsque des instructions sont à mettre en oeuvre sur des données. Lors d'une étape E61, l'entité de transfert 10 détermine la ou les actions qui sont effectivement à supprimer. Pour cela, l'entité de transfert 10 détermine l'action ou les actions du groupe d'actions associé au paquet PktIn qui ne sont pas comprises dans le groupe d'actions commune identifié à l'étape E5. Dans l'exemple considéré, les actions communes étant identiques aux actions du groupe d'actions associé au paquet PktIn, l'ensemble d'actions effectivement à supprimer est vide. Ce qui signifie qu'aucune action n'est à supprimer du groupe d'actions. Ce résultat est mémorisé dans la mémoire locale 106. Lors d'une étape E62, l'entité de transfert 10 détermine la ou les actions qui sont effectivement à ajouter au groupe d'actions associé au paquet PktIn. Pour cela, l'entité de transfert 10 détermine parmi les actions auxquelles s'appliquent l'instruction « Write » celles qui ne sont pas comprises dans le groupe d'actions associé au paquet PktIn. Dans l'exemple considéré, le groupe d'actions associé au paquet PktIn comprend les actions « output » et « set_field », tandis que le groupe d'actions auquel s'applique l'instruction « Write-Actions » est constitué des trois actions « output », « set_field » et « change_TTL ». L'action « change_TTL » n'étant pas comprise parmi les actions du groupe d'actions associée au paquet PktIn, cette action est identifiée comme une action devant effectivement être ajoutée au groupe d'actions lors de l'exécution de la sous-étape E74. Ce résultat est mémorisé dans la mémoire locale 106. Dans une étape E63, la séquence d'instruction obtenue à l'étape E3 est modifiée. L'instruction « Clear-Actions » est supprimée puisqu'aucune action n'a été identifiée comme devant effectivement être supprimée à l'étape E61. L'action « Write-Actions(output, set_field, change_TTL) » est quant à elle remplacée par une instruction « Write-Actions(change_TTL) » ne comportant que l'action identifiée comme devant effectivement être ajoutée. La nouvelle séquence d'instruction est ensuite exécutée à l'étape E7 tel que décrit précédemment en relation avec la figure 2a. Le groupe d'actions en sortie est obtenu par lecture de la mémoire locale 106. Les actions output, set_field sont restées mémorisées dans la mémoire locale 106 de l'entité de transfert 10 suite à l'exécution de l'instruction de suppression. Ainsi, une seule opération d'écriture est nécessaire pour obtenir le groupe d'actions en sortie, contre trois opérations de suppression et une opération d'écriture selon la technique proposée dans le document « OpenFlow Switch Specification ». Les opérations d'écriture et de suppression étant particulièrement coûteuses en ressources de calcul, le procédé permet avantageusement d'accélérer le traitement des paquets de données reçus par l'entité de transfert 10. Lors de l'étape E8, le processus chaîné prend fin et les actions du groupe d'actions en sortie sont appliquées au paquet PktIn. En outre, dans un autre mode de réalisation, il est possible de prévoir une mise en oeuvre d'une instruction de suppression s'appliquant à une seule action. L'action à supprimer est par exemple un paramètre de l'instruction de suppression. Le procédé peut par ailleurs avantageusement être mis en oeuvre pour d'autres jeux d'instructions. La figure 3 représente une entité de transfert 10, mettant en oeuvre, pour traiter un paquet de données, un plan de transfert d'un réseau défini par logiciel. L'entité de transfert 10 comprend : - un module d'obtention 100, agencé pour obtenir, pour au moins une valeur d'un champ du paquet de données, une séquence d'instruction à exécuter sur un groupe d'actions à appliquer au paquet et associé au paquet, dit groupe en entrée ; - un module de vérification 102, agencé pour vérifier qu'une séquence comprend pour un groupe d'actions une instruction de suppression d'action, dont l'ordre précède une instruction d'ajout d' action ; - une mémoire locale 106; - un module de traitement 104, agencé pour obtenir un groupe d'actions à appliquer au paquet, dit groupe en sortie, en exécutant une séquence d'instruction sur un groupe d'actions en entrée et en laissant mémorisée dans la mémoire locale une action à supprimer du groupe en entrée correspondant à une action à ajouter au groupe en entrée suite à l'exécution de l'instruction de suppression. La mémoire locale est une mémoire de travail ou une mémoire cache. Dans un autre mode de réalisation, le module de traitement 104 est en outre agencé pour, lorsqu'une instruction d'ajout d'une action est précédée en ordre d'une instruction de suppression de cette action, lors de l'exécution de l'instruction de suppression, mémoriser cette action dans la mémoire locale 106, et lors de l'exécution de l'instruction d'ajout, ajouter cette action au groupe d'actions à partir de la mémoire locale. Dans un autre mode de réalisation, le module de traitement 104 est en outre agencé pour, lorsqu'une instruction d' ajout d'une action est précédée en ordre d'une instruction de suppression de cette action, lors de l'exécution de l'instruction de suppression, ne pas supprimer de la mémoire locale cette action d'un groupe d'actions, et lors de l'exécution de l'instruction d'ajout, ne pas ajouter cette action. Dans un autre mode de réalisation, le module d'obtention 100 est agencé pour obtenir la séquence d'instruction à partir d'une table de flux 110 mémorisant des associations entre des champs d'un paquet et des séquences d'instructions. Dans un mode de réalisation particulier, l'entité de transfert comprend en outre un module d'envoi/réception 108, agencé pour recevoir un groupe d'actions en entrée d'une table de flux 110, et pour envoyer un groupe d'actions en sortie de la table de flux 110 à une table de flux 110 suivant en ordre cette table de flux 110 dans un processus chaîné. L'invention est mise en oeuvre au moyen de composants logiciels et/ou matériels. Dans cette optique, le terme "module" peut correspondre dans ce document aussi bien à un composant logiciel, qu'à un composant matériel ou à un ensemble de composants matériels et/ou logiciels, apte à mettre en oeuvre une fonction ou un ensemble de fonctions, selon ce qui est décrit précédemment pour le module concerné. Un composant logiciel correspond à un ou plusieurs programmes d'ordinateur, un ou plusieurs sous-programmes d'un programme, ou de manière plus générale à tout élément d'un programme ou d'un logiciel. Un tel composant logiciel est stocké en mémoire puis chargé et exécuté par un processeur de données d'une entité physique et est susceptible d'accéder aux ressources matérielles de cette entité physique (mémoires, supports d'enregistrement, bus de communication, cartes électroniques d'entrées/sorties, interfaces utilisateur, etc). De la même manière, un composant matériel correspond à tout élément d'un ensemble matériel (ou hardware). Il peut s'agir d'un composant matériel programmable ou non, avec ou sans processeur intégré pour l'exécution de logiciel. Il s'agit par exemple d'un circuit intégré, d'une carte à puce, d'une carte électronique pour l'exécution d'un micrologiciel (firmware), etc. Dans un mode de réalisation particulier, les modules 100, 102, 104, et 108 sont agencés pour mettre en oeuvre le procédé de traitement précédemment décrit. Il s'agit de préférence de modules logiciels comprenant des instructions logicielles pour faire exécuter celles des étapes du procédé de traitement précédemment décrit, mises en oeuvre par une entité de transfert. L'invention concerne donc aussi : - un programme pour une entité de transfert, comprenant des instructions de code de programme destinées à commander l'exécution des étapes du procédé de traitement précédemment décrit, lorsque ledit programme est exécuté par une entité de transfert ; - un support d'enregistrement lisible par une entité de transfert sur laquelle est enregistré le programme pour une entité de transfert. Les modules logiciels peuvent être stockés dans ou transmis par un support de données. Celui-ci peut être un support matériel de stockage, par exemple un CD-ROM, une disquette magnétique ou un disque dur, ou bien un support de transmission tel qu'un signal électrique, optique ou radio, ou un réseau de télécommunication. REVENDICATIONS1. Procédé de traitement d'un paquet de données, dans un réseau de communication défini par logiciel (1) comprenant un plan de contrôle (2) mis en oeuvre par une entité de contrôle (20) et un plan de transfert (3) mis en oeuvre par une entité de transfert (10), ledit procédé comprenant dans ledit plan de transfert : - une obtention (E3), pour au moins une valeur d'un champ du paquet, d'une séquence d'instruction à exécuter sur un groupe d'actions à appliquer audit paquet et associé audit paquet, dit groupe en entrée ; - une vérification (E4) que ladite séquence comprend pour ledit groupe en entrée une instruction de suppression d'action, dont l'ordre précède une instruction d'ajout d' action ; - une exécution (E7) de la séquence d'instruction pour obtenir un groupe d'actions à appliquer au paquet, dit groupe en sortie, au cours de laquelle, lorsqu'une action à supprimer dudit groupe en entrée correspond à une action à ajouter audit groupe en entrée, ladite action reste mémorisée suite à l'exécution de l'instruction de suppression dans une mémoire locale de l'entité de transfert. 2. Procédé selon la revendication 1, dans lequel lors de l'exécution de l'instruction d'ajout, ladite action ayant préalablement été mémorisée dans ladite mémoire locale est ajoutée audit groupe en entrée à partir de ladite mémoire locale. 3. Procédé selon la revendication 1, dans lequel suite à l'exécution de l'instruction de suppression, ladite action n'est pas supprimée dudit groupe en entrée. 4. Procédé selon la revendication 1, dans lequel la séquence d'instruction est obtenue à partir d'une table de flux (11-13) mémorisant des associations entre des champs dudit paquet et des séquences d'instructions. 5. Procédé selon la revendication 4, dans lequel les étapes d'obtention, de vérification et d'exécution sont mises en oeuvre pour un groupe de tables de flux (11-13) ordonnées formant un processus chaîné (15). 6. Entité de transfert (10), mettant en oeuvre, pour traiter un paquet de données, un plan de transfert d'un réseau défini par logiciel, comprenant : - un module d'obtention (100), agencé pour obtenir, pour au moins une valeur d'un champ dudit paquet de données, une séquence d'instruction à exécuter sur un groupe d' actions à appliquer audit paquet et associé audit paquet, dit groupe en entrée ;- un module de vérification (102), agencé pour vérifier qu'une séquence comprend pour un groupe d'actions une instruction de suppression d'action, dont l'ordre précède une instruction d'ajout d' action ; - une mémoire locale (106) ; - un module de traitement (104), agencé pour obtenir un groupe d'actions à appliquer au paquet, dit groupe en sortie, en exécutant une séquence d'instruction sur un groupe d'actions en entrée et en laissant mémorisée dans la mémoire locale une action à supprimer dudit groupe en entrée correspondant à une action à ajouter audit groupe en entrée suite à l'exécution de l'instruction de suppression. 7. Entité de transfert selon la revendication 6, dans laquelle le module de traitement est en outre agencé pour, lors de l'exécution d'une instruction d'ajout, ajouter une action à un groupe d'actions à partir de ladite mémoire locale. 8. Entité de transfert selon la revendication 6, dans laquelle le module de traitement est en outre agencé pour, lors de l'exécution d'une instruction de suppression, ne pas supprimer une action à un groupe d'actions. 9. Entité de transfert selon la revendication 6, dans laquelle le module d'obtention est agencé pour obtenir ladite séquence d'instruction à partir d'une table de flux mémorisant des associations entre des champs d'un paquet et des séquences d'instructions. 10. Entité de transfert selon la revendication 6, comprenant en outre : - au moins une table de flux (11-13), agencée pour mémoriser des associations entre des champs d'un paquet et des séquences d'instructions ; - ledit module de traitement étant en outre agencé, pour mettre en oeuvre un processus chaîné constitué desdites tables de flux, les modules d'obtention, de vérification, et d'exécution étant activés pour chaque table de flux dudit processus chaîné ; - un module d'envoi/réception (108), agencé pour recevoir un groupe d'actions en entrée d'une table de flux, et pour envoyer un groupe d' actions en sortie de ladite table de flux à une table de flux suivant en ordre ladite table de flux dans ledit processus chaîné. 11. Programme pour une entité de transfert, comprenant des instructions de code de programme destinées à commander l'exécution des étapes du procédé selon l'une des revendications 1 à 5, lorsque ledit programme est exécuté par une entité de transfert. 12. Support d'enregistrement lisible par une entité de transfert sur lequel est enregistré le programme selon la revendication 11.