前言
此文用于记录作者学习H.248协议的收获,条件所限,没有抓包分析,若有错误还请指正。
1. 简介
H.248协议是2000年由ITU-T(International Telecommunication Union - Telecommunication Standardization Sector,国际电信联盟-电信标准部)第16工作组提出的媒体网关控制协议,它是在早期的MGCP(Media Gateway Control Protocol,媒体网关控制协议)协议基础上改进而成。H.248协议是用于连接MGC(Media Gateway Controller,媒体网关控制器)与MG(Media Gateway,媒体网关)的网关控制协议,应用于媒体网关与软交换之间及软交换与H.248终端之间,是软交换应支持的重要协议。
2. 模型抽象
H.24模型可以抽象为MGC(media gateway control,媒体网关控制器)和MG(media gateway,媒体网关)。MGC和MG通过消息(message)交互,完成注册、呼叫、挂机等一些列功能。
3. MG的逻辑实体
MG拥有两大逻辑实体,关联和终端。其中终端包含在关联内,是实现VOIP功能的主体,如振铃、播放拨号音、传递RTP流等。
3.1 终端
终端,Termination:能接受或发送一种或多种媒体流的逻辑实体,拥有唯一标志Termination ID,Termination ID由MG 分配,终端分三类:
半永久终端(Physcial termination): 可以代表物理实体,如一个TDM信道,或者呼叫的主体。
临时终端(Ephemearal termination): 临时性的信息流,如RTP流。
ROOT:代表整个网关可以用来控制网关媒体属性。
终端可以用特性描述,其中封装了媒体流参数,modem和承载力参数,这些参数可以组成一系列描述符而包涵在命令中,具体特性如下:
性质(property):服务状态、媒体信道属性等。
事件(event):挂机、摘机等。
信号(signal):拨号音、DTMF信号等。
统计(statistics):采集并上报给MGC的统计数据。
终端,Termination,拥有唯一标志Termination ID。Termination ID由MG 分配,可以用通配符ALL,CHOOSE,终端中的通配符使用规则如下。
ALL:符号为*,MG对每一个终端重复该命令。
CHOOSE:符号为$,MG将选择符合条件的终端执行命令。
3.2 关联
关联,Context:表示一组关联相互联系的结合体,可用 Context ID表示,Context ID是由MG选择的32位整数,在MG范围内唯一。
空关联(Null context):一种特殊的关联,包含所有没有与其他终端联系的终端,例如网关刚注册时,所有描述用户线的终端就归属于空关联。
关联特殊编码对照表规则如下:
注:H248定义的模型中,任何关联至少拥有一个终端,否则此关联将被删除,任何终端也只能存在于一个关联域中。
3.3 功能
MG初始化时,拥有一个NULL关联,呼叫终端、代表网关的ROOT等半永久终端便存在于NULL关联。
MG注册时,是用ROOT终端进行注册。
IP电话呼叫成功时,MG中会新建一个关联,并在关联中加入两个终端。其中包含一个呼叫终端,一个RTP流终端。主叫终端会用于检测挂机、拍叉等事件,并且实现响铃、放拨号音等功能;RTP流终端则包含本机的ip信息和远端对话的IP信息,实现信息流的传输。
4. MGC与MG的消息交互
4.1 消息(Message)
消息,mseeage,是从消息头(header)开始的,后面跟着若干事务。
消息头中包含MID(message ID,消息标识符)与版本字段。MID消息的发送者可以是域名,域地址或者设备名,一般使用2944号端口。
4.2 事务(Transaction)
事务,Transaction,一个消息后跟着多个事务,事务彼此间相互独立,多个独立事务被处理时没有先后顺序,事务分为请求(Request)与响应(Response)。
事务拥有标识符TransactionID,请求和响应通过Transaction相关联,响应由请求的接受方发送。作为对请求的一一对应。
请求激发一个事务,事务中包含一个或多个动作,每个动作中由包含一个或多个命令。
响应分为两种中,TransactionReply和TransactionPending。
Reply:表示已经执行完了命令,返回成功或失败信息。
pending:表示已经收到了命令,耗时较长正在执行,防止命令重发。
4.3 动作(Action)
动作和Context密切相关,一个动作又ContextID标识,在一个动作内,命令需要顺序执行,而这些命令又都与此Context相关。
4.4 命令(Command)
H.248中定义了8种命令对连接模型逻辑实体(关联与终端)的操作与管理,命令实现了对逻辑实体完全控制的机制。
H.248规定命令通常用于MGC对于MG的控制,所以通常由MGC发起,只有两个例外,Notify和ServiceChange。
ADD: MGC发起,用于增加一个终端到关联中,当Context ID未指明时,则先创建一个关联,再把终端加入关联中。
Modify:MGC发起,用于修改一个终端的属性、事件和信号参数。
Subtract:MGC发起,用于从关联中删除一个终端,并返回统计状态,当关联中没有其他终端是此关联将被删除。
Move:MGC发起,用于将终端从一个关联移到另一个关联之中。
AuditValue:MGC发起,用于获取有关终端的当前特性;如统计信息、事件和信号参数
AUditCapbilities: MGC发起,用于获取MG所有终端的特性与可能值。
Notify:MG发起,用于讲MG检测到是事件通知给MGC
ServiceChange:MG/MGC均可发起,MG可用此命令向MGC注册,或是上报由终端进入或离开服务;MGC可用此命令控制MG让终端进入或退出服务。
4.5 描述符(Descriptor)
命令的参数被称之为描述符(Desciptor),协议中的一种语法元素,用来描述一组互相联系的特性,命令描述符种类较多,也较为复杂,这里就不赘述了,详情请查阅RFC3015有关Descriptors的章节。
4.6 包(Package)
不同的MG可以支持不同的终端,H.248允许终端具有可选择的特性、信号、事件和统计等。为了实现MGC和MG之间的互操作,H.248把这些可选择的操作组合为包,MGC可以通过Audit命令获取MG实现了那些包,包通常在Signal和Event命令中使用。
不同的包拥有自己的标识符ID,以下为一些常用的包:
包ID:g,通用包(Generic),,该包常见项目中都会用到的包
包ID:root,基础根包(Base root package),该包定义了网关范围内的属性
包ID:al,模拟线监控包(Analog line superversion package),该包定义了模拟线路中各种信号与事件
包ID:cg,呼叫进展音生成器包(Call progress tones generator),该包定义了呼叫进展音中一些常用事件与信号。
下图为包中常见的特性名、事件名、信号名;格式通常为包名/特性名,包名/事件名这样的格式:
5. 工作流程
作者这边没有h.248服务器,条件所限不能抓包分析工作流程,所以这部分也只能先空着,网上有篇资料分析得很详细,可以用来参考。