Lorsqu’un téléphone IP communique à travers un NAT, les flux média externes peuvent ne pas traverser le réseau interne, ce qui entraîne un échec de communication. Cette situation peut également apparaître lorsque deux appareils déjà en communication restent longtemps en mode Hold. Comme les informations de mappage NAT conservées par le routeur externe peuvent expirer, la communication peut encore échouer après Resume.
Pour garantir une communication normale sous NAT, la traversée de flux RTP est donc particulièrement importante.
Selon RFC6263, lorsqu’un appareil fonctionne en mode INACTIVE ou RECVONLY, il doit utiliser l’une des méthodes recommandées par la spécification pour envoyer périodiquement des paquets RTP. La spécification recommande de multiplexer RTCP avec RTP. Toutefois, comme de nombreux terminaux peuvent ne pas avoir implémenté cette méthode, une autre approche est retenue pour des raisons de compatibilité.
En se référant à la section 4 de la spécification, la communication peut être maintenue en envoyant périodiquement des paquets RTP avec un Payload Type incorrect.
1.3.1 Configuration
Après l’activation de la configuration présentée ci-dessus, la traversée de flux RTP est activée. Les paquets RTP Keep Alive sont envoyés dans les situations suivantes :
1 Une fois l’appel téléphonique établi, le téléphone envoie des paquets RTP pour ouvrir le canal NAT. Cela s’applique aux appels vidéo X6.
2 Une fois l’appel téléphonique mis en mode Hold, le téléphone envoie périodiquement des paquets RTP pour maintenir la connexion NAT.
1.3.2 Capture de paquets
L’image suivante montre le paquet RTP Keep Alive envoyé. Dans le paquet analysé par Wireshark, on peut voir que le codec d’un appel normal est G.711 PCMU, ce qui est différent du codec du paquet RTP Keep Alive envoyé.
L’image suivante montre un paquet RTP Keep Alive complet.