VOIP II

5,193 views

Published on

Published in: Technology
6 Comments
21 Likes
Statistics
Notes
No Downloads
Views
Total views
5,193
On SlideShare
0
From Embeds
0
Number of Embeds
77
Actions
Shares
0
Downloads
0
Comments
6
Likes
21
Embeds 0
No embeds

No notes for slide
  • ● Realiza un enlace por SIP con la PBX de tu compañero. ● Utiliza cuentas de “friend”. ● Haz un contexto para que las extensiones de una PBX puedan llamar a las de la otra. ● Inventa un prefijo para que al marcarlo la llamada sea enviada a la otra centralita.
  • VOIP II

    1. 1. Sistemas de VOIP con Asterisk: MODULO 2 Marzo 2010 – Guayaquil, Ecuador Instructor: Ing. José Córdova
    2. 2. Detalles Adicionales
    3. 3. Pila de Protocolos
    4. 4. Setting Up un Sistema Asterisk Purpose Simultaneous calls Minimum Recommendation Hobby System <5 X86 400Mhz 256MB SoHo System 5 - 10 X86 1Ghz 512Mb SMB System 10 - 15 X86 3Ghz 1GB Large >15 Dual CPU, Clusters
    5. 5. Detalle DTMF
    6. 6. SIP y Troncal SIP
    7. 7. Mensajes SIP <ul><li>Informational </li></ul><ul><ul><ul><ul><li>• 100 Trying </li></ul></ul></ul></ul><ul><ul><ul><ul><li>• 180 Ringing </li></ul></ul></ul></ul><ul><ul><ul><ul><li>• 181 Call forwarded </li></ul></ul></ul></ul><ul><ul><ul><ul><li>• 182 Queued </li></ul></ul></ul></ul><ul><ul><ul><ul><li>• 183 Session Progres </li></ul></ul></ul></ul><ul><li>Success </li></ul><ul><ul><ul><ul><li>• 200 OK </li></ul></ul></ul></ul><ul><li>Request Failure </li></ul><ul><ul><ul><ul><li>• 400 Bad Request </li></ul></ul></ul></ul><ul><ul><ul><ul><li>• 401 Unauthorised </li></ul></ul></ul></ul><ul><ul><ul><ul><li>• 403 Forbidden </li></ul></ul></ul></ul><ul><ul><ul><ul><li>• 404 Not Found </li></ul></ul></ul></ul><ul><ul><ul><ul><li>• 405 Bad Method </li></ul></ul></ul></ul><ul><ul><ul><ul><li>• 415 Unsupported Content </li></ul></ul></ul></ul><ul><ul><ul><ul><li>• 420 Bad Extensions </li></ul></ul></ul></ul><ul><ul><ul><ul><li>• 486 Busy Here </li></ul></ul></ul></ul>
    8. 8. Mensajes SIP <ul><li>Server Failure </li></ul><ul><ul><ul><ul><li>• 504 Timeout </li></ul></ul></ul></ul><ul><ul><ul><ul><li>• 503 Unavailable </li></ul></ul></ul></ul><ul><ul><ul><ul><li>• 501 Not Implemented </li></ul></ul></ul></ul><ul><ul><ul><ul><li>• 500 Server Error </li></ul></ul></ul></ul><ul><li>Global Failure </li></ul><ul><ul><ul><ul><li>• 600 Busy Everwhere </li></ul></ul></ul></ul><ul><ul><ul><ul><li>• 603 Decline </li></ul></ul></ul></ul><ul><ul><ul><ul><li>• 604 Doesn’t Exist </li></ul></ul></ul></ul><ul><ul><ul><ul><li>• 606 Not Acceptable </li></ul></ul></ul></ul>
    9. 9. Protocolo SIP <ul><li>SIP Elementos principales: </li></ul><ul><ul><ul><ul><li>Registrar y SIP Proxy. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>User Agent. </li></ul></ul></ul></ul><ul><li>Proxy Server: </li></ul><ul><ul><ul><li>Elemento que actúa como servidor y cliente. </li></ul></ul></ul><ul><ul><ul><li>Como cliente genera mensajes en nombre del cliente que originó el requerimiento. </li></ul></ul></ul><ul><ul><ul><li>Los mensajes recibidos se responden o son re-encaminados. </li></ul></ul></ul><ul><ul><ul><li>Outbound Proxy. </li></ul></ul></ul><ul><ul><ul><li>Inbound Proxy. </li></ul></ul></ul>
    10. 10. Inbound Proxy <ul><li>El usuario se vuelve independiente del equipo que utiliza y de su localización. </li></ul>
    11. 11. Outbound Proxy <ul><li>Se encarga de las tareas administrativas: tarifación, grupos de usuarios, permisos, dominios, etc. </li></ul><ul><li>Un servidor puede ser entrante y saliente a la vez. </li></ul>
    12. 12. Señalización SIP con Proxy
    13. 13. Registrar Server <ul><li>Maneja mensajes de tipo REGISTER. </li></ul><ul><li>REGISTER es un mensaje de ubicación que indica IP y Puerto de un UA. </li></ul><ul><li>No se implementa en Asterisk, limitación de *. </li></ul><ul><li>No se implementan posiciones múltiples para un UA. </li></ul><ul><li>Se puede implementar en el SIP Proxy. </li></ul>
    14. 14. Protocolo SIP y Asterisk <ul><li>El registro vuelve dinamica la localización del UA. </li></ul><ul><li>La conmutación del Proxy Server dependerá de la localización </li></ul><ul><li>Se basa en dos enfoques: </li></ul><ul><ul><ul><ul><li>A traves del registro en el REGISTRAR Server el usuario puede ser localizado en un dispositivo cualquiera. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>“ Movilidad IP” a través de VPNs. </li></ul></ul></ul></ul><ul><li>Asterisk no es un SIP Proxy. </li></ul><ul><li>Un SIP Proxy maneja el control de la llamada en nombre de los UA y nunca es terminal de una llamada. </li></ul><ul><li>Asterisk, como entidad SIP, puede ser un SIP Registrar y una terminal UA. </li></ul>
    15. 15. Protocolo SIP <ul><li>Cuando Asterisk “controla” una llamada actua como B2BUA manteniendose en medio de la llamada como terminal. </li></ul><ul><li>SIP Proxy Server: </li></ul><ul><ul><ul><li>No puede montar aplicaciones como PBX. </li></ul></ul></ul><ul><ul><ul><li>Se enlaza con un Gateway PSTN: Asterisk. </li></ul></ul></ul><ul><ul><ul><li>En conjunto dan funcionalidades avanzadas. </li></ul></ul></ul>
    16. 16. Arquitectura Avanzada
    17. 17. El Problema del NAT <ul><li>Dentro de las empresas se suele utilizar direcciones IP privadas. </li></ul><ul><li>El equipo que provee acceso a Internet “tiene” IP pública. </li></ul><ul><li>Los equipos “locales” con IP privadas están “detrás” del equipo con IP pública. </li></ul><ul><li>Todo equipo para ser alcanzable en Internet necesita una IP pública. </li></ul><ul><li>Source NAT: la red interna se enmascara en una IP pública. </li></ul>
    18. 18. El Problema del NAT
    19. 19. Solución al NAT <ul><li>Soluciones en el servidor: </li></ul><ul><ul><ul><ul><li>NAT Helpers. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Keep aplives. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Media Proxys. </li></ul></ul></ul></ul><ul><li>Soluciones en el cliente: </li></ul><ul><ul><ul><ul><li>Keep alives. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>STUN ( Simple Traversal of UDP through NAT). </li></ul></ul></ul></ul>
    20. 20. Interconexión SIP <ul><li>SIP permite crear enlaces con cualquier PBX, Gateway o cualquier dispositivo que hable SIP. </li></ul><ul><li>La configuración de un enlace de interconexión entre Asterisk usando SIP se basa en: </li></ul><ul><ul><ul><ul><li>Configuración de un peer/user/friend. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Register: register => usuario:password@host </li></ul></ul></ul></ul><ul><li>La interconexión con IAX2 será muy parecida. </li></ul>
    21. 21. Configuración Interconexión sip.conf <ul><li>Server A: </li></ul><ul><li>[general] </li></ul><ul><li>register => serverA:welcome@192.168.1.2/serverB </li></ul><ul><li>  </li></ul><ul><li>[serverB] </li></ul><ul><li>type=friend </li></ul><ul><li>secret=welcome </li></ul><ul><li>context=from_serverB </li></ul><ul><li>host=dynamic </li></ul><ul><li>disallow=all </li></ul><ul><li>allow=ulaw </li></ul>
    22. 22. Configuración Interconexión sip.conf <ul><li>Server B: </li></ul><ul><li>[general] </li></ul><ul><li>register => serverB:welcome@192.168.1.1/serverA </li></ul><ul><li>  </li></ul><ul><li>[serverA] </li></ul><ul><li>type=friend </li></ul><ul><li>secret=welcome </li></ul><ul><li>context=from_serverA </li></ul><ul><li>host=dynamic </li></ul><ul><li>disallow=all </li></ul><ul><li>allow=ulaw </li></ul>
    23. 23. extensions.conf Server A <ul><li>[internal] </li></ul><ul><li>exten => _1XXX,1,Dial(SIP/${EXTEN},30) </li></ul><ul><li>exten => _1XXX,n,Playback(hello) </li></ul><ul><li>exten => _1XXX,n,Hangup() </li></ul><ul><li>include => remote </li></ul><ul><li>  </li></ul><ul><li>[remote] </li></ul><ul><li>exten => _2XXX,1,Dial(SIP/serverB/${EXTEN}) </li></ul><ul><li>exten => _2XXX,n,Hangup() </li></ul><ul><li>  </li></ul><ul><li>[from_serverB] </li></ul><ul><li>include => internal </li></ul>
    24. 24. extensions.conf Server B <ul><li>[internal] </li></ul><ul><li>exten => _2XXX,1,Dial(SIP/${EXTEN},30) </li></ul><ul><li>exten => _2XXX,n,Playback(hello) </li></ul><ul><li>exten => _2XXX,n,Hangup() </li></ul><ul><li>include => remote </li></ul><ul><li>  </li></ul><ul><li>[remote] </li></ul><ul><li>exten => _1XXX,1,Dial(SIP/serverA/${EXTEN}) </li></ul><ul><li>exten => _1XXX,n,Hangup() </li></ul><ul><li>  </li></ul><ul><li>[from_serverA] </li></ul><ul><li>include => internal </li></ul>
    25. 25. IAX2 y Troncal IAX Inter Asterisk eXchange v2
    26. 26. IAX2 <ul><li>Recordar: </li></ul><ul><ul><ul><li>Interconecta Servidores Asterisk. </li></ul></ul></ul><ul><ul><ul><li>Poco teléfonos implementan IAX: Hardphones ATCOM y Softphone ZOIPER. </li></ul></ul></ul><ul><ul><ul><li>Señalización y Streaming en el mismo puerto 4569 UDP. </li></ul></ul></ul><ul><ul><ul><li>Solución al problema del NAT. </li></ul></ul></ul><ul><ul><ul><li>Incluía seguridad: Texto Plano, Llave RSA, MD5. </li></ul></ul></ul>
    27. 27. IAX2 <ul><li>Nuevo: </li></ul><ul><ul><ul><li>Se puede utilizar para enviar varios payloads de voz en un flujo ya creado. </li></ul></ul></ul><ul><ul><ul><ul><ul><li>Disminuye la inserción completa de overheads. </li></ul></ul></ul></ul></ul><ul><li>Se utiliza una configuración parecida a la de la Troncal SIP. </li></ul>
    28. 28. Configuración Interconexión IAX2
    29. 29. IAX.conf <ul><li>En las nuevas versiones de Asterisk viene incluída una característica adicional de seguridad anti DoS en el protocolo IAX2. http://www.asterisk.org/doxygen/trunk/Config_iax.html </li></ul><ul><li>[general] </li></ul><ul><li>jitterbuffer=yes </li></ul><ul><li>bindport=4569 </li></ul><ul><li>calltokenoptional = 0.0.0.0/0.0.0.0 </li></ul><ul><li>requirecalltoken = auto </li></ul><ul><li>maxcallnumbers = 512 </li></ul>
    30. 30. Configuración Interconexión IAX2 <ul><li>Server A: </li></ul><ul><li>[general] </li></ul><ul><li>autokill=yes ;para evitar lazos </li></ul><ul><li>register => serverA:welcome@192.168.1.2 ; línea de registro </li></ul><ul><li>[serverB] </li></ul><ul><li>type=friend </li></ul><ul><li>secret=welcome </li></ul><ul><li>trunk=yes </li></ul><ul><li>context=from_serverB </li></ul><ul><li>host=dynamic </li></ul><ul><li>deny=0.0.0.0/0.0.0.0 </li></ul><ul><li>permit=192.168.1.2/255.255.255.0 </li></ul>
    31. 31. Configuración Interconexión IAX2 <ul><li>Server B: </li></ul><ul><li>[general] </li></ul><ul><li>autokill=yes </li></ul><ul><li>register => serverB:welcome@192.168.1.1 </li></ul><ul><li>[serverA] </li></ul><ul><li>type=friend </li></ul><ul><li>secret=welcome </li></ul><ul><li>trunk=yes </li></ul><ul><li>context=from_serverA </li></ul><ul><li>host=dynamic </li></ul><ul><li>deny=0.0.0.0/0.0.0.0 </li></ul><ul><li>permit=192.168.1.1/255.255.255.0 </li></ul>
    32. 32. extensions.conf Server A <ul><li>[internal] </li></ul><ul><li>exten => _1XXX,1,Dial(SIP/${EXTEN},30) </li></ul><ul><li>exten => _1XXX,n,Playback(hello) </li></ul><ul><li>exten => _1XXX,n,Hangup() </li></ul><ul><li>include => remote </li></ul><ul><li>  </li></ul><ul><li>[remote] </li></ul><ul><li>exten => _2XXX,1,Dial(IAX2/serverB/${EXTEN},30,r) </li></ul><ul><li>exten => _2XXX,n,Hangup() </li></ul><ul><li>  </li></ul><ul><li>[from_serverB] </li></ul><ul><li>include => internal </li></ul>
    33. 33. extensions.conf Server B <ul><li>[internal] </li></ul><ul><li>exten => _2XXX,1,Dial(SIP/${EXTEN},30) </li></ul><ul><li>exten => _2XXX,n,Playback(vm-unavail) </li></ul><ul><li>exten => _2XXX,n,Hangup() </li></ul><ul><li>include => remote </li></ul><ul><li>   </li></ul><ul><li>[remote] </li></ul><ul><li>exten => _1XXX,1,Dial(IAX2/serverA/${EXTEN}) </li></ul><ul><li>exten => _1XXX,n,Hangup() </li></ul><ul><li>  </li></ul><ul><li>[from_serverA] </li></ul><ul><li>include => internal </li></ul>
    34. 34. Señalización Analógica
    35. 35. Señalización Analógica <ul><li>Existen 3 tipos de Señalización: </li></ul><ul><ul><ul><li>Señalización de Supervisión. </li></ul></ul></ul><ul><ul><ul><li>Señalización de Direccionamiento. </li></ul></ul></ul><ul><ul><ul><li>Señalización de Información. </li></ul></ul></ul><ul><li>De los tipos de señalización de Supervisión tenemos: </li></ul><ul><ul><ul><li>On-hook: cuando el usuario pone el teléfono “on-hook” la PBX lo interrumpe y no permite que la corriente eléctrica pase. En este estado el circuito que se ha creado se denomina “on-hook”, el teléfono solo puede timbrar. </li></ul></ul></ul>
    36. 36. Señalización de Supervisión Analógica <ul><li>Off-Hook: “Alzar el teléfono” cierra el lazo con la PBX y le indica que el usuario intenta hacer una llamada, la PBX genera un tono de marcado indicando al usuario que esta lista para aceptar la dirección de marcado. </li></ul><ul><li>Ringing: cuando un usuario llama a otro genera un voltaje al ringer que advierte al otro usuario de la recepción de una llamada. </li></ul><ul><li>Señalización varía por pais con diferentes tonos: </li></ul><ul><ul><ul><li>Para modificar a Asterisk: indications.conf </li></ul></ul></ul>
    37. 37. Señalización Analógica <ul><li>Señalización de Direccionamiento: </li></ul><ul><ul><ul><li>DTMF (Dual Tone Multi-Frequency). </li></ul></ul></ul><ul><ul><ul><li>Pulse Dialing (teléfonos de disco). </li></ul></ul></ul><ul><li>Señalización de Información: muestra el progreso de la llamada y los eventos relacionados a ella: </li></ul><ul><ul><ul><li>Dial Tone. </li></ul></ul></ul><ul><ul><ul><li>Busy Tone. </li></ul></ul></ul><ul><ul><ul><li>Ringback. </li></ul></ul></ul><ul><ul><ul><li>Invalid Number. </li></ul></ul></ul><ul><ul><ul><li>Congestion. </li></ul></ul></ul><ul><ul><ul><li>Confirmation Tone. </li></ul></ul></ul>
    38. 38. Interfaces con PSTN <ul><li>Existen tres maneras de Conectarse a la PSTN (RTPC, RTB): </li></ul><ul><ul><ul><li>Canal Análogo. </li></ul></ul></ul><ul><ul><ul><ul><ul><li>Par de cobre regular. </li></ul></ul></ul></ul></ul><ul><ul><ul><li>Canal Digital. </li></ul></ul></ul><ul><ul><ul><ul><ul><li>Gran cantidad de lineas. </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Vienen en CSU/DSU o en MUX de Fibra. </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Conector terminal RJ45 </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>A veces en conectores BNC. </li></ul></ul></ul></ul></ul><ul><ul><ul><li>Canal Sip. </li></ul></ul></ul>
    39. 39. Interfaces Análogicas <ul><li>FXO – Foreign eXchange Office: </li></ul><ul><ul><ul><ul><li>Se conecta a la PSTN o a otra extensión de la PBX. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Se comunica con una linea telefónica de una PSTN. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>RECIBE un tono de marcado. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>OPX (Off Promises Extension) conexión a un FXS de otra central. </li></ul></ul></ul></ul><ul><li>FXS – Foreign eXchange Station: </li></ul><ul><ul><ul><ul><li>Alimenta teléfonos análogos, modems, faxes. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>DA un tono de marcado y energía al teléfono. </li></ul></ul></ul></ul>
    40. 40. FXS y FXO con Asterisk
    41. 41. Señalización de Interfaz Análoga <ul><li>Señalización de las Interfaces Analógicas: </li></ul><ul><ul><ul><li>Loop-Start. </li></ul></ul></ul><ul><ul><ul><ul><ul><li>Es el mas usado. </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Permite al teléfono indicar “on-hook” y “off-hook”. </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>On Hook, el teléfono esta esperando un tono de timbrado. </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Off Hook, solicita tono de marcado y permite pasar el audio. </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Permite al switch indicar “ring” y “no-ring”. </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>La linea regularmente esta en “lazo abierto”. </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Cuando se pone “lazo cerrado” el switch da tono de marcado. </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Una llamada entrante es señalizada por un voltaje de timbrado de 100V sobre el par (de cobre) abierto. </li></ul></ul></ul></ul></ul>
    42. 42. Señalización de Interfaz Análoga <ul><li>Groundstart: </li></ul><ul><ul><ul><li>Similar a Loopstart. </li></ul></ul></ul><ul><ul><ul><li>El que llama pone su linea en corto circuito. </li></ul></ul></ul><ul><ul><ul><li>El SW identifica ese estado y cambia el voltaje sobre el par abierto y cierra el lazo. </li></ul></ul></ul><ul><ul><ul><li>La linea primero se “ocupa” antes de ser ofrecida al que desea llamar. </li></ul></ul></ul>
    43. 43. Señalización de Interfaz Análoga <ul><li>Kewlstart: </li></ul><ul><ul><ul><li>Añade inteligencia al circuito. </li></ul></ul></ul><ul><ul><ul><li>Monitorea el otro lado de la conversación. </li></ul></ul></ul><ul><ul><ul><li>Se basa en Loopstart. </li></ul></ul></ul><ul><ul><ul><li>Asterisk usa KS por defecto. </li></ul></ul></ul>
    44. 44. Líneas Digitales
    45. 45. Líneas Digitales <ul><li>PCM: La señal analógica es muestreada 8000 veces por segundo. </li></ul><ul><li>Ley u: USA y Japón, resto del mundo: Ley A. </li></ul><ul><li>Las troncales digitales usan TDM en dos formatos: </li></ul>
    46. 46. Líneas Digitales <ul><li>Pocas líneas de la PSTN  se manejan con canales FXO. </li></ul><ul><li>Muchas líneas de la PSTN  la PSTN debe proveer una troncal digital. </li></ul><ul><li>TDM (Multiplexación por División de Tiempo) permite montar múltiples canales en una sola trama de datos. </li></ul><ul><li>En cada SLOT de tiempo se usa 64 Kbps, g711, de BW para transmitir un canal de voz. </li></ul><ul><li>En USA: T1 con 24 líneas disponibles. </li></ul><ul><li>En EU y LATAM: E1 con 30 líneas disponibles. </li></ul><ul><li>T1 regularmente usa un esquema de RBS (Robbed Bit Signaling) un bit es “prestado” para señalización y así no pierde canales para sincronización y señalización como E1. </li></ul><ul><li>Los canales se transmiten a 56Kbps en cada slot. </li></ul>
    47. 47. Líneas Digitales <ul><li>El origen de usar T1s fue el de conectar PBX y transmitir canales de voz. </li></ul><ul><li>T1 puede usar CAS y CCS. T1: </li></ul><ul><li>Señalización Asociada al Canal (CAS) es un metodo de señalización comunmente utilizado en interconexión de centrales PBX. </li></ul>
    48. 48. Lineas Digitales <ul><li>T1: </li></ul><ul><ul><ul><li>193 bits: 8bits x 24slots (DS0) +1 bit de Framing. </li></ul></ul></ul><ul><ul><ul><li>T1 se repite cada 125us = 8000 muestras/segundo: </li></ul></ul></ul><ul><ul><ul><li>1.544Mbps = 193x8000. </li></ul></ul></ul><ul><ul><ul><li>Para hacer Framing cuenta con: </li></ul></ul></ul><ul><ul><ul><ul><li>SF/D4 </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>12 Frames en una secuencia. </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><li>ESF </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Agrega CRC y Control. </li></ul></ul></ul></ul></ul>
    49. 49. T1 y E1 <ul><li>T1: </li></ul><ul><ul><ul><li>Un canal DS0 usa 64Kbps suficiente para la voz pero no para la señalización. </li></ul></ul></ul><ul><ul><ul><li>RBS: Usa el LSB para señalización, la pérdida de la calidad es imperceptible. </li></ul></ul></ul><ul><ul><ul><li>Es señalización CAS en banda </li></ul></ul></ul><ul><li>E1: </li></ul><ul><ul><ul><li>30 canales disponibles de los 32, 1 es usado para framing y el 17 es usado para señalización </li></ul></ul></ul><ul><ul><ul><li>Es señalización CAS fuera de banda. </li></ul></ul></ul>
    50. 50. T1 y E1 <ul><li>E1: </li></ul><ul><ul><ul><li>El formato de frame tiene 32 timeslots. </li></ul></ul></ul><ul><ul><ul><li>Timeslot 1 se usa para información de framing. </li></ul></ul></ul><ul><ul><ul><li>Timeslot 17 lleva la información de el resto de los timeslots y de el inicio de un multi frame. </li></ul></ul></ul><ul><li>CCS: </li></ul><ul><ul><ul><li>Utilizan un canal común para señalizar: ISDN Q.931 </li></ul></ul></ul><ul><ul><ul><li>Q.SIG y SS7. </li></ul></ul></ul><ul><ul><ul><li>http://www.rhyshaden.com/transm.htm </li></ul></ul></ul>
    51. 51. Codificación de la Fuente Digital <ul><li>La codificación indica la manera como los bits son interpretados. </li></ul><ul><li>Estos son llamados “Códigos de Linea”, capa fisica. </li></ul><ul><li>T1: </li></ul><ul><ul><ul><li>ESF con B8ZS </li></ul></ul></ul><ul><ul><ul><li>D4/SF con AMI </li></ul></ul></ul><ul><li>E1: </li></ul><ul><ul><ul><li>HDB3 Capa Física. </li></ul></ul></ul><ul><ul><ul><li>CCS Capa de Enlace de Datos. </li></ul></ul></ul><ul><li>Esta información debe darla el proveedor para poder configurarla en Asterisk. </li></ul>
    52. 52. Señalización de Troncales Digitales <ul><li>Nos pueden entregar T1/E1: </li></ul><ul><ul><ul><li>T1 con RBS. </li></ul></ul></ul><ul><ul><ul><li>T1 con ISDN. </li></ul></ul></ul><ul><ul><ul><li>E1 con MFC/R2 (CAS) </li></ul></ul></ul><ul><ul><ul><li>E1 con ISDN. </li></ul></ul></ul><ul><li>ISDN (Integrated Services Digital Network) es muy común en USA, es estándar de ITU desde 1984. </li></ul><ul><li>Define: </li></ul><ul><ul><ul><li>Canales Portadores (Bearer Channels): </li></ul></ul></ul><ul><ul><ul><ul><ul><li>Datos y Voz </li></ul></ul></ul></ul></ul>
    53. 53. Señalización de Troncales Digitales <ul><li>Canales de Datos (Data Channels): </li></ul><ul><ul><ul><ul><ul><li>Señalización fuera de banda. </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Señalización LAPD (Link Access Protocol Channel D). </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Q.931 </li></ul></ul></ul></ul></ul><ul><li>ISDN viene con 2 Interfaces físicas: </li></ul><ul><ul><ul><li>BRI (basic rate interface). </li></ul></ul></ul><ul><ul><ul><ul><li>2B+D: 2 Bearer (64K) y 1 Data (16K). </li></ul></ul></ul></ul><ul><ul><ul><ul><li>1 par de cobre a 148Kbps. </li></ul></ul></ul></ul><ul><ul><ul><li>PRI (primary rate interface). </li></ul></ul></ul><ul><ul><ul><ul><li>1 troncal T1/E1. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>23B+D para T1 </li></ul></ul></ul></ul><ul><ul><ul><ul><li>30B +D para E1. </li></ul></ul></ul></ul>
    54. 54. Tarjeta Digital
    55. 55. Tarjetas de Telefonía Digital <ul><li>Las tarjetas de Telefonía Digital son tarjetas PCI estándar configurables para utilizarse como T1 (24 canales) o como E1/PRI (32 canales) mediante un jumper. </li></ul><ul><li>De acuerdo al modelo vienen de diferente numero de puertos: </li></ul><ul><ul><ul><ul><li>TE110P </li></ul></ul></ul></ul><ul><ul><ul><ul><li>TE205P </li></ul></ul></ul></ul><ul><ul><ul><ul><li>TE405P </li></ul></ul></ul></ul><ul><li>En USA suele utilizarse T1 que tiene 23 canales tipo B y un canal D de 64Kbps, alcanzando una velocidad global de 1536Kbps. </li></ul><ul><li>En Europa se utiliza más E1 que consiste de 30 canales B y un canal D de 64Kbps, alcanzando una velocidad global de 1984Kbps. </li></ul>
    56. 56. Tarjetas de Telefonía Digital
    57. 57. Cable T1 Crossover
    58. 58. Configuración system.conf <ul><li>span:  se refiere a un grupo de canales que se transmite a través de un cable. La sintaxis para configurar esta opción es la siguiente: </li></ul><ul><li>span=(spannum),(timing),(LBO),(framing),(coding) </li></ul><ul><ul><li>spannum:  es el número con que se identifica el span. </li></ul></ul><ul><ul><li>timing:  indica de donde se toma la fuente de reloj. Puede tomar los valores 0 (este span no es fuente de reloj), 1 (este span es fuente primaria de reloj), 2 (igual al cero sin propagación de la señal de reloj) </li></ul></ul><ul><ul><ul><ul><li>En el lado del transmisor se genera la señal de reloj. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>La PSTN debería proveer el reloj, la PSTN no puede ser esclavo. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>0 el puerto no será usado como fuente de reloj. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>1 el puerto es usado como fuente de reloj en primera prioridad. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>2 el puerto es usado como fuente de reloj en 2da prioridad, si el primero falla este será la nueva fuente. </li></ul></ul></ul></ul>
    59. 59. Configuración system.conf <ul><ul><li>LBO:  indica el nivel de potencia con el que se trasmite la señal (por default se pone en 0), este valor esta función de la longitud del cable: “0”: 0-133 ft, “1”: 133-266 ft, “2”: 266-399 ft, “3”: 399-533 ft y “4”: 533-655 ft. </li></ul></ul><ul><ul><ul><ul><ul><li>0 db (CSU) / 0-133 ft (DSX-1) </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>1 133-266 ft (DSX-1) </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>2 266-399 ft (DSX-1) </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>3 399-533 ft (DSX-1) </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>4 533-655 ft (DSX-1) </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>5 -7.5db (CSU) </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>6 -15db (CSU) </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>7 -22.5db (CSU) </li></ul></ul></ul></ul></ul><ul><ul><li>framing:  indica cómo comunicarse con el hardware en el otro extremo de la línea. Para T1 puede ser D4 o ESF y para E1 puede ser CAS (Channel Associated Signalling) o CCS (Common-Channel signalling). </li></ul></ul>
    60. 60. Configuración system.conf <ul><ul><li>coding:  indica como comunicarse con el otro extremo. Para T1 puede ser ami o b8zs y para E1 puede ser ami (Alternate Mark Inversion) o hdb3 (High Density Bipolar of order 3 code). </li></ul></ul><ul><li>Canales B: bchan:  indica los canales que van a ser usados para datos. </li></ul><ul><ul><ul><ul><ul><li>Transmiten información a 64Kbps, y se emplean para transportar cualquier tipo de información de los usuarios, bien sean datos de voz o datos informáticos. </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Estos canales no transportan información de control de la RDSI. </li></ul></ul></ul></ul></ul><ul><li>Canales D:dchan:  indica los canales que van a ser usados para control. </li></ul><ul><ul><ul><ul><ul><li>Los canales tipo D se utilizan principalmente para enviar información de control, como es el caso de los datos necesarios para establecer una llamada o para colgar, por esta razón también se le conoce como canal de señalización. </li></ul></ul></ul></ul></ul>
    61. 61. Configuración chan_dahdi.conf <ul><li>switchtype:  tipo de switch en la línea PRI que se usa, los más comunes son euroisdn, national y qsig. </li></ul><ul><ul><ul><ul><ul><li>national: National ISDN 2 (default) </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>dms100: Nortel DMS100 </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>4ess: AT&T 4ESS </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>5ess: Lucent 5ESS </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>euroisdn: EuroISDN (common in Europe) </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>ni1: Old National ISDN 1 </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>qsig: Q.SIG </li></ul></ul></ul></ul></ul><ul><li>group:  define el numero de grupo al que pertenecen los canales. </li></ul>
    62. 62. Configuración chan_dahdi.conf <ul><li>signalling:  tipo de señalización pri_cpe (Costumers Premisses Equipment) para indicar que la tarjeta trabajará como esclavo y pri_net (Network) para el maestro. </li></ul><ul><ul><ul><ul><ul><li>auto: Use the current value from DAHDI. </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>em: E & M </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>em_e1: E & M E1 </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>em_w: E & M Wink </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>featd: Feature Group D (The fake, Adtran style, DTMF) </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>featdmf: Feature Group D (The real thing, MF (domestic, US)) </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>featdmf_ta: Feature Group D (The real thing, MF (domestic, US)) through a Tandem Access point </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>featb: Feature Group B (MF (domestic, US)) </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>fgccama Feature Group C-CAMA (DP DNIS, MF ANI) </li></ul></ul></ul></ul></ul>
    63. 63. Configuración chan_dahdi.conf <ul><ul><ul><ul><ul><li>fgccamamf Feature Group C-CAMA MF (MF DNIS, MF ANI) </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>fxs_ls: FXS (Loop Start) </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>fxs_gs: FXS (Ground Start) </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>fxs_ks: FXS (Kewl Start) </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>fxo_ls: FXO (Loop Start) </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>fxo_gs: FXO (Ground Start) </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>fxo_ks: FXO (Kewl Start) </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>pri_cpe: PRI signalling, CPE side </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>pri_net: PRI signalling, Network side </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>gr303fxoks_net: GR-303 Signalling, FXO Loopstart, Network side </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>gr303fxsks_cpe: GR-303 Signalling, FXS Loopstart, CPE side </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>sf: SF (Inband Tone) Signalling </li></ul></ul></ul></ul></ul>
    64. 64. Configuración chan_dahdi.conf <ul><ul><ul><ul><ul><li>sf_w: SF Wink </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>sf_featd: SF Feature Group D (The fake, Adtran style, DTMF) </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>sf_featdmf: SF Feature Group D (The real thing, MF (domestic, US)) </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>sf_featb: SF Feature Group B (MF (domestic, US)) </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>e911: E911 (MF) style signalling </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>ss7: Signalling System 7 </li></ul></ul></ul></ul></ul><ul><ul><ul><li>pri_cpe: CPE (Customer Promises Equipment), cliente, usuario, esclavo. </li></ul></ul></ul><ul><ul><ul><li>pri_net: Host, Master, Network. </li></ul></ul></ul><ul><li>context:  contexto al que se dirigirán las llamadas entrantes. </li></ul><ul><li>channel:  canales a los cuales se les van a asignar las opciones </li></ul>
    65. 65. Asterisk Gateway Interface AGI
    66. 66. AGI <ul><li>AGI (Asterisk Gateway Interface) provee una interfaz estándar para que programas externos puedan controlar el plan de marcado. </li></ul><ul><li>Los mas usados: PHP, Python, Bash, Perl. </li></ul><ul><li>El intercambio de información del script con Asterisk se realiza vía los canales de comunicación: STDIN, STDOUT y STDERR. </li></ul><ul><ul><li>Lee desde STDIN para obtener información. </li></ul></ul><ul><ul><li>Escribe en STDOUT para enviar información. </li></ul></ul><ul><ul><li>Escribe en STDERR para enviar información de debugging. </li></ul></ul>
    67. 67. AGI <ul><li>Desde el punto de vista del Script: </li></ul><ul><ul><ul><li>Entradas desde Asterisk son STDIN. </li></ul></ul></ul><ul><ul><ul><li>Salidas hacia Asterisk son STDOUT. </li></ul></ul></ul><ul><li>El control de la ejecución esta en manos de Asterisk. </li></ul><ul><li>Hay que cuidar lo que se envía a ejecutar. </li></ul><ul><li>Buscar un Lenguaje de Programación de rápida ejecución. </li></ul>
    68. 68. AGI Comandos <ul><li>El script AGI envía comandos a Asterisk escribiendo en el STDOUT. Seguidamente Asterisk envía una respuesta por cada uno de ellos que es leída por el script. </li></ul><ul><ul><ul><li>ANSWER: atiende. </li></ul></ul></ul><ul><ul><ul><li>HANGUP: cuelga. </li></ul></ul></ul><ul><ul><ul><li>SAY [NUMBER | DIGITS | ALPHA | PHONETICS]: dice un número, dígito, caracter o una cadena fonéticamente. </li></ul></ul></ul><ul><ul><ul><li>SET [CONTEXT | EXTENSION | PRIORITY]: establece un nuevo contexto, extensión o prioridad luego de finalizada la ejecución de script. </li></ul></ul></ul><ul><ul><ul><li>VERBOSE: imprime un mensaje en el log. </li></ul></ul></ul><ul><ul><ul><li>WAIT FOR DIGIT: espera que se presione un dígito. </li></ul></ul></ul><ul><ul><ul><li>[SET | GET] VARIABLE: asigna u obtiene el valor de una variable del plan de marcación. </li></ul></ul></ul>
    69. 69. AGI y Lenguajes
    70. 70. Ejecución AGI
    71. 71. AGI y PHP <ul><li>Todo script AGI basado en PHP debe tener la siguiente forma: </li></ul><ul><li>Se debe proveer 2 funciones para hacer “read” y “write” de los flujos correspondientes STDIN y STDOUT. </li></ul><ul><li>Codigo Operacional y los “comandos” se ejecutarán a partir de esas funciones r/w. </li></ul><ul><li>Se deben cerrar los flujos para finalizar los scripts. </li></ul>
    72. 72. Comunicación Asterisk y AGI <ul><li>ASC: AGI Script, AST: Asterisk </li></ul>
    73. 73. AGI con DB y Web
    74. 74. AGI Ejemplos <ul><li>El programa debe tener modo de ejecución. </li></ul><ul><li>Estar en /var/lib/asterisk/agi-bin. </li></ul><ul><li>Para llamarlo desde el plan de marcado: </li></ul><ul><ul><ul><ul><li>exten => 123,1,Answer() </li></ul></ul></ul></ul><ul><ul><ul><ul><li>exten => 123,2,AGI(mi_script.php|argumentos) </li></ul></ul></ul></ul><ul><ul><ul><ul><li>exten => 123,2,AGI(otro_script.agi,par1,par2,parn) </li></ul></ul></ul></ul><ul><ul><ul><li>El siguiente script está escrito en PHP y dicta los números que se encuentran en el archivo que se le pasa como parámetro: </li></ul></ul></ul><ul><ul><ul><li>yum –y install php; chmod 755 mi_script.php </li></ul></ul></ul>
    75. 75. AGI Ejemplo: Dicta numeros (1) <ul><ul><li>#!/usr/bin/php -q </li></ul></ul><ul><ul><li><?php </li></ul></ul><ul><ul><li>// Esta línea es para que que haga no mantenga en un buffer el output </li></ul></ul><ul><ul><li>ob_implicit_flush(true); </li></ul></ul><ul><ul><li>set_time_limit(6); </li></ul></ul><ul><ul><li>error_reporting(0); </li></ul></ul><ul><ul><li>// Se abren los diferentes archivos (STDIN, STDOUT y un archivo de log del AGI) </li></ul></ul><ul><ul><li>$in = fopen(&quot;php://stdin&quot;,&quot;r&quot;); </li></ul></ul><ul><ul><li>$out = fopen(&quot;php://stdout&quot;,&quot;w&quot;); </li></ul></ul><ul><ul><li>$stdlog = fopen(&quot;/var/log/asterisk/my_agi.log&quot;, &quot;w&quot;); </li></ul></ul><ul><ul><li>// Si debug es true, escribe en el archivo de log definido anteriormente </li></ul></ul><ul><ul><li>$debug = true; </li></ul></ul>
    76. 76. AGI Ejemplo: Dicta numeros (2) <ul><ul><li>// Toma el nombre del archivo con los números a dictar del primer parámetro </li></ul></ul><ul><ul><li>$archivo = $argv[1]; </li></ul></ul><ul><ul><li>// Define la funcion read, que lee el input del STDIN </li></ul></ul><ul><ul><li>function read() { </li></ul></ul><ul><ul><li>global $in, $debug, $stdlog; </li></ul></ul><ul><ul><li>$input = str_replace(&quot; &quot;, &quot;&quot;, fgets($in, 4096)); </li></ul></ul><ul><ul><li>if ($debug) fputs($stdlog, &quot;read: $input &quot;); </li></ul></ul><ul><ul><li>return $input; </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>// Define la funcion write, que escribe el output en el STDOUT </li></ul></ul><ul><ul><li>function write($line) { </li></ul></ul><ul><ul><li>global $debug, $stdlog, $out; </li></ul></ul><ul><ul><li>if ($debug) fputs($stdlog, &quot;write: $line &quot;); </li></ul></ul><ul><ul><li>fputs($out,$line.&quot; &quot;); </li></ul></ul><ul><ul><li>fflush($out); </li></ul></ul><ul><ul><li>} </li></ul></ul>
    77. 77. AGI Ejemplo: Dicta numeros (3) <ul><ul><li>// Lee el archivo que se paso como parametro </li></ul></ul><ul><ul><li>$lines = file($archivo); </li></ul></ul><ul><ul><li>// Reproduce los digitos contenidos en cada linea del mismo informando en el log del </li></ul></ul><ul><ul><li>foreach ($lines as $line) { </li></ul></ul><ul><ul><li>$line=trim($line); </li></ul></ul><ul><ul><li>for ($i=0;$i<strlen($line);$i++) { </li></ul></ul><ul><ul><li>write(&quot;VERBOSE &quot;REPRODUCIENDO DIGITO $line[$i]&quot;&quot;); </li></ul></ul><ul><ul><li>read(); </li></ul></ul><ul><ul><li>write(&quot;SAY DIGITS $line[$i] &quot;&quot;&quot;); </li></ul></ul><ul><ul><li>read(); </li></ul></ul><ul><ul><li>sleep(1); </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>// Se cierran todos los handlers de archivos </li></ul></ul><ul><ul><li>fclose($in); </li></ul></ul><ul><ul><li>fclose($out); </li></ul></ul><ul><ul><li>fclose($stdlog); </li></ul></ul><ul><ul><li>exit; ?> </li></ul></ul>
    78. 78. AGI Ejemplo: Dicta numeros (3) <ul><li>Se relaciona el programa con una extensión para probarlo: </li></ul><ul><ul><ul><li>exten => 200,1,Answer(); </li></ul></ul></ul><ul><ul><ul><li>exten => 200,2,AGI(dicta.php|/tmp/numeros.txt) </li></ul></ul></ul><ul><ul><ul><li>exten => 200,3,Hangup() </li></ul></ul></ul>
    79. 79. CDR Call Detail Record
    80. 80. CDR <ul><li>El CDR es un archivo a manera de log que contiene información acerca de las llamadas, entre otros: </li></ul><ul><ul><ul><li>Origen, Destino, Intercambio de información, duración. </li></ul></ul></ul><ul><li>A partir del CDR se puede generar facturación. </li></ul><ul><li>Asterisk trabaja con CDR en algunos “formatos”: </li></ul><ul><ul><ul><ul><ul><li>Csv – archivos de texto con valores separados por coma </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Cdr SQLite – logs de CDR en la base de datos de SQLite </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Pgsql – logs de CDR en las bases de datos de PostgreSQL </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Odbc – logs de CDR a cualquier base de datos con soporte unixODBC </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Mysql – logs  de CDR en las bases de datos de MySQL </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Etc. </li></ul></ul></ul></ul></ul>
    81. 81. CDR <ul><li>Para trabajar el CDR utilizando un DB en MySQL: </li></ul><ul><ul><ul><li>yum install mysql* unixODBC-devel -y </li></ul></ul></ul><ul><ul><ul><li>service mysqld start </li></ul></ul></ul><ul><ul><ul><li>mysqladmin -u root password labtelecom09 </li></ul></ul></ul><ul><li>Ingresar al directorio donde se encuentran las fuentes de asterisk add-ons volver al menuselect y seleccionar soporte para MySQL. </li></ul><ul><li>mysql –p (con password de root) </li></ul>
    82. 82. CDR en MySQL DB <ul><li>Creación de la DB Asterisk y la tabla CDR en SQL. </li></ul>
    83. 83. CDR en MySQL DB <ul><li>Agregar indices y un identificador para los registros. </li></ul><ul><li>ALTER TABLE 'cdr' ADD 'uniqueid' VARCHAR(32) NOT NULL default ‘'; </li></ul><ul><li>ALTER TABLE 'cdr' ADD INDEX ( 'calldate' ); </li></ul><ul><li>ALTER TABLE 'cdr' ADD INDEX ( 'dst' ); </li></ul><ul><li>ALTER TABLE 'cdr' ADD INDEX ( 'accountcode' ); </li></ul><ul><li>En cdr_mysql.conf, nótese el password. </li></ul><ul><li>[global] </li></ul><ul><li>hostname=localhost </li></ul><ul><li>dbname=asterisk </li></ul><ul><li>password=labtelecom09 </li></ul><ul><li>user=root </li></ul>
    84. 84. CDR en MySQL DB <ul><li>Cargar los addons relacionados: </li></ul><ul><ul><ul><li>load app_addon_sql_mysql.so </li></ul></ul></ul><ul><ul><ul><li>load cdr_addon_mysql.so </li></ul></ul></ul><ul><li>Se pueden agregar en: archivo /etc/asterisk/modules.conf </li></ul><ul><ul><ul><li>load => cdr_addon_mysql.so </li></ul></ul></ul><ul><li>Reiniciamos el servicio de Asterisk y verificamos que el cdr para mysql este levantado: </li></ul><ul><ul><ul><ul><ul><li>CLI> restart now </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>CLI> cdr mysql status </li></ul></ul></ul></ul></ul><ul><li>Practica 7. </li></ul>
    85. 85. Análisis de Tráfico y Dimensionamiento Introducción.
    86. 86. Consideraciones de BW <ul><li>Asterisk permitia traducción de codecs. </li></ul><ul><li>Transcoding se reflejaba en el desempeño del sistema. </li></ul><ul><li>CODECS de buena calidad similar a PSTN: </li></ul>
    87. 87. Consideraciones de BW <ul><li>BW, Tamaños de Payload, PPS para algunos codecs: </li></ul><ul><li>Existen también medidas de BW para redes con VAD (Voice Activity Detection). </li></ul><ul><li>Implementaciones con VAD aseguran un ahorro de hasta el 35% de ancho de banda. </li></ul>
    88. 88. Consideraciones de BW <ul><li>Los silencios también se paquetizan. </li></ul>
    89. 89. Consideraciones de BW <ul><li>En la Red IP los protocolos agregan “headers” aumentando el tamaño de la trama con consecuencias en el requerimiento de ancho de banda. </li></ul>
    90. 90. Consideraciones de BW <ul><li>Por ejemplo para comparar un paquete en diferentes redes de datos. </li></ul><ul><li>Codec g.711 (64 Kbps) </li></ul><ul><ul><ul><ul><li>• Ethernet (Ethernet+IP+UDP+RTP+G.711) = 95.2 Kbps </li></ul></ul></ul></ul><ul><ul><ul><ul><li>• PPP (PPP+IP+UDP+RTP+G.711) = 82.4 Kbps </li></ul></ul></ul></ul><ul><ul><ul><ul><li>• Frame-Relay (FR+IP+UDP+RTP+G.711) = 82.8 Kbps </li></ul></ul></ul></ul><ul><li>Codec G.729 (8 Kbps) </li></ul><ul><ul><ul><ul><li>• Ethernet (Ethernet+IP+UDP+RTP+G.729) = 31.2 Kbps </li></ul></ul></ul></ul><ul><ul><ul><ul><li>• PPP (PPP+IP+UDP+RTP+G.729) = 26.4 Kbps </li></ul></ul></ul></ul><ul><ul><ul><ul><li>• Frame-Relay (FR+IP+UDP+RTP+G.729) = 26.8 Kbps </li></ul></ul></ul></ul><ul><li>Comprobar el costo del transcoding: </li></ul><ul><ul><ul><ul><li>CLI>core show translation </li></ul></ul></ul></ul>
    91. 91. Consideraciones de BW <ul><li>Packetizer VOIP Bandwidth Calculator permite realizar análisis como el anterior para diferentes tipos de datos. </li></ul><ul><li>Caracteristicas de la herramienta: </li></ul><ul><ul><ul><ul><li>De acuerdo al encabezado se van calculando los headers que se agregan en la trama. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Los retardos entre paquetes o las tramas por paquetes indican la paquetización. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>La tasa de paquetes (pps) permite dimensionar a los routers. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>http://www.bandcalc.com/ </li></ul></ul></ul></ul>
    92. 92. Dimensionamiento de Tráfico: <ul><li>Factores de Dimensionamiento: </li></ul><ul><ul><ul><li>Número de Líneas. </li></ul></ul></ul><ul><ul><ul><li>Ancho de banda requerido al ISP. </li></ul></ul></ul><ul><ul><ul><li>Número de canales simultáneos en Asterisk. </li></ul></ul></ul><ul><li>Solución: </li></ul><ul><ul><ul><li>1. Método basado en Simplificaciones: </li></ul></ul></ul><ul><ul><ul><ul><li>Estimar el número de llamadas por usuario. </li></ul></ul></ul></ul>
    93. 93. Método de Simplificaciones <ul><li>Ejemplo de Dimensionamiento: </li></ul>H B1 B2
    94. 94. Método de Simplificaciones <ul><li>Se debe dimensionar: </li></ul><ul><ul><ul><li>Numero de troncales E1. </li></ul></ul></ul><ul><ul><ul><li>Ancho de banda requerido para la red Frame Relay. </li></ul></ul></ul><ul><li>El número de Líneas: 165 = 120+30+15 </li></ul><ul><li>Asumiendo que se utilizará un canal cada 5 usuarios: 165/5=33 Líneas. </li></ul><ul><li>Usando este criterio y la herramienta de Cálculo tenemos: </li></ul><ul><ul><ul><li>Ancho de banda para Ramal 1 (B1): 26.8*6=160.8Kbps </li></ul></ul></ul><ul><ul><ul><li>Ancho de banda para Ramal 2 (B2): 26.8*3=80.4Kbps </li></ul></ul></ul>
    95. 95. Método de Erlang <ul><li>Erlang: </li></ul><ul><ul><ul><ul><li>Ideó un método para calcular el número de líneas en una troncal. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Erlang es una medida de tráfico. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Describe el volumen de tráfico en una hora. </li></ul></ul></ul></ul><ul><li>Ejemplo: En una hora se realizan 20 llamadas a un promedio de 5 minutos por llamada: </li></ul><ul><ul><ul><ul><li>Número total de minutos: 20x5=100 minutos de tráfico. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>100min/60min = 1.66 ERLANGS. </li></ul></ul></ul></ul><ul><li>Método experimental para dimensionamiento, se puede basar en CDR. </li></ul>
    96. 96. Método de Erlang <ul><li>Erlang B: </li></ul><ul><ul><ul><ul><li>Permite calcular el número de líneas en una troncal. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Las llamadas arriban aleatoriamente con distribución Poisson. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Las llamadas en bloqueo liberan sus canales inmediatamente. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>BHT (Busy Hour Traffic) = 17% de minutos por día de llamadas. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>BHT se calcula experimentalmente con un “call logger” o con el método de simplificaciones. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>GoS (Grade of Service): probabilidad que las llamadas caigan en bloqueo. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>GoS se puede reemplazar por 0.05 o 0.01 </li></ul></ul></ul></ul>
    97. 97. Método de Erlang <ul><li>Datos del método experimental: </li></ul><ul><ul><ul><li>H  B1: 2000 minutos, BHT aprox 300min </li></ul></ul></ul><ul><ul><ul><ul><ul><li>5 Erlangs </li></ul></ul></ul></ul></ul><ul><ul><ul><li>H  B2: 1000 minutos, BHT aprox 170min </li></ul></ul></ul><ul><ul><ul><ul><ul><li>2.83 Erlangs </li></ul></ul></ul></ul></ul><ul><ul><ul><li>B1  B2: 0 minutos, BHT = 0 min </li></ul></ul></ul><ul><ul><ul><li>GoS = 0.01 (1% de Pérdidas) </li></ul></ul></ul><ul><li>Con estos datos usaremos un Erlang B Online Calculator: </li></ul><ul><ul><ul><ul><ul><li>http://www.erlang.com </li></ul></ul></ul></ul></ul>
    98. 98. Método de Erlang <ul><li>Resultados: </li></ul><ul><ul><ul><ul><li>H  B1 = 11 Líneas </li></ul></ul></ul></ul><ul><ul><ul><ul><li>H  B2 = 8 Líneas </li></ul></ul></ul></ul><ul><li>Con los requerimientos de BW ya calculados: </li></ul><ul><ul><ul><ul><li>BW para B1: 26.8x11 = 294.8 Kbps. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>BW para B1: 26.8x8 = 214.8 Kbps. </li></ul></ul></ul></ul>BW Simplificado BW Erlang 160.8 Kbps 294.8 Kbps 80.4 Kbps 214.8 Kbps
    99. 99. RTP Header Compression <ul><li>Se pueden reducir requerimientos de BW usando: </li></ul><ul><li>Compresión de la Cabecera RTP (RTP Header Compression): </li></ul><ul><ul><ul><li>Estandar IETF RFC 2508. </li></ul></ul></ul><ul><ul><ul><li>Disponible en las calculadoras revisadas. </li></ul></ul></ul><ul><ul><ul><li>Se aplica a redes PPP y Frame Relay. </li></ul></ul></ul><ul><ul><ul><li>Routers deben soportar el RFC. </li></ul></ul></ul><ul><ul><ul><li>Realice los cálculos usando RHC. </li></ul></ul></ul>
    100. 100. IAX2 <ul><li>Inter Asterisk eXchange 2: </li></ul><ul><ul><ul><li>Conecta nativamente Asterisk boxes. </li></ul></ul></ul><ul><ul><ul><li>No necesita soporte de los Routers. </li></ul></ul></ul><ul><ul><ul><li>Tiene un Modo Troncal nativo. </li></ul></ul></ul><ul><ul><ul><li>Reutiliza las mismas cabeceras en la 2da llamada. </li></ul></ul></ul><ul><li>Ejemplo: </li></ul><ul><ul><ul><li>Capa de Enlace: PPP. </li></ul></ul></ul><ul><ul><ul><li>RTP común (RFC 3550) </li></ul></ul></ul><ul><ul><ul><li>Codificando G.729 a 8kbps  20ms de paquete 20 bytes. </li></ul></ul></ul>
    101. 101. IAX2
    102. 102. IAX2 <ul><li>De la Primera Trama: </li></ul><ul><ul><ul><li>20 Bytes de Payload (Voz codificada). </li></ul></ul></ul><ul><ul><ul><li>58 Bytes de Cabeceras. </li></ul></ul></ul><ul><ul><ul><li>20+58=78 Bytes de la trama completa a 31.2Kbps. </li></ul></ul></ul><ul><ul><ul><li>20 Bytes  8 Kbps, 78 Bytes  31.2 Kbps. </li></ul></ul></ul><ul><li>Para la Segunda Trama: </li></ul><ul><ul><ul><li>No se agregan nuevas “cabeceras”. </li></ul></ul></ul><ul><ul><ul><li>Se agregan mini tramas IAX2. </li></ul></ul></ul><ul><ul><ul><li>40 Bytes de Voz codificada. </li></ul></ul></ul>
    103. 103. IAX2 <ul><ul><ul><li>58 Bytes de Cabeceras, 12 son IAX2 Header. </li></ul></ul></ul><ul><ul><ul><li>8 bytes Miniframes, 4 bytes para cada Payload. </li></ul></ul></ul><ul><ul><ul><li>58+8+40 = 106 Bytes de la trama completa a 42.4 Kbps. </li></ul></ul></ul><ul><ul><ul><li>20 Bytes  8 Kbps, 106 Bytes  42.4 Kbps. </li></ul></ul></ul><ul><ul><ul><li>42.2 Kbps carga dos llamadas: 21.1kbps por llamada. </li></ul></ul></ul><ul><ul><ul><li>Agregando 1 Miniframe (4 bytes) a una llamada dan: 82Bytes  32.8 Kbps. </li></ul></ul></ul><ul><ul><ul><li>42.4-32.8 = 9.6Kbps por llamada adicional a partir de la 2da. </li></ul></ul></ul>
    104. 104. IAX2 <ul><li>Re cálculo de BW para las troncales luego de reducción IAX2: </li></ul><ul><ul><ul><li>La primera llamada usa el BW completo 31.2Kbps. </li></ul></ul></ul><ul><ul><ul><li>La segunda usa el incremento 9.6Kbps, etc. </li></ul></ul></ul><ul><ul><ul><li>B1 (11 Lineas): </li></ul></ul></ul><ul><ul><ul><ul><ul><li>31.2 + (11-1) *9.6Kbps = 127.2 Kbps </li></ul></ul></ul></ul></ul><ul><ul><ul><li>B2 (8 Lineas): </li></ul></ul></ul><ul><ul><ul><ul><ul><li>31.2 + (8-1) *9.6Kbps = 98.4 Kbps </li></ul></ul></ul></ul></ul>
    105. 105. Aumento del Voice Payload <ul><li>La solución a simple vista debería ser aumentar el tamaño del Payload de Voz: </li></ul><ul><ul><ul><li>Evita que se agreguen cabeceras. </li></ul></ul></ul><ul><ul><ul><li>Transmite en una misma trama mayor información. </li></ul></ul></ul><ul><ul><ul><li>Aumenta considerablemente la vulnerabilidad a la latencia. </li></ul></ul></ul><ul><ul><ul><li>Reduce el consumo de BW: </li></ul></ul></ul><ul><ul><ul><ul><li>Siguiendo los cálculos realizados anteriormente: </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Payload de Voz con 60Bytes. </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>BW: 16.05 Kbps con 138 Bytes(Payload+Headers) </li></ul></ul></ul></ul></ul>
    106. 106. Aumento del Voice Payload
    107. 107. Aumento del Voice Payload <ul><li>En Asterisk se puede cambiar el tamaño usando la variable de canal ALLOW. </li></ul><ul><ul><ul><ul><ul><li>allow = ulaw:30 </li></ul></ul></ul></ul></ul>
    108. 108. DUNDi Distributed Universal Number Discovery
    109. 109. DUNDi <ul><li>Sistema P2P que permite localizar gateways para servicios telefónicos. </li></ul><ul><li>No hay autoridad central que se encargue de la administración. </li></ul><ul><li>Es completamente distribuido por su naturaleza P2P. </li></ul><ul><li>Se puede considerar como un directorio telefónico. </li></ul>
    110. 110. DUNDi en Asterisk: dundi.conf <ul><li>[general] </li></ul><ul><li>port=4520 ; puerto mediante el cual se comunica el protocolo dundi </li></ul><ul><li>entityid=00:0C:29:0C:AB:C2 ; identificador de mi Asterisk en la nube dundi, MAC ; de la tarjeta de red eth0 </li></ul><ul><li>cachetime=5 ; Tiempo que permanece en cache la ruta para ir a las extensiones ; aprendidas mediante dundi </li></ul><ul><li>ttl=12 ; Máx. No. de saltos que se harán buscando el destino </li></ul><ul><li>autokill=yes ; si al preguntar a un par, el ACK tarda más de 2 segundos, se cancela la búsqueda </li></ul><ul><li>; a través de ese peer; es útil cuando no está activo el peer o cuando hay una conexión mala hacia el peer </li></ul>
    111. 111. Contextos DUNDi <ul><li>Definen que contextos de extensions.conf serán accesados por DUNDi. </li></ul><ul><li>nombre_contexto => contexto_extensions,peso,proto,destino[,opciones]] </li></ul><ul><li>nombre_contexto: Nombre del contexto al que se hace referencia en una petición dundi. </li></ul><ul><li>contexto_extensions: Nombre del contexto en el extensions.conf, donde se buscarán los números que son solicitados en la nube dundi. </li></ul><ul><li>peso: Deberá ser 0 en caso de que nuestro conmutador publique directamente los números, en caso contrario, deberá tener el valor del número de saltos que necesita para llevar al destino. </li></ul><ul><li>proto: Cualquiera de los protocolos IP (sip, iax,323) con el cual el peer remoto se debe comunicar con nosotros. </li></ul><ul><li>destino: Es la información que se entrega al peer para que pueda llegar al número que está marcando. </li></ul>
    112. 112. Contextos DUNDi <ul><li>opciones: Pueden ser varios argumentos los cuales indican el comportamiento que se tendrá cuando no tengamos nosotros el número que se está solicitando. </li></ul><ul><ul><ul><ul><li>nounsolicited . No se permiten llamadas que no sean solicitadas. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>nocomunsolicited . No se permiten llamadas comerciales que no sean solicitadas. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>nopartial . No se permiten búsquedas para patrones parciales. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>residential, comercial, mobile . Le indica a los pares qué tipo de números son los que se están publicando a través de este contexto. </li></ul></ul></ul></ul>
    113. 113. Autenticación en DUNDi <ul><li>Los peers se autentican mediante llave pública/privada. </li></ul><ul><ul><ul><ul><li>cd /var/lib/asterisk/keys </li></ul></ul></ul></ul><ul><ul><ul><ul><li>astgenkey -n dundi_ext_44xx </li></ul></ul></ul></ul><ul><ul><ul><ul><li>yum -y install php </li></ul></ul></ul></ul><ul><ul><ul><ul><li>cp dundi_ext_44xx.pub /var/www/html </li></ul></ul></ul></ul><ul><ul><ul><ul><li>service httpd start </li></ul></ul></ul></ul><ul><ul><ul><ul><li>wget -c http://132.248.175.90/dundi_principal.pub </li></ul></ul></ul></ul><ul><ul><ul><ul><li>CLI>reload res_crypto.so </li></ul></ul></ul></ul><ul><ul><ul><ul><li>CLI>reload pbx_dundi.so </li></ul></ul></ul></ul><ul><ul><ul><ul><li>CLI>dundi lookup 4400@priv </li></ul></ul></ul></ul>

    ×