mirror of https://github.com/tLDP/LDP
1153 lines
31 KiB
Plaintext
1153 lines
31 KiB
Plaintext
<!doctype linuxdoc system>
|
|
|
|
<article>
|
|
<!-- LyX 1.1 created this file. For more info see http://www.lyx.org/ -->
|
|
<title>
|
|
VoIP Howto
|
|
</title>
|
|
<author>
|
|
Roberto Arcomano berto@fatamorgana.com
|
|
</author>
|
|
<date>
|
|
v1.1, 2001-06-04
|
|
</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>
|
|
<sect>
|
|
Background
|
|
<sect1>
|
|
The past
|
|
<p>
|
|
20-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 a 22 kHz bandwidth (and also we needn't 16
|
|
bit!): 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>
|
|
First, VoIP don't use TCP cause it is too heavy for real time
|
|
application, so instead UDP (datagram) is used.
|
|
</p>
|
|
<p>
|
|
In UDP we cannot ordering packets in arrive time (which is a
|
|
must in VoIP) because there isn't connection idea, each packet is
|
|
independent from others (datagram concept); so we have to introduce
|
|
a new protocol, such as RTP, able to manage this.
|
|
</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
|
|
</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>
|
|
For more info see <url url="http://www.quicknet.net" name="Quicknet web site">
|
|
.
|
|
</p>
|
|
<sect1>
|
|
Hardware gateway cards
|
|
<p>
|
|
Quicknet LineJack 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>
|
|
Also you can use free software you download from <url url="http://www.openh323.org" name="OpenH323">
|
|
.
|
|
</p>
|
|
<p>
|
|
Under Linux we only have free software 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">
|
|
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
|
|
</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>
|
|
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>
|
|
<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>
|
|
<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>
|
|
Useful links
|
|
<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.itu.org" name="International Communication Union">
|
|
|
|
<item>
|
|
<url url="http://www.quicknet.net" name="Quicknet Web site">
|
|
|
|
<item>
|
|
<url url="http://www.openh323.org" name="Open H323 web site">
|
|
|
|
<item>
|
|
<url url="http://www.speakfreely.org" name="Speak Freely">
|
|
|
|
<item>
|
|
<url url="http://www.cisco.com" name="Cisco Systems">
|
|
|
|
</itemize>
|
|
|
|
|
|
</article>
|