网守(GateKeeper,GK)
目录 |
网守是指网络上提供地址翻译和控制H.323终端、网关和MCU接入的H.323实体。网守也可为终端、网关和MCU提供其他服务,比如带宽管理和网关定位。
网守在其负责的域中为H.323终端、网关和MCU提供地址翻译和接入控制功能。在H.323系统中网守是可选的,但如果有网守,它提供鉴权、选路、呼叫详细话单和带宽管理等集中管理功能。在一个H.323系统中,可以没有网守,也可以有一个或多个网守,网守之间可以相互通信。在逻辑上网守是一个独立的实体,但在物理上可以与终端、MCU、或网关设计在一起。
1.网守的基本功能
1)地址翻译。根据地址翻译表将别名地址翻译为传输层地址,此翻译表可由登记消息或其他方式更新。
2)接入控制。根据呼叫授权、带宽或厂商制订的其他原则来确定是否有权接入。采用ARQ/ACF/ARJ H.225.0消息。此项功能也可以不设,即允许所有接入请求。
3)带宽控制。网守应支持BRQ/BRJ/BCF消息,根据带宽情况进行带宽管理。此项功能也可以不设,即允许所有带宽改变请求。
4)域管理。网守应向其登记的终端、MCU和网关设备提供以上功能。
网守还具有其他功能:
1)呼叫控制信令。网守可以选择自行完成与端点之间的呼叫信令,也可以让端点之间直接以呼叫信令信道连接。
2)呼叫授权。利用H.225.0信令,网守可以允许或拒绝某个终端的呼叫。
3)带宽管理。控制同时接入网络的H.323终端的数量。利用H.225.0信令,当网守判定带宽不足时,可以拒绝某个终端的呼叫。当某个己建立的呼叫要求增加带宽时,此项功能也适用。
4)呼叫管理。网守对正在进行的H.323呼叫进行管理,这些信息可以用于显示被叫终端忙闲或用于带宽管理功能。
当网络中存在网关时,也必须有网守以提供E.164地址与传输层地址之间的翻译。
2.网守的主要功能
1)地址翻译。根据登记时建立的翻译表,执行别名地址至传输层地址的翻译,该翻译表随登记消息不断更新。常见的别名就是E.164地址。它可以是一个单一号码,供SCN用户标识H.323终端,也就是PC—电话通信时,须给PC赋予一个E.164号码;也可以是一组前缀号码,供SCN-IP网-SCN使用环境下,确定目的端网关的传输层地址。
2)呼叫接纳控制。根据用户权限、网络可用带宽等条件确定是否允许用户发起该呼叫,判定条件可由制造厂商决定。在端点发起呼叫时,第一个消息就是发往网守的接纳请求信息。
3)带宽控制。允许端点提出改变分配给它的PBN带宽的请求。如果端点要求降低分配带宽,一般均予同意;如果提出增加带宽要求,网守根据情况予以同意或拒绝。
4)区域管理。对本管理区内已登记的终端、MCU和网关提供上述服务功能。
5)呼叫控制信令。H.323建立规定端点至端点的呼叫信令有两种传送方式。一是经由网守转接的网守选路呼叫信令方式,双方不知道对端的地址,有利于保护用户的隐私权,网守介入呼叫信令过程。另一种是端到端的直接选路呼叫信令,网守只在初始RAS过程中提供被叫的传输层地址,其后不再介入呼叫信令过程。
6)呼叫权限。网守可以通过RAS过程拒绝无权用户发起呼叫,拒绝原因可以是限制自某些特定终端或网关发出的呼叫或发往这些端点的呼出,或者是在某些时间段限制发起呼叫。
7)带宽管理。控制允许同时接入PBN的H.323终端个数。通过RAS协议过程,网守可以拒绝栽终端发起呼叫,其原因是它判定网络没有足够的带宽支持该呼叫,判定准则由管理者自定。当在呼叫进行过程中,某终端提出增加带宽时,网守也可对此拒绝或允许。
8)呼叫管理。例如,网守可以保存一张正在进行的H.323呼叫清单,据此可判定被叫终端是否忙,并且可向带宽管理功能提供带宽使用信息。
9)网络管理。可向计费中心提供计费基础数据,向管理中心提供话务统计基础数据。
10)其他功能。如终端带宽预留、目录服务、管理信息库等。
上述功能中,(1)-(4)项为网守的基本功能。
3.网守的测试
网守的测试主要包括以下几个部分:
功能测试、协议测试、性能测试和互通性测试。其中功能测试主要包括地址解析功能、接入认证功能、呼叫控制功能、路由管理功能、计费功能、安全管理功能和配置、统计、告警等功能。协议测试除了RAS协议外,还应包括RADIUS协议、H.225.0附件G、Q.931等,测试方法主要是利用协议分析仪监视协议是否符合标准。
对于性能测试和互通性测试方法目前正在研究之中。性能测试主要应对网守管理的网关数、用户数以及同时处理的呼叫数进行测试,而互通性测试应包括不同厂家的网守和网关之间的互通测试以及不同厂家网守的互通测试。
顶级网守云可以包含多个顶级网守,顶级网守之间的连接、一级网守与顶级网守之间的连接以及不同运营者之间的连接由各运营者根据各自的情况自行确定其方式。当运营者网络规模不是很大时,顶级网守的功能可由其中一个一级网守完成。
(1)顶级网守。顶级网守负责管理属于该运营者的一级网守,主要负责一级网守之间的地址解析、不同运营者视频会议网之间的互通和地址交换;也负责国际业务的管理,即国际呼叫的建立和拆除。
(2)一级网守。一级网守主要负责该一级网守所管辖的全部二级网守以及IP电话终端代理间的地址解析工作。在两级网的情况下,二级网守的功能全部归入一级网守。
(3)二级网守。二级网守主要负责所属区域内用户的地址解析和认证,防止非法用户的接入和非法网关的登记;负责向所属网关提供路由信息,包括被叫网关的端口信息等。
(4)网守之间的互通。网守之间的通信完成不同区域之间的呼叫建立。顶级网守与一级网守之间,或一级网守与二级网守之间的互通采用RAS协议,主要传送用户地址解析信息。
(5)网守与网关之间的互通。网守与网关之间使用RAS协议进行通信,RAS信令采用H.225.0消息在网守与端点之间完成注册、接入控制、带宽转换、状态信息传送和切断等操作。RAS信令信道与呼叫信令信道和H.245呼叫控制信道无关。RAS信令信道为非可靠信道,使用UDP方式传送信令。
1)标准性要求
网守设计应符合ITU—T制订的H.323协议和中国通信行业标准《IP电话网守设备技术要求》的要求,支持H.225.0、H.245、LAN通信协议(IEEE802.3或IEEE802.3u)、TCP/IP等;使用面向对象的编程技术,使系统具有清晰的逻辑层次结构,系统应具有较强的兼容性,易于维护和二次开发;能够和符合H.323协议的各种设备(网守、终端、MCU、网关)相兼容,并且可以为它们提供相应的服务。
2)功能性要求
网守应实现H.323规定的基本功能和部分可选附加功能,实现相关的所有协议,应具有记录网守运行日志的能力,能够提供计费所使用的原始通信纪录,实现计费功能,或提供运营商所需的计费接口。根据H.323协议中关于网守功能的规定,可将网守划分为五个功能模块:
·呼叫控制和管理(Call Control and Management)
·地址翻译(Address Translation)
·带宽控制和管理(Bandwidth Controland Mangement)
·用户认证、授权和计费(Authentication,Authorization & Account,AAA)
·计费信息的采集(Call Detail Record Convergence,CDR Convergence)
3)运行环境要求
系统要最大限度地适用于多种平台环境,兼容性要好,一般要求能够在Windows9x、Windows2000、WindowsXP、WindowsCE、UNIX等平台下运行。
4)使用维护要求要求
系统兼容性较强,结构简单,维护方便,升级容易,功能较强,组网灵活,成本较低。
网守实现基于面向对象的编程方法,用VC++语言作为开发系统,采用Pwlib和OpenH323两个SDK动态连接类库。
软件实现平台采用Pwlib和OpenH323两个动态连接类库的原因在于:
(1)这两个库中封装了大量的通信类库以处理信令交互和报文收发,整个平台的设计遵循开放性原则(Mozilla Public License),能够很好地支持H.323协议。
(2)类库Pwlib是一个适度大小的类库,它的发展已有很长一段时间了,其最初的主要目的是形成一种同时可在Microsoft Windows、UNIX、Linux等多种操作系统平台上运行的具有通用性的类库系统,然而它以后的发展却远远超越了最初的目的。I/O的封装类、多线程类、UNIX后台邮件收发类、基于NT平台的服务器类,几乎所有的互联网协议类均被逐渐地增加进来,同时遵循了开放性原则,因此Pwlib非常适合作为开发H.323系统的基础类库。
(3)类库OpenH323基于类库Pwlib之上,也是一种开放源代码的、可供互操作的、具备完整特性的、适度大小的、面向整个H.323协议栈的基础类库,是由澳大利亚一家叫EquivalencePtyLtd的公司发展起来的。在遵循开放性原则的前提下,所有对其感兴趣的团体、商业、个人均可免费使用该类库。
(4)开发人员可以通过互联网在开放性原则下共同使用这两个类库,相互交流,共同开发,共同提高,这使得我们可以最大限度地降低开发成本和减少开发周期,也使得网守与类库可实现同时升级。
网守的开发系统采用Visfial C十十6.0,数据库使用微软的Access。对于一个电信级会议系统,由于用户数很多,数据量很大,安全性要求很高,必须使用大型的数据库来完成各种信息的存取,通常可使用SQLServer、Oracle、Sybase等。使用Microsoft的Access数据库,主要基于以下考虑:
(1)微软在Windows和VisualStudios系列中对Access数据库的支持,让我们可以方便地操作Access数据库,并且它的效率也较高。
(2)面向小规模应用所设计的网守,数据量相对还不是很大,Access数据库完全满足应用要求。
(3)Access数据库的整个数据存放在一个文件中,移动和拷贝比较方便。
(4)采用适当的封装之后,在以后需要升级到大规模的应用数据库时,可以方便地从访问Access数据库向访问SQL Server或者Oracle数据库过渡转变。当然,如果使用ODBC数据库引擎访问数据库,这种转变将不再是问题。
1.模块说明
根据以上对网守功能结构的分析,我们在实现时把网守分解为以下几个主要的功能模块:RAS协议过程实现模块、呼叫信令路由模块、端点注册信息链表模块、计费模块、H.245协议处理模块等,如图3所示。RAS协议过程实现模块用来处理RAS协议过程,它包括网守搜寻(采用多播机制完成)、端点登记、呼叫接纳、呼叫退出、带宽管理等过程,并且把相应的端点信息传送到端点注册信息链表模块。
呼叫信令路由模块用来与终端之间进行H.225.0呼叫信令过程,它包括呼叫建立、呼叫清除、Q.932消息处理等过程,并且支持呼叫转移功能,既可以进行一般的连接过程,又支持快速连接过程。建立呼叫路由之前首先要从端点注册信息链表模块中取得端点信息,在合法的情况下再去建立呼叫路由,然后再把呼叫信息传送到当前呼叫信息链表模块中,直至呼叫清除时再次传送信息给当前呼叫信息链表模块和计费模块去处理。
端点注册信息链表模块用来储存注册终端的详细信息,包括别名、呼叫信令传输层地址、RAS端口地址、终端ID、终端类型、制造厂商代码等;还提供端点的插入、删除、更新、查询、类型判断、超时处理等大量的用户接口功能。
当前呼叫信息链表模块用来储存当前正在进行呼叫和通话的每一对呼叫的详细信息,包括主叫和被叫ID、呼叫ID、呼叫引用值、分配带宽、呼叫的发起时间等信息,同样也包括呼叫的插入、删除、更新、查询等大量的用户接口功能。
计费模块从呼叫信令路由模块中取得呼叫信息。对每次的呼叫原始计费信息进行详细记录。这些信息至少包括呼叫起始时间、终止时间、主被叫E.164别名地址、主被叫IP地址、使用带宽等信息。
2.网守主程序
一个处于运行状态中的网守,其各个功能模块的瞬时运行状态都是随机并发的,每个模块内部又要同时处理若干个端点的请求或连接。因此网守最适合于使用多线程的编程方法来实现。网守在实现时,首先由主程序创建RAS处理线程、呼叫信令处理线程、多播接收处理线程这三个线程来启动相应的功能处理模块,然后在各线程内部当每接收一个请求或连接时,该模块便向系统申请所需的资源,然后在其内部产生一个专门用来处理此次请求或连接的子线程,直至此次请求或连接结束时,该子线程将自动停止运行,释放所占用的系统资源以备系统重新分配使用。
网守的主程序完成的任务主要是生成网守的主控制台界面窗口,实现网守运行前的初始化过程,搜集所需的各项环境参数,建立终端注册表(Endpoint Table)、当前呼叫信息表(Call Detail Table)等各功能块运行所必需的信息链表,启动网守各功能模块的相应线程,以及随时根据系统管理员发出的控制台命令对网守当前工作状态、运行日志进行查询、关闭或结束网守等动作。
网守的主控制台界面主要包括四部分:菜单栏、图形按钮、网守所在主机IP地址显示窗、网守工作信息显示窗。菜单栏内包含很多命令,用于启动或关闭网守,查看注册终端表、当前呼叫信息表、工作日志等:图形按钮是最常用的菜单命令的快捷按钮。网守所在主机IP地址显示窗是网守启动后显示主机IP地址的窗口,该地址供各终端设置时查询使用。网守工作信息显示窗用于显示网守的工作状态以及各表项参数。
网守主程序的简要工作流程如图4所示。下面是网守主程序中启动各功能块的关键语句以及简要说明,它们完成了各数据链表的建立和各工作线程的启动:
//建立注册终端信息表
MvEnviron.EPTable=new EndpointTable(MyEnviron);
//建立当前呼叫信息表
MyEnviron.CTable=new CallTable(MyEnviron);
//建立RAS日志
MyEnviron.Log=new OpengateLog;
//创建呼叫信令处理线程
CallThread * CThread=new CallThread( MyEnviron);
MyEnviron.MyCallAddr=CThread->GetMyCallSignallingAddr();
//创建RAS信令处理线程
RasThread * RThread=new RasThread( MyEnviron);
//创建Multicast receiver线程
Multicast Thread * MCThread=new MulticastThread( MyEnviron);
3.RAS消息处理线程
RAS消息处理线程(RasThread)完成的功能实际就是RAS协议过程,它包括网守搜寻、端点登记等过程。RAS协议是端点和网守之间执行的协议,基本上实现管理功能。
网守赋予了一个公认TSAP标识(对于IP网络来说就是TCP/UDP端口号)作为RAS信道的TSAP标识,对于IP网络来说就是端口1719。一般的端点在启动时首先要向网守注册登记,因此必须事先知道网守的RAS协议的传输层地址(网络层地址+TSAP标识),也称为RAS地址。图5是RAS消息处理线程的简要流程。流程图中处理RAS消息是该线程的核心部分,完成了RAS协议的主要功能,包括端点登记、呼叫接纳和退出带宽管理等功能。
1)网守搜索
网守搜索有两种方式:人工方式和自动方式。自动方式是通过搜寻多播地址发送GRQ消息来实现的。人工方式通过对端点的配置来完成,将其归属的网守传输层地址预置入端点的配置文件或初始化文件中。
自动方式允许端点和归属网守的关系可以随时间而改变,当原有网守出故障时可以自动切换到替换网守上去,当所属网守改变后无需在每个终端上修改其配置文件。
在自动方式中,端点采用搜寻多播地址发送GRQ消息,询问“谁是我的网守”。可以有一个或多个网守回送GCF消息,表示“我可以是你的网守”,并在消息中告知其RAS地址。不愿意该端点在其上登记的网守则返回G对消息。如果有多个网守回送GCF消息,端点可在其中任选一个作为其归属网守。如果超时仍未收到网守的响应,端点可重发GRQ消息,但两次相邻GRQ之间的时间间隔不能小于5秒。如果仍未收到响应,则改用人工搜寻。当然如果事先知道网守的IP地址,则可以直接使用人工搜寻。
端点发送的GRQ消息包含端点类型、端点自身的RAS地址、希望在其上登记的网守标识等参数。若未含网守标识参数,就表示端点愿意在任何一个网守上登记。网守返回的GCF消息除了包含该网守标识和RAS地址外,还可包含“替换网守”序列参数并指定优先级顺序。如果至该网守的请求未予响应或被拒绝又未给出转向信息,则可转向替换网守重新提出请求。GRJ消息也包含转向信息参数,另外还给出拒绝原因。
2)端点登记
端点搜索到所属网守后,必须在网守上登记后才能发起和接纳呼叫。登记表明该端点加入了该管理区。端点首先要向网守的RAS地址发送RRQ消息,消息中包含的两个参数是端点别名及其呼叫信令传输层地址。也有可能RRQ消息中没有包含别名,网守便赋予一个,然后在随后的RCF消息中发回给终端。别名可以是E.164地址或H.323标识,但为了和普通的固定电话保持一致,我们一般使用E.164地址。E.164地址由接入码和电话号码组成,接入码可以用来标识网关。H.323标识为字符串形式,可以是用户名、E—mail名或其他标识名。一个端点可以有多个别名,所有的别名都在RRQ消息中发往网守,它们将被翻译为同一个传输层地址。一般情况下,网守将返回RCF消息,告诉端点网守的呼叫信令传输层地址,并将端点别名和地址登记入端点注册登记表中(End Point Table)。消息还包含一个“生存时间”参数,单位是秒,指示本次登记信息的寿命。但是如果RRQ消息中的别名和已登记的某一端点相同而传输层地址不同,则回送RⅪ消息,并指明“重复登记”的拒绝原因。但是如果RRQ消息中的别名和传输层地址与已登记的某一端点都相同,则视为更新登记并修改表End Point Table中的相应信息。
端点也可以改变其别名,这时应先向网守发送URQ消息,网守回送UCF消息,以便端点在此用一新的别名登记注册。同样,网守也可以发送URQ消息给端点,端点回送UCF消息,网守然后删除端点以前登记的信息。
3)端点定位
端点定位用于端点或网守向相应的网守询问某一端点呼叫控制信道的传输层地址。当端点或网守已知某一端点的别名,需要知道其呼叫信令信道传输层地址时,可向相应的网守发送LRQ消息,发送地址是该网守的RAS地址。如不知道该端点的归属网守,也可用搜寻多播地址发送LRQ消息。该端点在其上登记的网守收到此消息后应回送LCF消息,消息中包含该端点的呼叫信令信道传输层地址,或者是该网守的呼叫信令信道传输层地址,究竟传送哪一个地址取决于呼叫信令是采用直接选路方式还是网守选路方式。
对于该端点未在其上登记的网守,如果是在RAS信道上收到LRQ消息,则须回送LRJ消息;如果是在搜寻多播地址上收到LRQ消息,则不需要作任何响应。
4)呼叫接纳和退出
呼叫的接纳(ARQ/ACF)和呼叫退出是整个呼叫控制的第一对和最后一对消息,分别标志呼叫的开始和结束。在ARQ中端点给出目的地别名(Alias)、呼叫引用值(Call Reference Value)、呼叫标识(Call ID)、会议标识(Conference ID)、应答呼叫(Answer Call)等信息以及所需要的带宽。网守根据具体情况可以接纳也可以拒绝该呼叫。如接受该呼叫则回送ACF消息,其中包括的两项主要参数是允许分配的带宽和翻译后所得的目的地呼叫信令传输层地址或者是网守本身的呼叫信令传输层地址。
不但主叫发起呼叫时需要请求网守接纳,被叫接收呼叫建立信令时也要向网守发送ARQ请求,因此在ARQ中有一“应答呼叫”(Answer Call)参数,指示是否响应呼叫。在ARQ消息中还有以下三个关于呼叫的标识参数。
(1)呼叫引用值(Call Reference Value,CRV):用于标识呼叫,仅在呼叫段上局部有效。例如,呼叫信令采用网守选路方式传送,则“主叫终端一网守”和“网守一被叫终端”这两个信令段的CRV一般是不相同的,网守负责建立两个CRV之间的关联,以保证信令消息的正确转送。.但是在同一信令段上,属于同一呼叫的所有H.225.0消息,包括呼叫接纳、呼叫建立、补充业务、带宽改变、呼叫终结等消息的CRV均相同。
(2)呼叫标识(Call ID):亦用于标识呼叫,和CRV不同的是,它是全局有效参数。也就是说,从主叫端点到其网守、从主叫端点到被叫端点、从被叫端点到其网守,属于同一呼叫的所有RAS消息和呼叫信令消息中的呼叫标识均相同。呼叫标识主要用于端到端的信息传送,如将其封装在Q.931消息的用户一用户信息中传递,可供补充业务使用。呼叫标识由主叫端点赋值。
(3)会议标识(Conference Identifier,CID):惟一标识会议的全局号码,是由会议发起端点创建的关联该会议所属所有呼叫的信令消息。如果一个会议包括若干个呼叫,则每个呼叫有其各自的呼叫标识,所有呼叫有一个共同的会议标识,凡属该会议的所有H.225.0消息均采用该会议标识。
CID由三部分组成:端点网络地址、会议呼叫发起的绝对时间和所用的协议版本。CID由16个八位位组组成,如表1所示。其中:0为最低八位位组;N5:NO为48位LAN地址,如无此地址,则以随机数填充;C1:CO为16比特计数器,每次会议加1;V为4比特的版本号,位于CID字节6的低4比特;H1、A、M1:M0、L3:L0为1OOns时钟计时值的最低60比特,其比特排列顺序如表2所示。
表1 会议标识
CID八位位组 | 15~10 | 9~8 | 7 | 6 | 5~4 | 3~O |
八位位组名 | N5:NO | C1:CO | H1 | AV | M1:Mo | L3:L0 |
表2 时钟计时比特
H1 | A | M1 | M0 | L3 | L2 | L1 | L0 |
59 52 | 51 48 | 47 32 | 31 0 |
5)带宽管理
带宽管理用来处理呼叫中途改变呼叫接纳时确定的带宽,改变请求可由网守或端点发起。如果网守主动向端点发送BRQ,请求降低带宽,端点必须服从,降低其总比特率且回送BCF;同时向对端端点发送H.245控制消息,通知其信道带宽已经改变,然后由对端端点再通知其网守。如果是增加带宽请求,端点根据需要决定是否增加比特率。
6)状态和资源
状态查询主要用于网守询问终端的开机/关机状态;网关资源指示用于向网守通告该网关的可用资源。
4.呼叫处理线程
呼叫处理线程(Call Thread)完成的功能就是H.225.0呼叫信令消息过程。基本的呼叫信令消息取自于Q.931和Q.932消息。
呼叫处理线程在主程序中被启动后便开始在呼叫信道上侦听是否有端点发出呼叫。每当一个新的端点发起一个有效呼叫并且选路方式设定为网守选路模式时,呼叫处理线程便打开一个新的TCP套接字,利用此套接字与该端点建立连接,然后建立一个真正处理该呼叫信令消息的线程(Signalling Thread)去处理此次呼叫,呼叫处理线程则接着在原呼叫信道上侦听是否有新的端点发出呼叫。图6就是呼叫处理线程简要流程。信令线程可以完成两种连接过程,即常规的连接过程和“快速连接”过程。
5.搜寻多播接收处理线程
网守具有一个公认的多播地址,即搜寻多播地址。因为一般的端点在刚启动时并不知道归属于哪一个网守,也不知道网守的网络层地址,因此利用此公认的多播地址广播搜寻消息,以确认其归属的网守。还有在端点定位时,当端点或网守已知某一端点的别名,需要知道其呼叫信令信道传输层地址时,可以向相应的网守RAS地址发送LRQ消息。但是有时并不知道该端点的归属网守,这时可利用该多播地址发送LRQ消息,该端点的归属网守收到该消息后回送LCF消息,消息中包括该端点的呼叫信令信道传输层地址或者是该网守的呼叫信令信道传输层地址,回送哪一个地址取决于采用的是直接选路方式还是网守选路方式。该线程的工作方式与RAS消息处理线程相似,如图8所示。