Perhaps the most common cause of problems with IP phones is inconsistent signalling communication between the end point (phone) and the PBX.  The symptoms of this include:

  1. The phone won't register to its extension account on the PBX.
  2. BLF buttons on the phone don't work consistently, or don't work at all.
  3. An incoming call does not connect immediately, or not at all, when the phone is taken off-hook to answer it.
  4. If a phone is part of a ring group, and another extension answers the call, this phone keeps ringing.

This article will describe what is causing these issues, and tell you how to fix them.

Within any Local Area Network (LAN) or across any Wide Area Network (WAN), every data transmission is identified and routed based on its originating IP address, its orginating port number, its destination IP address, and its destination port number.  Ports are subdivisions in the Internet Protocol standards, and are sometimes referred to as network sockets.  Port numbers range from 0 to 65535, and can be UDP or TCP protocols.  Many ports are assigned to specific types of services, while others are registered for use by specific software applications or are available for temporary "ephemeral" use.  See this Wikipedia article for a detailed explanation of ports and their assignments.

IP phones rely on the SIP UDP port to send and receive signalling data from the PBX.  Signalling includes registration of the phone extension to its PBX server, status updates, BLF (Busy Lamp Field) data, and others. The standard SIP port numbert is 5060.  Every IP phone that conforms to the SIP protocols, regardless of manufacturer, is defaulted to use 5060 for its local port.

Consumer-grade routers, and most small-business routers, cannot handle multiple streams of data on one port designation.  For example, if you register your first phone to a Protel PBX, it will occupy port 5060.  The next phone that you register will also send its registration request on port 5060, but the router detects that another device is already using that port, so it re-assigns the registration and signalling data to some other, random port.  Depending on the processing power of the router, even a small number of end points that are trying to use the same port can cause a "flooding" state, which delays or completely blocks the registration and signalling data streams.

To alleviate this flooding problem, you should assign every end point to its own unique local SIP port.  The standard method for doing this is to incrementally assign each phone to even numbers above 5060.  Put phone number 2 at 5062, phone number 3 at 5064, and so on.  All of the ports between 5062 and 5200 are assigned to services or applications that small businesses have almost zero chance of using, though you are advised to check the port chart in this Wikipedia article to be certain.

If you are using the auto-provisioning feature in Protel LTS or Protelity LTS, you can assign your desired port number when you assign the extension account(s) to the phone provisioning file:

If you are manually provisioning phones, you need to locate the local SIP port data field.  This is usually in the account settings, but it may also be in the SIP networking settings.  Here is an example of a North American Telecom phone:

Here is an example of a VTech ErisTerminal SIP phone:

The SIP Status page in Protel and Protelity will list the local port that a phone is using. A port listing here that is outside the expected range of 5060 to 5200 indicates that either the local router is translating the port to another port number, or that the end point itself is connecting randomly.  Some IP phones allow you to have the phone select any random port. Most softphone apps use random ports by default and are not assignable.  In this example, extension 4540r is a dual-registered softphone app running on a PC:

If your PBX is not connected to the same LAN router as the phones, or is not on an enabled VLAN, you must have the NAT option checked in the Extension configuration in order for the end point to identify itself as being behind a NAT router: