H248网关控制协议呼叫流程示例.docx
《H248网关控制协议呼叫流程示例.docx》由会员分享,可在线阅读,更多相关《H248网关控制协议呼叫流程示例.docx(42页珍藏版)》请在冰点文库上搜索。
H248网关控制协议呼叫流程示例
H.248基本呼叫流程
一、需要了解的一些H.248概念:
1、媒体网关(MG):
MG将一种网络中的媒体转换成另一种网络所要求的媒体格式。
2、媒体网关控制器(MGC):
MGC对MG中与媒体通道连接控制相关的呼叫状态进行控制。
3、终结点(Termination):
终结点是MG上的逻辑实体,它发起和/或接收媒体和/或控制流。
终结点用一些属性来描述,如媒体流、modem和承载能力等属性,这些属性组成了一系列描述符。
4、关联(Context):
关联是一些终结点具有相互联系而形成的结合体。
有一种特殊的关联称为空关联(Null),它包含所有那些与其它终结点没有联系的终结点。
例如,接入网关中所有的空闲线路都被看作空关联中的终结点。
5、命令(Command):
本协议定义了一些命令用于对协议连接模型中的逻辑实体(关联和终结点)进行操作和管理。
命令提供了本协议所支持的最精微层次的控制。
例如,通过命令可以向关联增加终结点、修改终结点、从关联中删除终结点以及审计关联或终结点的属性。
命令提供了对关联和终结点的属性的完全控制;包括指定要求终结点报告的事件、向终结点加载的信号以及指定关联的拓扑结构(谁能听见/看见谁)。
6、事务(Transaction):
MG与MGC之间的一组命令构成事务。
一个事务可以由一个或多个动作(Action)组成,每个动作又由作用范围局限在同一个关联中的一个或多个命令组成。
7、请求(Request)和响应(Reply):
MGC和MG之间进行各种层次上的交互(如事务交互、动作交互和命令交互等)。
每次交互包含一个请求和一个响应。
请求由发送方发起;接收方对请求进行处理,并将处理结果包含在响应中返回给发送方。
通常MGC发起请求而MG做出响应。
但相反的情况也是可能的。
协议结构:
MG和MGC之间的一组命令(command)组成了事务(Transaction)。
每个Transaction由一个TransactionID来标识。
Transaction由一个或者多个动作(Action)组成。
一个Action又由一系列command以及对关联属性进行修改和审计的指令组成,这些命令、修改和审计操作都局限在一个关联之内。
因而每个动作(action)通常指定一个关联标识(Contextid).
所有Megaco/H.248信息采用ASN.1文本信息格式。
Megaco/H.248通过一系列命令控制终止(Termination)、关联域(Context)、事件(Event)以及信号(Signal)等。
下面列出了各种命令:
Add―Add命令负责添加Termination到Context。
Context中的第一个Termination上的Add命令可以用于创建一个Context。
Modify―Modify命令用于更改Termination的属性、事件和信号。
Subtract―Subtract命令用于断开Context中的Termination连接,并返回加入Context的关于Termination的统计值。
Context中最后Termination上的Subtract命令用以删除Context。
Move―Move命令自动将Termination移动到其它Context。
AuditValue―AuditValue命令用以返回属性、事件和信号的当前状态,以及终点统计值.
AuditCapabilities―AuditCapabilities命令返回媒体网关所支持的关于终点属性、事件及信号等的所有可能值。
Notify―Notify命令允许媒体网关通知媒体网关控制器关于媒体网关中发生的事件。
ServiceChange―ServiceChange命令允许媒体网关通告媒体网关控制器关于单个终点或终点组将退出服务或返回到服务。
此外MG利用ServiceChange命令通告其对MGC(注册)的可用性,并通告MGC关于迫近或完全重启的MG。
MGC可能通过向MG发送ServiceChange命令而通告MG其移交过程。
MGC还可能通告ServiceChange命令通知MG为服务增添单个终点或终点组或将单个终点或终点组退出服务。
H.248和MeGaCo在协议文本上相同,只是在协议消息传输语法上有所区别,H.248采用ASN.1语法格式(ITU-TX.6801997),MeGaCo采用ABNF语法格式(RFC2234)。
【典型呼叫过程】
a.主叫摘机,mg检测到后通过notify命令将事件(off-hook)报告给mgc;
b.mgc通过add命令让mg将主叫端口加入一个context,并向主叫送拨号音;
c.用户拨号,mg将收到的号码通过notify命令报告给mgc;
d.mgc分析被叫号码,找出被叫端口,命令mg将被叫端口加入一个context;
e.mgc命令mg向主叫送回铃音,向被叫送振铃音;
f.被叫摘机,mgc命令mg连接主被叫;
g.主/被叫挂机,mgc命令mg释放主被叫连接,将主/被叫端口放空context。
二、环境创建
主叫号码:
66680012ip=221.6.59.123,line1被叫号码;66680014ip=221.6.59.123,line3
两号码在同一IAD(221.6.59.123)上,主叫拨打被叫振铃,被叫应答,被叫先挂机。
如何trc221.6.59.123的呼叫?
1、在GUI上查看221.6.59.123所使用的的cocoCE为COCOCE2,现使用的是COCOCE-2A
2、在FWPC上执行tcoco3andhost221.6.59.123|megafilt-a-s24,25-mx|teexiong.log(过滤除221.6.59.123之外的内容)
3、用66680012拨打66680014,然后得到xiong.log,通过morexiong.log打开文件或通过FTP下载到本地硬盘。
三、消息流程分解:
*************************************************************
*MegaFilt-Middleware/Megaco/SIPfiltertool*
*version11106/08/2004WR4MGC*
**
*writtenby:
M.Spreter(ASEL)and*
*************************************************************
Expandingall(Middleware,Megaco,SIP,Internalmessages)
Suppressingfollowingmessages...
MW_MonitorRequest
MW_MonitorResponse
TracingMiddleware...withhexdump
1)MG1(221.6.59.123.2944)检测到用户User1(njasbtest1line1)的摘机,将此摘机事件(Transaction)通过Notify命令上报给MGC;
-------------------------------------------------------------------
11:
35:
35.108365eth0<221.6.59.123.2944>njcoco2.2944:
udp162
MEGACO/1[221.6.59.123]:
2944Transaction=40{
Context=-{
Notify=njasbtest1line1{
ObservedEvents=589829{
19700101T03211814:
al/of(模拟用户/摘机)
}
}
}
}TransactionResponseAck{
39
}
内容解释:
采用MEGACO协议传送,从MG[221.6.59.123]端口2944发往MGC的njcoco2.端口2944,此事务是TransactionRequest,事务的标识为Transactionid=40,此动作由Notify命令组成,Notify命令里包含下列信息:
终结点标识=njasbtest1line1
请求序号=589829
被观察事件描述符:
al/of---->event:
analogsub/offhook
TransactionResponseAck
2)MGC向MG1返回Reply
11:
35:
35.115867eth0>njcoco2.11000>221.6.59.123.2944:
udp45(DF)
!
/1[221.6.59.7]P=40{
C=-{
N=njasbtest1line1
}
}
解释:
P=reply
TransactionReply由事务的接收方发送,作为对TransactionRequest的一对一响应。
一个
TransactionReply包含一个或者多个动作,其中每个动作都必须指定动作的目标关联,以及对应每个关联的一个或者多个响应。
当事务的响应方完成了TransactionRequest的处理后,就会发送一个TransactionReply。
3、MG1上的用户User1拨号,MG1根据MGC所下发的号码表进行收号,并将所拨号码及匹配结果用Notify消息上报MGC;
11:
35:
39.196731eth0<221.6.59.123.2944>njcoco2.2944:
udp186
MEGACO/1[221.6.59.123]:
2944Transaction=41{
Context=-{
Notify=njasbtest1line1{
ObservedEvents=393217{
19700101T03212209:
dd/ce{
ds="66680014",Meth=UM
}
}
}
}
}TransactionResponseAck{
40
}
事件描述:
MG检测收号完成(dd/ce),收到数字串(ds)为66680014,所收数字与DIGMAP正好匹配(Meth=UM)
关于匹配(metching)的定义:
如果首位已匹配但在后续收号过程中发生号码和号码表不匹配或长定时器超时,则只向MGC上报已匹配成功的号码,并且meth=PM;
如果首位已匹配但在后续收号过程中发生短定时器超时,则只向MGC上报已匹配成功的号码,并且meth=FM;
如果用户首位拨号匹配失败,则向MGC上报ds="",Meth=PM;
如果拨号精确匹配,则上报所拨号码,Meth=UM;
4、MGC向MG1返回Reply;
-------------------------------------------------------------------
11:
35:
39.200330eth0>njcoco2.11000>221.6.59.123.2944:
udp45(DF)
!
/1[221.6.59.7]P=41{
C=-{
N=njasbtest1line1
}
}
5、MGC向MG发送Add消息,在MG中创建一个新context,并在context中加入用
户User1的termination和RTPtermination,其中RTP的Mode设置为sendandrecivice,并设置语音压缩算法;
11:
35:
39.211946eth0>njcoco2.11000>221.6.59.123.2944:
udp142(DF)
!
/1[221.6.59.7]T=100366{
C=${
A=njasbtest1line1{
M{
O{
MO=SR,tdmc/ec=on,tdmc/gain=0----->mode=sendandrecivice
}
}
},
A=${----->add“CHOOSE”
M{
O{
MO=RC------>mode=Receiveonly
},
L{--------->Local描述符
v=0c=INIP4$m=audio$RTP/AVP8------->V=0,C=INIP4,M=AUDIO,RTP/AVP8
}
}
}
}
}
H.248协议里几个常用缩写:
"T="TransactionID
"C="ContextID
"A="ADDCOMMAND
"M"MediaDescriptor
"O"LocalControlDescriptor(可能是,无从考证)
"MO"ModeDescriptor
"L"LocalDescriptor
"R"RemoteDescriptor
具体解释见第六流程
6、MG1为所需Add的RTP分配资源RTP1,并向MGC应答Reply消息,其中包括该RTP1的IP地址,采用的语音压缩算法和RTP端口号等;
-------------------------------------------------------------------
11:
35:
39.301541eth0<221.6.59.123.2944>njcoco2.11000:
udp181
MEGACO/1[221.6.59.123]:
2944Reply=100366{
Context=12{
Add=njasbtest1line1,Add=RTP/0000{
Media{
Local{
v=0
c=INIP4221.6.59.123
m=audio4000RTP/AVP8
}
}
}
}
}
*****************相关知识*******************************************8
MEDIA的几种描述符之间的关系如下所示:
MediaDescriptor,TerminationStateDescriptor,StreamDescriptor,LocalControlDescriptor,
LocalDescriptor,RemoteDescriptor
其中,当本协议采用文本方式编码时,Local和Remote描述符包含RFC2327所定义的SDP的会话描述(sessiondescription)。
SDP会话描述见附一,例子的描述如下:
m=(媒体名称和传输地址)
m=
MEDIA可以选择"audio","video","application","data"and"control
例子的m=audio4000RTP/AVP8如此理解
wouldspecifythatports4000formoneRTP/RTCPand
RTP/AVPisthetransportprotocoland8istheformat(seebelow).
Codecid:
8-àG.711A;0-àG.711U;18-àG.729;4-àG.723
c=连接信息-如果包含在会话层则该字段可选
c=
例子所用的描述符定义:
c=INIP4221.6.59.123―――>IN=internet,IPV4,所连接的ip地址
7、MGC向MG2发送Add消息,在MG2(例子MG2为221.6.59.123的line3)创建一个新context,在context中加入用户User2的termination和RTPtermination,其中Mode设置为SendReceive(更多Mode见附二),并设置远端RTP地址及端口号、语音压缩算法等,例子MG2为221.6.59.123的line3;
-------------------------------------------------------------------
11:
35:
39.958274eth0>njcoco2.11000>221.6.59.123.2944:
udp196(DF)
!
/1[221.6.59.7]T=100367{
C=${
A=njasbtest1line3{
M{
O{
MO=SR,tdmc/ec=on,tdmc/gain=0
}
}
},
A=${
M{
O{
MO=SO
},
L{
v=0c=INIP4$m=audio$RTP/AVP8
},
R{
v=0c=INIP4221.6.59.123m=audio4000RTP/AVP8
}
}
}
}
}
H.248协议里几个常用缩写:
"T="TransactionID
"C="ContextID
"A="ADDCOMMAND
"M"MediaDescriptor
"O"LocalControlDescriptor(可能是,无从考证)
"MO"ModeDescriptor
"L"LocalDescriptor
"R"RemoteDescriptor
-------------------------------------------------------------------
8)MG2为所需Add的RTP分配资源RTP2,并向MGC应答Reply消息,其中包括该RTP2的IP地址,采用的语音压缩算法和RTP端口号等;
11:
35:
40.035566eth0<221.6.59.123.2944>njcoco2.11000:
udp181
MEGACO/1[221.6.59.123]:
2944Reply=100367{
Context=13{
Add=njasbtest1line3,Add=RTP/0002{
Media{
Local{
v=0
c=INIP4221.6.59.123
m=audio4004RTP/AVP8
}
}
}
}
}
9)MGC向MG1发送Modify消息,发送MG2的信息:
-------------------------------------------------------------------
11:
35:
40.040059eth0>njcoco2.11000>221.6.59.123.2944:
udp143(DF)
!
/1[221.6.59.7]T=100368{
C=12{
MF=njasbtest1line1{
M{
O{
MO=SR
}
}
},
MF=RTP/0000{
M{
O{
MO=SR
},
R{
v=0c=INIP4221.6.59.123m=audio4004RTP/AVP8
}
}
}
}
}
10)MG1向MGC返回Reply;
-------------------------------------------------------------------
11:
35:
40.140345eth0<221.6.59.123.2944>njcoco2.11000:
udp106
MEGACO/1[221.6.59.123]:
2944Reply=100368{
Context=12{
Modify=njasbtest1line1,Modify=RTP/0000
}
}
11)MGC向MG2发送Modify消息,MG2向被叫送振铃音(al/ri)
-------------------------------------------------------------------
11:
35:
40.146983eth0>njcoco2.11000>221.6.59.123.2944:
udp202(DF)
!
/1[221.6.59.7]T=100369{
C=13{
MF=njasbtest1line3{
E=589829{
al/of{
strict=exact
},
al/on{
strict=exact
},
g/sc
},
SG{
andisp/dwa{
ddb=8017010830363038313133350208363636383030313207014fca,pattern=1
}
}
},
MF=RTP/0002
}
}
12)MGC向MG1发送Modify消息,让User1放回铃音,并设置RTP1的远端RTP地址及端口号、语音压缩算法等;
11:
35:
40.147741eth0>njcoco2.11000>221.6.59.123.2944:
udp74(DF)
!
/1[221.6.59.7]T=100370{
C=12{
MF=njasbtest1line1{
SG{
cg/rt{
SY=TO,DR=0
}
}
}
}
}
13)MG1向MGC返回Reply;
11:
35:
40.245253eth0<221.6.59.123.2944>njcoco2.11000:
udp163
MEGACO/1[221.6.59.123]:
2944Reply=100369{
Context=13{
Modify=njasbtest1line3,Modify=RTP/0002
}
}Reply=100370{
Context=12{
Modify=njasbtest1line1
}
}
13)MG2检测到用户User2的摘机,将此摘机事件通过Notify命令上报给MGC;
11:
35:
44.649345eth0<221.6.59.123.2944>njcoco2.2944:
udp163
MEGACO/1[221.6.59.123]:
2944Transaction=42{
Context=13{
Notify=njasbtest1line3{
ObservedEvents=589829{
19700101T03212729:
al/of(被叫摘机)
}
}
}
}T