What are the big differences between IAX and SIP? How is IAX better behind NATs than SIP. Will IAX ever take over SIP?

Thank you

IAX uses one port for all information travelling between two servers and only one port per phone.

SIP is effectively the signalling for RTP.

So, in a call you have two components; the voice and the signalling. Signalling is usually things like DTMF (pressing buttons on the phone).

The actual voice is on a seperate port (RTP) and the SIP messages contain information about the call and location of the RTP etc.

One of the problems with SIP is that it breaks a few networking rules. I.E. inside the network packet it writes in text what it thinks its own address is. This means for example, say you’re on a LAN and you have an IP address of or something. This is an internal IP address. It can’t be used on the internet. The way that your network gets around this is by rewriting the source IP address and port on the way out.

So, you can see the problem, if you have the IP address not only stored in the packet header, but also inside the data.

There are now a few ways around this such as STUN etc to allow an internal client to contact an external server, which will return the address it sees the data coming from (effectively your NAT).

IAX is a binary protocol. This means it’s not written in text and so requires less space.

If you have a server behind NAT it can just register to another server (and hold open a hole in te NAT) and that server will respond to the source IP of the packet, which in turn gets passed to the correct machine.

Also, IAX does something called trunking.

Basically what this means is that it puts a whole lot of calls into each packet.

What this means is that you have a lot less IP overhead.

Well, it doesn’t require any opening of ports for the client or any funky STUN etc.

One would hope so. It is vastly superior. I guess we shall see.