VoIP

VoIP HowTo

VoIP HowTo (French Translation)

Version française du guide pratique VoIP Howto

Jérôme Blondel

Adaptation française 

Alain Boulé

Relecture de la version française 

Jean-Philippe Guérard

Préparation de la publication de la v.f. 

Version : 1.7.fr.1.0

3 mai 2007

Historique des versions
Version 1.7.fr.1.0 2007-05-03 JB, AB, JPG
Première traduction française.
Version 1.7 2002-08-07 RA
Version originale.

Résumé

Grâce à la transmission de la voix sur un réseau IP (abrégée « voix sur IP »), il est possible, pour un coût quasi nul, d'utiliser Internet pour téléphoner. Ce guide pratique explique le fonctionnement de cette technique, et présente les normes et systèmes utilisés.


Table des matières

1. Introduction
1.1. Introduction
1.2. Copyright
1.3. Nouvelles versions de ce document
1.4. Traductions
1.5. Remerciements
2. Contexte
2.1. Le passé
2.2. Hier
2.3. Aujourd'hui
2.4. Le futur
3. Généralités
3.1. Qu'est-ce que la VoIP ?
3.2. Comment cela fonctionne-t-il ?
3.3. Quel est l'avantage de la VoIP sur le RTCP ?
3.4. Alors pourquoi tout le monde ne l'utilise pas déjà ?
4. Infos techniques sur la VoIP
4.1. Description d'une connexion VoIP
4.2. Conversion Analogique-Numérique
4.3. Algorithmes de compression
4.4. RTP : Real Time Transport Protocol
4.5. RSVP
4.6. Qualité de Service (QoS, Quality of Service)
4.7. Protocole de signalisation H323
5. Prérequis
5.1. Prérequis matériel
5.2. Cartes d'accélération matérielle
5.3. Cartes passerelles matérielles
5.4. Prérequis logiciels
5.5. Logiciel de passerelle
5.6. Logiciel de portier
5.7. Autres logiciels
6. Configuration des cartes
6.1. Quicknet PhoneJack
6.2. Quicknet LineJack
6.3. Produits VoiceTronix
7. Installation
7.1. Communication simple : IP vers IP
7.2. Utiliser des noms
7.3. Appels sur Internet avec un serveur WINS
7.4. Serveur ILS
7.5. Un gros problème : le masquerading.
7.6. Applications Open Source
7.7. Installer un portier
7.8. Installer une passerelle
7.9. Matrice de compatibilité
8. Communications sur des lignes RTCP
8.1. Généralités
8.2. Scénario
8.3. Que peut-on changer dans cette configuration ?
9. Considérations de bande passante
10. Glossaire
11. Liens utiles
11.1. Liens vers des logiciels open source
11.2. Liens commerciaux

La plus récente version française de ce guide pratique est disponible sur le site de l'association Traduc.org.

Le site http://www.bertolinux.com/ contient la plus récente version originale de ce document.

Merci à Fatamorgana Computers pour le matériel et les opportunités d'expérimentation.

Merci au Linux Documentation Project pour la publication et la mise en ligne très rapide de mon document.

Merci à David Price pour son soutien.

Ci-dessous sont présentés des aspects importants qu'il faut connaître pour comprendre le fonctionnement de la VoIP.

Comme nous disposons maintenant de données numériques, nous pouvons les convertir dans un format standard qui permet une transmission rapide.

PCM, modulation par impulsion et codage (MIC), norme ITU-T G.711

  • La bande passante de la voix est de 4 kHz, donc la fréquence d'échantillonnage doit être de 8 kHz (Nyquist).

  • Nous représentons chaque échantillon par 8 bits (ce qui donne 256 valeurs possibles).

  • Le débit est de 8000 Hz * 8 bits = 64 kbps, comme une ligne téléphonique typique.

  • Dans les applications réelles, les variantes à loi mu (Amérique du Nord) et à loi a (Europe) sont utilisées pour encoder le signal analogique sur une échelle logarithmique en utilisant 12 ou 13 bits au lieu de 8 (voir la norme ITU-T G.711).

ADPCM, modulation par impulsion et codage différentiel adaptatif (MICDA), norme ITU-T G.726

Seule la différence entre le paquet de voix actuel et le précédent est converti, ce qui nécessite 32 kbps (Norme ITU-T G.726).

LD-CELP, norme ITU-T G.728
CS-ACELP, normes ITU-T G.729 et G.729a
MP-MLQ, norme ITU-T G.723.1, 6.3kbps, Truespeech
ACELP, norme ITU-T G.723.1, 5.3kbps, Truespeech
LPC-10, norme capable d'atteindre 2.5 kbps!!

Ces derniers protocoles sont les plus importants car ils peuvent garantir une bande minimale très basse par un codage à la source. De plus les codecs G.723.1 ont une note moyenne d'opinion très élevé (utilisée pour mesurer la fidélité de la voix), mais attention aux performances d'élaboration qu'ils nécessitent : jusqu'à 26 MIPS !

Nous disposons maintenant des données brutes, il faut les empaqueter en données de protocole TCP/IP, en respectant le schéma suivant :

paquets de données VoIP
     RTP
     UDP
     IP  
   couches I, II

Les paquets de VoIP sont placés dans des paquets RTP (Real Time Transport Protocol) à l'intérieur de paquets UDP/IP.

On remarque, d'abord, que la VoIP n'utilise pas le protocole TCP, trop lourd pour les applications en temps réel. On utilise, à la place, les datagrammes du protocole UDP.

Ensuite, UDP ne garantit ni l'ordre d'arrivée à destination des paquets, ni leur temps de transfert (principe du datagramme). Ces deux propriétés sont très importantes pour la qualité générale de la voix (la bonne compréhension des paroles de l'interlocuteur) et la qualité de la conversation (la facilité de son déroulement). RTP résout le problème en permettant au destinataire de remettre les paquets dans l'ordre et en évitant une attente excessive des paquets égarés en chemin ou trop longs à parvenir (il n'est pas nécessaire de recevoir chaque paquet, il faut par contre disposer d'un flux continu, en nombre suffisant, de paquets dans l'ordre).

             Real Time Transport Protocol
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P|X|  CC   |M|     PT      |     numéro de séquence        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       empreinte temporelle                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   identifiant de la source de synchronization source (SSRC)   |
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
|     identifiants des sources contribuantes (CSRC)             |
|                             ....                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Où :

  • V représente la version utilisée du protocole RTP

  • P indique la présence d'un octet de bourrage (padding), à la fin du paquet, pour obtenir un paquet de longueur paire

  • X indique la présence d'une extension d'en-tête

  • Le champ CC représente le nombre d'identifiants CSRC qui suivent l'en-tête fixe. Les champs CSRC servent, notamment, pour les conférences.

  • M est un bit marqueur.

  • PT est le type de charge utile (payload type).

Pour une description complète du protocole RTP et de toutes ses applications, voir les RFC 1889et 1890.

Nous avons répété à plusieurs reprises que les applications de VoIP nécessitaient un flux de données en temps réel car le but est d'obtenir un échange vocal interactif.

Malheureusement, TCP/IP ne permet pas d'atteindre cet d'objectif, il ne peut que faire « au mieux ». Il va falloir utiliser des astuces et des stratégies pour la gestion du flux des paquets dans CHACUN des routeur que nous allons traverser.

On peut ainsi utiliser :

  1. Le champ TOS du protocol IP, qui indique le type de service : une valeur élevée signifie un degré d'urgence faible, alors que des valeurs faibles signifient un degré d'urgence important, compatible avec le temps réel.

  2. Méthodes de mise en file d'attente des paquets :

    1. FIFO (First In First Out, Premier Entré Premier Sorti), la méthode la plus stupide, qui fait passer les paquets dans leur ordre d'arrivée.

    2. WFQ (Weighted Fair Queuing, file d'attente équitable pondérée) consiste en un passage équitable des paquets (ainsi, FTP ne peut pas consommer la totalité de la bande passante disponible) entre les différents flux de données, avec, en général, un paquet pour UDP et un pour TCP, en alternance.

    3. CQ (Custom Queuing, mise en file d'attente personnalisée), les utilisateurs peuvent décider de la priorité.

    4. PQ (Priority Queuing, file d'attente avec priorité), il existe plusieurs files (en général quatre), chacune disposant d'un niveau de priorité. Les paquets de la file la plus prioritaire sont envoyés en premier puis (quand elle est vide), on passe à la seconde, et ainsi de suite.

    5. CB-WFQ (Class Based Weighted Fair Queuing - Mise en file d'attente par classes, pondérée et équitable), semblable à WFQ, avec en plus une notion de classes (jusqu'à 64)  à chaque classe est associée une valeur de bande passante.

  3. La capacité de mise en forme du trafic, qui permet de limiter la source à une bande passante fixe en :

    1. téléchargement (download)

    2. mise en ligne (upload)

  4. Evitement de congestion (Congestion Avoidance), comme RED (Random Early Detection).

Pour des informations exhaustives sur la QoS, voir Differentiated Services à l'IETF.

Le protocole H323 est utilisé par exemple par Microsoft NetMeeting pour faire des appels VoIP.

Ce protocole permet à plusieurs éléments de se parler :

  1. Des terminaux, clients qui initient une connexion VoIP. Bien que les terminaux puissent se parler sans l'aide d'un intermédiaire, nous avons besoin d'éléments additionnels dans la perspective d'une montée en charge.

  2. Des portiers, qui réalisent essentiellement :

    1. un service de traduction d'adresses, pour utiliser des noms à la place des adresses IP

    2. un contrôle des admissions, pour autoriser ou refuser certaines machines ou certains usagers

    3. une gestion de la bande passante

  3. Des passerelles, points de référence pour la conversion TCP/IP-RTCP.

  4. Des Unités de Contrôle Multipoint (MCU, Multipoint Control Units), pour permettre les conférences.

  5. Des serveurs proxies sont également utilisés.

Le protocole H323 concerne non seulement la VoIP mais aussi les communications de données et de vidéo.

En ce qui concerne la VoIP, h323 peut utiliser les codecs audio G.711, G.722, G.723, G.728 et G.729 ; pour la vidéo il prend en charge h261 et h263.

On trouvera des informations complémentaires sur h323 sur les sites Web Openh323 Standards et h323 ainsi que dans le document de définition de la norme : ITU H-series Recommendations.

On le trouve implémenté dans différents logiciels comme Microsoft Netmeeting, Net2Phone, DialPad, ... et aussi dans des produits freeware qu'on peut trouver au site web Openh323.

On peut choisir l'un de ces systèmes d'exploitation :

  1. Win9x

  2. Linux

Les logiciels pour Win9x sont, en particulier, Microsoft NetMeeting, Internet Phone, DialPad, et, pour les cartes Quicknet, Internet Switchboard (disponible sur le site web de Quicknet).

Attention !! Les dernières cartes Quicknet utilisant Switchboard (ancienne version aussi) DOIVENT être connectées à Internet pour avoir accès à un compte Microtelco (payant), aussi, si vous ne souhaitez pas être connecté à Internet vous devrez installer les logiciels OpenH323.

Pour les cartes VoiceTronix, vous trouverez des logiciels au site web de VoiceTronix

Sous Linux, nous avons les logiciels libres GnomeMeeting, clone de Microsoft Netmeeting, et en mode console nous utilisons les applications (également libres) du site web OpenH323: simph323 ou ohphone, qui fonctionnent aussi avec le matériel d'accélération de Quicknet.

Attention : le code source complet d'Openh323 doit être compilé dans un répertoire utilisateur (sinon il est nécessaire de modifier certaines variables d'environnement). Notez que le temps de compilation peut être très long et qu'une quantité importante de RAM est nécessaire si on veut le réduire à une durée raisonnable.

La fonction de passerelle (qui assure la liaison entre les lignes TCP/IP, VoIP et RTCP) nécessite un logiciel, tel que :

  • Internet SwitchBoard (nécessitant une connexion à Internet) pour les systèmes Windows, qui fonctionne aussi comme terminal h323.

  • PSTNGw pour les systèmes Linux et Windows, à télécharger sur OpenH323.

La configuration du matériel spécifique, en environnement Linux ou Windows, est présentée ci-dessous.

Comme nous l'avons déja vu, la carte Quicknet PhoneJack est une carte son à fonction d'accélération spécifique à la VoIP. Ses caractéristiques sont les suivantes :

  • G.711 normal et à loi mu/A, G.728-9, G.723.1 (TrueSpeech) et LPC10.

  • Connecteur pour téléphone (permettant d'appeler directement depuis un téléphone) ou

  • prises Jacks pour microphone et hauts-parleurs.

La carte Quicknet PhoneJack est une carte ISA (ou PCI) à installer dans le boîtier du PC. Elle peut fonctionner sans IRQ.

Sous Windows vous devez installer :

  1. Le pilote de la carte

  2. L'application Internet Switchboard (ne fonctionne qu'avec Internet, avec les nouvelles cartes Quicknet)

tous téléchargeables sur le site web de Quicknet

Une fois Switchboard installé, il faut s'enregistrer auprès de Quicknet pour bénéficier des pleines capacités de la carte.

Lorsque vous décrochez le téléphone, Internet Switchboard se réveille et attend que vous composiez un numéro d'appel (directement à partir du téléphone). Vous pouvez effectuer l'une des opérations suivantes :

  1. Taper un astérisque, puis un numéro IP (des astérisques remplaçant les points), et un # à la fin

  2. Composer le numéro d'appel (avec préfixe international) d'un abonné du réseau téléphonique classique. Dans ce cas, il est nécessaire d'être abonné à un gestionnaire de passerelle qui vous facturera le temps de communication.

  3. Composer un code d'accès rapide (un ou deux chiffres), que vous aurez stocké au préalable, pour effectuer un appel de type IP ou RTCP.

Internet Switchboard est compatible avec h323, il est ainsi possible de correspondre, par exemple, avec Microsoft Netmeeting.

Attention !! Internet Switchboard DOIT être connecté à Internet quand il est utilisé avec les nouvelles cartes Quicknet.

À la place d'Internet Switchboard, vous pouvez utiliser les applications openphone(avec interface utilisateur graphique) ou ohphone(ligne de commande) d'openh323.

Sous Linux vous devez installer :

  1. Le pilote de carte, à partir du site web de Quicknet . Une fois téléchargés, vous devrez compiler les fichiers sources. (il faut disposer d'un lien symbolique ou physique vers le répertoire des sources de linux /usr/src/linux). Pour obtenir la marche à suivre, tapez la commande 'make'.

  2. Une des applications openphone ou ohphone.

  3. Si vous êtes développeur, vous pouvez utiliser le SDK pour créer votre propre application (valable aussi pour Windows).

  1. Téléchargez d'abord le logiciel ici

  2. Décompactez-le

  3. Modifiez 'src/vpbreglinux.cpp' selon le fichier README

  4. Tapez 'make'

  5. Tapez 'make install'

  6. Se placer dans le répertoire src (cd src)

  7. Tapez 'insmod vpb.o'

  8. Retrouvez (à partir de la console ou à l'aide de la commande 'dmesg') le numéro majeur, noté ci-dessous MAJEUR

  9. tapez 'mknod /dev/vpb0 c MAJEUR 0' où MAJEUR est le numéro susmentionné

  10. se placer dans le répertoire unittest (cd unittest) et taper './echo'

Le fichier README contient des informations plus détaillées

Je n'ai pas testé personnellement les produits VoiceTronix. Contactez le site web de VoiceTronix pour tout support.

Dans ce chapitre, nous allons installer un système VoIP, d'abord simple, puis, de plus en plus complexe.

Comme nous l'avons déja dit, une passerelle relie la VoIP aux lignes du réseau téléphonique (RTCP) ce qui permet d'appeler un téléphone classique depuis Internet. Il faut donc, en plus, une carte capable de gérer des lignes RTCP : la carte Quicknet LineJack convient.

Sur le site web OpenH323 nous téléchargeons :

  1. le pilote de Linejack

  2. l'application PSTNGw qui servira de passerelle.

Si l'exécutable ne fonctionne pas, il faut télécharger le code source et la librairie openh323 , puis installer le tout dans un répertoire personnel.

Il suffit ensuite de lancer PSTNGw pour démarrer la passerelle H323.

La première matrice concerne les :

  1. Communications entre logiciels (ex: Netmeeting avec Switchboard)

  2. Communication entre logiciels, pilotes et matériel (ex: Netmeeting peut utiliser une carte PhoneJack)

 _______________________________________________________________________________________________
|            | Net-    | Switch- |Simph323 | OhPhone | LinPhone| Speak-  |    HW    |    HW    |
|            | meeting | Board   |         |         |         | Freely  | PhoneJACK| LineJACK |
|____________|_________|_________|_________|_________|_________|_________|__________|__________|
| Netmeeting |    V         V         V         V         X         X         V          V
|____________|_________|_________|_________|_________|_________|_________|__________|__________|
|SwitchBoard |    V         V         V         V         X         X         V          V
|____________|_________|_________|_________|_________|_________|_________|__________|__________|
| Simph323   |    V         V         V         V         X         X         X          X
|____________|_________|_________|_________|_________|_________|_________|__________|__________|
| OhPhone    |    V         V         V         V         X         X         V          V
|____________|_________|_________|_________|_________|_________|_________|__________|__________|
| LinPhone   |    X         X         X         X         V         X         X          X
|____________|_________|_________|_________|_________|_________|_________|__________|__________|
|SpeakFreely |    X         X         X         X         X         V         X          X
|____________|_________|_________|_________|_________|_________|_________|__________|__________|
|HW PhoneJACK|    V         V         X         V         X         X         _          _
|____________|_________|_________|_________|_________|_________|_________|__________|__________|
|HW LineJACK |    V         V         X         V         X         X         _          _
|____________|_________|_________|_________|_________|_________|_________|__________|__________|

La seconde matrice fait référence aux logiciels de passerelle qui gèrent la carte LineJack.

___________________________________________________________
|              |HW LineJACK GW| SwitchBoard  |   PSTNGW     |
|______________|______________|______________|______________|
|HW LineJACK GW|      _       |       V      |       V      |
|______________|______________|______________|______________|
| SwitchBoard  |      V       |       _      |       _      |
|______________|______________|______________|______________|
|   PSTNGW     |      V       |       _      |       _      |
|______________|______________|______________|______________|

Notation:

  • V : Fonctionne

  • X : Ne fonctionne pas

  • -- : Non significatif

Dans ce qui a été dit jusqu'à présent le problème de bande passante n'a pas été résolu : comment créer un flux de données en temps réel.

Nous savons qu'il n'existe pas de solution en l'absence d'un protocole de gestion temps réel dans chaque routeur traversé. Qu'est-il possible de faire ?

On peut commencer par utiliser des algorithmes de compression à taux très élevé (le plus élevé possible), comme l'algorithme LPC10 qui ne consomme que 2,5 kbps de bande passante, environ 313 octets/s.

On peut ensuite essayer de classer les paquets, à l'aide du champ TOS, au niveau de priorité maximum, afin que chaque routeur les traite en urgence

Remarque importante : tout cela ne suffira pas à garantir que la permanence conversation sera toujours de bonne qualité, mais, en l'absence d'infrastructure importante qui assure, en particulier, la mise en forme du trafic et la réservation de bande passante, cela n'est pas réalisable : TCP/IP n'est pas un protocole temps réel

Une solution pourrait être d'utiliser, pour commencer, des petits réseau WAN à bande passante garantie et de les agrandir étape par étape.

Une remarque pour finir : les services supposés garantis, comme les lignes RTCP, ne peuvent pas non plus gérer l'ensemble de leurs clients au même instant. Par exemple, un appel GSM ne peut pas absorber un nombre supérieur à quelques centaines ou quelques milliers de clients

En tout cas, pour un service qui débute, limité à quelques utilisateurs, la VoIP peut être une alternative valable au service RTCP classique.

Create a free website at Webs.com