SIP PRACK: Reliable Provisional Responses

Krishnakumar PG
3 min readJun 24, 2024

--

Session Initiation Protocol is a cornerstone of modern communications, and one of the key extensions of SIP is the Provisional Response Acknowledgement (PRACK), defined in RFC 3262. It plays a vital role by guaranteeing the delivery of “Optional”, yet important call setup messages.

What is PRACK?

While final responses (200 OK, 4xx, 5xx, 6xx) to INVITE requests are inherently reliable, provisional responses are not of same nature. They are optional but may still contain crucial information for certain calls. PRACK — Provisional Acknowledgement — is used to acknowledge the receipt of provisional responses (excluding 100 Trying). Provisional responses like 180 Ringing or 183 Session Progress, may require reliable delivery to ensure smooth call setup in some cases. PRACK enhances the reliability of these responses by confirming their receipt, similar to how the ACK confirms the final response to an INVITE request.

To indicate support for PRACK, SIP messages include specific headers:

  • Supported: 100rel shows that the sender supports reliable provisional responses.
  • Require: 100rel indicates that the sender requires reliable provisional responses.

Here is how it works:

  • INVITE with 100rel: The User Agent Client (UAC) includes the Supported: 100rel header in its INVITE request to indicate its support for reliable provisional responses.
  • Reliable Provisional Response: The User Agent Server (UAS) responds with a provisional response (e.g., 180 Ringing) and includes the Require: 100reland RSeq headers, which mandates the requirement of PRACK, containing a sequence number to uniquely identify the response.
  • Sending PRACK: The UAC acknowledges the provisional response by sending a PRACK request. The PRACK must include the RAck header, which mirrors the sequence number from the RSeq header.
  • 200 OK for PRACK: The UAS responds to the PRACK with a 200 OK message and the call proceeds with further SIP exchanges leading to success or failure of the call.

Key Takeaways

  • Reliability: PRACK ensures that provisional responses are reliably delivered and acknowledged.
  • Headers like Supported: 100reland Require: 100rel are essential for indicating support and requirement for reliable provisional responses. Other key headers involved are RSeq in provisional responses and RAck in PRACK requests.
  • Implementation: PRACK is crucial in scenarios requiring assured delivery of provisional responses, such as call flows involving early media.

Conclusion:

In a nutshell, SIP PRACK acts like a trusty thumbs up for provisional responses. By utilizing PRACK, telecom professionals can enhance the dependability of their SIP networks, ensuring smoother and more reliable connections. Understanding PRACK and the related headers is key to maintaining high-quality SIP communication. For those who want to dive deeper, RFC 3262 and other resources offer a wealth of technical details and implementation guidance.

PRACK’tice Makes it Perfect. Keep SIPing!

--

--