- 会话发起协议教程
- SIP - 首页
- SIP - 简介
- SIP - 网络元素
- SIP - 基本呼叫流程
- SIP - 消息传递
- SIP - 响应代码
- SIP - 报头
- SIP - 会话描述协议
- SIP - 提供/应答模型
- SIP - 移动性
- SIP - 分支
- SIP - 代理与路由
- SIP 到 PSTN
- SIP - 编解码器
- SIP - B2BUA
- SIP 有用资源
- SIP - 快速指南
- SIP - 有用资源
- SIP - 讨论
SIP - 请求与响应报头字段
接受
Accept 报头字段用于指示消息正文中可接受的消息 Internet 媒体类型。
该报头字段使用 Internet 中常用的类型/子类型格式描述媒体类型。
如果不存在,则假定的可接受消息正文格式为application/sdp。
媒体类型列表可以使用q值参数设置优先级。
Accept-Encoding
Accept-Encoding 报头字段用于指定可接受的消息正文编码方案。
编码可用于确保具有大型消息正文的 SIP 消息适合单个 UDP 数据报。
可以使用q值参数设置优先级。如果 UAC 不接受列出的任何方案,则返回 406 Not Acceptable 响应。如果未包含,则假定的编码将为text/plain。
To
To指示请求的最终接收者。UA 生成的任何响应都将包含此报头字段,并附加一个标签。这是一个必填报头。
代理生成的任何响应都必须在To报头字段中添加一个标签。
To报头字段 URI 从不用于路由。
From
From报头字段指示请求的发起者。它是用于识别对话的两个地址之一。
From报头字段可能包含用于标识特定呼叫的标签。
它可能包含显示名称,在这种情况下,URI 括在<>中。
这是一个必填报头。
Call-ID
Call-ID 报头字段在所有 SIP 请求和响应中都是必填的。它用于唯一标识两个用户代理之间的呼叫。
Call-ID 在呼叫之间必须唯一。
用户代理的所有注册都应使用相同的 Call-ID。
Call-ID 始终由用户代理创建,并且永远不会被服务器修改。
它是一个加密随机标识符。
Via
Via 用于记录请求所采用的 SIP 路由,这有助于将响应路由回发起者。
生成请求的 UA 会在其 Via 报头字段中记录自己的地址。
转发请求的代理会将包含其自身地址的 Via 报头字段添加到 Via 报头字段列表的顶部。
代理或生成对请求的响应的 UA 会按顺序将请求中的所有 Via 报头字段复制到响应中,然后将响应发送到顶部 Via 报头字段中指定的地址。
接收响应的代理会检查顶部 Via 报头字段并与其自身地址匹配。
如果不匹配,则响应已被丢弃。
然后删除顶部 Via 报头字段,并将响应转发到下一个 Via 报头字段中指定的地址。
Via 报头字段包含协议名称、版本号和传输 (SIP/2.0/UDP、SIP/2.0/TCP 等),并且可能包含端口号和参数,例如 received、rport、branch、maddr和ttl。
如果 UA 或代理从与顶部 Via 报头字段中指定的地址不同的地址接收请求,则会在 Via 报头字段中添加received标签。
UA 和代理会在 Via 报头字段中添加分支参数,该参数计算为 Request-URI、To、From、Call-ID 和 CSeq 编号的哈希函数。
CSeq
CSeq 报头字段是每个请求中都需要的报头字段。它包含一个十进制数字,该数字对于每个请求都会增加。
通常,它在每个新请求中增加 1,但CANCEL和ACK请求除外,它们使用其引用的 INVITE 请求的 CSeq 编号。
UAS 使用 CSeq 计数来确定顺序错误的请求或区分新请求(不同的 CSeq)或重传(相同的 CSeq)。
UAC 使用 CSeq 报头字段将响应与其引用的请求匹配。
例如,发送 INVITE 请求然后发送 CANCEL 请求的 UAC 可以通过 CSeq 中的方法判断 200 OK 响应是对邀请请求还是取消请求的响应。
Contact
Contact 报头字段用于向其他用户传达请求发起者的地址。收到 Contact 报头字段后,可以缓存 URI 并将其用于对话中未来请求的路由。
例如,INVITE 的 200 OK 响应中的 Contact 报头字段可以允许确认 ACK 消息和此呼叫期间的所有未来请求绕过代理并直接发送到被叫方。
Record-Route
Record-Route 报头字段用于强制通过代理路由两个 UA 之间会话(对话)中的所有后续请求。
通常,Contact 报头字段的存在允许 UA 直接发送消息,绕过初始请求中使用的代理链。
代理将其地址插入 Record-Route 报头字段会覆盖此操作,并强制将来的请求包含一个 Route 报头字段,其中包含该代理的地址,从而强制包含此代理。
希望实现此功能的代理会插入包含其自身 URI 的报头字段,或将其 URI 添加到已存在的 Record-Route 报头字段中。
URI 的构造方式使得 URI 解析回代理服务器。UAS 将 Record-Route 报头字段复制到对请求的 200 OK 响应中。
代理会将报头字段不变地转发回 UAC。然后,UAC 会存储 Record-Route 代理列表以及 200 OK 中存在的 Contact 报头字段,以在所有后续请求中用于 Route 报头字段。
Organization
Organization 报头字段用于指示消息发起者所属的组织。
代理也可以在消息从一个组织传递到另一个组织时插入它。
与所有 SIP 报头字段一样,它可以被代理用于做出路由决策,并被 UA 用于做出呼叫筛选决策。
Retry-After
它用于指示资源或服务何时可能再次可用。
在 503 Service Unavailable 响应中,它指示服务器何时可用。
在 404 Not Found、600 Busy Everywhere 和 603 Decline 响应中,它指示被叫 UA 何时可能再次可用。
它包含以“秒”为单位的时间段。
Subject
可选的 Subject 报头字段用于指示媒体会话的主题。
报头字段的内容也可以在提醒期间显示,以帮助用户决定是否接受呼叫。
Example: Subject: How are you?
Supported
Supported 报头字段用于列出 UA 或服务器实现的一个或多个选项。
它通常包含在对 OPTIONS 请求的响应中。
如果未实现任何选项,则不包含报头字段。
如果 UAC 在 Supported 报头字段中列出选项,则代理或 UAS 可以在呼叫期间使用该选项。
如果必须使用或支持该选项,则改为使用 Require 报头字段。
Example: Supported: rel100
Expires
Expires 报头字段用于指示请求或消息内容有效的时段。
当出现在 INVITE 请求中时,报头字段会为完成 INVITE 请求设置时间限制。
也就是说,UAC 必须在此时间段内收到最终响应(非 1xx),否则 INVITE 请求将自动取消,并返回 408 Request Timeout 响应。
会话建立后,原始 INVITE 中 Expires 报头字段的值无效——必须为此目的使用 Session-Expires 报头字段。
如果出现在 REGISTER 请求中,则报头字段会为 Contact 报头字段中不包含expires参数的 URI 设置时间限制。
Expires 也用于 SUBSCRIBE 请求以指示订阅持续时间。
Example: Expires: 30
User-Agent
此报头字段用于传达有关发起请求的 UA 的信息。