VoIPowering Your Office With Asterisk: Mastering SIP and IAX
Last week we took a close look at the heart of an Asterisk VoIP server: the dialplan. Today we're digging under the hood of Asterisk's channels. Channels and dialplans are what make it all go. A channel is any configured connection between your Asterisk server and another VoIP server. Every individual call is then placed or received on a separate channel that is created for the call, then torn down when the call is completed. As you can see, Asterisk terminology can drive you batty. But it really does make sense as you get used to it.
The two fundamental VoIP channels for Asterisk are SIP and IAX. These are named for the protocols that are used on them. These are configured in sip.conf and iax.conf.
(A peek ahead: Two other channels that you may need to learn about are FXO and FXS. These interface with the PSTN (Public Switched Telephone Network.) FXO means "Foreign eXchange Office" and FXS is "Foreign eXchange Station." Use an FXS device to connect an analog phone to a VoIP network, and an FXO card in your Asterisk server to interface with the PSTN over an analog telephone line. We'll get into these in more detail in future articles.)
There are a number of VoIP protocols/channels that you'll encounter. Here are just a few:
SIP is the darling of the VoIP world; virtually all new VoIP devices support it. SIP stands for Session Initiation Protocol. (See this tutorial for a detailed look at SIPand H.323.) SIP connects two VoIP endpoints by setting up and tearing down both voice and video calls. It does not move the data, which in VoIP terminology are media- that is handled by RTP, the Real-time Transport Protocol. SIP sits in the Application Layer of the Internet Protocol Suite, which I'm not going to get into here, but you should know about. (See Resources for more information.)
Asterisk acts as a SIP client, SIP server, and media gateway. A media gateway translates between different protocols. This is how your SIP phones connect to the PSTN, and IAX and H.323 channels. We already did this in Getting Free Long Distance by creating incoming and outgoing IAX trunks to Free World Dialup, then creating contexts in the dialplan to connect these trunks to SIP phones. IAX is great for server-to-server because it is very efficient and can handle a much larger number of calls, and it traverses NAT firewalls with ease because it needs only a single port. SIP is very extensible and has more capabilities, but it's a real pain for traversing NAT, and it can't carry as much traffic as IAX.
According to the book "Asterisk: The Future of Telephony" the cool kids pronounce it "eeks." There are two versions: IAX1 and IAX2. IAX1 is long obsolete, so IAX means "IAX2." IAX is a native Asterisk protocol- "Inter-Asterisk eXchange."
IAX needs only port UDP 4569, so getting it past even a NAT firewall is easy. It trunks multiple sessions that are going to the same destination into one data stream, which saves bandwidth and CPU cycles, and lowers latency. It has a built-in jitter buffer, and is extremely efficient in encoding and decoding. IAX won't leave you hanging if a call is abruptly interrupted, but will make sure that the call is cleanly terminated.
What it doesn't have is widespread support in IP phones, though it is growing. Trunking only works with other Asterisk servers. SIP can transport just about anything, but currently IAX is limited to voice and video. It is an open protocol with an active development community, so expect continual improvements.
Putting it all together
So now you know the three magic Asterisk configuration files. sip.conf and iax.conf define your connections to the outside world. extensions.conf tells your local Asterisk server how to process calls inside your network. Next week we'll start putting it all together.