20. 头字段 (Header Fields)
本章描述了SIP消息中使用的所有标准头字段。头字段遵循HTTP/1.1头字段的一般形式和语法规则。
头字段概述
SIP头字段可以分为以下几类:
- 通用头字段: 适用于请求和响应
- 请求头字段: 仅在请求中使用
- 响应头字段: 仅在响应中使用
- 实体头字段: 描述消息体
主要头字段参考表
必需头字段
| 头字段 | 类型 | 说明 |
|---|---|---|
| Call-ID | 通用 | 唯一标识呼叫的标识符 |
| CSeq | 通用 | 命令序列号 |
| From | 通用 | 发起者地址 |
| To | 通用 | 接收者地址 |
| Via | 通用 | 传输路径 |
| Max-Forwards | 请求 | 跳数限制 |
常用头字段
| 头字段 | 类型 | 说明 |
|---|---|---|
| Contact | 通用 | 直接联系地址 |
| Content-Length | 实体 | 消息体长度 |
| Content-Type | 实体 | 消息体类型 |
| Expires | 通用 | 过期时间 |
| Record-Route | 请求/响应 | 记录路由路径 |
| Route | 请求 | 强制路由路径 |
头字段详细说明
20.1 Accept
类型: 请求
说明: 指示UAC可接受的媒体类型
20.2 Accept-Encoding
类型: 请求
说明: 指示可接受的内容编码
20.3 Accept-Language
类型: 请求
说明: 指示首选语言
20.4 Alert-Info
类型: 请求/响应
说明: 指定要渲染的替代铃声
20.5 Allow
类型: 响应
说明: 列出UA支持的方法
20.6 Authentication-Info
类型: 响应
说明: 提供认证的相互认证信息
20.7 Authorization
类型: 请求
说明: 包含用户代理的认证凭证
20.8 Call-ID
类型: 通用(必需)
说明: 唯一标识一组消息的全局唯一标识符
示例: Call-ID: [email protected]
20.9 Call-Info
类型: 通用
说明: 提供关于呼叫者或被叫者的附加信息
20.10 Contact
类型: 通用
说明: 提供用于联系UA的URI
用途:
- 在INVITE中指定会话的直接路由
- 在REGISTER中提供绑定
- 在3xx响应中提供重定向地址
20.11 Content-Disposition
类型: 实体
说明: 描述消息体的处理方式
20.12 Content-Encoding
类型: 实体
说明: 指示应用于消息体的编码
20.13 Content-Language
类型: 实体
说明: 描述消息体的语言
20.14 Content-Length
类型: 实体(必需当有消息体时)
说明: 指示消息体的大小(字节)
示例: Content-Length: 349
20.15 Content-Type
类型: 实体
说明: 指示消息体的媒体类型
示例: Content-Type: application/sdp
20.16 CSeq
类型: 通用(必需)
说明: 序列号和方法名
示例: CSeq: 4711 INVITE
20.17 Date
类型: 通用
说明: 消息发起的日期和时间
20.18 Error-Info
类型: 响应
说明: 提供关于错误的额外信息的URI
20.19 Expires
类型: 通用
说明: 消息内容过期的相对时间
用途:
- REGISTER: 注册有效期
- INVITE: 会话有效期
20.20 From
类型: 通用(必需)
说明: 指示请求发起者的逻辑身份
包含: 显示名称、URI、tag参数
示例: From: Alice <sip:[email protected]>;tag=1928301774
20.21 In-Reply-To
类型: 请求
说明: 枚举此呼叫引用或返回的Call-ID
20.22 Max-Forwards
类型: 请求(必需)
说明: 限制请求可以转发的次数
默认值: 70
示例: Max-Forwards: 70
20.23 Min-Expires
类型: 响应
说明: 在423响应中指示最小过期间隔
20.24 MIME-Version
类型: 通用
说明: 指示MIME版本
固定值: MIME-Version: 1.0
20.25 Organization
类型: 通用
说明: 标识发出请求或响应的组织
20.26 Priority
类型: 请求
说明: 指示请求对客户端的紧急程度
值: emergency, urgent, normal, non-urgent
20.27 Proxy-Authenticate
类型: 响应(407)
说明: 包含代理服务器的认证挑战
20.28 Proxy-Authorization
类型: 请求
说明: 允许客户端标识自己(或其用户)到需要认证的代理
20.29 Proxy-Require
类型: 请求
说明: 列出代理必须支持的选项
20.30 Record-Route
类型: 请求/响应
说明: 由代理插入以强制路由路径
用途: 确保后续请求经过同一代理集
20.31 Reply-To
类型: 请求
说明: 提供应该联系的URI
20.32 Require
类型: 请求
说明: 列出UAS必须支持的选项
20.33 Retry-After
类型: 响应
说明: 指示服务何时可用
用于: 503, 404, 413, 480, 486, 600, 603
20.34 Route
类型: 请求
说明: 提供请求必须遵循的路由路径
20.35 Server
类型: 响应
说明: 包含关于UAS处理请求的软件信息
20.36 Subject
类型: 请求
说明: 提供会话主题的简要摘要
20.37 Supported
类型: 通用
说明: 列出UA支持的扩展
20.38 Timestamp
类型: 请求
说明: 描述UAC何时发送请求
20.39 To
类型: 通用(必需)
说明: 指定请求的逻辑接收者
包含: 显示名称、URI、tag参数
示例: To: Bob <sip:[email protected]>;tag=a6c85cf
20.40 Unsupported
类型: 响应(420)
说明: 列出请求中不支持的功能
20.41 User-Agent
类型: 请求
说明: 包含关于发起请求的UAC的信息
20.42 Via
类型: 通用(必需)
说明: 指示请求和响应经过的路径
包含: 协议版本、传输、主机、分支参数
示例: Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bK776asdhds
20.43 Warning
类型: 响应
说明: 携带关于消息状态或转换的额外信息
20.44 WWW-Authenticate
类型: 响应(401)
说明: 包含UAS的认证挑战
头字段分类
按功能分类
身份和路由:
- Call-ID, From, To, Via, Contact
- Route, Record-Route
认证和安全:
- Authorization, Proxy-Authorization
- WWW-Authenticate, Proxy-Authenticate
- Authentication-Info
内容描述:
- Content-Type, Content-Length
- Content-Encoding, Content-Language
- Content-Disposition
协议控制:
- CSeq, Max-Forwards, Expires
- Require, Proxy-Require, Supported
- Allow, Accept
用户信息:
- Subject, Priority, Organization
- User-Agent, Server
头字段紧凑形式
某些头字段有紧凑形式以减少消息大小:
| 完整形式 | 紧凑形式 |
|---|---|
| Call-ID | i |
| Contact | m |
| Content-Encoding | e |
| Content-Length | l |
| Content-Type | c |
| From | f |
| Subject | s |
| Supported | k |
| To | t |
| Via | v |
示例:
完整形式:
Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bK776asdhds
From: Alice <sip:[email protected]>;tag=1928301774
To: Bob <sip:[email protected]>
Call-ID: [email protected]
紧凑形式:
v: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bK776asdhds
f: Alice <sip:[email protected]>;tag=1928301774
t: Bob <sip:[email protected]>
i: [email protected]
头字段使用规则
必需头字段(所有请求/响应)
- Call-ID
- CSeq
- From
- To
- Via
请求特定必需头字段
- Max-Forwards
消息体相关
- Content-Type(当有消息体时推荐)
- Content-Length(当有消息体时必需,或流式传输时)
重要头字段详解
Via头字段
作用: 记录请求路径,用于路由响应
组成部分:
- 协议版本 (SIP/2.0)
- 传输协议 (UDP/TCP/TLS/SCTP)
- sent-by (主机:端口)
- 分支参数 (branch)
- received参数 (服务器添加)
- rport参数 (NAT穿越)
示例:
Via: SIP/2.0/UDP pc33.atlanta.com:5060;branch=z9hG4bK776asdhds
Via: SIP/2.0/TCP proxy1.example.com;branch=z9hG4bKnashds7;received=192.0.2.1
Contact头字段
作用: 提供直接联系URI
用途:
- INVITE: 建立直接媒体路径
- REGISTER: 提供注册绑定
- 3xx响应: 提供重定向地址
参数:
- expires: 绑定有效期
- q: 优先级 (0.0-1.0)
示例:
Contact: <sip:[email protected]:5060>;expires=3600
Contact: <sip:[email protected]>;q=0.7;expires=3600
Contact: "Bob" <sip:[email protected]>;methods="INVITE,ACK,BYE"
Record-Route头字段
作用: 强制后续请求经过代理
使用场景:
- 代理需要保持在对话路径上
- 防火墙穿越
- 监控/记账需求
示例:
Record-Route: <sip:proxy1.example.com;lr>
Record-Route: <sip:proxy2.example.com;lr>,<sip:proxy1.example.com;lr>
关键要点
- 必需头字段: Call-ID, CSeq, From, To, Via, Max-Forwards
- 紧凑形式: 减少消息大小,主要用于无线网络
- Via路径: 记录请求路径,用于响应路由
- Contact: 提供直接联系地址,避免通过代理
- Record-Route: 强制对话内请求经过相同代理
- 认证头字段: Authorization, WWW-Authenticate等用于安全
- 内容头字段: 描述消息体的类型、长度、编码
- 扩展性: Require, Supported, Allow支持协议扩展
本章小结:
第20章详细定义了SIP协议中使用的44个标准头字段。这些头字段涵盖了身份标识、路由控制、内容描述、认证安全等各个方面。理解这些头字段的含义和使用规则对于正确实现SIP应用至关重要。必需头字段(Call-ID, CSeq, From, To, Via, Max-Forwards)必须出现在所有消息中,而其他头字段根据消息类型和用途选择性使用。