實驗模擬環境如下:華爲SoftCo模擬軟件、兩個OpenEye軟終端。IP地址與號碼分配如下:
配置命令如下:
config add batch sipue seid 8000 authorizationtype noauth number 5
//批量增加SIP帳號
config add subscriber eid 8000 dn 7000 number 5
//批量增加SIP話機號碼
config add prefix dn 7 callcategory basic callattribute inter cldpredeal no minlen 4 maxlen 4 //配置局內字冠
下面是8001呼叫8000的協議流程圖:
首先配置好SoftCo交換機之後,然後配置SIP軟終端,在配置好之後,會自發向SIP服務器註冊,發送register請求報文,服務器收到後註冊通過,則返回狀態報文OK,表示註冊成功。
8001呼叫8000,向SIP服務器發送INVITE報文,向源發送Trying報文,SIP服務器通過查詢USN,找到對應的分機號碼,然後將INVITE報文轉發給8000,8000收到後向服務器返回Trying報文,如果8000接受INVITE的參數,則8000響鈴,向SIP服務器發送ringing回鈴消息, SIP服務器收到後,將ringing回鈴消息轉發給8001,這時8001提到回鈴聲 ;同時如果8000摘機了,向SIP服務器返回狀態消息OK,表示對方摘機,SIP服務器轉發給8001,8001收到OK後,發送ACK確認,經SIP服務器轉發給8001,這時整個通話連接建立起來,用RTP協議來傳輸語音視頻流,雙方便能聽到聲音了。通話一段時間後,如果8001想要結束通話,則掛機,向SIP服務器發送BYE消息,SIP服務器轉發給8000,同時返回狀態消息OK,8000收到BYE則知道對方已掛機,返回Trying和OK消息,最後整個通話結束。
以上內容均爲個人見解,歡迎各位指正!報文詳細格式請參考附件文檔。
sip消息類型和消息格式
SIP是一個基於文本的協議,使用的是UTF-8字符集.
SIP消息主要分爲兩大類:
一類是由客戶端發往服務器的請求消息(Request);
一類是由服務器發往客戶端的應答消息(Response).
一個基本的SIP消息包括起始行、一個或多個頭字段、說明頭字段結束的空行和一個可選的消息體。
消息=起始行(包括請求行/狀態行;請求行規定了請求的類別,而狀態行指出了每個請求的狀態,比如是成功還是失敗。如果是失敗的話還要給出失敗的原因或類型。)
*頭字段
CRLF
[消息體] (消息首部給出了關於請求或應答的更多信息一般包括消息的來源、規定的消息接收方,另外還包括一些其他方面的重要信息。 消息體通常描述將要建立會議的類型包括所交換媒體的描述,但不具體定義消息體的內容或結構,其結構或內容使用另外一個協議來描述,就是會話描述協議 SDP。)
請求消息
請求行=方法 +空格 +請求地址 +SIP版本號 +空行
通過一個請求行作爲起始行,請求行包括了方法名、請求的URL、協議版本號、中間用空格分開。
六種請求方法:
INVITE 發出呼叫會話請求
ACK INVITE請求被最終請求
BYE 釋放一個呼叫會話
CANCEL 取消掛起的呼叫
REGISTER 登記註冊用戶代理
OPTIONS 查詢服務器能力
應答消息
狀態行=SIP版本+空格+狀態碼+空格+相關文本短語+空行
SIP應答消息狀態碼與功能
類型 狀態碼 狀態說明
臨時應答(1XX) 100 Trying 正在處理中
180 Ringing 振鈴
181 call being forwarder 呼叫正在前向
182 queue 排隊
181* session progress 會話進行
臨時應答(1XX) 100 Trying 正在處理中
180 Ringing 振鈴
181 call being forwarder 呼叫正在前向
182 queue 排隊
181* session progress 會話進行
會話成功(2XX) 200 OK 會話成功
重定向(3XX) 300 multiple 多重選擇
301 moved permanently 永久移動
302 moved temporaily 臨時移動
305 use proxy 用戶代理
380 alternative service 替代服務
301 moved permanently 永久移動
302 moved temporaily 臨時移動
305 use proxy 用戶代理
380 alternative service 替代服務
請求失敗(4XX) 400 bad request 錯誤請求
401unauthorized 未授權
402 payment required 付費要求
403 forbidden 禁止
404 not found 未發現
405 method no allowed 方法不允許
406 not acceptable 不可接受
407 proxy authentication required 代理需要認證
408 request timeout 請求超時
410 gone 離開
413 request entity too large 請求實體太大
414 request-url too long 請求URL太長
415 unsupported media type 不支持的媒體類型
416 unsupported url scheme 不支持的URL計劃
420 bad extension 不良擴展
421 extension required 需要擴展
423 interval too brief 間隔太短
480 temporarily unavailable 臨時失效
481 call/transaction does not exist 呼叫/事務不存在
482 loop detected 發現環路
483 too many hops 跳數太多
484 address incomplete 地址不完整
485 ambiguous 不明朗
486 busy here 這裏忙
487 request terminated 請求終止
488 not acceptable here 這裏請求不可接受
491 request pending 未決請求
493 undecipherable 不可辨識
401unauthorized 未授權
402 payment required 付費要求
403 forbidden 禁止
404 not found 未發現
405 method no allowed 方法不允許
406 not acceptable 不可接受
407 proxy authentication required 代理需要認證
408 request timeout 請求超時
410 gone 離開
413 request entity too large 請求實體太大
414 request-url too long 請求URL太長
415 unsupported media type 不支持的媒體類型
416 unsupported url scheme 不支持的URL計劃
420 bad extension 不良擴展
421 extension required 需要擴展
423 interval too brief 間隔太短
480 temporarily unavailable 臨時失效
481 call/transaction does not exist 呼叫/事務不存在
482 loop detected 發現環路
483 too many hops 跳數太多
484 address incomplete 地址不完整
485 ambiguous 不明朗
486 busy here 這裏忙
487 request terminated 請求終止
488 not acceptable here 這裏請求不可接受
491 request pending 未決請求
493 undecipherable 不可辨識
服務器失敗(5XX) 500 server internal error 服務器內部錯誤
501 not implemented 不可執行
502 bad gateway 壞網關
503 service unavailable 服務無效
504 server time-out 服務器超時
505 version not supported 版本不支持
513 message too large 消息太大
501 not implemented 不可執行
502 bad gateway 壞網關
503 service unavailable 服務無效
504 server time-out 服務器超時
505 version not supported 版本不支持
513 message too large 消息太大
全局性錯誤(6XX) 600 busy everywhere 全忙
603 decline 丟棄
604 does not exist anywhere 不存在
606 not acceptable 不可接受
603 decline 丟棄
604 does not exist anywhere 不存在
606 not acceptable 不可接受