mirror of https://github.com/tLDP/LDP
1252 lines
39 KiB
Plaintext
1252 lines
39 KiB
Plaintext
<!doctype linuxdoc system>
|
|
|
|
<!-- LyX 1.1 created this file. For more info see http://www.lyx.org/ -->
|
|
<article>
|
|
<title>
|
|
VoIP Howto
|
|
</title>
|
|
<author>
|
|
Roberto Arcomano berto@fatamorgana.com
|
|
</author>
|
|
<date>
|
|
v 1.5 - June 2, 2002
|
|
</date>
|
|
<abstract>
|
|
Voice Over IP is a new communication means that let you telephone with
|
|
Internet at almost null cost. How this is possible, what systems are used,
|
|
what is the standard, all that is covered by this Howto. Web site <url url="http://www.fatamorgana.com/bertolinux" name="http://www.fatamorgana.com/bertolinux"> contains
|
|
latest version of this document.
|
|
</abstract>
|
|
<toc>
|
|
<sect>
|
|
Introduction
|
|
<sect1>
|
|
Introduction
|
|
<p>
|
|
This document explains about VoIP systems. Recent happenings like Internet
|
|
diffusion at low cost, new integration of dedicated voice compression processors,
|
|
have changed common user requirements allowing VoIP standards to diffuse. This
|
|
howto tries to define some basic lines of VoIP architecture.
|
|
</p>
|
|
<p>
|
|
Please send suggestions and critics to <url url="mailto:berto@fatamorgana.com" name="my email address">
|
|
</p>
|
|
<sect1>
|
|
Copyright
|
|
<p>
|
|
Copyright (C) 2000,2001 Roberto Arcomano. This document is free; you can
|
|
redistribute it and/or modify it under the terms of the GNU General Public
|
|
License as published by the Free Software Foundation; either version 2 of the
|
|
License, or (at your option) any later version. This document is distributed
|
|
in the hope that it will be useful, but
|
|
</p>
|
|
<p>
|
|
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
more details. You can get a copy of the GNU GPL <url url="http://www.gnu.org/copyleft/gpl.html" name="here">
|
|
</p>
|
|
<sect1>
|
|
Translations
|
|
<p>
|
|
If you want to translate this document you are free, you only have to:
|
|
|
|
</p>
|
|
<p>
|
|
<enum>
|
|
<item>
|
|
Check that another version of it doesn't already exist at your local LDP
|
|
<item>
|
|
Maintain all 'Introduction' section (including 'Introduction', 'Copyright',
|
|
'Translations', 'Credits').
|
|
</enum>
|
|
</p><p>
|
|
Warning! You don't have to translate TXT or HTML file, you have to modify
|
|
LYX or SGML file, so that it is possible to convert it all other formats (TXT,
|
|
HTML, RIFF, etc.).
|
|
</p>
|
|
<p>
|
|
No need to ask me to translate! You just have to let me know (if you want)
|
|
about your translation.
|
|
</p>
|
|
<p>
|
|
Thank you for your translation!
|
|
</p>
|
|
<sect1>
|
|
Credits
|
|
<p>
|
|
Thanks to <url url="http://www.fatamorgana.com" name="Fatamorgana Computers"> for hardware equipment and experimental opportunity.
|
|
</p>
|
|
<p>
|
|
Thanks to <url url="http://www.linuxdoc.org" name="Linux Documentation Project"> for publishing and uploading my document in a very quickly fashion.
|
|
</p>
|
|
<p>
|
|
Thanks to <url url="mailto:dprice@intercorp.com.au" name="David Price"> for his support.
|
|
</p>
|
|
<sect>
|
|
Background
|
|
<sect1>
|
|
The past
|
|
<p>
|
|
More than 30 years ago Internet didn't exist. Interactive communications
|
|
were only made by telephone at PSTN line cost.
|
|
</p>
|
|
<p>
|
|
Data exchange was expansive (for a long distance) and no one had been thinking
|
|
to video interactions (there was only television that is not interactive, as
|
|
known).
|
|
</p>
|
|
<sect1>
|
|
Yesterday
|
|
<p>
|
|
Few years ago we saw appearing some interesting things: PCs to large masses,
|
|
new technologies to communicate like cellular phones and finally the great
|
|
net: Internet; people begun to communicate with new services like email, chat,
|
|
etc. and business reborned with the web allowing people buy with a "click".
|
|
</p>
|
|
<sect1>
|
|
Today
|
|
<p>
|
|
Today we can see a real revolution in communication world: everybody begins
|
|
to use PCs and Internet for job and free time to communicate each other, to
|
|
exchange data (like images, sounds, documents) and, sometimes, to talk each
|
|
other using applications like Netmeeting or Internet Phone. Particularly starts
|
|
to diffusing a common idea that could be the future and that can allow real-time
|
|
vocal communication: VoIP.
|
|
</p>
|
|
<sect1>
|
|
The future
|
|
<p>
|
|
We cannot know what is the future, but we can try to image it with many
|
|
computers, Internet almost everywhere at high speed and people talking (audio
|
|
and video) in a real time fashion. We only need to know what will be the means
|
|
to do this: UMTS, VoIP (with video extension) or other? Anyway we can notice
|
|
that Internet has grown very much in the last years, it is free (at least as
|
|
international means) and could be the right communication media for future.
|
|
</p>
|
|
<sect>
|
|
Overview
|
|
<sect1>
|
|
What is VoIP?
|
|
<p>
|
|
VoIP stands for 'V'oice 'o'ver 'I'nternet 'P'rotocol. As the term says
|
|
VoIP tries to let go voice (mainly human) through IP packets and, in definitive
|
|
through Internet. VoIP can use accelerating hardware to achieve this purpose
|
|
and can also be used in a PC environment.
|
|
</p>
|
|
<sect1>
|
|
How does it work?
|
|
<p>
|
|
Many years ago we discovered that sending a signal to a remote destination
|
|
could have be done also in a digital fashion: before sending it we have to
|
|
digitalize it with an ADC (analog to digital converter), transmit it, and at
|
|
the end transform it again in analog format with DAC (digital to analog converter)
|
|
to use it.
|
|
</p>
|
|
<p>
|
|
VoIP works like that, digitalizing voice in data packets, sending them
|
|
and reconverting them in voice at destination.
|
|
</p>
|
|
<p>
|
|
Digital format can be better controlled: we can compress it, route it,
|
|
convert it to a new better format, and so on; also we saw that digital signal
|
|
is more noise tolerant than the analog one (see GSM vs TACS).
|
|
</p>
|
|
<p>
|
|
TCP/IP networks are made of IP packets containing a header (to control
|
|
communication) and a payload to transport data: VoIP use it to go across the
|
|
network and come to destination.
|
|
</p>
|
|
<p>
|
|
<verb>
|
|
Voice (source) - - ADC - - - - Internet - - - DAC - - Voice (dest)
|
|
</verb>
|
|
</p><sect1>
|
|
What is the advantages using VoIP rather PSTN?
|
|
<p>
|
|
When you are using PSTN line, you typically pay for time used to a PSTN
|
|
line manager company: more time you stay at phone and more you'll pay. In addition
|
|
you couldn't talk with other that one person at a time.
|
|
</p>
|
|
<p>
|
|
In opposite with VoIP mechanism you can talk all the time with every person
|
|
you want (the needed is that other person is also connected to Internet at
|
|
the same time), as far as you want (money independent) and, in addition, you
|
|
can talk with many people at the same time.
|
|
</p>
|
|
<p>
|
|
If you're still not persuaded you can consider that, at the same time,
|
|
you can exchange data with people are you talking with, sending images, graphs
|
|
and videos.
|
|
</p>
|
|
<sect1>
|
|
Then, why everybody doesn't use it yet?
|
|
<p>
|
|
Unfortunately we have to report some problem with the integration between
|
|
VoIP architecture and Internet. As you can easy imagine, voice data communication
|
|
must be a real time stream (you couldn't speak, wait for many seconds, then
|
|
hear other side answering): this is in contrast with the Internet heterogeneous
|
|
architecture that can be made of many routers (machines that route packets),
|
|
about 20-30 or more and can have a very high round trip time (RTT), so we need
|
|
to modify something to get it properly working.
|
|
</p>
|
|
<p>
|
|
In next sections we'll try to understand how to solve this great problem.
|
|
In general we know that is very difficult to guarantee a bandwidth in Internet
|
|
for VoIP application.
|
|
</p>
|
|
<sect>
|
|
Technical info about VoIP
|
|
<p>
|
|
Here we see some important info about VoIP, needed to understand it.
|
|
</p>
|
|
<sect1>
|
|
Overview on a VoIP connection
|
|
<p>
|
|
To setup a VoIP communication we need:
|
|
</p>
|
|
<p>
|
|
<enum>
|
|
<item>
|
|
First the ADC to convert analog voice to digital signals (bits)
|
|
<item>
|
|
Now the bits have to be compressed in a good format for transmission: there
|
|
is a number of protocols we'll see after.
|
|
<item>
|
|
Here we have to insert our voice packets in data packets using a real-time
|
|
protocol (typically RTP over UDP over IP)
|
|
<item>
|
|
We need a signaling protocol to call users: ITU-T H323 does that.
|
|
<item>
|
|
At RX we have to disassemble packets, extract datas, then convert them
|
|
to analog voice signals and send them to sound card (or phone)
|
|
<item>
|
|
All that must be done in a real time fashion cause we cannot waiting for
|
|
too long for a vocal answer! (see QoS section)
|
|
</enum>
|
|
<p>
|
|
<verb>
|
|
|
|
Base architecture
|
|
|
|
Voice )) ADC - Compression Algorithm - Assembling RTP in TCP/IP -----
|
|
----> |
|
|
<---- |
|
|
Voice (( DAC - Decompress. Algorithm - Disass. RTP from TCP/IP -----
|
|
|
|
</verb>
|
|
</p><sect1>
|
|
Analog to Digital Conversion
|
|
<p>
|
|
This is made by hardware, typically by card integrated ADC.
|
|
</p>
|
|
<p>
|
|
Today every sound card allows you convert with 16 bit a band of 22050 Hz
|
|
(for sampling it you need a freq of 44100 Hz for Nyquist Principle) obtaining
|
|
a throughput of 2 bytes * 44100 (samples per second) = 88200 Bytes/s, 176.4
|
|
kBytes/s for stereo stream.
|
|
</p>
|
|
<p>
|
|
For VoIP we needn't such a throughput (176kBytes/s) to send voice packet:
|
|
next we'll see other coding used for it.
|
|
</p>
|
|
<sect1>
|
|
Compression Algorithms
|
|
<p>
|
|
Now that we have digital data we may convert it to a standard format that
|
|
could be quickly transmitted.
|
|
</p>
|
|
<p>
|
|
<verb>
|
|
PCM, Pulse Code Modulation, Standard ITU-T G.711
|
|
</verb>
|
|
<p>
|
|
<itemize>
|
|
<item>
|
|
Voice bandwidth is 4 kHz, so sampling bandwidth has to be 8 kHz (for Nyquist).
|
|
|
|
<item>
|
|
We represent each sample with 8 bit (having 256 possible values).
|
|
<item>
|
|
Throughput is 8000 Hz *8 bit = 64 kbit/s, as a typical digital phone line.
|
|
<item>
|
|
In real application mu-law (North America) and a-law (Europe) variants
|
|
are used which code analog signal a logarithmic scale using 12 or 13 bits instead
|
|
of 8 bits (see Standard ITU-T G.711).
|
|
</itemize>
|
|
<p>
|
|
<verb>
|
|
ADPCM, Adaptive differential PCM, Standard ITU-T G.726
|
|
</verb>
|
|
</p><p>
|
|
It converts only the difference between the actual and the previous voice
|
|
packet requiring 32 kbps (see Standard ITU-T G.726).
|
|
</p>
|
|
<p>
|
|
<verb>
|
|
LD-CELP, Standard ITU-T G.728
|
|
CS-ACELP, Standard ITU-T G.729 and G.729a
|
|
MP-MLQ, Standard ITU-T G.723.1, 6.3kbps, Truespeech
|
|
ACELP, Standard ITU-T G.723.1, 5.3kbps, Truespeech
|
|
LPC-10, able to reach 2.5 kbps!!
|
|
</verb>
|
|
</p><p>
|
|
This last protocols are the most important cause can guarantee a very low
|
|
minimal band using source coding; also G.723.1 codecs have a very high MOS
|
|
(Mean Opinion Score, used to measure voice fidelity) but attention to elaboration
|
|
performance required by them, up to 26 MIPS!
|
|
</p>
|
|
<sect1>
|
|
RTP Real Time Transport Protocol
|
|
<p>
|
|
Now we have the raw data and we want to encapsulate it into TCP/IP stack.
|
|
We follow the structure:
|
|
</p>
|
|
<p>
|
|
<verb>
|
|
VoIP data packets
|
|
RTP
|
|
UDP
|
|
IP
|
|
I,II layers
|
|
</verb>
|
|
</p><p>
|
|
VoIP data packets live in RTP (Real-Time Transport Protocol) packets which
|
|
are inside UDP-IP packets.
|
|
</p>
|
|
<p>
|
|
Firstly, VoIP doesn't use TCP because it is too heavy for real time applications,
|
|
so instead a UDP (datagram) is used.
|
|
</p>
|
|
<p>
|
|
Secondly, UDP has no control over the order in which packets arrive at
|
|
the destination or how long it takes them to get there (datagram concept).
|
|
Both of these are very important to overall voice quality (how well you can
|
|
understand what the other person is saying) and conversation quality (how easy
|
|
it is to carry out a conversation). RTP solves the problem enabling the receiver
|
|
to put the packets back into the correct order and not wait too long for packets
|
|
that have either lost their way or are taking too long to arrive (we don't
|
|
need every single voice packet, but we need a continuous flow of many of them
|
|
and ordered).
|
|
</p>
|
|
<p>
|
|
<verb>
|
|
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 | sequence number |
|
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
| timestamp |
|
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
| synchronization source (SSRC) identifier |
|
|
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
|
|
| contributing source (CSRC) identifiers |
|
|
| .... |
|
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
</verb>
|
|
</p><p>
|
|
Where:
|
|
</p>
|
|
<p>
|
|
<itemize>
|
|
<item>
|
|
V indicates the version of RTP used
|
|
<item>
|
|
P indicates the padding, a byte not used at bottom packet to reach the
|
|
parity packet dimension
|
|
<item>
|
|
X is the presence of the header extension
|
|
<item>
|
|
CC field is the number of CSRC identifiers following the fixed header.
|
|
CSRC field are used, for example, in conference case.
|
|
<item>
|
|
M is a marker bit
|
|
<item>
|
|
PT payload type
|
|
</itemize>
|
|
</p><p>
|
|
For a complete description of RTP protocol and all its applications see
|
|
relative RFCs<url url="http://www.ietf.org/rfc/rfc1889.txt" name="1889"> and <url url="http://www.ietf.org/rfc/rfc1890.txt" name="1890">.
|
|
</p>
|
|
<sect1>
|
|
RSVP
|
|
<p>
|
|
There are also other protocols used in VoIP, like RSVP, that can manage
|
|
Quality of Service (QoS).
|
|
</p>
|
|
<p>
|
|
RSVP is a signaling protocol that requests a certain amount of bandwidth
|
|
and latency in every network hop that supports it.
|
|
</p>
|
|
<p>
|
|
For detailed info about RSVP see the<url url="http://www.ietf.org/rfc/rfc2205.txt?number=2205" name="RFC 2205">
|
|
</p>
|
|
<sect1>
|
|
Quality of Service (QoS)
|
|
<p>
|
|
We said many times that VoIP applications require a real-time data streaming
|
|
cause we expect an interactive data voice exchange.
|
|
</p>
|
|
<p>
|
|
Unfortunately, TCP/IP cannot guarantee this kind of purpose, it just make
|
|
a "best effort" to do it. So we need to introduce tricks and policies that could
|
|
manage the packet flow in EVERY router we cross.
|
|
</p>
|
|
<p>
|
|
So here are:
|
|
</p>
|
|
<p>
|
|
<enum>
|
|
<item>
|
|
TOS field in IP protocol to describe type of service: high values indicate
|
|
low urgency while more and more low values bring us more and more real-time
|
|
urgency
|
|
<item>
|
|
Queuing packets methods:
|
|
<enum>
|
|
<item>
|
|
FIFO (First in First Out), the more stupid method that allows passing packets
|
|
in arrive order.
|
|
<item>
|
|
WFQ (Weighted Fair Queuing), consisting in a fair passing of packets (for
|
|
example, FTP cannot consume all available bandwidth), depending on kind of
|
|
data flow, typically one packet for UDP and one for TCP in a fair fashion.
|
|
<item>
|
|
CQ (Custom Queuing), users can decide priority.
|
|
<item>
|
|
PQ (Priority Queuing), there is a number (typically 4) of queues with a
|
|
priority level each one: first, packets in the first queue are sent, then (when
|
|
first queue is empty) starts sending from the second one and so on.
|
|
<item>
|
|
CB-WFQ (Class Based Weighted Fair Queuing), like WFQ but, in addition,
|
|
we have classes concept (up to 64) and the bandwidth value associated for each
|
|
one.
|
|
</enum>
|
|
<item>
|
|
Shaping capability, that allows to limit the source to a fixed bandwidth
|
|
in:
|
|
<enum>
|
|
<item>
|
|
download
|
|
<item>
|
|
upload
|
|
</enum>
|
|
<item>
|
|
Congestion Avoidance, like RED (Random Early Detection).
|
|
</enum>
|
|
</p><p>
|
|
For an exhaustive information about QoS see <url url="http://www.ietf.org/html.charters/diffserv-charter.html" name="Differentiated Services"> at IETF.
|
|
</p>
|
|
<sect1>
|
|
H323 Signaling Protocol
|
|
<p>
|
|
H323 protocol is used, for example, by Microsoft Netmeeting to make VoIP
|
|
calls.
|
|
</p>
|
|
<p>
|
|
This protocol allow a variety of elements talking each other:
|
|
</p>
|
|
<p>
|
|
<enum>
|
|
<item>
|
|
Terminals, clients that initialize VoIP connection. Although terminals
|
|
could talk together without anyone else, we need some additional elements for
|
|
a scalable vision.
|
|
<item>
|
|
Gatekeepers, that essentially operate:
|
|
<enum>
|
|
<item>
|
|
address translation service, to use names instead IP addresses
|
|
<item>
|
|
admission control, to allow or deny some hosts or some users
|
|
<item>
|
|
bandwidth management
|
|
</enum>
|
|
<item>
|
|
Gateways, points of reference for conversion TCP/IP - PSTN.
|
|
<item>
|
|
Multipoint Control Units (MCUs) to provide conference.
|
|
<item>
|
|
Proxies Server also are used.
|
|
</enum>
|
|
</p><p>
|
|
h323 allows not only VoIP but also video and data communications.
|
|
</p>
|
|
<p>
|
|
Concerning VoIP, h323 can carry audio codecs G.711, G.722, G.723, G.728
|
|
and G.729 while for video it supports h261 and h263.
|
|
</p>
|
|
<p>
|
|
More info about h323 is available at <url url="http://www.openh323.org/standards.html" name="Openh323 Standards">, at <url url="http://www.cs.columbia.edu/~hgs/rtp/h323.html" name="this h323 web site"> and at its standard description:
|
|
<url url="http://www.itu.int/itudoc/itu-t/rec/h/" name="ITU H-series Recommendations">.
|
|
</p>
|
|
<p>
|
|
You can find it implemented in various application software like <url url="http://www.microsoft.com" name="Microsoft Netmeeting">, <url url="http://www.net2phone.com" name="Net2Phone">, <url url="http://www.dialpad.com" name="DialPad">,
|
|
... and also in freeware products you can find at <url url="http://www.openh323.org" name="Openh323 Web Site">.
|
|
</p>
|
|
<sect>
|
|
Requirement
|
|
<sect1>
|
|
Hardware requirement
|
|
<p>
|
|
To create a little VoIP system you need the following hardware:
|
|
</p>
|
|
<p>
|
|
<enum>
|
|
<item>
|
|
PC 386 or more
|
|
<item>
|
|
Sound card, full duplex capable
|
|
<item>
|
|
a network card or connection to internet or other kind of interface to
|
|
allow communication between 2 PCs
|
|
</enum>
|
|
</p><p>
|
|
All that has to be present twice to simulate a standard communication.
|
|
</p>
|
|
<p>
|
|
The tool above are the minimal requirement for a VoIP connection: next
|
|
we'll see that we should (and in Internet we must) use more hardware to do
|
|
the same in a real situation.
|
|
</p>
|
|
<p>
|
|
Sound card has be full duplex unless we couldn't hear anything while speaking!
|
|
</p>
|
|
<p>
|
|
As additional you can use hardware cards (see next) able to manage data
|
|
stream in a compressed format (see Par 4.3).
|
|
</p>
|
|
<sect1>
|
|
Hardware accelerating cards
|
|
<p>
|
|
We can use special cards with hardware accelerating capability. Two of
|
|
them (and also the only ones directly managed by the Linux kernel at this moment)
|
|
are the
|
|
</p>
|
|
<p>
|
|
<enum>
|
|
<item>
|
|
Quicknet PhoneJack
|
|
<item>
|
|
Quicknet LineJack
|
|
<item>
|
|
VoiceTronix V4PCI
|
|
<item>
|
|
VoiceTronix VPB4
|
|
<item>
|
|
VoiceTronix VPB8L
|
|
</enum>
|
|
</p><p>
|
|
Quicknet PhoneJack is a sound card that can use standard algorithms to
|
|
compress audio stream like G723.1 (section 4.3) down to 4.1 Kbps rate.
|
|
</p>
|
|
<p>
|
|
It can be connected directly to a phone (POTS port) or a couple mic-speaker.
|
|
</p>
|
|
<p>
|
|
It has a ISA or PCI connector bus.
|
|
</p>
|
|
<p>
|
|
Quicknet LineJack works like PhoneJack with some addition features (see
|
|
next).
|
|
</p>
|
|
<p>
|
|
VoiceTronix V4PCI is a PCI card pretty like Quicknet LineJack but with
|
|
4 phone ports
|
|
</p>
|
|
<p>
|
|
VoiceTronix VPB4 is a ISA card equivalent to V4PCI.
|
|
</p>
|
|
<p>
|
|
VoiceTronix VPB8L is a logging card with 8 ports.
|
|
</p>
|
|
<p>
|
|
For more info see <url url="http://www.quicknet.net" name="Quicknet web site"> and <url url="http://www.voicetronix.com.au" name="VoiceTronix web site">
|
|
</p>
|
|
<sect1>
|
|
Hardware gateway cards
|
|
<p>
|
|
Quicknet LineJack and VoiceTronix cards can be connected to a PSTN line
|
|
allowing VoIP gateway feature.
|
|
</p>
|
|
<p>
|
|
Then you'll need a software to manage it (see after).
|
|
</p>
|
|
<sect1>
|
|
Software requirement
|
|
<p>
|
|
We can choose what O.S. to use:
|
|
</p>
|
|
<p>
|
|
<enum>
|
|
<item>
|
|
Win9x
|
|
<item>
|
|
Linux
|
|
</enum>
|
|
</p><p>
|
|
Under Win9x we have Microsoft Netmeeting, Internet Phone, DialPad or others
|
|
or Internet Switchboard (from <url url="http://www.quicknet.net" name="Quicknet web site">) for Quicknet cards.
|
|
</p>
|
|
<p>
|
|
Warning!!: Latest Quicknet cards using Swithboard (older version too) NEED
|
|
to be connected to Internet to get working for managing Microtelco account
|
|
(not free of charge), so if you plan to remain isolated from Internet you need
|
|
to install <url url="http://www.openh323.org" name="OpenH323 software">.
|
|
</p>
|
|
<p>
|
|
For VoiceTronix cards you can find software at <url url="http://www.voicetronix.com.au" name="VoiceTronix web site">
|
|
</p>
|
|
<p>
|
|
Under Linux we have free software <url url="http://www.gnomemeeting.org" name="GnomeMeeting">, a clone of Microsoft Netmeeting, while
|
|
in console mode we use (also free software) applications from <url url="http://www.openh323.org" name="OpenH323"> web site: simph323
|
|
or ohphone that can also work with Quicknet accelerating hardware.
|
|
</p>
|
|
<p>
|
|
Attention: all Openh323 source code has to be compiled in a user directory
|
|
(if not it is necessary to change some environment variable). You are warned
|
|
that compiling time could be very high and you could need a lot of RAM to make
|
|
it in a decent time.
|
|
</p>
|
|
<sect1>
|
|
Gateway software
|
|
<p>
|
|
To manage gateway feature (join TCP/IP VoIP to PSTN lines) you need some
|
|
kind of software like this:
|
|
</p>
|
|
<p>
|
|
<itemize>
|
|
<item>
|
|
<url url="http://www.quicknet.net" name="Internet SwitchBoard"> (only when connected to Internet) for Windows systems also acting as a
|
|
h323 terminal;
|
|
<item>
|
|
PSTNGw for Linux and Windows systems you download from <url url="http://www.openh323.org/code.html" name="OpenH323">.
|
|
</itemize>
|
|
</p><sect1>
|
|
Gatekeeper software
|
|
<p>
|
|
You can choose as gatekeeper:
|
|
</p>
|
|
<p>
|
|
<enum>
|
|
<item>
|
|
Opengatekeeper, you can download from <url url="http://www.opengatekeeper.org" name="opengatekeeper web site"> for Linux and Win9x.
|
|
<item>
|
|
Openh323 Gatekeeper (GK) from <url url="http://www.willamowius.de/openh323gk.html" name="here">.
|
|
</enum>
|
|
</p><sect1>
|
|
Other software
|
|
<p>
|
|
<label id="Phonepatch" >In addition I report some useful software h323 compliant:
|
|
</p>
|
|
<p>
|
|
<itemize>
|
|
<item>
|
|
Phonepatch, able to solve problems behind a NAT firewall. It simply allows
|
|
users (external or internal) calling from a web page (which is reachable from
|
|
even external and internal users): when web application understands the remote
|
|
host is ready, it calls (h323) the source telling it all is ok and communication
|
|
can be established. Phonepatch is a proprietary software (with also a demo
|
|
version for no more than 3 minutes long conversations) you download from <url url="http://www.equival.com/phonepatch" name="here">.
|
|
</itemize>
|
|
</p><sect>
|
|
Cards setup
|
|
<p>
|
|
Here we see how to configure special hardware card in Linux and Windows
|
|
environment.
|
|
</p>
|
|
<sect1>
|
|
Quicknet PhoneJack
|
|
<p>
|
|
As we saw, Quicknet Phonejack is a sound card with VoIP accelerating capability.
|
|
It supports:
|
|
</p>
|
|
<p>
|
|
<itemize>
|
|
<item>
|
|
G.711 normal and mu/A-law, G.728-9, G.723.1 (TrueSpeech) and LPC10.
|
|
<item>
|
|
Phone connector (to allow calling directly from your phone) or
|
|
<item>
|
|
Mic & speaker jacks.
|
|
</itemize>
|
|
</p><p>
|
|
Quicknet PhoneJack is a ISA (or PCI) card to install into your Pc box.
|
|
It can work without an IRQ.
|
|
</p>
|
|
<sect2>
|
|
Software installation
|
|
<p>
|
|
Under Windows you have to install:
|
|
</p>
|
|
<p>
|
|
<enum>
|
|
<item>
|
|
Card driver
|
|
<item>
|
|
Internet Switchboard application (working only with Internet, using newer
|
|
Quicknet cards)
|
|
</enum>
|
|
</p><p>
|
|
all downloadable from <url url="http://www.quicknet.net" name="Quicknet web site">
|
|
</p>
|
|
<p>
|
|
After Switchboard has been installed, you need to register to Quicknet
|
|
to obtain full capability of your card.
|
|
</p>
|
|
<p>
|
|
When you pick up the phone Internet Switchboard wakes up and waits for
|
|
your calling number (directly entered from your phone), you can:
|
|
</p>
|
|
<p>
|
|
<enum>
|
|
<item>
|
|
enter an asterisk, then type an IP number (with asterisks in place of dot)
|
|
with a # in the end
|
|
<item>
|
|
type directly a PSTN phone number (with international prefix) to call a
|
|
classic phone user. In this case you need a registration to a gateway manager
|
|
to which pay for time.
|
|
<item>
|
|
enter directly a quick dial number (up to 2 digits) you have previously
|
|
stored which make a call (IP or PSTN).
|
|
</enum>
|
|
</p><p>
|
|
Internet Swichboard is h323 compatible, so if you can use, for example,
|
|
Microsoft Netmeeting at the other end to talk.
|
|
</p>
|
|
<p>
|
|
Warning!! Internet Switchboard NEED to be connected to Internet when used
|
|
with newer Quicknet cards
|
|
</p>
|
|
<p>
|
|
In place of Internet Switchboard you can use openh323 application <url url="http://www.openh323.org/code.html" name="openphone"> (using
|
|
GUI) or <url url="http://www.openh323.org/code.html" name="ohphone"> (command line).
|
|
</p>
|
|
<p>
|
|
Under Linux you have to install:
|
|
</p>
|
|
<p>
|
|
<enum>
|
|
<item>
|
|
Card driver, from <url url="http://www.quicknet.net" name="Quicknet web site">. After downloaded you have to compile it (you must have
|
|
a /usr/src/linux soft or hard link to your Linux source directory): type make
|
|
for instructions.
|
|
<item>
|
|
Application <url url="http://www.openh323.org/code.html" name="openphone"> or <url url="http://www.openh323.org/code.html" name="ohphone">.
|
|
<item>
|
|
If you are a developer you can use <url url="ftp://ftp.quicknet.net/Developer/Linux/Docs/" name="SDK"> to create your own application (also
|
|
for Windows).
|
|
</enum>
|
|
</p><sect2>
|
|
Settings
|
|
<p>
|
|
With Internet Switchboard (and with other application) you can:
|
|
</p>
|
|
<p>
|
|
<enum>
|
|
<item>
|
|
Change compression algorithm preferred
|
|
<item>
|
|
Tune jitter delay
|
|
<item>
|
|
Adjust volume
|
|
<item>
|
|
Adjust echo cancellation level.
|
|
</enum>
|
|
</p><sect1>
|
|
Quicknet LineJack
|
|
<p>
|
|
This card is very similar to the previous, it supports also gateway feature.
|
|
|
|
</p>
|
|
<p>
|
|
We only notice that we have to <url url="http://www.quicknet.net/code.html" name="download"> PSTNGx application (for Linux and Windows)
|
|
or we use Internet Switchboard to gateway feature.
|
|
</p>
|
|
<sect1>
|
|
VoiceTronix products
|
|
<p>
|
|
<enum>
|
|
<item>
|
|
First download software <url url="http://www.voicetronix.com.au/vpb-driver-2.1.8.tar.gz" name="here">
|
|
<item>
|
|
Untar it
|
|
<item>
|
|
Modify 'src/vpbreglinux.cpp' according to file README
|
|
<item>
|
|
type 'make'
|
|
<item>
|
|
type 'make install'
|
|
<item>
|
|
cd to src
|
|
<item>
|
|
type 'insmod vpb.o'
|
|
<item>
|
|
retrieve (from console of from 'dmesg' output command) major number, say
|
|
MAJOR
|
|
<item>
|
|
type 'mknod /dev/vpb0 c MAJOR 0' where MAJOR is the above number
|
|
<item>
|
|
cd to unittest and type './echo'
|
|
</enum>
|
|
</p><p>
|
|
Follow README file for more help.
|
|
</p>
|
|
<p>
|
|
I personally haven't tested VoiceTronix products so please contact <url url="http://www.voicetronix.com.au" name="VoiceTronix web site"> for
|
|
support.
|
|
</p>
|
|
<sect>
|
|
Setup
|
|
<p>
|
|
In this chapter we try to setup VoIP system, simple at first, then more
|
|
and more complex.
|
|
</p>
|
|
<sect1>
|
|
Simple communication: IP to IP
|
|
<p>
|
|
<verb>
|
|
|
|
A (Win9x+Sound card) - - - B (Win9x+Sound card)
|
|
|
|
192.168.1.1 - - - 192.168.1.2
|
|
|
|
|
|
192.168.1.1 calls 192.168.1.2.
|
|
</verb>
|
|
</p><p>
|
|
A and B should:
|
|
</p>
|
|
<p>
|
|
<enum>
|
|
<item>
|
|
have Microsoft Netmeeting (or other software) installed and properly configured.
|
|
<item>
|
|
have a network card or other kind of TCP/IP interface to talk each other.
|
|
</enum>
|
|
</p><p>
|
|
In this kind of view A can make a H323 call to B (if B has Netmeeting active)
|
|
using B IP address. Then B can answer to it if it wants. After accepting call,
|
|
VoIP data packets start to pass.
|
|
</p>
|
|
<sect1>
|
|
Using names
|
|
<p>
|
|
If you use Microsoft Windows in a lan you can call the other side using
|
|
NetBIOS name. NetBIOS is a protocol that can work (stand over) with NetBEUI
|
|
low level protocol and also with TCP/IP. It is only need to call the "computer
|
|
name" on the other side to make a connection.
|
|
</p>
|
|
<p>
|
|
<verb>
|
|
A - - - B
|
|
|
|
192.168.1.1 - - - 192.168.1.2
|
|
|
|
John - - - Alice
|
|
|
|
|
|
John calls Alice.
|
|
|
|
</verb>
|
|
</p><p>
|
|
This is possible cause John call request to Alice is converted to IP calling
|
|
by the NetBIOS protocol.
|
|
</p>
|
|
<p>
|
|
The above 2 examples are very easy to implement but aren't scalable.
|
|
</p>
|
|
<p>
|
|
In a more big view such as Internet it is impossible to use direct calling
|
|
cause, usually, the callers don't know the destination IP address. Furthermore
|
|
NetBIOS naming feature cannot work cause it uses broadcast messages, which
|
|
typically don't pass ISP routers .
|
|
</p>
|
|
<sect1>
|
|
Internet calling using a WINS server
|
|
<p>
|
|
The NetBIOS name calling idea can be implemented also in a Internet environment,
|
|
using a WINS server: NetBIOS clients can be configured to use a WINS server
|
|
to resolve names.
|
|
</p>
|
|
<p>
|
|
PCs using the same WINS server will be able to make direct calling between
|
|
them.
|
|
</p>
|
|
<p>
|
|
<verb>
|
|
|
|
A (WINS Server is S) - - - - I - - - - B (WINS Server is S)
|
|
N
|
|
T
|
|
E - - - - - S (WINS Server)
|
|
C (WINS Server is S) - - - - R
|
|
N
|
|
E - - - - D (WINS Server is S)
|
|
T
|
|
|
|
Internet communication
|
|
|
|
</verb>
|
|
</p><p>
|
|
A, B, C and D are in different subnets, but they can call each other in
|
|
a NetBIOS name calling fashion. The needed is that all are using S as WINS
|
|
Server.
|
|
</p>
|
|
<p>
|
|
Note: WINS server hasn't very high performance cause it use NetBIOS feature
|
|
and should only be used for joining few subnets.
|
|
</p>
|
|
<sect1>
|
|
A big problem: the masquering.
|
|
<p>
|
|
A problem of few IPs is commonly solved using the so called masquering
|
|
(also NAT, network address translation): there is only 1 IP public address
|
|
(that Internet can directly "see"), the others machines are "masqueraded" using
|
|
all this IP.
|
|
</p>
|
|
<p>
|
|
<verb>
|
|
|
|
A - - -
|
|
|
|
B - - - Router with NAT - - - Internet
|
|
|
|
C - - -
|
|
|
|
|
|
This doesn't work
|
|
|
|
</verb>
|
|
</p><p>
|
|
In the example A,B and C can navigate, pinging, using mail and news services
|
|
with Internet people, but they CANNOT make a VoIP call. This because H323 protocol
|
|
send IP address at application level, so the answer will never arrive to source
|
|
(that is using a private IP address).
|
|
</p>
|
|
<p>
|
|
Solutions:
|
|
</p>
|
|
<p>
|
|
<itemize>
|
|
<item>
|
|
there is a Linux module that modifies H323 packets avoiding this problem.
|
|
You can download the module <url url="http://www.coritel.it/coritel/ip/sofia/nat/nat2/nat2.htm" name="here">. To install it you have to copy it to source directory
|
|
specified, modify Makefile and go compiling and installing module with "modprobe
|
|
ip_masq_h323". Unfortunately this module cannot work with ohphone software at
|
|
this moment (I don't know why).
|
|
</itemize>
|
|
<p>
|
|
<verb>
|
|
|
|
A - - - Router with NAT
|
|
|
|
B - - - + - - - Internet
|
|
|
|
C - - - ip_masq_h323 module
|
|
|
|
|
|
This works
|
|
|
|
</verb>
|
|
<p>
|
|
<itemize>
|
|
<item>
|
|
There is a application program that also solves this problem: for more
|
|
see <ref id="Phonepatch" name="Par 5.7" >
|
|
</itemize>
|
|
<p>
|
|
<verb>
|
|
|
|
A - - -
|
|
|
|
B - - - PhonePatch - - - Internet
|
|
|
|
C - - -
|
|
|
|
|
|
This works
|
|
|
|
</verb>
|
|
</p><sect1>
|
|
Using Linux
|
|
<p>
|
|
With Linux (as an h323 terminal) you can experiment everything done before.
|
|
</p>
|
|
<sect2>
|
|
Ohphone Sintax
|
|
<p>
|
|
Sintax is:
|
|
</p>
|
|
<p>
|
|
"ohphone -l|--listen [options]"
|
|
</p>
|
|
<p>
|
|
"ohphone [options]... address"
|
|
</p>
|
|
<p>
|
|
<itemize>
|
|
<item>
|
|
"-l", listen to standard port (1720)
|
|
<item>
|
|
"address", mean that we don't wait for a call, but we connect to "address"
|
|
host
|
|
<item>
|
|
"-n", "--no-gatekeeper", this is ok if we haven't a gatekeeper
|
|
<item>
|
|
"-q num", "--quicknet num", it uses Quicknet card, device /dev/phone(num)
|
|
<item>
|
|
"-s device", "--sound device", it uses /dev/device sound device.
|
|
<item>
|
|
"-j delay", "--jitter delay", it change delay buffer to "delay".
|
|
</itemize>
|
|
</p><p>
|
|
Also, when you start ohphone, you can give command to the interpreter directly
|
|
(like decrease AEC, Automatic Echo Cancellation).
|
|
</p>
|
|
<sect1>
|
|
Setting up a gatekeeper
|
|
<p>
|
|
You can also experiment gatekeeper feature
|
|
</p>
|
|
<p>
|
|
<verb>
|
|
Example
|
|
|
|
(Terminal H323) A - - -
|
|
\
|
|
(Terminal H323) B - - - D (Gatekeeper)
|
|
/
|
|
(Terminal H323) C - - -
|
|
|
|
Gatekeeper configuration
|
|
|
|
</verb>
|
|
<p>
|
|
<enum>
|
|
<item>
|
|
Hosts A,B and C have gatekeeper setting to point to D.
|
|
<item>
|
|
At start time each host tells D own address and own name (also with aliases)
|
|
which could be used by a caller to reach it.
|
|
<item>
|
|
When a terminal asks D for an host, D answers with right IP address, so
|
|
communication can be established.
|
|
</enum>
|
|
</p><p>
|
|
We have to notice that the Gatekeeper is able only to solve name in IP
|
|
address, it couldn't join hosts that aren't reachable each other (at IP level),
|
|
in other words it couldn't act as a NAT router.
|
|
</p>
|
|
<p>
|
|
You can find gatekeeper code <url url="http://www.opengatekeeper.org" name="here">: <url url="http://www.openh323.org/code.html" name="openh323 library"> is also required.
|
|
</p>
|
|
<p>
|
|
Program has only to be launch with -d (as daemon) or -x (execute) parameter.
|
|
|
|
</p>
|
|
<p>
|
|
In addition you can use a config file (.ini) you find <url url="http://www.opengatekeeper.org/opengate.ini" name="here">.
|
|
</p>
|
|
<sect1>
|
|
Setting up a gateway
|
|
<p>
|
|
As we said, gateway is an entity that can join VoIP to PSTN lines allowing
|
|
us to made call from Internet to a classic telephone. So, in addition, we need
|
|
a card that could manage PSTN lines: Quicknet LineJack does it.
|
|
</p>
|
|
<p>
|
|
From <url url="http://www.openh323.org" name="OpenH323 web site"> we download:
|
|
</p>
|
|
<p>
|
|
<enum>
|
|
<item>
|
|
driver for Linejack
|
|
<item>
|
|
PSTNGw application to create our gateway.
|
|
</enum>
|
|
</p><p>
|
|
If executable doesn't work you need to download source code and <url url="http://www.openh323.org/code.html" name="openh323 library">, then
|
|
install all in a home user directory.
|
|
</p>
|
|
<p>
|
|
After that you only need to launch PSTNGw to start your H323 gateway.
|
|
</p>
|
|
<sect1>
|
|
Compatibility Matrix
|
|
<p>
|
|
First Matrix refers to:
|
|
</p>
|
|
<p>
|
|
<enum>
|
|
<item>
|
|
Software intercommunications (i.e. Netmeeting with SwitchBoard)
|
|
<item>
|
|
Software/Driver/Hardware talking (i.e. Netmeeting can use a PhoneJACK card).
|
|
</enum>
|
|
<p>
|
|
<verb>
|
|
_____________________________________________________________________________________________________________________
|
|
| | Netmeeting |SwitchBoard | Simph323 | OhPhone | LinPhone |Speak-Freely|HW PhoneJACK|HW 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 _ _
|
|
|____________|____________|____________|____________|____________|_____________|____________|____________|____________|
|
|
|
|
|
|
</verb>
|
|
</p><p>
|
|
Second Matrix refers to Gateway softwares that manage LineJACK card.
|
|
</p>
|
|
<p>
|
|
<verb>
|
|
___________________________________________________________
|
|
| |HW LineJACK GW| SwitchBoard | PSTNGW |
|
|
|______________|______________|______________|______________|
|
|
|HW LineJACK GW| _ | V | V |
|
|
|______________|______________|______________|______________|
|
|
| SwitchBoard | V | _ | _ |
|
|
|______________|______________|______________|______________|
|
|
| PSTNGW | V | _ | _ |
|
|
|______________|______________|______________|______________|
|
|
</verb>
|
|
</p><p>
|
|
Notation:
|
|
</p>
|
|
<p>
|
|
<itemize>
|
|
<item>
|
|
V : Works
|
|
<item>
|
|
X : Doesn't Work
|
|
<item>
|
|
-- : Doesn't care
|
|
</itemize>
|
|
</p><sect>
|
|
Bandwidth consideration
|
|
<p>
|
|
From all we said before we noticed that we still have not solved problems
|
|
about bandwidth, how to create a real time streaming of data.
|
|
</p>
|
|
<p>
|
|
We know we couldn't find a solution unless we enable a right real-time
|
|
manager protocol in each router we cross, so what do we can do?
|
|
</p>
|
|
<p>
|
|
First we try to use a very (as more as possible) high rate compression
|
|
algorithms (like LPC10 which only consumes a 2.5 kbps bandwidth, about 313
|
|
bytes/s).
|
|
</p>
|
|
<p>
|
|
Then we starts classify our packets, in TOS field, with the most high priority
|
|
level, so every router help us having urgently.
|
|
</p>
|
|
<p>
|
|
Important: all that is not sufficient to guarantee our conversation would
|
|
always be ok, but without an great infrastructure managing shaping, bandwidth
|
|
reservation and so on, it is not possible to do it, TCP/IP is not a real time
|
|
protocol.
|
|
</p>
|
|
<p>
|
|
A possible solution could be starts with little WAN at guaranteed bandwidth
|
|
and get larger step by step.
|
|
</p>
|
|
<p>
|
|
We finally have to notice a thing: also the so called guaranteed services
|
|
like PSTN line could not manage all clients they have: for example a GSM call
|
|
is not able to manage more that some hundred or some thousand of clients.
|
|
</p>
|
|
<p>
|
|
Anyway for a starting service, limited to few users, VoIP can be a valid
|
|
alternative to classic PSTN service.
|
|
</p>
|
|
<sect>
|
|
Glossary
|
|
<p>
|
|
PSTN: Public Switched Telephone Network
|
|
</p>
|
|
<p>
|
|
VoIP: Voice over Internet Protocol
|
|
</p>
|
|
<p>
|
|
LAN: Local Area Network
|
|
</p>
|
|
<p>
|
|
WAN: Wide Area Network
|
|
</p>
|
|
<p>
|
|
TOS: Type Of Service
|
|
</p>
|
|
<p>
|
|
ISP: Internet Service Provider
|
|
</p>
|
|
<p>
|
|
RTP: Real Time Protocol
|
|
</p>
|
|
<p>
|
|
RSVP: ReSerVation Protocol
|
|
</p>
|
|
<p>
|
|
QoS: Quality of Service
|
|
</p>
|
|
<sect>
|
|
Useful links
|
|
<sect1>
|
|
Open software link
|
|
<p>
|
|
<itemize>
|
|
<item>
|
|
<url url="http://www.voxilla.org" name="Voxilla">
|
|
<item>
|
|
<url url="http://www.linuxtelephony.org" name="Linux Telephony">
|
|
<item>
|
|
<url url="http://www.openh323.org" name="Open H323 web site">
|
|
<item>
|
|
<url url="http://www.gnomemeeting.org/" name="http://www.gnomemeeting.org/">
|
|
<item>
|
|
<url url="http://www.speakfreely.org" name="Speak Freely">
|
|
<item>
|
|
<url url="http://www.linphone.org" name="http://www.linphone.org">
|
|
<item>
|
|
<url url="http://osip.atosc.org" name="http://osip.atosc.org">
|
|
<item>
|
|
<url url="http://www.gnu.org/software/bayonne" name="http://www.gnu.org/software/bayonne">
|
|
</itemize>
|
|
</p><sect1>
|
|
Commercial link
|
|
<p>
|
|
<itemize>
|
|
<item>
|
|
<url url="http://www.fatamorgana.com" name="Fatamorgana Computers">
|
|
<item>
|
|
<url url="http://www.itu.org" name="International Communication Union">
|
|
<item>
|
|
<url url="http://www.voicetronix.com.au" name="Voicetronix web site">
|
|
<item>
|
|
<url url="http://www.quicknet.net" name="Quicknet Web site">
|
|
<item>
|
|
<url url="http://www.cisco.com" name="Cisco Systems">
|
|
<item>
|
|
<url url="www.metropark.com" name="www.metropark.com">
|
|
<item>
|
|
<url url="www.nbxsoftware.com" name="www.nbxsoftware.com">
|
|
</itemize>
|
|
|
|
|
|
</article>
|