您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 第12讲-H323协议分析
H.323协议分析H323协议简介H323协议中的控制协议与信令H323的基本通信流程基本流程的不足与改良NAT的简介H.323协议简介H323是ITU-T于1997年10月制定的国际标准,其目的是在不保证服务质量的分组交换网中,实现多媒体的通信。H323是一个协议组,主要描述如何利用其他协议,去完成整个的通信流程,而一些子协议,则更多地描述了消息的内容和编码。H323涵盖了语音,图像,数据等多种业务,并对各种媒体的综合也作了若干研究与规范。2000升级到ver.4,之后就没有升级了。H.323的结构图H.323的组件Gatekeeper:中文译为关守,或者网守,是H.323系统中负责注册、寻址、维护链路的设备。Gateway:中文译为网关,是在分组交换网与其他类型网络之间的接口设备,完成不同网络的数据格式的转换。Terminal:终端,是H.323系统中完成用户接口,媒体接口和终端能力通信的设备。MCU(MultipointControlUnit):多点控制单元,主要用在会议通信中,负责处理多路会议的媒体处理与分发。对于会议来说,语音要进行混音,图像要有选择的转发。H.323的协议框架H.323的协议族H.225.0RAS(Registration,AdmissionandStatus):在endpoints与gatekeeper之间的通信协议,用于注册,寻址以及终端状态的查询和维护。H.225.0CallSignaling:主要用于在endpoint之间建立与撤销连接,和传统电信的信令过程类似H.245:用于在终端之间交换多媒体能力信息,建立多媒体连接。RTP:终端之间用于收发媒体数据的协议标准RTCP:RealTimeControlProtocol,用于控制与监督RTP连接的情况。H.323的消息概述H.323中,主要是RAS,H225,H245这三个协议,都使用ASN1对消息域进行编码。一次完整的通话,必须要使用H225消息;如果有gatekeeper的话,要使用RAS消息;如果是普通模式呼叫,还要用H245消息。消息的总体结构–RAS,H225,H245RAS的消息分类Gatekeeperreq,rej,cfm发现GKRegistrationreq,rej,cfm注册Adminreq,rej,cfm呼叫Disengagereq,rej,cfm挂断UnRegreq,rej,cfm注销InfoReq,InfoReqResp状态查询H225的消息分类Setup主叫建立呼叫CallProceeding被叫处理呼叫Alerting被叫振铃指示ConnectH225连接成功ReleaseCompleteH225释放连接FacilityStatus/StatusInquiry状态查询H245的消息分类TerminalCapbilitySet–终端支持的媒体能力集OpenLogicChannel–终端选定了某种媒体能力,告知对端,并携带端口信息CloseLogicChannel–终端确认不支持某种媒体能力,告知对端MasterSlaveDetermination–主从决定,在Voice中,不起什么作用一个完整的呼叫流程一次完整的呼叫流程,涉及RAS,H225和H245消息。具体的顺序如下:–Grq,gcf,rrq,rcf成功注册–Arq,acf,setup主叫发起呼叫–CallProceeding,arq,acf,alerting被叫相应呼叫–Connecth225通道连接–CapSet,Msd,CapSetAck,MsdAck能力集协商–Olc,OlcAck,打开媒体通道–Rtp语音流传送–EndSession,Releasecomplete,Drq挂断话机若干关键的消息域supportAltGK,alternateGatekeeper备份GK,grq,gcf,rrq,rcf等RAS消息Tokens,cryptoTokens,algorithmOID,注册认证.Grq,rrq,arq的消息CallSignalAddress,RasAddress,h245Address.地址信息,携带消息发送者的地址和端口信息ConferenceID,CallIDID信息,区别一次通话的手段,RAS,H225中使用ForwardandreversechannelH245中媒体通道信息H323协议中的一些不足ASN1编码,不能明文分析消息过于复杂,从呼叫到通信要经过太多的消息交换,容易出问题从H225Connect到开始交换RTP,需要经过多次消息交换,让用户产生摘机后很久才能听到声音的感觉。H225,H245要占用两路TCP,对系统资源影响比较大.整个的消息体系,和协议体系中,很多都是为video应用的,在voice中无法使用,又增加了很多复杂性一些改良的办法(1)FastStart:就是在H225消息中,就交换OpenLogicChannel消息,H225Connect以后,就开始RTP的传送,同时再交换H245的消息。通过这种方式,就可以避免用户摘机后好久都听不到声音的情况了。FastStart的Olc消息,是嵌入在H225消息中的FastStart域的,可以在Setup,CallProceeding,Alerting,Connect中嵌入。一些改良的办法(2)Tunneling:为了节省系统资源,少建立一路TCP,可以把H245的消息,嵌入到H225消息中。这样在H225Connect以后,利用H225Facility消息,来交换H245的Cap,Msd和Olc等消息。Tunneling消息,可以嵌入到FastStart域,也可以嵌入到H245Control域。实际的例子具体分析faststart和tunneling的数据包继续讨论H323消息中的关键域NAT简介(1)IPNetworkAddressTranslator.Rfc1631产生的背景:IPv4的地址划分方式,导致IP地址分配的不均衡性,大量的用户无法得到publicIP。为了解决IP地址的数量限制,IETF规定了几段私网地址–A类:10.x.x.x–B类:172.16.x.x–172.31.x.x–C类:192.168.0.x–192.168.255.xNAT简介(2)Router实现NAT的功能,完成私网地址和公网地址之间的转换,以保证私网内部的网络设备,能正常连接到因特网。NAT的原理:端口映射和包头地址的重填–任何通信连接,都是从首先从NAT内部发起。–Router收到NAT内的IP包,检查源的IP地址和端口是否属于已分配的地址。如果不是,则将该端地址与一个外网端口对应,并标记为已分配;否则,直接用以前分配的外网端口。将MAC头,IP头,TCP/UDP头中的源地址,都用外网地址和分配的外网端口替代,并重新计算校验和。然后将替换后的包从外网发送出去NAT简介(3)NAT的原理:端口映射和包头地址的重填–收到外网发来的包后,检查该包的目的端口号,是否标记为已分配。如果是,则将该包的mac地址,ip头,tcp/udp头的目标地址,改为和该端口号对应的私网地址和端口,重新计算校验和后,发往nat内部;否则直接丢弃,或者回复icmp包。–Router可以设定DMZ或portmapping.DMZ:demilitarizedzone。此时router将所有的外网发来的包,都直接转发到DMZ指定的私网IP的同样的端口。也就是说,此时这个私网IP就和一个公网IP完全一样了。Portmapping:指定外网的端口号和NAT内的地址+端口的映射关系,而不是由router随机分配外网端口号.NAT分类CloneNAT:克隆NAT,把所有来自相同内部IP地址和端口的请求映射到相同的外部IP地址和端口。–FullClone:如图,A在私网,B、C在公网。A从同一端口发给B,C的包,都被NAT映射到同一公网端口(X),再发给B,C。而且D再向X发包,也能到达A。–RestrictedCone:和FullClone相比,如果A没有给D发过数据,D即使发数据到端口X,也不能进入私网。–PortRestrictedCone:在上一种限制的基础上,如果A只是给B的M端口发数据了,则B的N端口向X发数据,也不能进入私网。NAT分类SymmetricNAT:对称NAT,是指把所有来自相同内部IP地址和端口号,到特定目的IP地址和端口号的请求映射到相同的外部IP地址和端口。与CloneNAT相比,前者只根据私网内的(地址:端口)去映射,而后者要根据通信双方的(地址:端口)对去进行NAT映射。同样在上一页的图中,在SymmetricNAT下,到B、C就要从不同的端口出来了。除此以外,这种NAT还要遵循最严格的端口限制H323在NAT下面临的问题H323协议中,各种地址信息都是在RAS,H225,H245等消息域中填入的,但是NATrouter只能改TCP/UDPheader的地址,因此收端从H323消息中得到的是私网地址,按这个地址回复的包,就肯定不对了。NAT的机制,要求任何一个连接,必须由NAT内的地址主动发起。这样的话,NAT内的设备做被叫,就无法实现了(因为setup的消息进不来)。H323穿透NAT解决方法(1)基于H323标准的解决方法–强制的端口映射将话机使用的H225,H245,RAS,RTP源端口强制映射到NAT外网的相同端口。同一NAT下的不同话机,应该使用不同的端口。–使用NAT外网的IP地址,填入H323消息域的IP地址信息中既然NATrouter不能修改H323消息中的IP地址,那就自己改NAT外网地址的查询方法.解决方法(2)非标准的解决办法–响应一个消息,不是从这个消息的H323域中获取IP地址,而是从它的IPHeader和TCPHeader中获取IP地址和端口,作为回包的DestinationAddr.–在已经建立的TCP和UDP连接上,发keepalive消息,维持NAT端口映射表–必须使用GKRoutedall(H225,H245,RTP)模式(因为NATrouter只能对SrcIP和DestIP完全匹配的包作反穿透)–NAT内部的终端,作为被叫,必须先主动和GK建立一个TCP连接,才能收到GK转发过来的Setup消息,从而继续整个呼叫流程。H323穿透NAT解决方法(3)非标准的解决办法(续)–上述的TCP应该在什么时候建立呢?–在GK的regcfm消息中,在NonStandard域中,填入了gk接受TCP连接的IP地址和端口,终端解析出nonstandard域中的内容,从NAT内部主动建立这个TCP,并维持连接。–更好的办法是在有人呼叫的时候,GK发送admreg中携带这些信息,终端这时再建立这个TCP,通话结束后,这个TCP就释放掉。这样能平时不用维持TCP连接,减轻Gk的负担。H323穿透NAT解决方法(4)上面提到的两种方式,在实际应用中,都有一定的局限性。第一种方法,需要设定强制的端口映射,而对很多NAT设备,让用户去做这种设置是不现实的。第二种方法,不需要客户作什么特殊配置,但是由于要求必须使用GKRoutedall的模式,因此对GK的资源占用比较多,对于大规模商业应用来说,可行性还有待研究。H323的其他重要协议H.235–加密,认证的协议。绝大多数系统使用MD5(rfc1321)和SHA1(rfc3174)这两种加密算法。H.450–补充业务的协议,CallHold,CallTransfer,CallForward等等,现在支持的并不普遍T.38–传真业务,对于IAD,GW是需要的
本文标题:第12讲-H323协议分析
链接地址:https://www.777doc.com/doc-2242779 .html