在H.323和SIP系统中如何实现RSVP协议

49、多媒体传输与互联网电话协议解析 本文深入解析了多媒体传输与互联网电话中的核心协议及其工作机制,涵盖RTP、RTCP、RTSP和RSVP等传输协议的功能与协作方式,并详细介绍了H.323和SIP两种主流信令协议的呼叫流程与应用场景。文章还探讨了网络模型对比、QoS保障、NAT配置、IPv6部署挑战、多播实现、抖动与延迟处理、TCP拥塞控制机制及其对多媒体流的影响,结合实际计算案例分析带宽开销与调度优化,全面呈现了现代多媒体通信系统的技术架构与关键问题解决方案。 阅读详情
在H.323和SIP系统中如何实现RSVP协议
卢政 2003/08/19
摘要:
  本文主要介绍了RSVP协议在IP网络通讯协议H.323和SIP中的运用,以及在语音/视频通讯数据的特殊性,然后详细叙述了Vocal系统中如何使用RAPI来实现RSVP的QoS管理,以及如何改善Vocal中RSVP的性能,并且论述了在主干网络使用DiffServ的时候如何修改RAPI中的数据结构,从而实现RSVP到DiffServ的映射。

前言:

  RSVP(资源预留协议)是一种服务质量协议,也是一种商业的开放协议,当然它也是一种Internet上的大型协议,如果说它是网络上流动的一种钞票,这样的形容可以说是再合适不过了,利用RSVP消息,端点应用程序可以根据需求提出数据传送全程所必须网络带宽和缓冲大小以及延迟等等,同时也确定了沿途的路由器传输调度的策略,从而达到对每个数据流的QoS进行控制。

  RSVP支持两种服务类型:受控载荷服务和保证服务,前者是在设定网络的载荷非常轻的情况下,所有的数据流都按照尽力的方式来处理且网络缓冲区为空,对于音频信号而言这种方法是正好合适的,而后者不是这样,不仅请求带宽,而且也要求最大传输延迟,那么所得到的结果就是在网络的负荷增加的时候不会让QoS有非常明显的减低。

  如果从RSVP所支持的传输类型来区分QoS的服务,可以分成三种传输类型:最好性能(best-effort),速率敏感(rate-sensitive)与延迟敏感(delay-sensitive)。用来支持这些传输类型的数据流服务依赖保证QoS的协议实施。比如各种TCP/IP协议就是遵循最好性能传输的传输服务协议:TFTP,HTTP,SMTP,POP3等等;速率敏感传输放弃及时性,而确保传输速率。例如:速率敏感传输请求128 kbps带宽,如在扩展期实际发送256 kbps,路由器可能进行数据的队列缓冲,并且延迟传输;这类传输与采用电交换网络有关系,当然在internet主干网络和边沿网络也有这样的情况出现,RSVP服务支持速率敏感传输,称为位速率保证服务。延迟敏感传输要求传输及时,并因而改变其速率。例如:SIP或者H.323协议传输采用H.261协议压缩图象并且传输的时候流量可能达到384-768kbps,384Kbps可能对应一个静态的背景,而768kbps 可能是一个动态的图象。熟悉H.261协议的人都知道在H.261中存在I-frame和P-frame的两种压缩方式,前者是本地压缩,那么必然产生一个淬发的数据尖峰,而后者和平均带宽的要求和接近,以Microsoft NetMeeting 为例子每15个P-frame产生一个I-frame,由于单个帧要求在一帧时间内发送出去,或解码器速度跟不上,必须对I-frame的传输进行特定优先级别协调,RSVP服务支持延迟敏感传输,可以被看作控制延迟服务(非实时服务)与预报服务(实时服务)的混合。

  上面详细的阐述了RSVP的服务类型和传输类型,这样我们可以看出在以H.323或者是SIP为基础的视频通讯系统中,QoS的保证是比较复杂的,即有延迟敏感传输的服务也有速率敏感传输的服务,RSVP目前对这两种服务都可以做到很好的支持,我在下面的文章中会阐述一下如何在H.323和SIP的协议栈中实现RSVP,重点介绍Vovida中Vocal的SIP的实现方式,但是这里之介绍点对点的情况,而不介绍多点互联和广播的情况。

  RSVP资源预留协议的具体内容可以参看RFC 1633中对RSVP的具体定义,另外在draft-ietf-rsvp-rapi-01.txt中定义关于RSVP相关的基本API函数调用。

  RSVP工作顺序描述如下图所示:

  发送方发送PATH消息,消息中包含有数据业务特征,该消息沿所选的路径传送,沿途的路由器按照PATH准备路由资源,接收方接收到PATH消息以后,根据业务特征和所需要的QOS计算出所需要的资源,回送RESV消息,消息中包含的参数就包括请求预留的带宽,延PATH的原路途返回,沿途的路由器接收到RESV操作后才执行资源预留操作。发送方接收到RESV消息以后才发送用户数据。
简述在H.323协议中如何实现RSVP功能:
  对于一个H.323或者是SIP的多媒体通讯系统而言,为了保证实时通讯的质量,一般来说采用了很多方面来保证QoS,对于H.323来说方式没有SIP那样灵活,在H.323v3版本采用了一些几种方式来增强QOS保证,另外这里暂时不对多播的情况考虑。
  a. 增强的RAS过程,在ARQ中指明了是否具备资源预留能力;
  b. 增强的能力交换过程,收发端点都具备RSVP功能,通过能力交换过程可以双方具备RSVP能力(RSVP属于能力集合的一个部分),在OpenLogicalChannel原语中定义了一个参数qOSCapability来表示;
  c. 增强的逻辑信道能力在逻辑信道打开过程中包含Path和Resv两个过程。
  下面我们用图来表示逻辑信道的打开过程和资源预留过程:

1. 发送端点向接受端点发送OpenLogicalChannel消息在qOSCapability中标明该信道的RSVP参数和综合业务类别。
2. 接收端点创建RSVP会话(调用Rapi_session API)向发送端点发送OpenLogicalChannel Ack。
3. 在OpenLogical Ack中包含FlowControl=0,抑制当前的媒体数据流。
4. 4和5表示发送端点和接收端点执行RSVP过程。
5. 接收端点接收到ResvConfirm以后知道预留成功。
6. FlowControl为最大的比特率,当前的媒体数据流为最大。
  要注意的一点是由于通讯是双向的实际上述的过程发送和接收方需要对掉,特别在双方的能力集不相同的情况之下需要变换主叫和被叫的身份执行上述过程。

在SIP中实现RSVP功能:
  以Vovida的Vocal为例子,在Vocal的SIP协议栈软件中提供了一个非常简便的实现RSVP的方式,当然按照这个方式实现RSVP是相当的不成熟的,很多参量在应用程序都没有反馈并且处理,仅仅是在路由器之间相互的汇报,不过这个简单的方式实现RSVP的构架,所以仍然有一定的使用价值。

  在Vovida的SIP中实现RSVP的步骤如下:

  在上图中实线的部分是SIP命令,虚线部分是RSVP消息
  Vocal中的RSVP实现过程:
  我们先看一下RSVP API中定义的流程:
  我们先来看一下RSVP的API调用过程:

(点击放大)
  首先通过rapi_session()打开一个Unix域的RAPI Socket,并创建一个RSVP的会话实例,如果成功则返回一个非零的数值用于表示建立的会话ID号。
  例如在Vocal的SIP Stack中这样创建:
  session_id = rapi_session(&(dest_addr),//会话对端的目的地址;
       proto_id,   //协议号 udp 17;
       RAPI_USE_INTSERV,//这里表示采用IntServ定义(和Diffserv相对应)
       (rapi_event_rtn_t)upcallHandler,//在RSVP错误发生时候的回调函数
       0,//RSVP事件的过滤器
       &rtn_code);//建立会话的错误返回值。
  使用rapi_session创建会话是发送RSVP PATH或者是发送RSVP RESV都需要在调用相应的函数之前调用它,现在我们看下面具体的程序部分的调用过程:
1.首先是主叫部分发送INVITE命令,我们知道命令中包含有主叫的会话描述(这里我们称为Remote SDP);
2.被叫部分此时处于OpRing的状态中接收到主叫的INVITE消息以后,根据主叫的INVITE消息和主叫的SDP,得到主叫的地址和主叫的RSVP端口(主叫的RTP端口);被叫调用setupRsvp子程序发送包含有数据流标识和数据业务流特征的PATH消息到主叫,具体发送的业务流Tspec特征如下:
  //Sender Tspec(数据流的话务描述特征)的定义:
  rapi_tspec_t *tspec_ptr = &(snd_tspec);
  qos_tspecx_t *qos_tspec = &(tspec_ptr->tspecbody_qosx);
  qos_tspec->spec_type = QOS_TSPEC;//发送方业务流特征标示
  qos_tspec->xtspec_r = 10000;//业务流量
  qos_tspec->xtspec_b = 200;//标记存储桶宽度
  qos_tspec->xtspec_p = 10000;//突发流量
  qos_tspec->xtspec_m = 200;//本地缓冲最大保留量(漏桶参数)
  qos_tspec->xtspec_M = 200;//SDU的最大值
  tspec_ptr->len = sizeof(rapi_hdr_t) + sizeof(qos_tspecx_t);
  // RAPI Sender
    tspec_ptr->form = RAPI_TSPECTYPE_Simplified;
  … …
  我们先来看一下在RSVP API中定义的发送一个PATH消息的函数:
  rtn_code = rapi_sender(session_id,//在rapi_session中创建的会话ID号。
  0,              //该标志暂时未被使用
  &(src_addr),         //源地址和源端口
  NULL,             //发送方的端口号和源地址,可以为空
  &(snd_tspec),         //发送方的数据流的话务描述特征
  NULL, /* sender adsepc */  //Apspec的内容,可以为空
  NULL, /* Policy */      //发送方策略值,一般为空
  ttl);             //消息的生存周期`````

  这里似乎和RSVP的——呼叫方发送PATH消息的精神有一些违背,是被叫方发送PATH消息,其实二者没有什么不同,首先主叫方,没有收到被叫方的SDP所以不能确定被叫方接收RSVP消息的端口和IP地址,其次,媒体流是双向的,双方都必须在网路上通过PATH——Reserve的方式预流资源。

3.在完成了一系列SIP命令和状态的交换(RING,OK过程)以后,主叫方开始准备发送ACK消息了,也就是处于操作OpFarEndAnswered()的时候,调用rsvpFarEndAnswered发送Reserve消息,为什么要在这个时候发送Reserve消息呢?因为主叫在下一个过程(收到ACK消息后,打开RTP通道之前)的时候,已经保证了所有的主叫到被叫之间的路由器都已经收到了PATH预留消息,

4.第5,6两个消息是主叫端点向被叫端点之间的路由器发送PATH消息,并且接收对端的RESV消息的过程。和1,2,3的过程基本上一样,最后在双方的RTP通道打开之前,主叫/被叫之间的路由器实现稳定状态,也就是都收到主叫和被叫的资源预留的信息。
我们来看一下在主叫是如何定义RESV消息的:
  //预留方式的选择:
  //RAPI_RSTYLE_WILDCARD的方式适合于声音媒体传输,在多个请求的时候按最大的要求满足//Flowspec需要为空;
  // RAPI_RSTYLE_FIXED的方式适合于声音媒体传输,对每个发送源进行单独的预留;
  // RAPI_RSTYLE_SE表示预留数量应该为自该接口收到的所有预留请求的最大数值,这个方//式主要适合于视频媒体
  style = RAPI_RSTYLE_FIXED; /* RAPI_RSTYLE_WILDCARD = 1
                  RAPI_RSTYLE_FIXED = 2
                  RAPI_RSTYLE_SE = 3 */

  resv_flag = 0; /* RAPI_REQ_CONFIRM */

  rapi_flowspec_t *flowspec_cl_ptr = &(flowspec_cl);
  qos_flowspecx_t *qos_flowspec_cl = &flowspec_cl_ptr->specbody_qosx;
  //数据流说明(Flowspec)中的Tspec项目,要和PATH中的业务特征相同
  qos_flowspec_cl->spec_type = QOS_CNTR_LOAD;
  qos_flowspec_cl->xspec_r = 10000;
  qos_flowspec_cl->xspec_b = 200;
  qos_flowspec_cl->xspec_p = 10000;
  qos_flowspec_cl->xspec_m = 200;
  qos_flowspec_cl->xspec_M = 200; /* 65535 */
  flowspec_cl_ptr->form = RAPI_FLOWSTYPE_Simplified;
  flowspec_cl_ptr->len = sizeof(rapi_flowspec_t);
  //数据流说明中的Rspec项目,根据PATH的端到端延迟和指标和Adspec的参数计算出的,//在Vocal中直接采用估算的方法得出,Rspec是预留说明。
  rapi_flowspec_t *flowspec_g_ptr = &(flowspec_g);
  qos_flowspecx_t *qos_flowspec_g = &flowspec_g_ptr->specbody_qosx;
  qos_flowspec_g->spec_type = QOS_GUARANTEEDX//类型为QoS保证,最为常用的设定;
  qos_flowspec_g->xspec_R = 10000;//预流带宽
  qos_flowspec_g->xspec_S = 0;//松弛项(relaxation),用于指示Qos富裕量
  qos_flowspec_g->xspec_r = 10000;// 业务流量
  qos_flowspec_g->xspec_b = 200;// 标记存储桶宽度
  qos_flowspec_g->xspec_p = 10000; //突发流量
  qos_flowspec_g->xspec_m = 200; //本地缓冲最大保留量(漏桶参数)
  qos_flowspec_g->xspec_M = 200; //SDU的最大值
  flowspec_g_ptr->form = RAPI_FLOWSTYPE_Simplified;
  flowspec_g_ptr->len = sizeof(rapi_flowspec_t);
  //筛选说明,用于表示对哪个或者那些发送方进行资源预留
  filter_spec.form = RAPI_FILTERFORM_BASE;//表示包含发送方的套接字地址
  //发送方的套接字地址
  filter_spec.len = sizeof(rapi_hdr_t) + sizeof(rapi_filter_base_t);
  filter_spec.rapi_filt4 = *(struct sockaddr_in *) & src_addr;

  rtn_code = rapi_reserve(session_id,// 在rapi_session中创建的会话ID号。
        resv_flag,//指示是否使用回吊函数(可以设置成0)
        (struct sockaddr *) & rcv_sockaddr,//接收地址和端口
        style,//预留方式(WF,FF,SF)
        NULL,//扩展的预留类型列表,可以为空
        NULL,//接收策略
        1,// FilterNo值,为1表示不能忽略Filterspec_list
        &(filter_spec), //筛选说明
        1,//FlowspecNo值,为1表示不能忽略Flowspec_list
        &(flowspec_cl)); //FlowSpec数据流说明结构。

5.在被叫端主要调用的函数:
  a. void setupRsvp(SipSdp& localSdp, SipSdp& remoteSdp)
主要由被叫端调用,用于在收到主叫发送过来的INVITE消息以后根据主叫的SDP回送被叫资源预留PATH消息。
  b. void rsvpFarEndAnswered(Sptr localSdp, Sptr remoteSdp)
主要由主叫端调用,用于在向被叫端发送ACK消息前向被叫发送RESV消息和开始主叫资源预留PATH消息。
  c. void rsvpAckHandler(Sptr localSdp, Sptr remoteSdp)
主要由被叫端调用,用于在收到主叫发送过来的ACK消息以后根据主叫的SDP回送主叫资源预留RESV消息。

6. 如何实现的RSVP机制到Diffserv的映射:
  对于目前在Vocal中对于RSVP的处理过程是非常简单的,在用户端都没有对AdSpec和Tspec做任何具体的运算,得出端到端的延迟指标,以及预留带宽,仅仅是通告路径上的路由器去预留资源,这样做如果是一个简单的没有太复杂的网络状态的区域网内部,采用这种方法当然是无可厚非的,不过如果是在有复杂网络状态的广域网上这样就可以说是不是很行得通了,一般来说在主干网络上会运行DiffServ(分类服务)的机制(所有的流都分组为多个服务类别的方式),这样在骨干网上的RSVP消息当然就会被忽略,所以我们的PATH和SESV消息都要实现对Diffserv的映射,换一句话来说,就地让骨干网看起来象RSVP的一个节点,一般来说我们把AdSpec中的DTOT最小路径延迟(或者说是子网络到主干网络的传播延迟 在RFC2205中有定义)改变成透过骨干网的传播延迟和平均排队延迟的值(这个是由主干网罗入口/出口路由器做的工作)这个近似的方式一般来说是有效的,因为骨干网络失效的机会毕竟比较小,如果主干网络是千兆路由器,那么每条PATH消息是可以在中继段上更新的。
  返回RESV消息的时候,对于分类服务而言,并不是将每个相对应的RSVP操作定义一个单独的队列,对于骨干网络路由器是不现实的,只能相对服务等级接近的安排在最相近的队列中。
  另外有几个情况是在如果主干网络使用DiffSev需要注意的:
  a. 如果有一个流不符合Tspec时——而这个时候路由器已经为所有的入口和出口规划了每一条虚链路的时候,一个不符合Tspec的流就足以毁坏同一类别所有其他留所争取的服务质量,例如入口处归纳低质量的视频/音频流时候,出现了高质量的视频流。
  b. 分散的/突发的流合并到平缓的流中时候。
  不过一般来说每个路由器都具备检查流的Tspec的能力,特别是作为主干网络入口的路由器(例如一些大的网络(BGP/EBGP)的入/出口地方)。在运行视频会议或者是其他突发流很多的恶劣工作状况的时候。

7. 修改Vocal的SIP协议栈来更好的实现RSVP:
  我们前面已经反复地阐述:在Vocal中只不过是实现了一个简单RSVP构架,最重要的一点就是它不能够实现软状态,也就是定期刷新消息的Tspec和Rspec,如果在传输视频信号的时候这样的情况出现得特别频繁,由于视频信号并不总是处于一种稳定的平缓的状态传输,另外当路由改变的时刻,RSVP消息需要能准确的沿着新的路由往复(这种情况是可能出现的,特别在大型网络中)。
  解决上述问题的途径首先就是要在RSVP建立保证服务预定,也就是要根据接收端根据发送端的AdSpec消息计算预留的带宽(而在Vocal中基本上没有处理AdSpec),AdSpec中参加带宽运算的主要是两个参数:Dtot和Ctot,第一个参数是最小路径延迟,第二个是路径带宽,通过这两个参数根据公式D=(b(存储桶深度)+Ctot)/p + Dtot计算出端到端之间的延迟:
  例如:
  PATH流的初始特征:
  Tspec(p=10mbps,L=2kbps,r=1mbps,b=32kbps) AdSpec(Ctot=0,Dtot=0)
  经过第一个路由器:
  Tspec(p=10mbps,L=2kbps,r=1mbps,b=32kbps) AdSpec(Ctot=11,Dtot=0.05s)
  经过第二个路由器:
  Tspec(p=10mbps,L=2kbps,r=1mbps,b=32kbps) AdSpec(Ctot=55,Dtot=0.1s)
  现在我们来计算Resv中Rspec项目:
  最长的延迟为0.1s的延迟,我们在Rspec中所计算的预留带宽必须符合这个要求,那么根据公式:
  D=(b+Ctot)/p + Dtot
  b:存储桶深度
  计算出的D为0.185S我们在根据这个公式来计算预留带宽
  R=((p-r)(L+Ctot)+(b-L)p)/((t-Dtot)(p-r)+b-L)
  r:业务流量
  t:所需要的延迟
  注意:所需要的延迟在0.1-0.185之间变化,这样我们通过上述公式得出一个比较确切的R值R=1.66Mbps。所以Rspec为:R=1.66Mbps;松弛项(S):用于指示Qos的富裕量,如果所有的路由器按照R预留,那么整个路径上的端到端的延迟会比要求的时延要少5毫秒:这里可以选择0.05S,也就是说有一个比较宽余的带宽,可以实现其他的数据传输,或者是让当前的媒体数据实现尽力传输,具体的松弛项计算可以参看RFC2205定义。
  上面我们解决了服务预定的问题,但是它只不过让我们的终端程序运行进一步合理化,可以正确的规划需要预留的带宽,但是中间还是有关键问题没有解决,也就是我们上面说的软状态——定期刷新Tspec和Rspec,以及探测/感知主干路由的变化
  从程序上实现这些事实上并不困难,我们在打开媒体通讯的RTP信道以后,可以用一个进程定期的发送PATH和RESV消息,让流的接收者进行定期刷新,特别是在视频通讯阶段(采用H.263算法)出现帧间帧的时候,数据的流量必然会大大增加,这个时候,如果提前刷新预留的状态,那么我们可以在初期就避免网络出现阻塞的问题,当然,如果流量超过了路径所承受的标准,那么必然会依靠侵占S(松弛度)来发送数据包,如果超过了带宽许可,这个时候,必然通讯会出现一个比较明显的延迟,不过根据实验结果表明,这些还是可以接受的。
  如果IP路由发生了变化,那么上述的解决办法同样的适用,定期传送RSVP的消息可以重新根据流的路径进行新的定义,所以他们也会沿着新的路径进行传输,所以沿着相反路径的RESV消息将试图沿着新的路由进行预定,旧的预定就会超时然后取消。
  但是我们如果考虑到主干网络使用DiffServ就不会那么乐观了(当然主干网络的路由变化不会那么剧烈),主干网络上PATH项目中变化的部分就是AdSpec中的Dtot/Ctot,我们在上面已经说了如何定义Dtot的内容(子网络到主干网络的传播延迟的计算 在RFC2205中有定义)改变成透过骨干网的传播延迟和平均排队延迟的值,正如上面所说的,如果主干网络是功能强大的千兆路由器组成,那么PATH中的Dtot和Ctot可以在中继的时候得到更新,如果是ATM或者是MPLS网络的话,出入口也可以得到更新,这样的话你事实上完全不必操心。

8.一些其他的设想:
  不过不管怎么说上述的数值如果是周期性计算并在RESV消息中更新的话,必然大大的加大路由器的运算开销,特别在跨洋多点视频会议的时候,这样用户接入服务供应商区域网入口路由器可能会发生“饿死”的情况(没有用户媒体数据时候反而被大量无用的RSVP消息所淹没),所以在使用主干网络的时候,我们考虑必须有一个机制探测主干网络的传播延迟并且通报给服务供应商区域网入口路由器,这个对于入口路由器并不使什么难事,最好是主干入口路由器本身就具备这样的功能,进一步简化主干网络为一个简单的RSVP节点,变成由主干网络的接入路由器通告服务供应商的路由器端对端的延迟 ,这样把计算的过程交给主干路由器,而服务供应商区域网入口路由器只负责更新AdSpec,对于用户来说,并不需要设定AdSpec,也就是可以让AdSpec为空,这样效率就可以得到大大的提高,代价就是增加了协议复杂性。

9.Vocal中采用策略服务器来管理QoS:
  在H.323和SIP等大型的通讯协议中实现QoS的保证的确不是一个小的问题,和普通的传输服务协议所不同,H.323和SIP的传递数据都有着非常明显的延迟和速率敏感特性,在建立一个大型的视频会议/IP网络电话系统的时候需要有专门的设备来管理和保证QoS,在Vocal系统中实现这个的设备是PoS Server(Policy Server),它使用了OSP和COPS(Common Open Policy Service)协议。可以和路由器之间传递消息,PoS的工作流程非常简单,当代理服务器转递180 /183的振铃消息时(也就是被叫发送PATH消息前),发送一个COPS消息给PoS,同时被叫发送PATH消息到路由器上,路由器产生一个COPS-Request消息给PoS,以便确定用户的带宽申请授权,如果授权合法校验通过的话,PoS回送一个COPS-Decision到被叫端的路由器上,同样在主叫端的路由器回送RESV消息的时候也会向PoS进行同样操作。

rspec_receitas:几个RSpec测试配方 RSPEC-测试示例 阿尔甘斯的遗嘱 一些测试示例。 基于Rails 5测试规定 立即下载

相关推荐

onDesk:onDesk是Trello的一个克隆工具,可以将您的项目和想法组织到办公桌中

onDesk Trello克隆

《计算机网络(第5版)》第八章 因特网上的音频/视频服务

摘要 本章探讨了因特网上的音频/视频服务技术。首先分析了传统网络对实时音视频的局限性,提出三类服务模式:流式存储(点播)、流式实况(直播)和交互式(如IP电话)。流式存储采用RTSP协议实现媒体控制,结合RTP/RTCP传输数据;交互式通信通过H.323或SIP信令协议建立会话,其中SIP因简单灵活成为主流。为保障服务质量,引入调度算法(如WFQ)、流量整形(令牌桶)及资源预留机制(RSVP)。关键点在于通过专用协议栈(RTP/RTCP)解决实时性需求,同时利用QoS技术优化网络性能。

aramae的博客 260

Ruby_on_Rails实践.rar

Ruby_on_Rails实践.rar

下一代VoIP协议探讨(SIP、H.323、Skype)

我国VoIP已经到了需要有新的起色的关头,业务的个性化和多样性的特点是VoIP发展的考虑重点,选择合理的技术来支持是发展的关键,目前可用来实现VoIP的协议有多种,本文重点分析了各种VoIP协议的特点以及下一代VoIP需要重点考虑的问题。      关键词 SIP协议 Skype H.323 VoIP      1、引言    对话音通信仍是赢利先锋军的中国通信业来说,VoIP真正

cai066的专栏 1601

ruby on rails for dummies

适合初学者的ruby教程<br>

microservice_auth

微认证 验证微服务应用程序 依存关系 Ruby 3.0.0 捆绑器2.2.3 罗达3.19+ 续集5+ 彪马5.0+ PostgreSQL 9.3+ 安装和运行应用程序 克隆存储库: git clone git@github.com:prog-supdex/microservice_auth.git && cd micro_ads 安装依赖项并创建数据库: bundle install rake db:create rake:db:migrate rake db:seed 运行应用程序: bundle exec puma 待办事项清单 处理error_handler插件。 如果异常与块中指定的异常不匹配,则调用默认行为(显示错误) 更改db / seed所需库的加载 修复通过RPC进行身份验证的测试(模拟) ....补充清单

一篇对H.323协议介绍比较详细的文章

实力就是一切关于shellcode备份2- -| 回首页 | 2005年索引 | - -已锁定H.323协议 关键词: H.323协议                                           H.323协议   H.323是一套在分组网上提供实时音频、视频和数据通信的标准,是ITU-T制订的在各种网络上提供多媒体通信的系列协议H.32

Crazy_Dreamer的专栏 1万+

使用Jacob实现将Word文件转换为Pdf文件

如果是首次使用 jacob,建议先直接从 github上下载 zip包,因为在实现Word转Pdf的时候,不仅需要用到 jacob.jar,还需要 jacob.dll 库,而zip包中都有。官方使用文档可以参考:https://github.com/freemansoft/jacob-project/blob/main/docs/UsingJacob.md。// 如果安装的是微软的 Office,需要使用 Word.Application。

qq_41672950的博客 750

H.323协议简介

在传统电话系统中,一次通话从建立系统连接到拆除连接都需要一定的信令来配合完成。同样,在IP电话中,如何寻找被叫方、如何建立应答、如何按照彼此的数据处理能力发送数据,也需要相应的信令系统,一般称为协议。目前在国际上,比较有景响的IP电话方面的协议包括ITU-T提出的H.323协议和IETE提出的SIP协议,本节主要介绍目前用得最广泛H.323协议。   一、H.323的体系结构   为了能在不保证Q

1041

银行客户投诉预测模型优化

在实际操作中,银行可以使用这个优化后的模型来识别那些可能引起客户不满的因素,并采取预防措施。例如,如果模型表明退款金额是一个很强的预测因子,银行可能会审查其退款政策,以确保它对客户是公平和透明的。在银行业务中,客户投诉是一个重要的指标,它直接关系到客户满意度和银行服务质量。某一个指标,比如:退款金额,本文假设退款金额对于预测投诉的权重应该高于赔偿金额。在每次迭代中,本文使用当前的权重组合来训练模型,并计算在测试集上的准确率。的可能值来搜索最佳的权重组合,并输出最佳准确率及对应的权重。来寻找最佳的权重组合。

weixin_57499254的博客 1707

手把手教你用开源EtherCAT协议栈SOEM开发从站设备(附避坑指南)

本文详细介绍了如何使用开源EtherCAT从站协议栈SOES进行嵌入式设备开发。内容涵盖从环境搭建、硬件准备到核心的对象字典与PDO映射配置,并重点分享了主循环集成、状态机处理以及实战调试中的常见问题与避坑指南,旨在帮助开发者高效实现设备接入工业现场总线网络。

linux的博客 630

00005.H.323协议简介

在传统电话系统中,一次通话从建立系统连接到拆除连接都需要一定的信令来配合完成。同样,在IP电话中,如何寻找被叫方、如何建立应答、如何按照彼此的数据处理能力发送数据,也需要相应的信令系统,一般称为协议。目前在国际上,比较有景响的IP电话方面的协议包括ITU-T提出的H.323协议和IETE提出的SIP协议,本节主要介绍目前用得最广泛H.323协议。   一、H.323的体系结构   为了能在不保证Q

xlmg的专栏 1533

nupkg 本地安装_使用Nuget安装离线包nupkg

一:Nuget简介:NuGet 是免费、开源的包管理开发工具,专注于在 .NET 应用开发过程中,简单地合并第三方的组件库。当需要分享开发的工具或是库,需要建立一个Nuget package,然后把这个package放到Nuget的站点。如果想要使用别人已经开发好的工具或是库,只需要从站点获得这个package,并且安装到自己的Visual Studio项目或是解决方案里。NuGet能更方便地把一...

weixin_34460380的博客 1万+

SIP

SIP目录[<a id="dir_alt" onclick="function onclick(){mEffect.showCatalog()}" href="javascript:void(0)">隐藏]历史回顾 SIP 会话构成 H.323和SIP协议的比较 Java相关技术   介绍  什么是SIP  SIP是一个应用层的信令控制协议。用于创建、修改

MarvinBower的专栏 956

黑马程序员Pink的javaScript课程APIday4

本文摘要:介绍了JavaScript中日期对象的实例化方法(有参/无参)及三种获取时间戳的方式。讲解了DOM节点操作,包括节点查找(父、子、兄弟节点)、增加/克隆/删除节点的方法。详细说明了移动端touch事件和Swiper插件的使用,包括自动播放和小圆点配置。最后提及学成在线案例中表单验证和取消默认跳转的实现。

JLY19970726的博客 825

【SOC估算】基于EKF与神经网络融合的锂电池SOC高精度估计及Matlab实现

本文探讨了基于EKF与神经网络融合的锂电池SOC高精度估计方法。通过结合扩展卡尔曼滤波(EKF)的模型驱动优势和神经网络的数据驱动学习能力,实现了对电池荷电状态(SOC)的精准预测。Matlab仿真验证了该混合算法在各种工况下均能显著降低估计误差,提升电池管理系统性能。

play7的博客 695

SIP/H.323/MGCP协议详解

SIP/H.323/MGCP协议详解    摘要:SIP协议是NGN中的重要协议,越来越得到业界的重视。本文通过SIP协议的背景、功能、网络 元素、实现机制、以及SIP消息的组成等几个方面对SIP协议做了全方位的概要性介绍,以使读者对SIP有初步的概念和认识。<br /> 一、SIP协议的背景和功能<br /> SIP( 会话初始协议)的开发目的是用来帮助提供跨越因特网的高级电话业务。因特网电话(IP电话)正在向一种正式的 商业电话模式演进,SIP就是用来确保这种演进实现而需要的NGN(下一代网络)系

genius52的专栏 2494

期货套利策略(二)

接上一篇期货套利策略,随着对期货套利策略的深入了解,我发现套利策略不是那么好做的。下面将会讲碰到的一些问题。 上一篇文章中没有考虑滑点的问题,这里我们把滑点问题考虑进去。这里先说一些天勤api的买入点,天琴的买入点是当前K线的收盘价。碰到数据传输问题,还有计算等各方面问题,实际情况是无法在当前K线的收盘价买入的。这里我们把这方面问题考虑进去,利用api.wait_update()调到下一个k线数据...

qq_31611005的博客 1713

VoIP基本概念:H.323协议简介

在传统电话系统中,一次通话从建立系统连接到拆除连接都需要一定的信令来配合完成。同样,在IP电话中,如何寻找被叫方、如何建立应答、如何按照彼此的数据处理能力发送数据,也需要相应的信令系统,一般称为协议。目前在国际上,比较有景响的IP电话方面的协议包括ITU-T提出的H.323协议和IETE提出的SIP协议,本节主要介绍目前用得最广泛H.323协议。 一、H.323的体系结构

张亮校的专栏 1607

OpenClaw 股票自动化交易实践指南:从原理到实战的完整技术路径

量化交易策略的开发是一个系统工程,需要综合运用金融知识、编程技能和数据分析能力。OpenClaw通过引入提示词工程技术,大大降低了策略开发的技术门槛,使得更多投资者能够参与到量化交易中来。但技术只是工具,真正决定策略成败的是对市场的深刻理解和严格的风险管理。本章系统介绍了OpenClaw环境下的策略开发方法,从提示词驱动到传统代码实现,从参数优化到回测验证,涵盖了策略开发的完整流程。提示词驱动方式适合快速验证交易想法,传统代码方式适合实现复杂的定制逻辑,两种方式可以协同使用,发挥各自的优势。

lovely_yoshino的博客 5991

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

sip协议---------阿冬专栏!!!

什么是SIP协议?    SIP协议是一个应用层的信令控制协议。用于创建、修改和释放一个或多个参与者的会话。这些会话可以好似Internet多媒体会议、IP电话或多媒体分发。会话的参与者可以通过组播(multicast)、网状单播(unicast)或两者的混合体进行通信。    SIP协议是类似于HTTP的基于文本的协议。SIP协议可以减少应用特别是高级应用的开发时间。由于基于IP协议的SIP

阿冬专栏 1195

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

SIP学习三(SIP和VoIP协议及其应用)

SIP和VoIP协议及其应用 SIP协议是NGN中的重要协议,越来越得到业界的重视。本文简单介绍了VoIP和SIP协议的含义,并从背景、功能、主要消息这几个方面对SIP协议的工作原理进行了介绍,分析了SIP呼叫建立的流程。 1 VoIP简介 当前Internet的应用日益广泛,随着骨干网速率的高速增长,接入网速率的不断提高,Internet上的业务正从窄带走向宽带、从非实时走向实时,VoIP

单向街的夏天 2968

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

SIP协议(一)

熟悉SIP的一些基本常识概念相关协议, 网络元素,分层结构, 不同请求消息类型,响应消息类型 SDP的一些概念基础 SIP SIP(Session Initiation Protocol)会话初始化协议,是有IETE(Internet engineering task force,因特网工程任务组)制定的通讯协议,他是一个基于文本的应用层协议,用于创建,修改,释放一方或多方会话,广泛应用于CS(电路交换circuit switched),ISM(Ip multimedia subsystem,ip

b0303的博客 1万+

NGN五大协议

NGN的特点是基于IP技术的多厂商、多技术、不同体系结构的复杂融合网络,软交换技术在这样一个异构网络中起着极为重要的控制作用。    控制是通过协议来实现的。NGN在实施软交换技术涉及的主要协议包括H.323、H.248/MEGACO、SIP、SIGTRAN、BICC等。    盘点五大主要协议    H.323协议    H.323是一套在分组网上提供实时音频、视频和数据通信的标

博青港湾-技术空间 1459
上一篇: 官方的ORACLE9I在REDHAT9上安装的指南
下一篇: JAIN-SIP协议栈浅析~
老白
博客等级 码龄23年 59粉丝 106原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值