Die meisten modernen Router und Firewalls bieten Application-Layer-Gateway Funktionen, um Pakete auf der Anwendungsschicht zu untersuchen und wenn benötigt zu bearbeiten.
Eine häufige Nutzung dieser Funktion ist in Form eines SIP-ALGs, bei dem die IP-Adressdaten und Ports in SIP und SDP-Paketen angepasst werden. Obwohl dies dazu dienen soll, die Stabilität von SIP-Verbindungen zu verbessern, tragen solche ALGs allerdings oft zu Problemen mit SIP-Verbindungen bei.
Grundsätzlich ist ein ALG so ähnlich wie ein NAT, nur auf einer anderen Ebene des Datenverkehrs. Auf Layer 3 enthalten IP-Pakete IP-Adressen und Port Nummern zum Routen der Pakete. Allerdings sind nicht nur dort IP-Adressen zu finden. SIP und SDP-Pakete enthalten ebenfalls Portnummern und IP-Adressen, die von manchen Telefonanlagen anstelle der Angaben auf Layer 3 dazu verwendet werden, die Antworten und den RTP-Stream zu routen.
Wenn nun die Telefonanlage in einem internen Netzwerk liegt, enthalten diese Pakete also private IP-Adressen, mit denen logischerweise die Telefonanlage am anderen Ende nicht viel anfangen kann. Ein SIP-ALG passt also in den SIP- und SDP-Paketen diese privaten IP-Adressen und Ports an und ersetzt diese mit der öffentlichen IP und dem Port der öffentlichen Verbindung.
Also wird ein SIP-ALG benötigt, wenn die Telefone/Telefonanlage nicht mit einem NAT kompatibel sind und nicht im gleichen Netzwerk liegen.
Eine weitere Funktion ist das direkte Übertragen von RTP-Streams zwischen den Endgeräten, ohne dazwischen noch über den Server zu gehen.
Falls Telefone und Server im gleichen Netzwerk liegen oder der Server NAT-kompatibel ist, wird ein SIP-ALG allerdings nicht benötigt und kann zu Problemen führen.
Dies resultiert unter anderem daraus, dass manche SIP-ALGs die IP-Adresse auch an Stellen ändern, an denen dies nicht geschehen sollte, zum Beispiel in der Call-ID. Wird dort die IP-Adresse angepasst, wird die Call-ID ungültig und das Audio kann nicht mehr übertragen werden.
Ein weiteres Problem kann der im ALG festgelegte UDP-Timeout sein. Wenn dieser zu kurz festgelegt wird, wird die Verbindung im Laufe des Anrufs getrennt.