SIP 基本的Header 概念

2021-08-01 23:42:45 字數 3075 閱讀 2897

本文對sip 訊息中from, contact, via, record-route 和route 字段進行詳細的解釋,便於大家對sip信令進行分析和排錯

from: 

如果乙個sip訊息中沒有contact或者record-route頭域,那麼callee就會根據from頭域產生後續的request。比如:如果 alice打乙個**給bob,from頭域的內容是 from:alice。那麼bob打給alice時就會使用 sip:[email protected]作為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 來規定。第二層是傳輸層,定義了網路上客戶機與伺服器傳送請求...