40.3. SIP协议结构

SIP消息是客户机和服务器之间通信的基本信息单元,它是一个基于UTF-8的文本编码协议。SIP消息主要分为请求消息和响应消息,不管请求消息还是响应消息,它都是由一个起始行、若干个头字段和一个消息体组成,其中的消息体是可选,其格式遵循RFC2822因特网文本消息格式标准。

SIP协议结构与HTTP协议结构非常相似,其消息格式如下:

起始行

消息头部(若干个头字段)

空行

消息体(SDP)

其中的起始行对于请求消息是请求行,对于响应消息是状态行。

下图是一个sip客户端向服务端注册时的请求消息和响应消息:

40.3.1. 消息体与SDP

请求和应答都可能含有消息体,它被一个空行和消息头分开。被SIP消息携带的消息体通常是会话描述符(即SDP),它就象附件一样包含在SIP消息中。

会话描述协议(SDP,Session Description Protocol)规定了对描述会话的必要信息怎样进行编码。两个SIP实体可以通过携带SDP消息体来使它们之间的多媒体会话达成一致。

SDP用于构建INVITE和200 OK响应消息的消息体,供主/被叫用户交换媒体信息。

SDP包括以下一些方面:

  • 会话的名称和目的

  • 会话存活时间

  • 包含在会话中的媒体信息,包括:

    媒体类型(video, audio, etc)

    传输协议(RTP/UDP/IP, H.320, etc)

    媒体格式(H.261 video, MPEG video, etc)

    多播或远端(单播)地址和端口

  • 为接收媒体而需的信息(addresses, ports, formats and so on)

  • 使用的带宽信息

  • 可信赖的接洽信息(Contact information)

SDP会话描述是基于文字的,一个会话描述由一些类似如下形式的文字行组成:Type=value

类型域为一个单独字符,而值域的格式则取决于它前面的类型语。一个SDP描述含有会话级信息和媒体级信息,会话级信息应用于整个会话,媒体级信息作用于特殊的媒体流。一个SDP会话描述以会话级信息和媒体级信息开始,如果任意一个出现,另外一个就接着在后面出现。会话级部分以v=0开始,v代表类型,0为值,意思是协议版本号为0(SDP版本0)。接下来的行直到媒体流部分或者会话描述的终点,提供了整个会话的信息。

40.3.2. SIP与Java

Java在支持SIP上发布了许多相关的规范,如Java APIs for Integrated Networks、SIP Servlet API 、JAIN SIP Lite 、SIP API for J2ME 、180),JAIN SIMPLE Presence 、Java Media Framework for RTP、JAIN SIMPLE Instant Messaging、JAIN SDP、SIP for J2ME等,而SIP Servlets规范提供了一系列的Java API和一个基于容器(Container)/应用服务器(Application Server)的开发模型,用于提高服务器端SIP应用的开发效率。

SIP Servlets同样基于Java Servlet架构,其API归属于javax.servlet.sip包和javax.servlet.http同样扩展自javax.servlet.。不同的是,HTTP Servlets通过Servlet架构实现了HTTP协议, 而SIP Servlet实现了SIP协议。一组SIP Servlets连同资源和部署描述文件打包后部署并运行在一个容器或SIP应用服务器上,容器提供了例如会话状态管理、事务管理、重发、网络连接、消息调度、线程管理、资源管理以及应用程序管理等服务。

下表是Http servlet和Sip servlet的比较:

比较项 HTTP SIP
Servlet ClassHttpServletSipServlet
SessionHttpSessionSipSession
Application packagewarsar
Deployment Descriptorweb.xmlsip.xml