Robust Header Compression
Robust Header Compression (ROHC) est une mĂ©thode normalisĂ©e dans la RFC 3095[1] pour compresser les entĂȘtes IP, UDP, RTP et TCP des paquets rĂ©seau. Ce systĂšme de compression diffĂšre des autres systĂšmes de compression tels que ceux dĂ©crits dans les RFC 1144[2] et RFC 2508[3] de l'IETF par le fait qu'il donne de bons rĂ©sultats sur des liens Ă taux d'erreurs Ă©levĂ©s ou Ă fortes pertes comme les liens sans fil (radio).
Pour les applications de diffusion (streaming en anglais), le surcoĂ»t (overhead en anglais) engendrĂ© par les entĂȘtes IP, UDP et RTP est de 40 octets pour IPv4 et de 60 octets pour IPv6. Dans le cas de la voix sur IP, ce surcoĂ»t Ă©quivaut Ă environ 60 % du total des donnĂ©es envoyĂ©es. De tels surcoĂ»ts peuvent ĂȘtre tolĂ©rĂ©s sur des liens filaires pour lesquels la capacitĂ© n'est souvent pas un problĂšme, mais ils sont excessifs dans le cas de systĂšmes de transmission sans fil pour lesquels la bande passante est faible. RoHC est notamment utilisĂ©e pour la transmission radio dans les rĂ©seaux mobiles 4G LTE et LTE Advanced. Cette mĂ©thode participe Ă l'optimisation du transfert de la voix (VoLTE) et Ă l'optimisation des transferts de donnĂ©es sur les rĂ©seaux mobiles, en complĂ©ment de l'optimisation des pages web destinĂ©es aux smartphones.
ROHC compresse typiquement les 40 ou 60 octets d'entĂȘtes en seulement 1 ou 3 octets en utilisant lâalgorithme de compression avant l'Ă©mission sur le lien dont le dĂ©bit est limitĂ© et un dĂ©compresseur aprĂšs rĂ©ception sur ce lien. Le compresseur convertit les entĂȘtes volumineux en quelques octets seulement tandis que le dĂ©compresseur rĂ©alise l'opĂ©ration inverse.
Modes opératoires
Le systÚme de compression ROHC possÚde trois modes opératoires :
- le mode « unidirectionnel » (Unidirectional ou U-Mode en anglais),
- le mode « bidirectionnel optimiste » (Bidirectional Optimistic ou O-Mode en anglais),
- le « mode bidirectionnel fiable » (Bidirectional Reliable ou R-Mode en anglais).
Dans le mode opératoire « unidirectionnel », les paquets sont envoyés uniquement dans un seul sens : du compresseur vers le décompresseur. Ce mode permet d'utiliser ROHC sur des liens pour lesquels le lien retour du décompresseur vers le compresseur n'est pas disponible ou est peu souhaitable (le satellite par exemple).
Le mode « bidirectionnel optimiste » est similaire au mode « unidirectionnel » Ă l'exception toutefois de l'existence d'une voie retour (feedback channel en anglais). Cette voie retour est utilisĂ©e pour transmettre du dĂ©compresseur au compresseur des requĂȘtes de rĂ©cupĂ©ration d'erreur et (de maniĂšre optionnelle) des acquittements lors de mises Ă jour de contextes. Ce mode opĂ©ratoire vise Ă maximiser l'efficacitĂ© de compression et Ă limiter l'utilisation de la voie retour.
Le mode « bidirectionnel fiable » diffĂšre par bien des façons des deux prĂ©cĂ©dents. Les plus importantes diffĂ©rences sont l'utilisation intensive de la voie retour et une logique de compression/dĂ©compression plus stricte qui empĂȘche la perte de synchronisation entre le compresseur et le dĂ©compresseur exceptĂ© pour des taux d'erreurs bit rĂ©siduels trĂšs importants.
Classification des champs des entĂȘtes
Afin de ne transfĂ©rer que le minimum de donnĂ©es nĂ©cessaires, les diffĂ©rents champs des entĂȘtes sont classĂ©s en trois catĂ©gories : les champs statiques, les champs induits et les champs dynamiques. Les champs statiques sont des champs comme les adresses IP ou les ports UDP dont la valeur n'Ă©volue pas entre deux paquets d'un mĂȘme flux. Les champs induits sont des champs comme la longueur ou la somme de contrĂŽle du paquet dont la valeur peut ĂȘtre dĂ©duite d'aprĂšs les valeurs des autres champs. Enfin, les champs dynamiques sont des champs comme l'identifiant IP (IP-ID), la qualitĂ© de service (TOS) ou la durĂ©e de vie (TTL) dont la valeur Ă©volue entre deux paquets d'un mĂȘme flux.
Une fois les valeurs des champs statiques transmises et stockĂ©es, il n'est pas nĂ©cessaire de systĂ©matiquement les transmettre avec chaque paquet. Les valeurs des champs induits n'ont quant Ă eux jamais besoin d'ĂȘtre transmises. Enfin, les valeurs des champs dynamiques doivent ĂȘtre systĂ©matiquement transmises.
Le fait que le compresseur doive systématiquement transmettre les valeurs des champs dynamiques ne signifie pas qu'il soit obligé de les transmettre tels quels. L'évolution de certains champs dynamiques est en effet prévisible et permet au compresseur de ne transmettre au décompresseur que la différence entre deux valeurs successives. Par exemple, la valeur de l'identifiant IP (IP-ID) est souvent incrémentée par les piles IP (c'est notamment le cas de Linux) d'une unité à chaque nouveau paquet IP.
Comme exposĂ© ci-dessus, ROHC met Ă profit la redondance d'information au sein des entĂȘtes elles-mĂȘmes et entre les entĂȘtes des paquets successifs. Il est donc important que le compresseur sĂ©pare bien les paquets IP en flux distincts afin que la compression puisse ĂȘtre optimale.
Ătats de fonctionnement
L'algorithme ROHC fonctionne de maniÚre similaire à la compression vidéo. Une trame de base puis plusieurs trames différentielles sont envoyées pour représenter un flux IP. Ce mécanisme permet à ROHC de survivre à un grand nombre de pertes au niveau de compression le plus fort à condition que les trames de base ne soient pas perdues.
Un compresseur ROHC peut fonctionner dans 3 états différents :
- Dans l'Ă©tat « Initialisation & RafraĂźchissement » (Initialization and Refresh ou IR en anglais), le compresseur vient juste d'ĂȘtre crĂ©Ă© ou rĂ©-initialisĂ© et les entĂȘtes complĂštes sont envoyĂ©es au dĂ©compresseur afin qu'il les mĂ©morise.
- Dans l'Ă©tat « Premier Ordre » (First-Order ou FO en anglais), le compresseur et le dĂ©compresseur ont mĂ©morisĂ© les champs statiques et dynamiques des entĂȘtes et le compresseur envoie uniquement au dĂ©compresseur les champs dynamiques qui ont changĂ© entre deux entĂȘtes successifs.
- Dans l'Ă©tat « Second Ordre » (Second-Order ou SO en anglais), le compresseur ne transmet plus les champs dynamiques comme l'identifiant IP (IP-ID) ou le numĂ©ro de sĂ©quence RTP mais uniquement un numĂ©ro de sĂ©quence logique Ă partir duquel les champs dynamiques peuvent ĂȘtre rĂ©gĂ©nĂ©rĂ©s. Par exemple, si le champ identification IP (IP-ID) est incrĂ©mentĂ© d'une unitĂ© Ă chaque paquet, il Ă©volue au mĂȘme rythme que le numĂ©ro de sĂ©quence logique et il devient alors superflu de le transmettre une fois cette rĂšgle Ă©tablie. Une somme de contrĂŽle permet au dĂ©compresseur de vĂ©rifier que la reconstruction de l'entĂȘte est correcte.
La taille du champ contenant le numĂ©ro de sĂ©quence dĂ©termine le nombre de paquets que ROHC peut perdre avant que le compresseur et le dĂ©compresseur ne soient dĂ©synchronisĂ©s. La taille du champ contenant le numĂ©ro de sĂ©quence dans les entĂȘtes ROHC de 1 et 2 octets est respectivement de 4 bits (offset entre -1 et +14 par rapport Ă la trame de base) et 6 bits (offset entre -1 et +62 par rapport Ă la trame de base). ROHC peut donc tolĂ©rer au plus 62 trames perdues avec une trame de 1 ou 2 octets.
EntĂȘte ROHC du Second Ordre (1 octet)
Une implĂ©mentation ROHC classique souhaitera amener le compresseur et le dĂ©compresseur dans l'Ă©tat de fonctionnement « Second Ordre » afin de substituer aux 40 octets d'entĂȘtes IP/UDP/RTP (cas classique de la VoIP) un entĂȘte de 1 octet seulement. Dans cet Ă©tat de fonctionnement, les 8 bits de l'entĂȘte ROHC forment trois champs :
- 1 bit : un drapeau indiquant le type de paquet ROHC (0 dans ce cas),
- 4 bits : le numéro de séquence (offset entre -1 et +14 par rapport à la trame de base),
- 3 bits : un CRC pour vĂ©rifier que les entĂȘtes reconstruits sont corrects.
Nouvelles RFCs ROHC
Deux nouvelles RFCs apportant des précisions ou améliorations ont été publiées :
- La RFC 4995 apporte des précisions aux mécanismes définis dans la RFC 3095.
- La RFC 5225 définit des nouvelles versions des profils de compression.
La RFC 3095 dĂ©finit un mĂ©canisme de compression gĂ©nĂ©rique qui peut ĂȘtre complĂ©tĂ© par des profils adaptĂ©s Ă la compression de certaines entĂȘtes. De nouvelles RFCs dĂ©finissant de nouveaux profils de compression pour d'autres protocoles ont Ă©tĂ© publiĂ©es :
Notes et références
- (en) « RObust Header Compression (ROHC): Framework and four profiles: RTP, UDP, ESP, and uncompressed », Request for comments no 3095, .
- (en) « Compressing TCP/IP Headers », Request for comments no 1144, .
- (en) « Compressing IP/UDP/RTP Headers for Low-Speed Serial Links », Request for comments no 2508, .
Voir aussi
Articles connexes
Liens externes
- La charte officielle du groupe de travail ROHC au sein de l'IETF
- RFC 3095 - "ROHC Framework and four profiles: RTP, UDP, ESP, and uncompressed"
- RFC 3096 - "Requirements for robust IP/UDP/RTP header compression"
- RFC 4815 - "Corrections and Clarifications to RFC 3095"
- RFC 3843 - "RObust Header Compression (ROHC): A Compression Profile for IP"
- RFC 4019 - "RObust Header Compression (ROHC): Profiles for User Datagram Protocol (UDP) Lite"
- RFC 4995 - "The RObust Header Compression (ROHC) Framework"
- RFC 6846 - "RObust Header Compression (ROHC): A Profile for TCP/IP (ROHC-TCP)"
- RFC 5225 - "RObust Header Compression Version 2 (ROHCv2): Profiles for RTP, UDP, IP, ESP and UDP-Lite"
- Une implémentation libre de ROHC pour PPP sur sourceforge.net
- Une implémentation libre et efficace de ROHC sous forme de bibliothÚque