《SIP消息头域的说明》由会员分享,可在线阅读,更多相关《SIP消息头域的说明(18页珍藏版)》请在金锄头文库上搜索。
1、SIPSIP 消息头域的说明消息头域的说明( (转转) )1 1 general-headergeneral-header 类:类:为描述消息基本属性的通用头域,可用于请求消息或响应消息;通用头域的域名只有在协议版本改变时才可有效地扩展。不过,通信中的所有方均认为是“通用头域”的新的头域也可认为是通用头域。不被认可的头域作为实体头域。1.11.1 Call-IDCall-ID Call-ID 通用头域唯一标识一个特定的请求或者一个特定客户的所有登记。来自同一个客户的所有的登记应该使用同样的 Call-ID 头值,至少是在同一个重新启动的循环中。注意到单个的多媒体会议会产生不同 Call-ID
2、的几个呼叫,例如,用户多次邀请一个单个的私人加入同一个会议。对于一个 INVITE 请求。主叫方用户代理服务器不应该警告用户,如果用户先前已经对 INVITE 请求中的 Call-ID 作出了响应。如果用户已经是会议的一个成员,同时包含在会话描述中的会议参数并未改变,那么主叫方用户代理服务器可以接受此呼叫,而不管 Call-ID。对于一个已存在的 Call-ID 或者会话的邀请可能改变会议的参数。一个客户应用可以决定向用户简单地指示会议参数已经改变,可以自动接受邀请或者可能需要用户的确认。使用几个不同的 Call-ID 可以邀请一个用户加入同一个会议或者呼叫。如果需要的话,可以使用在会话描述中
3、的标识来检测此副本。例如,SDP 的“o”域中包含了会话标识和版本号。REGISTER 和 OPTIONS 方式使用 Call-ID 值来精确匹配请求和响应。一个单个的客户发布的所有的 REGISTER 请求应该使用同一个 Call-ID,至少在同一个有效循环中。Call-ID = (“Call-ID” | “i”)”:”local-id”hostLocal-id = 1*urici 是 Call-ID 的缩写形式。“host”应该是一个真正的域名或者是一个全球性的 IP 地址。如此,”local-id”应该是一个由 URI 字符组成的标识,此标识在”host”中是唯一的。建议使用经过加密的随
4、机标识。Call-ID 的值禁止被重用于另一个不同的呼叫。Call-ID 区分大小写。1.21.2 FromFrom请求和响应必须包含 From 通用头域,指示请求的初始者。From 域可以包含一个“tag“参数。服务器将 From 头域从请求复制到响应。可选的“display-name“意味着由用户接口提出(执行)。如果客户身份被隐藏,那么系统必须使用显示名“Anonymous“。此 SIP-URL 禁止包含“transport-param“,“maddr-param“,“ttl-param“,“headers“。接收到含有以上元素的 SIP-URL 的服务器在执行下一步处理之前,应将这些元
5、素删除。即使“display-name“是空的,如果“addr-spec“包含了“,“、“?“、“;“,“name-addr“形式也必须使用。From =(“From“ | “f“)“:“(name-addr | addr-spec)*(“;“addr-params)addr-params=tag-paramtag-param=“tag=“UUIDUUID=1*(hex | “-“)“tag“可以出现在一个请求的 From 头域中,当共享同一个 SIP 地址的用户的两个实例使用同一个 Call-ID 发出邀请时,必须使用此“tag“。“tag“tag“必须是全球唯一的,并且是一个经过加密的至少
6、必须是全球唯一的,并且是一个经过加密的至少 3232 比特的随机数。一个比特的随机数。一个单个的用户应该在一个单个的用户应该在一个 Call-IDCall-ID 所标识的整个呼叫中保持同一个所标识的整个呼叫中保持同一个 tagtag。Call-ID、To 和 From 用于标识一个 Call leg。呼叫和 Call-leg 的区别在于多个响应对派生请求的呼叫。1.31.3 ToToTo 通用头域说明了请求的接收者。To =(“To“ | “t“)“:“(name-addr | addr-spec)*(“;“addr-params)请求和响应必须包含 To 头域,指示请求的预定接收者。可选的“
7、display-name“意味着由用户接口提出(执行)。UAS 或者重定向服务器将 To 头域的内容复制到它的响应中,同时如果请求包含了不止一个 Via 头域,则必须增加“tag“参数。如果 Via 头域不止一个,那么表明请求至少经过一个代理服务器的处理。因为接收者不知道此请求是哪一个代理服务器派生的请求,所以从安全方面考虑,可认为它们都派生了请求。此 SIP-URL 禁止包含“transport-param“,“maddr-param“,“ttl-param“,“headers“。接收到含有以上元素的 SIP-URL 的服务器在执行下一步处理之前,应将这些元素删除。“tag“参数作为一种通用
8、机制,用于区分由一个 SIP-URL 标识的用户的多个实例。因为代理可以派生请求,所以同一个请求可以到达用户的多个实例(例如:移动和住宅电话);又由于每一个都可以响应,所以必须有一种方法来区分来自被叫方每一个实例的响应。这种情况也可由于多点传送(组播)请求而产生。“tag“参数用于区分 UAC 的响应。当请求有可能被一中间件代理派生时,每一个实例都必须在它的响应中包含“tag“参数。“tag“参数必须可以被 UAS、登记器和重定向服务器增加,但禁止被加入到上传的响应中。“tag“参数可以增加到所有方式的所有已经定义的响应中,也可以加入到来自 UAS 或者重定向服务器的报告性(1xx)响应。两个
9、实体间随后所有的事务都必须包含“tag“参数。当响应与请求相匹配时,如果请求的 To 域中未包含“tag“参数,那么响应 To 域中的“tag“参数将忽略。“tag“允许代理派生同一个呼叫的未来的请求,而只对几个可能的响应 UAS 中的一个定位(寻址)。它也允许被叫方的多个实例发送可以区分的请求。当 SIP 服务器接收到一个请求,此请求的 To 域中含有它不能识别的 URI 时,它应该返回一个 400(Bad Request)响应。即使“display-name“是空的,如果“addr-spec“包含了“,“、“?“、“;“,“name-addr“形式也必须使用。Call-ID、To 和 Fr
10、om 用于标识一个 Call leg。呼叫和 Call-leg 的区别在于多个响应对派生请求的呼叫。“tag“允许代理派生同一个呼叫的未来的请求,而只对几个可能的响应 UAS 中的一个定位(寻址)。它也允许被叫方的多个实例发送可以区分的请求。1.41.4 ViaViaVia 头域指示请求迄今为止所走的路径。它防止了请求的循环,同时确保了响应(回答)沿同样的路径返回,这一点可以通过防火墙遍历和其他的异常路径情况提供帮助。1.51.5 ContactContactContact 通用头域可出现在 INVITE、ACK 和 REGISTER 请求中,1xx、2xx、3xx和 485 响应中。通常,它
11、提供了一个 URL,用户可以通过此 URL 来进行进一步的通信。INVITE 和 ACK 请求:Contact 域表明请求从哪个位置发起;这允许主叫方直接向被叫方发送未来的请求,如 BYE,而不是通过一系列的代理。由于所想要的地址可能是代理的地址,所以只 Via 头域并不够。INVITE 2xx 响应:一个用户代理服务器在发送一个限定的、肯定的响应(2xx)时,可以加入一个 Contact 响应头域,表明对于未来的请求它可以直接到达的 SIP 地址,如 ACK 请求。Contact 头域包含了服务器自己或者代理的地址,例如主机在一个防火墙之后。如果响应未包含 Record-Route 头域,此
12、Contact 的值将复制到此呼叫的后来的请求的 Request-URI 中;如果响应包含了 Record-Route 头域,Contact 域的值将作为最后一项增加到 Record-Route域中。Contact 的值不应该通过呼叫被缓冲,因为它可能不能表示一个特殊目的地地址的最想要的位置。INVITE 1xx 响应:一个 UAS 发送一个临时的响应(1XX)可以插入一个 Contact响应域。语义同 2XX INVITE 响应。注意到 CANCEL 请求禁止被发送到那个地址(Contact 所指示的),但仍跟随初始请求的路径。REGISTER request:REGISTER 请求中的 C
13、ontact 域表明用户的位置。REGISTER请求定义了一个通配的 Contact 域。“*”,只能用于:0 删除一个用户所有的登记。一个可选的“expires”参数指示登记所想要的期限。如果 Contact 未使用此参数,则 Contact 域的值将使用默认值。如果这些机制都未采用,SIP URL的期限为一个小时。其他的 URL 没有期限时间。REGISTER 2xx 响应:一个 REGISTER 响应可以返回可以达到的用户的所有地址。3xx 和 485 响应:Contact 头域指示一个或多个可选的地址。可以出现在对于INVITE、BYE 和 OPTIONS 方式的响应中。Contact
14、 头域包含的 URI 给出了新的位置和用户名,或者简单地说明其他的传输参数。300(Multiple Choise)、301(Moved Permanently)、302(Movec Temporarily)或者 485(Ambiguous)响应应该包含一个含有可尝试的新地址的 URL 的 Contact 域。301 和 302 响应可以给出正在尝试的同样的位置和用户名,但指定了其他的传输参数,如一个不同的服务器或者多点地址,或者一个从 TCP 到 UDP,UDP 到 TCP 的 SIP 事务的改变。客户将 Contact URL 中的“user”、“password”、“host”、“por
15、t”、“user-param”复制到重定位请求的 Request-URL 中,同时使用 tranport 参数中的传输协议,将此请求传到“maddr”和“port”参数所说明的地址处。如果“maddr” 是一个多点地址,“ttl”值表明 time-to-live 值 Contact 头域可能指示一个不同于原始呼叫实体的实体。例如,与 GSTN 网关相连的 SIP 呼叫可能需要发送一个特殊的消息通知。Contact 头域可以包含任何合适的 URL 来指示被叫方的位置,而不只限于 SIP URL。Contact=(“Contact” | “m”)”:”(“*” | (1#(name-addr |
16、addr-spec)*(“;”contact-params)comment)name-addr=display-name”addr-spec=SIP-URL | URIdisplay-name=*token | quoted-stringcontact-param= “q” “=”qvalue| “action” ”=”proxy” | ”expires” “=”delta-seconds | SIP-date| extension-attributeextension-attribute = extension-name “=”extension-valueq:表明所给的位置的相对重要性,“qvalue”从 0 到 1,值高参考性大。action:只用于使用 REGISTER 登记时。表明是否客户希望服务器代理或者重定向用户想要的未来的请求。expires:表明 URI 的活动时间。注意与 Expire 头域的联系:如果 Contact 中存在 expires 参数,则使用其表示的时间;若不存在,则使用 Expire 头域所表示的时间。