天天看點

有關SIP中的PRACK的含義和使用

今天被同僚問到了PRACK的含義,雖然心裡明白,但是在感覺還是沒有說清楚,其實還是自己對其認識的模糊和不徹底導緻的,否則怎麼可能說不清楚呢?  于是對PRACK又做了一下了解,PRACK的具體含義和使用如下:   PRACK:the Provisional Response ACKnowledgement   SIP中的最終響應被了解是會可靠傳輸的,例如對應INVITE的200OK響應,UAC會給一個ACK,告訴UAS已經收到了200OK。200與ACK間的可靠性是end-to-end的。PRACK是SIP消息中保證臨時消息(101-199)可靠傳輸的機制。PRACK就是仿照200OK的可靠性響應,對除100以外的1xx臨時響應(100是hop-to-hop的),進行可靠性傳輸。PRACK一般是對收到183 call in progress/180 ringing的确認,

PRACK的實作   UAC與UAS對是否支援該擴充的協商,就是通過一個option tag -- 100rel。

  為達到該目的,UAC有兩種選擇,在INVITE消息中加入Require:100rel或者Supported:100rel。UAS在接受到上述消息中,也存在選擇的問題。     當INVITE中含有Supported:100rel,UAS在發送臨時消息中,可以根據UAS中是否支援PRACK決定發送臨時消息中的參數。如果支援則臨時消息中加入Require:100rel和Rseq字段,接到該消息UAC發送PRACK;否則不加上述參數,UAC不發PRACK。   當INVITE中含有Require:100rel。UAS如果不支援PRACK需要使用420(不正确的擴充)來拒絕呼叫。否則臨時消息中加入Require:100rel和Rseq字段,接到該消息UAC發送PRACK。   例如:UAC發起的INVITE中含有Supported:100 rel,而UAS也支援該擴充并且在183響應中有Require:100rel,說明接下來會話中,對所有100以外的1xx響應,均要有PRACK回應。   PRACK被定義在RFC3262中。    轉自: http://blog.chinaunix.net/uid-790245-id-2037585.html