IBM Support

Sending a large SIP request that exceeds the MTU value might not switch from UDP to TCP

Troubleshooting


Problem

The transport of an outbound session initiation protocol (SIP) request that exceeds the maximum transmission unit (MTU) does not switch from user datagram protocol (UDP) to transmission control protocol (TCP).

Symptom

After sending out a SIP request that slightly exceeds the MTU threshold, over UDP, the response fails to arrive. The request is retransmitted several times until the transaction times out.

Cause

RFC 3261, section 18.1.1, contains a requirement to measure the size of an outbound SIP request before sending it out on UDP. If the request size is within 200 bytes of the path MTU, it is sent using TCP instead of UDP. The path MTU value is available in the configuration and defaults to a value of 1500. This default value allows 1300 bytes for outbound UDP messages.

In a clustered environment, where a proxy server exists in front of the application server, outbound UDP requests might exceed the MTU boundary by a small number of bytes. This situation is caused by an extra Via header that is added by the SIP proxy.

Environment

The problem can occur in a clustered environment with any operating system. On IBM WebSphere Application Server for z/OS only, the problem can occur on either a clustered or stand-alone application server.

Diagnosing The Problem

Start a network sniffer on the WebSphere Application Server proxy and capture network traffic when you attempt to recreate the scenario.

  • Filter the network capture to show SIP messages only.
  • Find the request that does not result in a response. This request might be retransmitted several times.
  • The network capture shows two UDP packets for each transmission: one packet that flows from the application server into the proxy and the other packet from the proxy out to its destination.
  • Measure the size of each inbound and outbound packet. The outbound message is larger than the inbound message because it contains an extra Via header field.

If the outbound message is larger than the MTU threshold, the response might never return. For example:
  1. The application creates a SIP request, with a total size of 1250 bytes, and addresses it to a UDP target.
  2. The SIP servlet container determines that the message does not exceed the MTU boundary and sends it out on UDP.
  3. The request is routed from the application server out through the WebSphere Application Server proxy.
  4. The proxy adds its own Via header to the message of 100 bytes and forwards the message.
  5. A request of 1350 bytes is sent out over UDP, which is contrary to section 18.1.1 of RFC 3261.

The response is 200 bytes larger than the request with a total of 1550 bytes. A large UDP message might fail during transport.

Resolving The Problem

To resolve the problem, change the MTU value in the SIP container configuration. Reduce the default MTU value of 1500 bytes by 100 bytes for each WebSphere Application Server proxy on the request path. The recommended MTU value in a typical cluster, where each SIP request traverses a single WebSphere Application Server proxy outbound, is 1400 bytes.

You can configure the MTU setting through the Administrative Console for WebSphere Application Server. Click Application servers > server_name > SIP container > SIP stack.

After you reduce the MTU setting from 1500 to 1400, the following scenario occurs:

  1. The application creates a SIP request with a total size of 1250 bytes and addresses it to a UDP target.
  2. The SIP servlet container determines that the message exceeds the MTU boundary and sends the message out on TCP.
  3. The request is routed from the application server out through the SIP proxy.
  4. The SIP proxy adds its own Via header to the message, which is 100 bytes, and forwards the message.
  5. A request of 1350 bytes is sent outbound over TCP.

The response is 200 bytes larger than the request with a total of 1550 bytes. The large message is safely delivered over TCP.

Related Information

[{"Product":{"code":"SSEQTP","label":"WebSphere Application Server"},"Business Unit":{"code":"BU053","label":"Cloud & Data Platform"},"Component":"Servlet Engine\/Web Container","Platform":[{"code":"PF016","label":"Linux"}],"Version":"7.0","Edition":"Network Deployment","Line of Business":{"code":"LOB45","label":"Automation"}},{"Product":{"code":"SS7K4U","label":"WebSphere Application Server for z\/OS"},"Business Unit":{"code":"BU053","label":"Cloud & Data Platform"},"Component":"Servlet Engine\/Web Container","Platform":[{"code":"PF035","label":"z\/OS"}],"Version":"7.0","Edition":"","Line of Business":{"code":"LOB45","label":"Automation"}}]

Document Information

Modified date:
15 June 2018

UID

swg21316620