天天看點

MGCP協定概述

MGCP用于MGC和MG之間的通信,MGC通過MGCP協定對MG上的資源進行配置設定管理。MGCP協定定義在RFC 3435中,采用文本編碼方式,承載于UDP之上。

1. 通信模型:

下圖是一個簡單的網絡拓撲圖,從中可以看到MGCP所處位置(圖中的Call Agent也就是MGC,端口是RFC 3435中給出的預設值):

MGCP協定概述

2. 基本概念:

·         Endpoint:是MG中的概念,可以是虛拟的端口也可以是實際的硬體,比如一個中繼,一條走模拟信号的電話線等;Endpoint采用類似電子郵件的格式來表示,例如[email protected],@之前的部分是在MG中的唯一辨別,@後面的部分是MG的域名;

·         Connection:每一個參與呼叫的Endpoint都會有一個Connection, 一個Call中可以有多個Connection,下圖是一個典型的例子,一個Call中有兩個Endpoint(EP1和EP2),兩個Connection(C1和C2):

              +---+                           +---+

       (channel1) ===|EP1|--(C1)--...       ...(C2)--|EP2|===(channel2)

                     +---+                           +---+

Connection在建立的時候由它所歸屬的MG配置設定一個十六進制字串來辨別,比如,在MDCX指令中會帶有一個名字為ConnectionIdentifier(I)的參數,說明要修改的是哪個Connection;

·         Call:也就是一次呼叫,Call Agent會配置設定一個十六進制字串來表示一個唯一的Call。指令中會用參數Callid(C)來傳輸;

·         Digit Maps:收号方案,Call Agent需要向MG請求使用者所撥打的号碼,如果MG每收到号碼中的一位數字就上報一次的話,效率會比較低下,最好是等号碼收齊之後一次性傳遞給Call Agent,可是MG怎麼知道何時收到的才是使用者撥打的完整号碼呢?這就是Digit Maps的作用,Call Agent下發一套收号方案給MG,MG根據這套規則判斷合适為收号完畢。比如下面是一個Digit Maps的例子:

(0T|00T|[1-7]xxx|8xxxxxxx|#xxxxxxx|*xx|91xxxxxxxxxx|9011x.T),當MG收到了91兩位數字後,根據收号方案得知後面還有10位需要等待,等再收到10位數字後就一次性上報給Call Agent;

·         Package:MGCP是一個可擴充的協定,RFC 3435中隻是描述了基本協定,如果需要對協定繼續擴充就需要定義一些Package(有點Diameter擴充需要定義新的AVP的意思);所有的Package都有一個名字來辨別,這個名字是有IANA來統一管理的;Package中可以包含一些Events,Actions,Signals等,Package就像一個名字空間一樣,把一些屬性限制在特定的Package中表示特定的含義;RFC 3660中定義了Basic MGCP Packages;

·         Signal and Event:Event,比如摘機、挂機、拍叉或撥号号碼等;Signal,比如撥号音、回鈴音、忙音等。

3. MGCP消息格式:

MGCP消息分為Command和Response,兩者是對應的,一個Command和一個Response消息構成一個Transaction用Transaction ID來唯一辨別;兩種消息都是有一個頭部加上可選的SDP構成;Command消息的頭部格式如下:

CommandName TransactionID Endpoint Version

Parameter name: value

...

Response消息頭部如下:

ResponseCode TransactionID ResponseString

Parameter name: value

...

下面分别是一個Command消息和一個Response消息的執行個體:

這是一個RQNT指令,裡面呆了兩個參數,沒有SDP資訊:

RQNT 67184230 aaln/[email protected] MGCP 1.0

X: 13 2F3005001FF

R: L/hu(N),L/hf(N)

這是一個Response消息,裡面帶有一個參數和SDP資訊:

200 67671888 OK

I: 7d80

v=0

o= -1212967687 121 2983687 IN IP4 198.138.79.52

s=-

c=IN IP4 198.138.79.52

t=0 0

m=au dio 61288 RTP/AV P 0

b=AS:80

a=mptime:20

a=rtpmap:0 PCMU/8 000/1

4. MGCP指令:

MGCP共有如下九條指令:

指令名稱 代碼 描述
1 EndpointConfiguration EPCF MGC→MG,訓示網關某端點電路側的編碼特性
2 CreateConnection CRCX MGC→MG,呼叫代理用此指令将某端點和指定的IP位址和UDP端口關聯。另外還需要向遠端端點發送一個建立連接配接指令,這樣才能建立兩個端點間的連接配接
3 ModifyConnection MDCX MGC→MG,修改先前建立連接配接的參數,呼叫代理用該指令将第二個端點的“會話描述”(IP位址、UDP端口和打包參數等資訊)提供給第一個端點。一旦該過程完成,雙方可以進行雙向通訊
4 DeleteConnection DLCX MGC→MG,删除先前建立的連接配接
5 NotificationRequest RQNT MGC→MG請求網關監視某端點發生的某些事件,如發生則通知呼叫代理
6 Notify NTFY MG→MGC,網關用此指令通知呼叫代理請求監視的某些事件已發生
7 AuditEndpoints AUEP MGC→MG,呼叫代理用此指令獲得某端點或一組端點的詳細資訊
8 AuditConnection AUCX MGC→MG,呼叫代理用此指令獲得某端點上某連接配接的詳細資訊
9 AuditConnection RSIP MG→MGC,網關用此指令告知某端點退出服務或投入服務

由MG或MGC終端發起的删除連接配接指令或者重新開機程序指令中,必須包含Reason Code,用來表明删除連接配接或者重新開機的原因,下表是對一些Reason Code的描述:

Cuase Code 原因描述
000 表示端點狀态正常(該原因碼隻用來響應審計請求)
900 表示端點功能失常
901 端點退出業務
902 表示低層連接配接失敗

Response消息中帶有Response Code,其含義如下:

·         100-199:表示臨時應答

·         200和299之間的值表示成功完成

·         400-499:表明指令執行時遇到一個臨時性的錯誤

·         500-599:表明指令執行時遇到一個永久性的錯誤

此外,MGCP指令都是用一些縮寫來表示的,從消息中可以看出,參數以及Package和Package中的一些屬性也都是用幾個字母表示,這些參數或者屬性的詳細含義可以參考RFC 3435中的Section 3, Section 6以及RFC 3660。

5. 呼叫流程:

下面通過一個簡單的呼叫來展示MGCP在整個呼叫過程中的消息流:

MGCP協定概述

1)   主叫摘機,MG1向MGC發NTFY指令,報告主叫摘機事件;

2)   MGC回響應;

3)   MGC向MG1發RQNT指令,指令MG1為使用者送撥号音,要求檢測使用者撥号等動作;

4)   MG1回響應,同時向主叫使用者送撥号音;

5)   主叫使用者撥号碼,MG1向MGC發NTFY指令,将收集到的号碼告訴MGC;

6)   MGC回響應;

7)   MGC向MG1發RQNT指令,指令MG1監視主叫使用者的挂機事件(如果主叫使用者在撥号過程中中途挂機,則停止下面的操作);

8)   MG1回響應;

9)   MGC向MG1發CRCX指令,指令MG1按要求建立連接配接;

10)  MG1回響應MGC并帶有SDP資訊;

11)  MGC向MG2發CRCX指令,指令MG2按要求建立連接配接,指令中帶有MGC1送上來的SDP資訊;

12)  MG2回響應MGC并帶有SDP資訊;

13)  MGC向MG1發MDCX指令,指令根據要求改變連接配接,指令中帶有MG2送上來的SDP資訊;

14)  MG1回響應;

15)  MGC向MG1發RQNT指令,指令MG1送回鈴音;

16)  MG1回響應,同時MG1向主叫使用者送回鈴音;

17)  MGC向MG2發RQNT指令,指令MG2報告被叫使用者的摘機事件和提供振鈴音;

18)  MG2回響應,同時MG2向被叫使用者送振鈴音;

19)  被叫使用者摘機,MG2向MGC發NTFY指令,報告被叫摘機事件;

20)  MGC回響應;

21)  MGC 向MG2發RQNT指令,指令MG2監視并報告被叫使用者的挂機事件;

22)  MG2回響應;

23)  MGC向MG1發RQNT指令,指令MG1監視并報告主叫使用者的挂機事件;

24)  MG1回響應;

25)  MGC向MG1發MDCX指令,指令MG1根據要求将連接配接改為全雙工模式;

26)  MG1回響應,同時MG1建立全雙工模式的連接配接,至此呼叫連接配接建立,開始進入通話階段;假設被叫使用者挂機,MG2

27)  MGC發NTFY指令,報告被叫挂機事件;

28)  MGC回響應;

29)  MGC向MG2發DLCX指令,指令MG2删除連接配接,向被叫送忙音;

30)  MG2回響應,并向被叫送忙音;

31)  MGC向MG1發DLCX指令,指令MG1删除連接配接,并向主叫送忙音;

32)  MG1回響應,同時向主叫送忙音,至此呼叫釋放。