ALEX (Address List Extension) is an extension to SIP that provides the following features:
- full support to the dual-stack UAs (i.e. UAs having both IPv4 and IPv6 network addresses)
- full support to the multi-homed UAs (i.e. UAs having multiple network addresses)
- an integrated approach to the NAT traversal for both signaling and media flows
- reuse of existing or previously tested connections
ALEX extends SIP by adding a new header field called "ALEX-item" allowing UAs to announce their related addresses and ports. ALEX-capable UAs can exchange the complete list of their network addresses and ports in order to choose at runtime the most suitable ones to use during the session. Current state-of-the art solutions are focused on the establishment of direct media channel, placing SIP proxies on the path of SIP messages; on the opposite, ALEX applies to both signaling and media flows, allowing the establishment of direct channels whenever it is possible. The idea comes from the observation that conventional UAs are meant to be executed on a large variety of hosts, starting from PCs up to 3G and 4G mobile phones. In most cases the hosts running the UAs simply do not have a DNS entry: so IP addresses have to be placed directly in the SIP messages used to create sessions. The problem is that SIP allows the announcement of a single network address and port for each flow, respectively:
- A single network address and port pair must be placed in the "contact" header field of SIP messages
- A single network address and port pair for each media flow must be placed in the SDP payload of SIP messages
By doing this, each UA has to choose a priori the best network address and port pair to place in the messages for each flow: this may lead to non optimal choices that result in unnecessary nodes on the path between the UAs. On the contrary ALEX-capable UAs can place their complete network address and port lists inserting "ALEX-item" fields in the messages: so the UA will be able to negotiate at runtime the appropriate network addresses and ports to use.
The mechanism used by the ALEX extension is fairly simple and is described by the schema shown in the following figure.
ALEX extends SIP media sessions establishments adding the following steps:
- Gathering of network addresses and ports: each UA collects all its related network addresses and ports. The list included external addresses "lent" by relay nodes that can be used during the session
- Address announcement: the network addresses and ports are inserted in multiple "ALEX-item" header fields added to the SIP messages used to establish the session
- Creation of connection lists: the network addresses and ports exchanged by the UAs are opportunely paired to form candidate entries placed in new data structures called connection lists. The entries are ordered placing most preferable addresses on top of the lists
- Validation step: both the UAs start checking the candidate entries by sending probe packets to verify if it is possible to send and receive packets during the sessions
- The most suitable entries are stored in a structure called ALEX cache in order to be immediately available for subsequent sessions
The execution of these steps result in direct UAs connectivity in most of the cases. Only if there is no chance for direct connectivity relays are placed in the path of the packets exchanged. ALEX is an integrated solution designed to provide dual stack support and NAT traversal support as the same time. When ALEX is deployed, intermediate SIP proxies do not have to forward SIP messages exchanged by the UAs when the session is established: the state information related to the session is moved from intermediate proxies to the UAs. It is up to the UAs to establish the session and to ensure connectivity until the session is over. This reduces in overhead reduction on SIP proxies, thus making the infrastructure more scalable.
Here is a list of the papers currently published about ALEX:
An additional draft paper is available: Providing End-to-End Connectivity to SIP User Agents Behind NATs.
Ongoing work is focusing in using P2P techniques to enhance the relaying properties of the proposed solution.
ALEX was integrated into the OpenWengo NG user agent as a proof-of-concept. The ALEX-aware OpenWengoNG is available through:
Before installing and using the UA, please read carefully the Release notes , in which you can find a list of the features implemented, a short configuration guide and a list of the known bugs.