From:
<span style="font-family:'楷體';font-size:17px">如果一個SIP消息中沒有Contact或者Record-Route頭域宾娜,那么callee就會根據(jù)From頭域產生后續(xù)的Request。</span>
也就是這里Record-Route滨彻、Contact、From是有優(yōu)先級的挪蹭,如果Record-Route存在亭饵,會先選擇Record-Route,沒的話再去看Contact有沒有梁厉,如果連Contact都沒有的話辜羊,最后才會根據(jù)From頭域里面的地址殘剩后續(xù)的Request。
<span style="font-family:'楷體';font-size:17px">from里的URI是可變的词顾,因為中間可能經過層層proxy代理八秃,但是To的地址是唯一的。</span>
Contact:
<span style="font-family:'楷體';font-size:17px">后續(xù)Request將根據(jù)Contact頭域的地址內容決定目的地的地址肉盹,同時將Contact頭域的內容放到Request-URI中昔驱。</span>
看個栗子(alice發(fā)起通話,最后bob結束通話):
這里alice(2006)向bob(2008)主動發(fā)起INVITE上忍,這里的Request-URI和Contact是這樣的: 消息的初始Request-URI應該設置為 To字段中URI 的值骤肛。
現(xiàn)在要說的話都說完了,bob想要掛斷電話并發(fā)起請求窍蓝,這里的Request-URI和Contact是這樣的:
這里也就是說腋颠,一開始是alice(2006)向bob(2008)發(fā)起call請求,最后卻是bob發(fā)起掛斷電話的請求吓笙,這時秕豫,bob從接收者變成了發(fā)起者,而相應的請求行的Request-URI就變成了alice的地址观蓄,contact里面也變成了發(fā)起者bob的地址混移。
<span style="font-family:'楷體';font-size:17px">請求者的身份和接收者的身份根據(jù)請求是可以相互轉換。</span>
Record-Route/Route:
Record-Route頭域一般是被proxies插入到request中的侮穿,這樣后續(xù)的Request如何有著和前面一樣的call-id就會被路由 到這些proxies歌径。它也會被User Agent作為發(fā)送后續(xù)request的依據(jù)。這套機制很像source-route亲茅,Record-Route頭域的信息被復制到Route頭域中回铛。并 且Request-URI頭域會被設置為第一個Route頭域的內容。
Via:
Via頭域是被服務器插入request中克锣,用來檢查路由環(huán)的茵肃,并且可以使response根據(jù)via找到返回的路。它不會對未來的request 或者是response造成影響袭祟。 響應消息就依靠via來完成验残。
<span style="font-family:'楷體';font-size:17px">總的來說,如果有Route巾乳,request就應該根據(jù)Route發(fā)送您没,如果沒有就根據(jù)Contact頭域發(fā)送鸟召,如果連Contact都沒有,就根據(jù)From頭域發(fā)送氨鹏。</span>
<span style="font-family:'楷體';font-size:17px">Loop:環(huán)路欧募。當請求抵達一個代理服務器,代理服務器轉發(fā)這個請求仆抵,當這個請求再次來到同一個
代理服務器跟继,就稱之為環(huán)路。</span>
To
To頭字段首先指定了請求的所需“邏輯”收件人镣丑,或者是此請求的目標用戶或資源的記錄地址还栓。這可能是也可能不是請求的最終接收者。To頭域可以包含SIP或SIPS URI传轰,但也可以使用其他URI方案