Guide pratique de la voix sur IP (VoIP) Version française du guide pratique VoIP Howto Roberto Arcomano 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 1. Introduction 1.1. Introduction Ce document explique les systèmes de VoIP. Des événements récents, tels que la diffusion sur Internet à faible coût, l'intégration récente de processeurs dédiés de compression de voix, ont modifié les exigences des utilisateurs ordinaires et ont rendu possible la diffusion des normes VoIP. Ce guide pratique essaie de définir certains éléments de base de l'architecture VoIP. Merci d'envoyer suggestions et critiques à mon mon adresse électronique 1.2. Copyright Copyright © 2000, 2001 Roberto Arcomano. Ce document est libre vous pouvez le redistribuer et le modifier sous les termes de la licence GNU General Public License publiée par la Free Software Foundation ; soit la version 2 de la Licence ou (selon votre choix) toute version ultérieure. Ce document est distribué dans l'espoir qu'il sera utile mais SANS AUCUNE GARANTIE ; sans même les garanties implicites de COMMERCIALISATION et de CONFORMITÉ À UNE UTILISATION PARTICULIÈRE. Voir la GNU General Public License pour plus de détails. Vous trouverez un exemplaire de la GNU GPL ici [http://www.gnu.org/copyleft/gpl.html] 1.3. Nouvelles versions de ce document La plus récente version française [http://www.traduc.org/docs/howto/lecture/VoIP-HOWTO.html] de ce guide pratique est disponible sur le site de l'association Traduc.org [http://www.traduc.org]. Le site http://www.bertolinux.com/ [http://www.bertolinux.com/] contient la plus récente version originale de ce document. 1.4. Traductions Si vous voulez traduire ce document vous êtes libre, vous devez simplement : 1. Vérifier qu'une autre version n'existe pas déjà à votre LDP local. 2. Conserver toute la partie « Introduction » (y compris « Introduction », « Copyright », « Traductions » et « Remerciements »). Attention ! Vous n'avez pas besoin de traduire les fichiers TXT ou HTML, vous devez modifier le fichier LYX, pour qu'il soit possible de le convertir dans tous les autres formats (TXT, HTML, RIFF, et cætera) : pour cela vous pouvez utiliser l'application « LyX » téléchargeable à http://www.lyx.org [http://www.lyx.org]. Il n'est pas nécessaire de me demander l'autorisation de traduire ! Faites-le moi savoir (si vous le souhaitez) lorsque vous aurez fait une traduction. Merci pour votre traduction ! 1.5. Remerciements Merci à Fatamorgana Computers [http://www.fatamorgana.com] pour le matériel et les opportunités d'expérimentation. Merci au Linux Documentation Project [http://www.linuxdoc.org] pour la publication et la mise en ligne très rapide de mon document. Merci à David Price pour son soutien. 2. Contexte 2.1. Le passé Il y a plus de 30 ans, Internet n'existait pas. Les communications interactives se faisaient seulement par téléphone au prix de la ligne du RTCP (réseau téléphonique commuté public). Les échanges de données étaient coûteux (pour les longues distances) et personne n'avait pensé à des interactions vidéo (il n'y avait que la télévision qui n'est pas interactive comme on le sait). 2.2. Hier Il y a quelques années nous avons vu apparaître des choses intéressantes : les PC pour le grand public, les nouvelles technologies pour communiquer, comme les téléphones cellulaires et enfin le grand réseau : Internet. Les gens ont commencé à communiquer à l'aide de nouveaux services comme le courrier électronique, les discussions en ligne (chat), et cætera, et le commerce, transformé par le web, a permis aux gens de faire des achats d'un simple « clic ». 2.3. Aujourd'hui Aujourd'hui nous assistons à une véritable révolution du monde des communications : tout le monde commence à utiliser des PC et Internet au travail et pendant son temps libre pour communiquer avec les autres, pour échanger des données (images, sons, documents) et, parfois, pour se parler à l'aide d'applications comme Netmeeting ou Internet Phone. Une nouvelle idée, en particulier, commence à se répandre, qui représente peut-être l'avenir, et qui permet l'échange de communications vocales en temps réel : la voix sur IP (VoIP). 2.4. Le futur Nous ne pouvons pas connaître l'avenir, mais nous pouvons essayer de nous le représenter avec une multitude d'ordinateurs, l'Internet haut débit presque partout et des gens qui se parlent (en audio et en vidéo) en temps réel. Pour cela, ils nous suffit de connaître les moyens d'y parvenir : l'UMTS, la VoIP (avec extension vidéo) ou peut-être autre chose . En tout cas, nous pouvons remarquer qu'Internet s'est beaucoup développé ces dernières années, qu'il est gratuit (au moins en tant que média international) et qu'il pourrait bien être le moyen de communication du futur. 3. Généralités 3.1. Qu'est-ce que la VoIP ? VoIP signifie Voice over Internet Protocol ou Voix sur IP (IP = Protocole Internet). Comme son nom l'indique, la VoIP essaie de transmettre des sons (en particulier la voix) dans des paquets IP circulant sur Internet. La VoIP peut utiliser du matériel d'accélération pour réaliser ce but et peut aussi être utilisée en environnement de PC. 3.2. Comment cela fonctionne-t-il ? De nombreuses années en arrière, nous avons découvert qu'il était possible de transmettre un signal à une destination éloignée sous forme de données numériques. Avant la transmission, il faut numériser le signal à l'aide d'un CAN (convertisseur analogique-numérique). Le signal est ensuite transmis, et, pour être utilisable, doit être transformé à nouveau, par le récepteur, en un signal analogique, à l'aide d'un CNA (convertisseur numérique-analogique). La VoIP fonctionne ainsi, par numérisation de la voix et transmission dans des paquets de données, puis par reconversion des paquets numériques en voix à l'arrivée. Le format numérique est plus facile à contrôler : on peut le compresser, le router, le convertir en un nouveau format meilleur, et ainsi de suite ; nous avons également découvert que le signal numérique est plus tolérant au bruit que l'analogique (comparer GSM et TACS). Les réseaux TCP/IP sont des supports de circulation de paquets IP contenant un en-tête (pour contrôler la communication) et une charge utile pour transporter les données : la VoIP s'en sert pour traverser le réseau et arriver à destination. Voix (source) - - CAN - - - - Internet - - - CNA - - Voix (dest) 3.3. Quel est l'avantage de la VoIP sur le RTCP ? Quand vous utilisez une ligne du RTCP, vous payez généralement le temps de communication à la société qui gère la ligne téléphonique : plus vous passez de temps au téléphone et plus vous payez. De plus, vous ne pouvez parler qu'à une personne à la fois. La VoIP vous permet, au contraire, à tout moment, de parler à la personne que vous souhaitez (pourvu qu'elle soit connectée à Internet au même moment), aussi longtemps que vous le souhaitez (sans coût supplémentaire), et de plus, vous pouvez parler à plusieurs personnes en même temps. Si vous n'êtes pas encore convaincu, considérez qu'il est possible, en simultané, d'échanger des données avec vos interlocuteurs, d'envoyer des images, des graphiques et des vidéos. 3.4. Alors pourquoi tout le monde ne l'utilise pas déjà ? Malheureusement, il faut reconnaître des problèmes d'intégration de l'architecture VoIP et d'Internet. Comme vous pouvez facilement l'imaginer, les communications de données vocales nécessitent une transmission en temps réel (on n'admettrait pas de parler et d'attendre plusieurs secondes qu'arrive la réponse à l'autre bout). Cette contrainte entre en contradiction avec l'architecture hétérogène d'Internet qui comprend de nombreux routeurs (équipement d'aiguillage des paquets), un nombre typique est 20-30, voire plus, ce qui donne un temps d'aller-retour (RTT, round trip time) très long. Il est donc nécessaire d'effectuer des modifications pour que cela fonctionne. Dans les sections ci-dessous nous allons essayer de comprendre comment il est possible de résoudre ce problème majeur. En général, nous savons qu'il est très difficile de garantir une bande passante sur Internet pour les applications de VoIP. 4. Infos techniques sur la VoIP Ci-dessous sont présentés des aspects importants qu'il faut connaître pour comprendre le fonctionnement de la VoIP. 4.1. Description d'une connexion VoIP L'établissement d'une connexion VoIP nécessite : 1. D'abord le CAN qui permet de convertir la voix analogique en signaux numériques (bits). 2. Les bits doivent être ensuite compressés en un format adapté à la transmission : il existe plusieurs protocoles que nous allons examiner ci-dessous. 3. Il faut ensuite transmettre les données numériques vocales dans des paquets de données à l'aide d'un protocole temps réel (généralement RTP sur UDP sur IP). 4. Il est nécessaire d'utiliser un protocole de signalisation pour appeler les usagers. ITU-T H323 le permet. 5. À la réception, il faut désassembler les paquets, extraire les données, les convertir en signaux analogiques représentant la voix, puis les transmettre à une carte son (ou à un téléphone). 6. Tout cela doit être réalisé en temps réel, afin d'éviter une attente trop longue de la réponse vocale ! (voir la section QoS) Architecture de base Voix )) CAN - Algorithme de Compression - Assembler RTP dans TCP/IP ----- ----> | <---- | Voix (( CNA - Algorithme de Décompression - Désass. RTP de TCP/IP ----- 4.2. Conversion Analogique-Numérique Celle-ci est faite par le matériel, généralement une carte CAN intégrée. Aujourd'hui, n'importe quelle carte son vous permet de convertir une bande de 22050 Hz en données de 16 bits (l'échantillonnage doit être réalisé à une fréquence de 44100 Hz en raison du principe de Nyquist), cela donne un débit de 2 octets * 44100 échantillons par seconde = 88200 octets/s soit 176,4 ko/s pour un flux stéréo. La VoIP ne nécessite pas un tel débit pour la transmission des paquets de voix : nous allons examiner ci-dessous les différents codages qui seront utilisés en pratique. 4.3. Algorithmes de compression 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 ! 4.4. RTP : Real Time Transport Protocol 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 1889 [http://www.ietf.org/rfc/rfc1889.txt]et 1890 [http://www.ietf.org/rfc/rfc1890.txt]. 4.5. RSVP D'autres protocoles sont utilisés en VoIP, comme RSVP, qui peut prendre en charge la Qualité de Service (QoS, Quality of Service). RSVP est un protocole avec signalisation, qui nécessite une certaine bande passante et un délai à chaque bond réseau le prenant en charge. Pour des informations détaillées sur RSVP, voir RFC 2205 [http://www.ietf.org/rfc/rfc2205.txt?number=2205] 4.6. Qualité de Service (QoS, Quality of Service) 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 : a. 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. b. 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. c. CQ (Custom Queuing, mise en file d'attente personnalisée), les utilisateurs peuvent décider de la priorité. d. 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. e. 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 : a. téléchargement (download) b. 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 [http://www.ietf.org/html.charters/diffserv-charter.html] à l'IETF. 4.7. Protocole de signalisation H323 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 : a. un service de traduction d'adresses, pour utiliser des noms à la place des adresses IP b. un contrôle des admissions, pour autoriser ou refuser certaines machines ou certains usagers c. 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 [http://www.openh323.org/standards.html] et h323 [http://www.cs.columbia.edu/~hgs/rtp/h323.html] ainsi que dans le document de définition de la norme : ITU H-series Recommendations [http://www.itu.int/itudoc/itu-t/rec/h/]. On le trouve implémenté dans différents logiciels comme Microsoft Netmeeting [http://www.microsoft.com], Net2Phone [http://www.net2phone.com], DialPad [http://www.dialpad.com], ... et aussi dans des produits freeware qu'on peut trouver au site web Openh323 [http://www.openh323.org]. 5. Prérequis 5.1. Prérequis matériel Pour créer un petit système VoIP vous avez besoin du matériel suivant : 1. PC 386 ou supérieur 2. Carte son, compatible full duplex (duplex intégral) 3. une carte réseau, une connexion Internet ou tout autre type d'interface permettant la communication entre deux PC Chacun de ces éléments doit être présent en double exemplaire comme pour une véritable communication. Les éléments ci-dessus sont le minimum requis pour une connexion VoIP : nous verrons plus loin quel est le matériel qui serait nécessaire (et qui l'est pour Internet) pour assurer la même fonction en situation réelle. La carte son doit être full duplex si on veut pouvoir parler et entendre en même temps ! Il est possible par ailleurs d'utiliser des cartes (voir ci-dessous) qui gèrent un flux de données en format compressé (voir § 4.3). 5.2. Cartes d'accélération matérielle Il est possible d'utiliser des cartes spéciales dotées de fonctions d'accélération matérielle. Cinq d'entre elles (les seules à être prises en charge actuellement par le noyau Linux) sont les suivantes : 1. Quicknet PhoneJack 2. Quicknet LineJack 3. VoiceTronix V4PCI 4. VoiceTronix VPB4 5. VoiceTronix VPB8L Quicknet PhoneJack est une carte son qui utilise des algorithmes standards pour compresser un flux audio comme G723.1 (section 4.3) jusqu'à un débit de 4,1 kbps. Elle peut être directement connectée à un téléphone (prise téléphone classique) ou à un couple micro-haut-parleur. Elle se connecte à un bus ISA ou PCI. La carte Quicknet LineJack fonctionne comme la carte PhoneJack avec des caractéristiques en plus (voir ci-dessous). La carte VoiceTronix V4PCI est une carte PCI comme la carte Quicknet LineJack mais avec 4 ports de type téléphone. La carte VoiceTronix VPB4 est une carte ISA équivalente à la carte V4PCI. La carte VoiceTronix VPB8L est une carte à journalisation à 8 ports. Pour obtenir des infos supplémentaires, consultez le site web de Quicknet [http://www.quicknet.net] et le site web de VoiceTronix [http://www.voicetronix.com.au] 5.3. Cartes passerelles matérielles Les cartes Quicknet LineJack et VoiceTronix peuvent être connectées à une ligne RTCP ce qui leur permet de fonctionner comme passerelle VoIP. Un logiciel spécifique est nécessaire pour cette utilisation (voir ci-dessous). 5.4. Prérequis logiciels 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 [http://www.quicknet.net]). 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 [http://www.openh323.org]. Pour les cartes VoiceTronix, vous trouverez des logiciels au site web de VoiceTronix [http://www.voicetronix.com.au] Sous Linux, nous avons les logiciels libres GnomeMeeting [http://www.gnomemeeting.org], clone de Microsoft Netmeeting, et en mode console nous utilisons les applications (également libres) du site web OpenH323 [http://www.openh323.org]: 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. 5.5. Logiciel de passerelle La fonction de passerelle (qui assure la liaison entre les lignes TCP/IP, VoIP et RTCP) nécessite un logiciel, tel que : * Internet SwitchBoard [http://www.quicknet.net] (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 [http://www.openh323.org/code.html]. 5.6. Logiciel de portier Vous pouvez choisir comme portier : 1. Opengatekeeper, téléchargeable au site web d'opengatekeeper [http://www.opengatekeeper.sourceforge.net]pour Linux et Win9x. 2. Openh323 Gatekeeper (GK) ici [http://www.willamowius.de/openh323gk.html]. 5.7. Autres logiciels En complément, voici un logiciel utile conformes à h323 : * Phonepatch, pouvant fonctionner derrière un pare-feu NAT. Il permet aux utilisateurs (aussi bien externes qu'internes) d'appeler, simplement, à partir une page web. Quand l'application web voit que l'hôte distant est prêt, elle appelle la source, en h323, pour l'informer que la communication peut être établie. Phonepatch est un logiciel propriétaire (avec une version de démo pour des conversations de moins de 3 minutes), que vous pouvez télécharger ici [http://www.equival.com/phonepatch]. 6. Configuration des cartes La configuration du matériel spécifique, en environnement Linux ou Windows, est présentée ci-dessous. 6.1. Quicknet PhoneJack 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. 6.1.1. Installation du logiciel 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 [http://www.quicknet.net] 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 [http://www.openh323.org/code.html](avec interface utilisateur graphique) ou ohphone [http://www.openh323.org/code.html](ligne de commande) d'openh323. Sous Linux vous devez installer : 1. Le pilote de carte, à partir du site web de Quicknet [http://www.quicknet.net]. 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 [http://www.openh323.org/code.html] ou ohphone [http://www.openh323.org/code.html]. 3. Si vous êtes développeur, vous pouvez utiliser le [1]SDK pour créer votre propre application (valable aussi pour Windows). 6.1.2. Configuration Avec Internet Switchboard (et les autres applications), vous pouvez : 1. Changer votre algorithme de compression préféré 2. Régler le délai de gigue (jitter) 3. Régler le volume 4. Régler le niveau d'annulation d'écho. 6.2. Quicknet LineJack Cette carte ressemble beaucoup à la précédente, elle prend aussi en charge la fonction de passerelle. Remarquons simplement qu'il faut télécharger [http://www.quicknet.net/code.html] l'application PSTNGx (pour Linux et Windows) ou utiliser Internet Switchboard pour utiliser la fonction de passerelle. 6.3. Produits VoiceTronix 1. Téléchargez d'abord le logiciel ici [http://www.voicetronix.com.au/vpb-driver-2.1.8.tar.gz] 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 [http://www.voicetronix.com.au]pour tout support. 7. Installation Dans ce chapitre, nous allons installer un système VoIP, d'abord simple, puis, de plus en plus complexe. 7.1. Communication simple : IP vers IP A (Carte son) - - - B (Carte son) 192.168.1.1 - - - 192.168.1.2 192.168.1.1 appelle 192.168.1.2 et vice-versa. A et B devraient avoir 1. une application comme Microsoft Netmeeting, Internet Switchboard, Openh323 (sous environnement Windows) ou Ohphone, Gnomemeeting (sous Linux), installée et correctement configurée. 2. une carte réseau ou autre type d'interface TCP/IP pour communiquer. Dans ce cas de figure, A fait un appel H323 à B (si B a une application serveur active) à l'aide de l'adresse IP de B. Puis B peut répondre s'il le souhaite. Une fois l'appel accepté, les paquets de données VoIP commencent à circuler 7.2. Utiliser des noms Sous Microsoft Windows, on peut utiliser un nom NetBIOS à la place d'une adresse IP. A - - - B 192.168.1.1 - - - 192.168.1.2 John - - - Alice John appelle Alice. Ceci est possible car la requête d'appel de John à Alice a été convertie en appel IP par le protocole NetBIOS Ces deux exemples sont très faciles à implémenter mais n'autorisent pas la montée en charge. Dans le cas d'un réseau plus étendu, comme Internet, il est impossible d'utiliser l'appel direct, car, en général, les appelants ne connaissent pas l'adresse IP du destinataire. De plus, la gestion des noms NetBIOS ne peut pas fonctionner car elle utilise des messages broadcast, qui ne passent pas au travers des routeurs des FAI, en général. Vous pouvez aussi utiliser DNS pour la résolution des noms en adresses IP. Il est possible, par exemple, d'appeler le correspondant nommé « ordinateur.domaine.com ». 7.3. Appels sur Internet avec un serveur WINS L'idée d'appeler des noms NetBIOS peut aussi être implémentée en environnement Internet à l'aide d'un serveur WINS. Il est possible de configurer les clients NetBIOS afin qu'ils utilisent un serveur WINS pour la résolution des noms Les PC qui utilisent le même serveur WINS peuvent s'appeler directement A (serveur WINS S) - - - - - I - - - - B (serveur WINS S) N T E - - - - - S (serveur Wins) C (serveur WINS S) - - - - - R N E - - - - D (serveur WINS S) T Communication Internet A, B, C et D sont dans des sous-réseaux différents, mais ils peuvent s'appeler à la manière d'un appel de nom NetBIOS. Il faut que tous utilisent S comme serveur WINS. Remarque : les performances du serveur WINS sont réduites car il utilise NetBIOS on ne devrait l'utiliser que pour un nombre restreint de sous-réseaux . 7.4. Serveur ILS Les serveurs de type ILS permettent de résoudre un nom lors d'un appel H323 : lorsque vous démarrez une application VoIP, vous commencez par enregistrer un nom sur le serveur ILS. L'ensemble des utilisateurs pourront alors vous joindre à l'aide de ce nom (s'ils possèdent le même serveur ILS !). 7.5. Un gros problème : le masquerading. On peut remédier à une pénurie d'adresses IP par utilisation du masquage d'adresses (masquerading ou NAT, network address translation, traduction d'adresse réseau) : une seule adresse IP est publique (« vue » sur Internet), les autres machines sont « masquées » par cette adresse IP. A - - - B - - - Routeur NAT - - - Internet C - - - Ça ne fonctionne pas. Dans l'exemple, A, B et C peuvent naviguer, pinguer, utiliser le mail et les news avec des gens sur Internet, mais ils NE PEUVENT PAS faire un appel de VoIP. En effet le protocole H323 envoie l'adresse IP au niveau applicatif, donc la réponse n'arrivera jamais à la source (qui utilise une adresse IP privée). Solutions: * Un module Linux particulier qui modifie les paquets h323 permet d'éviter ce problème. Vous pouvez le télécharger ici [http://www.coritel.it/coritel/ip/sofia/nat/nat2/nat2.htm]. Pour l'installer vous devez le copier dans le répertoire source spécifié, modifier le Makefile, le compiler et installer le module avec « modprobe ip_masq_h323 ». Malheureusement ce module ne fonctionne pas actuellement avec ohphone (je ne sais pas pourquoi). A - - - Routeur NAT B - - - + - - - Internet C - - - module ip_masq_h323 Ça fonctionne. * Il y a aussi une application qui résout ce problème. Voir Phonepatch A - - - B - - - PhonePatch - - - Internet C - - - Ça fonctionne. 7.6. Applications Open Source 7.6.1. Syntaxe d'Ohphone La syntaxe est : « ohphone -l [options] ou ohphone --listen [options] » « ohphone [options]... adresse » * « -l », écoute sur le port standard (1720) * « adresse », signifie que nous n'attendons pas d'appel, mais que nous nous connectons à la machine « adresse » * « -n », « --no-gatekeeper », convient en l'absence de portier * « -q num », « --quicknet num », utiliser la carte Quicknet, périphérique /dev/phone(num) * « -s device », « --sound device », utiliser le périphérique audio /dev/device. * « -j délai », « --jitter délai », passer le délai du tampon à la valeur « délai ». De plus, une fois ohphone lancé, il est possible de passer directement des commandes à l'aide de l'interpréteur (par exemple, pour diminuer l'AEC, Automatic Echo Cancellation, annulation automatique d'écho). 7.6.2. Gnomemeeting Gnomemeeting est une application avec interface utilisateur graphique permettant d'effectuer des appels VoIP. Son utilisation est très simple et elle fournit, entre autres, un serveur ILS, et un chat. 7.7. Installer un portier Vous pouvez aussi faire l'essai d'un portier. Exemple (Terminal H323) A - - - \ (Terminal H323) B - - - D (Portier) / (Terminal H323) C - - - Configuration du portier 1. Les machines A, B et C sont configurées pour pointer sur le portier D. 2. Au démarrage, chaque machine fournit, à D, ses adresse et nom propres (des alias également), qui pourront être utilisés, par un appelant, pour la contacter. 3. Quand un terminal demande, à D, l'accès à une machine, D répond en fournissant l'adresse IP, qui permet d'établir la communication. Il faut noter que le Portier n'est capable que de résoudre des noms en adresses IP : il ne peut pas relier des machines injoignables entre-elles au niveau IP, autrement dit il ne peut pas fonctionner comme routeur NAT. Vous pourrez trouver le code source d'un portier ici [http://www.opengatekeeper.org] : la librairie openh323 [http://www.openh323.org/code.html]est nécessaire. Le programme peut être lancé avec les paramètres -d (démon) ou -x (execute). Vous pouvez de plus utiliser un fichier de config (.ini) que vous trouverez ici [http://www.opengatekeeper.org/opengate.ini]. 7.8. Installer une passerelle 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 [http://www.openh323.org] 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 [http://www.openh323.org/code.html], puis installer le tout dans un répertoire personnel. Il suffit ensuite de lancer PSTNGw pour démarrer la passerelle H323. 7.9. Matrice de compatibilité 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 8. Communications sur des lignes RTCP 8.1. Généralités La VoIP devient très intéressante quand vous commencez à utiliser des lignes RTCP pour appeler d'autres gens dans le monde, directement sur leur téléphone à domicile. 8.2. Scénario Une application typique serait : Téléphone 1 -- (RTCP) -- PC1 -- (Internet) -- PC2 -- (RTCP) -- Téléphone 2 1. Le téléphone 1 appelle le numéro du PC1 (sur le RTCP, càd la ligne téléphonique classique) 2. Le PC1 lui répond. 3. Le téléphone 1 doit indiquer au PC1 la passerelle à utiliser (le PC2 dans ce cas) en fournissant l'adresse IP (à l'aide du clavier à tonalités) et/ou le numéro à appeler (dans ce cas, celui du téléphone 2) 4. Le PC1 émet ensuite un appel H323 au PC2, et lui transmet le numéro du téléphone 2 afin qu'il appelle ce dernier à l'aide du RTCP 5. Le téléphone 2 répond à l'appel et la communication entre le téléphone 1 et le téléphone 2 commence. 8.3. Que peut-on changer dans cette configuration ? 1. Il est possible d'utiliser un autocommutateur privé qui fournit plusieurs lignes d'accès à la passerelle PC1 (l'une, par exemple, pour des appels internes à l'état, l'une pour des appels vers l'Europe, et cætera) : en général cette option est inutile, car le coût est identique. 2. Il est possible de sélectionner, après appel de la passerelle PC1, le PC2 de votre choix, (par exemple un PC2 situé en Angleterre si on appelle un Anglais) afin de ne payer que des communications nationales. Votre décision dépendra donc des coûts des lignes RTCP. En fait, la VoIP fait la conversion de : Téléphone 1 --- (RTCP) --- Téléphone 2 Coût d'un appel grande distance RTCP en : Téléphone 1 --- (RTCP) --- PC1 + PC2 ---- (RTCP) --- Téléphone 2 = -------------------------------------- 2 coûts d'appel RTCP courte distance Pour réaliser des économies il est nécessaire que : 2 coûts d'appel RTCP courte distance < coût d'appel RTCP grande distance Généralement, un « appel à courte distance » désigne un « appel local » alors qu'un « appel grande distance » peut être un « appel intercontinental » ! 9. Considérations de bande passante 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. 10. Glossaire RTCP : Réseau Téléphonique Commuté Public VoIP : Voice over Internet Protocol (Voix sur protocole Internet - Voix sur IP) LAN : Local Area Network (réseau local) WAN : Wide Area Network (réseau étendu) TOS : Type Of Service (type de service) FAI : Fournisseur d'Accès Internet RTP : Real Time Protocol (protocole temps réel) RSVP : ReSerVation Protocol (protocole de réservation) QoS : Quality of Service (qualité de service) 11. Liens utiles 11.1. Liens vers des logiciels open source * Voxilla [http://www.voxilla.org] * Linux Telephony [http://www.linuxtelephony.org] * Site web Open H323 [http://www.openh323.org] * Gnomemeeting [http://www.gnomemeeting.org/] * Speak Freely [http://www.speakfreely.org] * Linphone [http://www.linphone.org] * Osip [http://www.fsf.org/software/osip] * Bayonne [http://www.gnu.org/software/bayonne] 11.2. Liens commerciaux * Fatamorgana Computers [http://www.fatamorgana.com] * International Communication Union [http://www.itu.org] * Voicetronix [http://www.voicetronix.com.au] * Quicknet [http://www.quicknet.net] * Cisco Systems [http://www.cisco.com] * http://www.metropark.com [http://www.metropark.com] * http://www.nbxsoftware.com [http://www.nbxsoftware.com]