MGCP协议概述

来源:互联网 发布:mssql 数据库同步 编辑:程序博客网 时间:2024/06/05 17:53

MGCP用于MGCMG之间的通信,MGC通过MGCP协议对MG上的资源进行分配管理。MGCP协议定义在RFC 3435中,采用文本编码方式,承载于UDP之上。

1. 通信模型:

下图是一个简单的网络拓扑图,从中可以看到MGCP所处位置(图中的Call Agent也就是MGC,端口是RFC 3435中给出的默认值)

2. 基本概念:

·         EndpointMG中的概念,可以是虚拟的端口也可以是实际的硬件,比如一个中继,一条走模拟信号的电话线等;Endpoint采用类似电子邮件的格式来表示,例如local-endpoint-name@domain-name@之前的部分是在MG中的唯一标识,@后面的部分是MG的域名;

·         Connection每一个参与呼叫的Endpoint都会有一个Connection, 一个Call中可以有多个Connection,下图是一个典型的例子,一个Call中有两个Endpoint(EP1EP2),两个Connection(C1C2)
              +---+                           +---+

       (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下发一套收号方案给MGMG根据这套规则判断合适为收号完毕。比如下面是一个Digit Maps的例子:
(0T|00T|[1-7]xxx|8xxxxxxx|#xxxxxxx|*xx|91xxxxxxxxxx|9011x.T)MG收到了91两位数字后,根据收号方案得知后面还有10位需要等待,等再收到10位数字后就一次性上报给Call Agent

·         PackageMGCP是一个可扩展的协议,RFC 3435中只是描述了基本协议,如果需要对协议继续扩展就需要定义一些Package(有点Diameter扩展需要定义新的AVP的意思);所有的Package都有一个名字来标识,这个名字是有IANA来统一管理的;Package中可以包含一些EventsActionsSignals等,Package就像一个名字空间一样,把一些属性限制在特定的Package中表示特定的含义;RFC 3660中定义了Basic MGCP Packages

·         Signal and EventEvent,比如摘机、挂机、拍叉或拨号号码等;Signal,比如拨号音、回铃音、忙音等。

 

3. MGCP消息格式:

MGCP消息分为CommandResponse,两者是对应的,一个Command和一个Response消息构成一个TransactionTransaction ID来唯一标识;两种消息都是有一个头部加上可选的SDP构成;Command消息的头部格式如下:
CommandName TransactionID Endpoint Version
Parameter name: value
...

Response消息头部如下:
ResponseCode TransactionID ResponseString
Parameter name: value
...

下面分别是一个Command消息和一个Response消息的实例:

这是一个RQNT命令,里面呆了两个参数,没有SDP信息:
RQNT 67184230 aaln/1@example.net 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

MGMGC,网关用此命令通知呼叫代理请求监视的某些事件已发生

7

AuditEndpoints

AUEP

MGCMG,呼叫代理用此命令获得某端点或一组端点的详细信息

8

AuditConnection

AUCX

MGCMG,呼叫代理用此命令获得某端点上某连接的详细信息

9

AuditConnection

RSIP

MGMGC,网关用此命令告知某端点退出服务或投入服务

 

MGMGC终端发起的删除连接命令或者重启进程命令中,必须包含Reason Code,用来表明删除连接或者重启的原因,下表是对一些Reason Code的描述:

Cuase Code

原因描述

000

表示端点状态正常(该原因码只用来响应审计请求)

900

表示端点功能失常

901

端点退出业务

902

表示低层连接失败

 

Response消息中带有Response Code,其含义如下:

·         100199:表示临时应答

·         200299之间的值表示成功完成

·         400499:表明命令执行时遇到一个临时性的错误

·         500599:表明命令执行时遇到一个永久性的错误

 

此外,MGCP命令都是用一些缩写来表示的从消息中可以看出参数以及PackagePackage中的一些属性也都是用几个字母表示这些参数或者属性的详细含义可以参考RFC 3435中的Section 3 Section 6以及RFC 3660

5. 呼叫流程:

下面通过一个简单的呼叫来展示MGCP在整个呼叫过程中的消息流:

1)   主叫摘机,MG1MGCNTFY命令,报告主叫摘机事件;

2)   MGC回响应;

3)   MGCMG1RQNT命令,命令MG1为用户送拨号音,要求检测用户拨号等动作;

4)   MG1回响应,同时向主叫用户送拨号音;

5)   主叫用户拨号码,MG1MGCNTFY命令,将收集到的号码告诉MGC

6)   MGC回响应;

7)   MGCMG1RQNT命令,命令MG1监视主叫用户的挂机事件(如果主叫用户在拨号过程中中途挂机,则停止下面的操作)

8)   MG1回响应;

9)   MGCMG1CRCX命令,命令MG1按要求创建连接;

10)  MG1回响应MGC并带有SDP信息;

11)  MGCMG2CRCX命令,命令MG2按要求创建连接,命令中带有MGC1送上来的SDP信息;

12)  MG2回响应MGC并带有SDP信息;

13)  MGCMG1MDCX命令,命令根据要求改变连接,命令中带有MG2送上来的SDP信息;

14)  MG1回响应;

15)  MGCMG1RQNT命令,命令MG1送回铃音;

16)  MG1回响应,同时MG1向主叫用户送回铃音;

17)  MGCMG2RQNT命令,命令MG2报告被叫用户的摘机事件和提供振铃音;

18)  MG2回响应,同时MG2向被叫用户送振铃音;

19)  被叫用户摘机,MG2MGCNTFY命令,报告被叫摘机事件;

20)  MGC回响应;

21)  MGC MG2RQNT命令,命令MG2监视并报告被叫用户的挂机事件;

22)  MG2回响应;

23)  MGCMG1RQNT命令,命令MG1监视并报告主叫用户的挂机事件;

24)  MG1回响应;

25)  MGCMG1MDCX命令,命令MG1根据要求将连接改为全双工模式;

26)  MG1回响应,同时MG1建立全双工模式的连接,至此呼叫连接建立,开始进入通话阶段;假设被叫用户挂机,MG2

27)  MGCNTFY命令,报告被叫挂机事件;

28)  MGC回响应;

29)  MGCMG2DLCX命令,命令MG2删除连接,向被叫送忙音;

30)  MG2回响应,并向被叫送忙音;

31)  MGCMG1DLCX命令,命令MG1删除连接,并向主叫送忙音;

32)  MG1回响应,同时向主叫送忙音,至此呼叫释放。

原创粉丝点击