本文對sip 訊息中from, contact, via, record-route 和route 字段進行詳細的解釋,便於大家對sip信令進行分析和排錯
from:
如果乙個sip訊息中沒有contact或者record-route頭域,那麼callee就會根據from頭域產生後續的request。比如:如果 alice打乙個**給bob,from頭域的內容是 from:alice。那麼bob打給alice時就會使用 sip:alice@example.org作為to頭域和request-uri頭域的內容。
contact:
後續request將根據contact頭域的內容決定目的地的位址,同時將contact頭域的內容放到request-uri中。它還可以用來指示沒 有在record-route頭域中記錄的proxies的位址。同時它還可以被用在redirect servers和register requests 和responses。
record-route/route:
record-route頭域一般是被proxies插入到request中的,這樣後續的request如何有著和前面一樣的call-id就會被路由 到這些proxies。它也會被user agent作為傳送後續request的依據。這套機制很像source-route,record-route頭域的資訊被複製到route頭域中。並 且request-uri頭域會被設定為第乙個route頭域的內容。
via:
via頭域是被伺服器插入request中,用來檢查路由環的,並且可以使response根據via找到返回的路。它不會對未來的request 或者是response造成影響。
總的來說,如果有route,request就應該根據route傳送,如果沒有就根據contact頭域傳送,如果連contact都沒有,就根據from頭域傳送。
dialog, transaction, session
sip中3個很重要的概念,就是dialog, session和transaction。
以下是我學習中對這三個概念的心得,貼出來和大家**。
dialog
的建立是收到uas的響應(to tag)時開始建立的。收到180響應時建立的
dialog叫做早期對話(early dialog),收到2xx的應答開始才是真正的dialog建立。
session
是**交換之後才建立的。具體而言就是通過offer/answer方式交換sdp的**。
session的建立可以使invite-200 也可以是200-ack。這要看**的交換發生的時間。
具體來說,invite 中的訊息體用sdp語言來描述自己可處理的**型別,200ok中
帶回uas端可處理的**型別。這個時候**交換就算是完成了。也就是session建立起
來了。
dialog
是end-point對end-point的關係。而
transaction
是hop by hop的關係。dialog通過
from tag, to tag(應該說local tag, remote tag--這兩個tag隨著uac和uas而不同。)以及
call-id 來判別。而transaction是乙個sip entity和下乙個sip entity之間請求和應答關係,(無狀態**伺服器不再此列)
是通過對via裡的branch來判別的。
transaction:
維護hop to hop狀態,包括乙個請求和其觸發的所有響應,包括若干暫時響應和乙個最終響應。生命週期從請求產生到收到最終響應。
dialog:
維護peer to peer狀態,目前只有invite和subscribe請求會觸發dialog。其生命週期貫穿乙個端到端會話的始終。
下面是對sip一些應答訊息中數字的解釋,大家可以保留下來作為參考
sip應答頭
1xx = 通知性應答
100 正在嘗試
180 正在撥打
181 正被轉接
182 正在排隊
183 通話進展
2xx = 成功應答
200 ok
202 被接受:用於轉介
3xx = 轉接應答
300 多項選擇
301 被永久遷移
302 被暫時遷移
305 使用**伺服器
380 替代服務
4xx = 呼叫失敗
400 呼叫不當
401 未經授權:只供序號產生器構使用,**伺服器應使用**伺服器授權407
402 要求付費(預訂為將來使用)
403 被禁止的
404 未發現:未發現使用者
405 不允許的方法
406 不可接受
407 需要**伺服器授權
408 呼叫超時:在預定時間內無法找到使用者
410 已消失:使用者曾經存在,但已從此處消失
413 呼叫實體過大
414 呼叫uri過長
415 不支援的**型別
416 不支援的uri方案
420 不當擴充套件:使用了不當sip協議擴充套件,伺服器無法理解該擴充套件
421 需要擴充套件
423 時間間隔過短
480 暫時不可使用
481 通話/事務不存在
482 檢測到迴圈
483 跳數過多
484 位址不全
485 模糊不清
486 此處太忙
487 呼叫被終止
488 此處不可接受
491 呼叫待批
493 無法解讀:無法解讀 s/mime文體部分
5xx = 伺服器失敗
500 伺服器內部錯誤
501 無法實施:sip呼叫方法在此處無法實施
502 不當閘道器
503 服務不可使用
504 伺服器超時
505 不支援該版本:伺服器不支援sip協議的這個版本
513 訊息過長
6xx = 全域性失敗
600 各處均忙
603 拒絕
604 無處存在
606 不可使用
SIP基本概念
sip協議中,比較有特點的就是sip事務了。那麼想要理解sip事務的概念,我們還需要了解sip請求的一些內容。sip事務的概念 乙個sip請求以及由它觸發的一系列應答 包括臨時應答和乙個最終應答 sip請求有6種 invite,ack,options,bye,cancel,register sip請...
sip協議的基本概念
sip session initiation protocol 即初始會話協議 是 ietf 提出的基於文字編碼的 ip 多 會議協議。用於建立 修改並終止多 會話。sip協議可用於發起會話,也可以用於邀請成員加入已經用其它方式建立的會話。乙個會議呼叫或 呼叫可以包含乙個或多個請求 響應事務 tra...
SIP 的幾個概念
sip協議初學者必須明白的幾個重要概念 一 sip協議的分層結構 sip是乙個分層結構協議,它的行為根據一組平等獨立的處理階段來描述,每一階段之間只是松耦合。sip的最底層是語法和編碼。它的編碼使用增強backus nayr形式語法 bnf 來規定。第二層是傳輸層,定義了網路上客戶機與伺服器傳送請求...