SIP由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“sip鍜”。
SIP请求方法:
INVITE:
ACK:发起会话请求 证实已收到对于INVITE请求的最终响应。与INVITE消息配套使用。
REGISTER:将自己的地址信息注册至服务器上
OPTIONS: 查询服务器(对方代理)的能力
CANCEL:
BYE:
UPDATE:
INFO:
REFER:
PRACK:
COMET: 取消尚未完成的请求。对于已完成的无影响 结束会话 允许客户更新一个会话的参数而不影响当前的会话状态 用于传递会话中产生的与会话相关的控制信息 呼叫转移,用于指示接收方通过使用在请求中提供的联系地址信息联系第三方 与ACK相同,但用于临时响应 用来检验能够用于会话的资源,使用户代理根据资源可用性决定是否接受呼
取消订阅请求 REINVITE: 用于改变会话参数 SUBSCRIBE: 用于发起订阅请求,向远端断点预定其状态变化的通知 UNSUBSCRIBE:
NOTIFY: 用于通告当前资源状态,发送消息通知预订者它所预定的状态的变化
MESSAGE: 用于通过在消息体中承载即时消息内容实现即时通信
SIP响应码:
1xx: Provisional,2xx: Succe,3xx: Redirection
4xx: Client Error
5xx: Server Error
6xx: Global Error 临时响应---表明请求已经接收,正在继续进行处理。成功响应---请求已经成功收到,理解并接受。重定向响应---还需要附加的操作才能完成这个请求,本请求转发到其他的服务器 上处理 客户端错误---请求包含错误的格式或者不能在这个服务器上完成 服务器错误---服务器不能正确的处理这个显然合法的请求 全局错误---请求不能被任何服务器处理。
SIP消息头域:
1.通用头域:
用于请求消息或响应消息.域名只有在协议版本改变时才可有效的扩展
Call-ID: a84b4c76e66710@pc33.atlanta.com
Call-ID =(“Call-ID” | “i”)”:”local-id”@”host
Local-id = 1*uric
全局唯一标识。代表了一种在两个或多个用户之间共享的SIP信令的关系。
标识一个特定邀请和与这个邀请相关的所有后续事务
一般使用经过加密的随机标识(可通过随机字串和主机名或IP地址混和产生)
From: Alice;tag=1928301774
From =(“From” | “f”)“:”(name-addr | addr-spec)*(“;”addr-params)
addr-params=tag-param
tag-param=“tag=”UUID
UUID=1*(hex | “-”)
“tag”可出现在From头域中,当共享同一个SIP地址的用户的两个实例使用同一个Call-ID发出邀请时,必须使用“tag”。全局唯一的经过加密的至少32比特的随机数。“tag”参数作为一种通用机制,用于区分由一个SIP-URL标识的用户的多个实例。
出于安全性考虑,禁止包含“transport-param”,“maddr-param”,“ttl-param”,“headers”。接收到含有以上元素的SIP-URL的服务器在执行下一步处理之前,应将这些元素删除。
To: BobTo =(“To” | “t”)“:”(name-addr | addr-spec)*(“;”addr-params)如果请求包含了不止一个Via头域,则必须增加“tag”参数。
出于安全性考虑,同From。
Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bK776asdhds
Via指示请求迄今为止所走的路径。
Branch参数: 使用magic cookie”z9hG4bK”打头.其它部分是对“To, From, Call-ID头域和Request-URI”按一定的算法加密后得到。这7个字母是一个乱数cookie(定义成为7位的是为了保证旧版本的RFC2543实现不会产生这样的值).Contact:sip:192.168.2.89:5090
Contact=(“Contact” | “m”)”:”
(“*” |(1#((name-addr | addr-spec)[*(“;”contact-params)][comment])))
name-addr=[display-name]””
addr-spec=SIP-URL | URI
display-name=*token | quoted-string
contact-param=“q”“=”qvalue|“action””=””proxy”|”expires”“=”delta-seconds| SIP-date| extension-attribute
extension-attribute = extension-name [“=”extension-value]
q:表明所给的位置的相对重要性,“qvalue”从0到1,值高参考性大。
action:只用于使用REGISTER登记时。表明是否客户希望服务器代理或者重定向用户想要的未来的请求。
expires:表明URI的活动时间。注意与Expire头域的联系:如果Contact 中存在expires参数,则使用其表示的时间;若不存在,则使用Expire头域所表示的时间。
CSeq: 314159 INVITECseq =“Cseq” “:” 1*DIGITMethod 为一个32位的无符号整数,它的初始值是任意的,但必须小于等于2**31。
每发出一个新的SIP请求,CSeq++1,遵循严格单调增加的守则.派生的请求须有同样的Cseq值 用户代理服务器必须记住同一个Call-ID的INVITE请求的最高序列数.低于此序列数的任何INVITE请求,服务器作出响应后放弃。
“Method”值使得客户将对于INVITE请求的响应和对于一个CANCEL请求的响应(一般是200响应)区分开来
Encryption:Encryption= “Encryption” “:””pgp”pgp-eparams
pgp-eparams=1#(pgp-version | pgp-encoding)
pgp-encoding=”encoding””=””ascii” | token
表明内容经过了加密处理,此加密为端到端的加密。加密部分默认为二进制。Expires = “Expires” “:”(SIP-date | delta-seconds)Expires头域给出了消息内容活动的日期和时间 此域的值可以是一个SIP-date,或者是一个以秒为单位的数字形式。此头域只用于INVITE、REGISTER方式。在REGISTER请求中,它指示登记的有效期限。在INVITE请求中,主叫方可以限制邀请的有效性 Record-Route: sip:p1.example.com;lr Expires:
Record-Route = “Record-Route” “:” 1#name-addr
Record-Route请求和响应头域可以被任何服务器加到请求中并坚持以后的同一个Call leg的请求使用同样的路径。它包含了一个唯一可达的Request-URI来指示代理服务器。每一个代理服务器将它的Request-URI加到序列的开始。
严格路由: Strick Routing.要求接收到的消息的request-URI必须是自己的URI,然后将第一个Route头域“弹”出来,并把其中的URI作为新的request-RUI,然后把该消息路由给该URI。松散路由:lr: Louse Routing1,Proxy首先会检查消息的request-URI是不是自己属于自己所负责的域。如果是,它就会通过定位服务将该地址“翻译”成具体的联系地址并以此替换掉原来的request-URI;否则,它不会动request-URI。2,Proxy检查第一个Route头域中的URI是不是自己的,如果是,则移除之。3,前面两项都是准备工作,下面该进行真正的路由了。如果还有Route头域,则Proxy会把消息路由给该头域中的URI,否则就路由给request-URI。Timestamp:
Timestamp = “Timestamp” “:” *(DIGIT)[ “.” *(DIGIT)][delay] Delay =(DIGIT)[ “.” *(DIGIT)] Timestamp通用头域指示客户何时向服务器发送请求。
此头域的值只对客户有用。客户使用timestamp头域来计算到达服务器的round-trip时间,以便调整重传的timeout时间。
Date: Tue, 15 Nov 1994 08:12:31 GMTDate = “Date” “:” HTTP-dateHTTP-date只能是rfc1123-date。
rfc1123-date = wkday “,” SP date1 SP time SP “GMT”
date1 = 2DIGIT SP month SP 4DIGIT;day month year(e.g., 02 Jun 1982)
wkday = “Mon” | “Tue” | “Wed” | “Thu” | “Fri” | “Sat” | “Sun”
month = “Jan” | “Feb” | “Mar” | “Apr” | “May” | “Jun” | “Jul” | “Aug” | “Sep” | “Oct” | “Nov” | “Dec”
(GMT):Greenwich Mean Time
当请求或者响应被第一次发送时,Date头域指示发送日期和时间.重传将使用与相应的初始同样的Date头域。
Accept:
用于INVITE、OPTIONS和REGISTER请求方式中,指示在响应中能够接收的媒体的类型(缺省值为application/sdp)
Accept-Encoding:与Accept头域相似,但它限制在响应中可接受的content-codings
客户用此头域向服务器指示它接收原因短语、通话描述符或者消息体中所承载的状态响应时所使用的语言。Proxy可以用此域来帮助选择呼叫的目的地。
2.实体头域
描述消息体内容的长度、格式和编码类型等属性.可用于请求消息或响应消息
Content-Encoding:
Content-Encoding=(“Content-Encoding” | “e”)”:” 1#content-coding
指示适用于实体消息体的其他的内容编码,指示为了获得Content-Type头域所给出的media-type,必须使用的编码方案。主要用于压缩消息体,而不丢失它底层的媒体类型的标识。如服务器不能识别Content-Encoding, 则发送415响应,在Accept-Encoding头域中列出可以接受的编码.Accept-Language:
Content-Length:142Content-Length =(“Content-Length” | “l”)”:” 1*DIGIT 指示消息体的长度。形式上以八个比特为一个字节。Content-Length的值应为非负数,0表示没有消息体。
服务器如果收到一个不包含Content-Length域的UDP请求,那么它便认为此请求压缩了包的剩余部分,直接关闭TCP连接
服务器如果收到一个包含有Content-Length域的UDP请求。但它的值比消息体的实际长度大,客户则应产生一个400类的响应。
Content-Type: application/sdpContent-Type=(“Content-Type”| “c”)“:”media-type 指示发送给接收者的消息体的媒体类型
3.请求头域:
只用于请求消息.用来传递有关请求或客户机本身的一些附加信息,对请求进行补充说明 Subject:
Subject=(“subject” | “s”)“:”*TEXT-UTF8
提供了一个摘要,或指示了呼叫的实际情况,使得不必分析通话描述便可过滤呼叫。User-Agent:CERN-LineMode/2.15 libwww.daodoc.comment)
包含了关于发送初始请求的客户用户代理的消息
用于统计目的,跟踪违反协议的情况、用户代理的自动认可的情况,以便在编制响应时避免特定用户代理的限制。用户代理应在请求中包含此头域。
Organization:Organization =“Organization” “:”*TEXT-UTF8
表明发送请求或者响应的实体所属的组织。它可以由位于某组织边界的代理来加入。客户软件可以使用此头域来过滤呼叫。
Contact:可出现在INVITE、ACK和REGISTER请求中,1XX、2XX、3XX和485响应中。提供了一个URL,用户可以通过此URL来进行进一步的通信 INVITE和ACK请求:Contact域表明请求从哪个位置发起; Authorization = “Authotization”“:”“pgp”*(“;”pgp-response)
pgp-response =realm | pgp-version | pgp-signature | signed-by | nonce
pgp-signature = “signature”“=”quoted-string
signed-by = “signed-by”“=”URI
pgp-signature:由ASCII码包裹的PGP标识,出现在“BEGIN PGP MESSAGE”和“END PGP MESSAGE”之间,没有版本标识。如果重新侵入并不担心的话,服务器可以不产生nonce。不产生nonce避免了增加其他形式的请求,401响应和可能的ACK消息,也减少了round-trip时间的耽搁。realm:复制于相关的www.daodoc.comment] [“:” “duration””=”delta-seconds]
用在503(Service Unavailable)响应中,向提出申请的客户指示,此服务预计多长时间无效。用在404(Not Found),600(Busy)和603(Decline)响应中,指示被叫方多长时间内再次有效。此域的值可以是SIP-date和以秒为单位的整数值。
Server:CERN/3.0 libwww.daodoc.comment)Product = token [“/” product-version] product:所使用的服务器;
comment:服务器中的重要部分。
包含了关于UAS用来处理请求的软件的信息.如果响应通过代理来前转,那么代理禁止修改此Server响应头域,它应该包含一个Via头域。
Warning:
Warning= “Warning”“:” 1#warning-value
Warning-value = warn-code SP warn-agent SP warn-text
Warn-code = 3DIGIT
Warn-agent =(host[“:”port])| pseudonym
Warn-text= quoted-string
包含了关于响应状态的其他信息.一个响应中可以有多个Warning头域
Allow:Allow = “Allow”“:” 1#Method
列出了Request-URI指示的资源所支持的方式集.目的是通知接收者与资源相联系的有效方式。在405(Method Not Allowed)响应中必须有Allow头域;在OPTIONS响应中应该有Allow头域。
Unsupported:Unsupported = “Unsupported” “:”1#option-tag
列出了服务器不支持的特征。(只用于420响应)