SIP中的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中。 

在沒有收到對PRACK確定回覆包之前,PRACK包會不停重發。重發機制見RFC 3262:
     The reliable provisional response is passed to the transaction layer 
   periodically with an interval that starts at T1 seconds and doubles
   for each retransmission .
      並且,要求要小於或等於T2,若超過,以後就按照T2時間間隔發PRACK。若在64*T1還沒有收到相應,就回408.
     通過抓包發現T1=0.5s,T2=4S

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章