[cisco-voip] RTP arriving early generating ICMP unreachable

Wes Sisk wsisk at cisco.com
Mon May 17 18:49:06 EDT 2010


Even Cisco endpoints see this occasionally, see the closed defect 
CSCsv00222 for example.

Consider the client behavior that causes this.  Assumptions:
* In most VOIP protocols the client provides a port number to use for RTP.
* It is best practice to make that port number dynamic. 
* For a dynamic port number the client application must request a 
dynamic port from the client operating system.
* In most operating systems that requires opening the port. 
* RTP uses UDP.  Allocating UDP ports is lighter weight than allocating 
TCP ports in most operating systems.  Allocating a UDP port usually 
means opening the port. I know of no operating system where that allows 
reserving the port without opening the port.

So the client must allocate the port and signal the port to peer 
device.  Allocating should coincide with opening.  If the clients has 
allocated and signaled a port it has had reasonable window of 
opportunity to open the port and await traffic. Conditions are very much 
in favor of the client having the port open in advance of the first 
packets coming over the network.

There are 2 scenarios that come to mind:
1. reusing port numbers.  We've seen applications that do this.  The 
peer client may assume reuse of the same port and begin streaming before 
proper signaling is completed.  This is clearly undesirable in this 
scenario and for many other reasons.
2. a firewall or inspection engine.  I say engine because it could be an 
appliance in the network or a component of any network device including 
the endpoint.  These same engines tend to be hyper sensitive to packet 
flows so unidirectional streams are frowned upon. They tend to only 
allow symmetrical streams, or at least signaled symmetric streams.  In 
SCCP terms the engine may not permit packets until it sees both 
OpenRecieveChannel and StartMediaTransmission.  I call this 
hypersensitve because unidirectional streams are perfectly valid both in 
RFC and in practice.  Example:
http://www.cisco.com/en/US/docs/voice_ip_comm/uc_system/UC5.0.2/release_notes/rnipt502.html#wp1279992
Multicast Music-On-Hold not supported by SIP gateway (CSCsc30731)

There is also a configuration in CM to force allocation of bidrectional 
port allocation for CM especially for Music on Hold call flows that 
traverse firewalls.  This is another pointer to the potential 
intervention of "firewall or inspection engines".

ICMP is important in the RTP stream as it can be used to detect when a 
remote client becomes unreachable even in scenarios where the signaling 
channel is also lost.  This is critical for endpoints to notify call 
agents to properly clear a call. Example:
http://www.cisco.com/en/US/docs/ios/12_3t/voice/command/reference/vrht_m2_ps5207_TSD_Products_Command_Reference_Chapter.html#wp1362166


IOS Voice gateways and IOS Media Termination Points are also susceptible 
to this as they depend on ICMP similarly to avoid abandoned streams.

In general it is always possible for call control to go down and it is 
highly desirable to preserve audio between connected endpoints in that 
case.  Upon accepting this reality it becomes necessary to depend on 
methods such as ICMP to identify and clear unmanaged, unsolicited 
streams.  Unfortunately that generates a bit of domain conflict where 
ICMP can be used for other purposes (administratively prohibited?).

In general a client that offers a port should be listening on that 
port.  Leniency grants a small grace period of ICMP before abandoning 
the stream (CSCse88435 enhancement to SW MTP to allow a "grace period" 
of ICMP errors before determinging that end-point is rejecting TX packets).

At the start of an RTP burst ICMP is more indicative of a misbehaving 
client.  This would be a client advertising but not opening a port. 

At the end of RTP burst ICMP is more indicative of a signaling issue.  
One device elected to terminate the stream but the other device was not 
accurately notified.

/Wes


On Monday, May 17, 2010 5:49:11 PM, Dale Shaw 
<dale.shaw+cisco-voip at gmail.com> wrote:
> Hi,
>
> Disclaimer: The scenario I describe below is not present in a Cisco
> deployment -- at the moment I'm just trying to get a feel from this
> audience for how normal (or not) this behaviour is in other voice over
> IP environments.
>
> I'm investigating a situation at the moment where IP phones are
> generating an ICMP unreachable (destination port unreachable) packet
> on receipt of the first RTP packet during voice mail access.
>
> To me, it indicates a signalling timing/sequencing problem -- the
> phone is indicating it wasn't yet ready to process RTP and effectively
> wasn't listening. A very short time later, RTP begins flowing
> bi-directionally and everything is OK.
>
> Is there a generic explanation for this behaviour? Is it 'normal'? If
> you saw this in your network, would you investigate and tune?
>
> cheers,
> Dale
> _______________________________________________
> cisco-voip mailing list
> cisco-voip at puck.nether.net
> https://puck.nether.net/mailman/listinfo/cisco-voip
>   



More information about the cisco-voip mailing list