Skip to main content

19. 通用消息组件 (Common Message Components)

SIP消息的某些组件出现在SIP消息的各个位置(有时甚至在消息外部),值得单独讨论。

19.1 SIP和SIPS统一资源标识符

SIP或SIPS URI标识通信资源。像所有URI一样,SIP和SIPS URI可以放置在网页、电子邮件或印刷文献中。它们包含足够的信息来发起和维护与资源的通信会话。

通信资源示例

  • 在线服务的用户
  • 多线电话上的外观
  • 消息系统上的邮箱
  • 网关服务上的PSTN号码
  • 组织中的组(如"sales"或"helpdesk")

SIPS URI: 指定资源应该安全地联系。这特别意味着在UAC和拥有URI的域之间使用TLS。

19.1.1 SIP和SIPS URI组件

一般形式:

sip:user:password@host:port;uri-parameters?headers

组件说明:

  • user: 被寻址主机的特定资源标识符
  • password: 与用户关联的密码(不推荐使用)
  • host: 提供SIP资源的主机(FQDN或IP地址)
  • port: 发送请求的端口号
  • uri-parameters: 影响从URI构造的请求的参数
  • headers: 要包含在请求中的头字段

常见URI参数:

  • transport: 传输机制(udp/tcp/sctp/tls)
  • maddr: 要联系的服务器地址
  • ttl: 多播的生存时间
  • user: 用户参数(phone/ip)
  • method: 要使用的SIP方法
  • lr: 松散路由标志

19.1.2 字符转义要求

SIP URI遵循RFC 2396的转义规则。某些字符必须使用%编码进行转义。

19.1.3 SIP和SIPS URI示例

sip:[email protected]
sip:alice:[email protected];transport=tcp
sips:[email protected]?subject=project%20x&priority=urgent
sip:+1-212-555-1212:[email protected];user=phone
sip:[email protected]
sip:atlanta.com;method=REGISTER?to=alice%40atlanta.com
sip:alice;[email protected]

19.1.4 URI比较

URI比较用于多种场景。SIP和SIPS URI比较规则:

1. URI方案比较(不区分大小写) 2. 用户部分比较(区分大小写) 3. 密码比较(区分大小写) 4. 主机比较(不区分大小写) 5. 端口比较(数值比较) 6. 参数比较(参数名不区分大小写,值通常区分大小写) 7. 头字段比较(名称不区分大小写)

19.1.5 从URI构造请求

从SIP或SIPS URI构造请求:

  1. URI成为Request-URI
  2. 如果URI包含maddr参数,它用于确定目的地
  3. 如果URI包含头字段,它们添加到请求
  4. URI参数影响请求的构造

19.1.6 关联SIP URI和tel URL

SIP URI可以包含电话号码。tel URL(RFC 2806)可以转换为SIP URI:

  • tel URL的电话用户部分放入SIP URI的用户部分
  • 添加user=phone参数
  • 主机部分设置为网关或服务域

示例:

tel:+1-212-555-1212
转换为
sip:[email protected];user=phone

19.2 选项标签 (Option Tags)

选项标签是唯一标识符,用于指定SIP扩展。它们在以下头字段中使用:

  • Require: 请求必须支持的扩展
  • Proxy-Require: 代理必须支持的扩展
  • Supported: 表示支持的扩展
  • Unsupported: 表示不支持的扩展

选项标签特点:

  • 不区分大小写
  • 必须是IANA注册的
  • 用于向后兼容性和扩展性

19.3 标签 (Tags)

标签是不透明字符串,用于在对话中标识UA。

使用位置:

  • From头字段的tag参数
  • To头字段的tag参数

作用:

  • 与Call-ID一起唯一标识对话
  • UAC在From头字段中生成tag
  • UAS在To头字段中生成tag
  • 标签在对话的整个生命周期内保持不变

示例:

From: Alice <sip:[email protected]>;tag=1928301774
To: Bob <sip:[email protected]>;tag=a6c85cf

URI参数详解

参数说明示例值
transport传输协议udp, tcp, sctp, tls
maddr多播地址239.255.255.1
ttl多播TTL1
user用户类型phone, ip
methodSIP方法REGISTER, INVITE
lr松散路由(无值)

SIP URI vs SIPS URI

特性SIP URISIPS URI
方案sip:sips:
安全性可选强制TLS
默认端口50605061
传输任意必须可靠
用途一般通信安全通信

URI比较示例

相等:
sip:[email protected]
SIP:[email protected]
sip:[email protected]

不相等:
sip:[email protected]
sip:[email protected] (用户部分区分大小写)

相等:
sip:[email protected]:5060
sip:[email protected] (5060是默认端口)

相等:
sip:[email protected];transport=udp
sip:[email protected];Transport=UDP (参数名不区分大小写)

关键要点

  1. SIP URI标识通信资源,可以是用户、组、网关等
  2. SIPS URI提供安全通信,强制使用TLS
  3. URI参数影响请求构造,如transport、maddr
  4. URI比较规则复杂,某些部分区分大小写,某些不区分
  5. 选项标签支持SIP扩展,实现向后兼容
  6. 标签唯一标识对话参与者,与Call-ID配合使用
  7. tel URL可转换为SIP URI,用于电话号码集成

本章小结:

第19章描述了SIP消息中的通用组件,重点是SIP和SIPS URI的结构、语法和使用。SIP URI是协议的基础,用于标识和定位通信资源。本章还涵盖了选项标签(用于扩展性)和标签(用于对话标识)。理解URI的结构和比较规则对于正确实现SIP应用至关重要。