SIP中的最終響應(yīng)被理解是會(huì)可靠傳輸?shù)模鐚?duì)應(yīng)INVITE的200OK響應(yīng),UAC會(huì)給一個(gè)ACK,告訴UAS已經(jīng)收到了200OK。200與ACK間的可靠性是end-to-end的。PRACK是SIP消息中保證臨時(shí)消息(101-199)可靠傳輸?shù)臋C(jī)制。PRACK就是仿照200OK的可靠性響應(yīng),對(duì)除100以外的1xx臨時(shí)響應(yīng)(100是hop-to-hop的),進(jìn)行可靠性傳輸。PRACK一般是對(duì)收到183 call in progress/180 ringing的確認(rèn),
PRACK的實(shí)現(xiàn)
UAC與UAS對(duì)是否支持該擴(kuò)展的協(xié)商,就是通過(guò)一個(gè)option tag -- 100rel。
為達(dá)到該目的,UAC有兩種選擇,在INVITE消息中加入Require:100rel或者Supported:100rel。UAS在接受到上述消息中,也存在選擇的問(wèn)題。
當(dāng)INVITE中含有Supported:100rel,UAS在發(fā)送臨時(shí)消息中,可以根據(jù)UAS中是否支持PRACK決定發(fā)送臨時(shí)消息中的參數(shù)。如果支持則臨時(shí)消息中加入Require:100rel和Rseq字段,接到該消息UAC發(fā)送PRACK;否則不加上述參數(shù),UAC不發(fā)PRACK。
當(dāng)INVITE中含有Require:100rel。UAS如果不支持PRACK需要使用420(不正確的擴(kuò)展)來(lái)拒絕呼叫。否則臨時(shí)消息中加入Require:100rel和Rseq字段,接到該消息UAC發(fā)送PRACK。
例如:UAC發(fā)起的INVITE中含有Supported:100 rel,而UAS也支持該擴(kuò)展并且在183響應(yīng)中有Require:100rel,說(shuō)明接下來(lái)會(huì)話中,對(duì)所有100以外的1xx響應(yīng),均要有PRACK回應(yīng)。