14sip协议概述

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

SIP协议及OSIP开发库回顾套接字模型套接字I/O模型select模型WSAAsyncSelect模型WSAEventSelect模型完成端口本章目标SIP协议概述SIP消息OSIP库的使用sip协议SIP(SessionInitiationProtocol)会话启动协议是一个面向于网络电话和会议的应用层控制协议。是一个基于IP网络的多媒体通讯协议是一种轻量级的可扩展请求/响应协议,用于在两个端口之间开始通讯会话sip协议产生的背景英特网电话(IP电话)正在向一种正式的商业电话模式演进,SIP就是用来确保这种演进实现而需要的NGN(下一代网络)系列协议中重要的一员。SIP是IETF标准进程的一部分,它是在诸如SMTP(简单邮件传送协议)和HTTP(超文本传送协议)基础之上建立起来的。sip协议特性•稳定性:该协议已经使用多年,现在十分稳定•速度:基于UDP的小型协议,效率特别高•灵活性:基于文本的协议,非常容易扩展•安全性:提供加密和身份验证等功能,对sip的扩展还提供其他安全性功能•标准化:随着整个通讯行业都在向sip协议靠拢,已经迅速称为一种标准sip协议应用方向网络办公即时短消息即时状态管理网络IP电话网络会议SIP消息一条SIP消息由两部分组成信封:以头字段的形式描述一个请求或一个请求结果有效负载:即内容(可选),包含有关请求的数据信封是文本格式,但是内容可以是文本,也可以是二进制形式SIP消息类型•请求消息:从客户机发到服务器•响应消息:从服务器发到客户机SIP请求消息SIP请求消息包括三个元素请求行头消息体SIP响应消息SIP响应消息包含3个元素状态行头消息体SIP消息最少头域(3-1)Via:发送请求方希望响应方收到请求后,往via域后面所带的地址发送响应包,后面的branch参数是这个事务的标识To:包含一个显示名和一个SIPURI(或SIPSURI),这个SIPURI就是这个请求要发送的目标From:也包含一个显示名和一个SIPURI(或SIPSURI),这个SIPURI就是这个请求的发起方,From后面还跟了一个tag参数,这个参数包含了一个随机字符串,起到鉴别作用SIP消息最少头域(3-2)•Call-ID:包含一个全局唯一标识符来标识这次呼叫,这个标识符使用一个随机字符串和发起请求方所在的主机名(或IP)地址一起生成。•Cseq:命令序列,包含一个整数和一个方法名称。在这个对话中的每个新的请求都会增加这个整数的值,保证这个数值是有序的•Contact:头域包含一个SIPURI或者SIPSURI指出一个能够接触到请求发送方的直接路由,一般这个SIPURI由用户名和一个完全限定域名(FQDN)构成。Via头域向对方指出了这个请求的应答应该发送到哪里,而Contact头域向对方指出了将来的请求应该发送到哪里。SIP消息最少头域(3-3)Max-Forwards:头域限制了在这个请求传送到目的地的时候最多可以有多少跳。它包含一个整数,在每一跳这个整数都会被减少。Content-Type:头域描述消息体的类型(在这个例子里消息体采用了SDP描述,但是消息体内容没有给出)。Content-Length:头域指出了消息体的字节数。典型的SIP呼叫INVITE(2-1)•UserAgentA发送一个SIP请求INVITE给UserAgentB,表达UserA想跟UserB进行谈话的愿望。•INVITE请求包含语音流协议的细节。payload中使用会话描述协议(SessionDescriptionProtocol,SDP)就是为此目的。SDP消息包含一个清单,其内容为UserA支持的所有介质编码。(这些编码使用RTP进行传输。)INVITE(2-2)INVITEsip:UAB@example.comSIP/2.0Via:SIP/2.0/UDP10.20.30.40:5060From:UserA;tag=589304To:UserBCall-ID:8204589102@example.comCSeq:1INVITEContact:Content-Type:application/sdpContent-Length:141v=0o=UserA28908445262890844526INIP410.20.30.40s=SessionSDPc=INIP410.20.30.40t=30344236190m=audio49170RTP/AVP0a=rtpmap:0PCMU/8000sip100响应UserAgentB读取该请求,然后告诉UserAgentA它已经收到请求,防止UAA因为超时而关闭掉此次会话SIP/2.0100TryingFrom:UserA;tag=589304To:UserBCall-ID:8204589102@example.comCSeq:1INVITEContent-Length:0SIP180响应(2-1)当UserAgentB电话响铃时,UserAgentB发送临时消息(响铃)给UserAgentA,这样它就不会超时和放弃。UserAgentA收到这个消息后,开始产生回铃音SIP180响应(2-2)SIP/2.0180RingingFrom:UserA;tag=589304To:UserB;tag=314159Call-ID:8204589102@example.comCSeq:1INVITEContentLength:0SIP200响应消息(2-1)•UserB决定接受呼叫。此时,UserAgentB发送一个OK响应给UserAgentA。•在响应的payload中,还有另一条SDP消息。它包含一组两个用户代理都支持的介质编码。•此时,双方正式处于呼叫中。使用200类型的响应可以接受所有类型的SIP请求SIP200响应消息(2-2)SIP/2.0200OKFrom:UserA;tag=589304To:UserB;tag=314159Call-ID:8204589102@example.comCSeq:1INVITEContact:Content-Type:application/sdpContent-Length:140v=0o=UserB28908445272890844527INIP410.20.30.41s=SessionSDPc=INIP410.20.30.41t=30344236190m=audio3456RTP/AVP0a=rtpmap:0PCMU/8000ACK消息UserAgentA最后使用一条ACK消息进行确认。对于这种请求类型来说,没有重试和响应消息,即使消息丢失。ACK只在INVITE消息中使用。ACKsip:UAB@example.comSIP/2.0Via:SIP/2.0/UDP10.20.30.41:5060Route:From:UserA;tag=589304To:UserB;tag=314159Call-ID:8204589102@example.comCSeq:1ACKContent-Length:0BYE消息在通信会话结束时,其中一个用户挂断。此时,这个用户的用户代理发送一个新的请求BYE。这条消息可以由任一方发送。BYEsip:UAB@example.comSIP/2.0Via:SIP/2.0/UDP10.20.30.41:5060To:UserB;tag=314159From:UserA;tag=589304Call-ID:8204589102@example.comCSeq:1BYEContent-Length:0针对BYE的200消息另一用户的用户代理接受该请求,然后使用一条OK消息作为应答。呼叫连接至此断开。SIP/2.0200OKTo:UserB;tag=314159From:UserA;tag=589304Call-ID:8204589102@example.comCSeq:1BYEContent-Length:0常用请求消息消息用法INVITE呼叫一个用户代理,传送一次呼叫。ACK确认呼叫BYE终止呼叫CANCEL终止还未收到200的呼叫REGISTER提供一项注册服务,带有一个联系地址和可以用来代替的别名。例如,在前面的例子中,地址sip:UAA@example.com就是sip:UserA@10.20.30.40的别名。然后,注册服务器example.com就可以把呼叫转发给地址10.20.30.40。OPTIONS询问一个用户代理的“能力”(例如,该用户代理能够识别的消息和编码)经常使用响应消息(2-1)消息用法100Trying消息已收到,但是最终用户代理尚未进行处理。请等待180Ringing最终用户代理已经收到消息,正在提示用户。请等待200OK最终用户已经接受消息301MovedPermanently302MovedTemporarily用户代理的地址已经改变,新的永久或临时地址位于Contact字段中400BadRequest普通错误消息。客户端不能识别消息经常使用响应消息(2-2)消息用法401Unauthorized407ProxyAuthenticationRequired使用证书重试404NotFound要联系的用户不存在或尚未注册408RequestTimeout另一方没有响应oSIP开发库oSIP项目启动于2000年7月,第一个发布的版本是在2001年5月(0.5.0)。oSIP开发库是第一个自由软件项目oSIP库应用方向oSIP,作为SIP开发库,将允许建造互操作的注册服务器、用户代理(软件电话)和代理服务器oSIP的目标并非仅仅在PC应用。OSIP具有足够的灵活和微小,以便在小的操作系统(例如手持设备)满足其特定要求OSIP在将来会完美的适用于蜂窝设备和嵌入式系统当中oSIP库开发层次语法分析器有限状态机事务管理oSIP语法分析器文件结构•./libosip-x.x.x/parser是SIP语法分析器的源代码目录。./libosip-x.x.x是开发库的目录。•#include是一个包含SIP语法分析API的库文件。SIP-URI(SIP地址)URL被用于描述分布在SIP网络中的每一个实体:SIP用户代理、定位服务器、SIP代理服务器、SIP重定向服务器等等。这些实体都要有他们完整的SIPURL进行标识。在开发库中用osip_uri_t格式去定义如下字段:”To”、”From”、”Contact”、”Route”和”Record-Route”osip_uristructosip_uri{char*scheme;char*username;e*/char*password;char*host;char*port;osip_list_t*url_params;osip_list_t*url_headers;char*string;};osip_uri_t操作的API(2-1)函数名称功能osip_uri_init分配内存,并对结构体作初始化。osip_uri_free释放操作完成的uri_t结构,并对uri_t结构中的变量赋值为空osip_uri_parse分解输入的串信息,并赋值到已定义的uri_t结构变量当中osip_uri_to_str将一个uri_t中的结构化信息转化并组合赋值给一个字符串osip_uri_clone进行两个uri_t结构实例的复制osip_uri_t操作的API(2-2)函数名称功能osip_uri_set_schemeosip_uri_set_usrnameosip_uri_set_hostosip_uri_set_passwordosip_uri_set_port设定uri当中的摘要部分、用户名、密码、主机和端口osip_uri_get_schemeosip_uri_get_usrnameosip_uri_get_hostosip_uri_get_passwordosip_uri_ge

1 / 43
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功