一般用户代理行为
扫描二维码
随时随地手机看文章
一个用户代理代表一个终端系统,包含一个用户终端UAC,用于产生请求方法;包含一个用户代理服务端UAS,用来产生响应。用户按下触发键时可以使得UAC发出请求和处理应答,UAS是一个能接收请求,并且根据用户的输入产生响应的应答。当一个UAC发送请求时,该请求通过PROXY代理服务器传递到UAS;当UAS产生一个应答,该应答同样被传送到UAC。
UAC和UAS处理请求和应答的特点:
- 请求和应答是否在同一个对话中
- 请求的方法
产生一个请求
合法的SIP请求至少需要包含:Via,From,To,Cseq,Call-ID,Max-Forwards。这6个字段是SIP消息的基本组成部分,包含了消息地址,响应的路由,消息传递次数,序列号,事务的唯一标志。这些头域是在请求行(起始行)之后,请求行:Request-URI,SIP版本(SIP版本一般为SIP/2.0)
1. Via
(1) 作用
路由响应:记录请求经过的路径,确保响应按原路径返回。
NAT 穿透:标记请求的实际源地址(通过 received 和 rport 参数)。
协议适配:标识传输层协议(如 UDP, TCP, TLS)。
(2) 格式
Via: SIP/2.0/UDP client.example.com:5060;branch=z9hG4bK776asdhds
参数:
branch:唯一标识事务(以 z9hG4bK 开头,避免冲突)。
received:记录请求的实际源 IP(由服务器添加)。
rport:记录请求的实际源端口(由服务器添加)。
(3) 规则
每经过一个代理,代理会在 Via 头部顶部插入自己的地址。
响应按 Via 列表逆序逐跳返回(类似“栈”结构)。
2. From
(1) 作用
标识发起方:标记请求的原始发送者(可能与实际发送地址不同)。
对话匹配:与 To 和 Call-ID 共同标识一个 SIP 对话(Dialog)。
(2) 格式
From: "Alice" <sip:alice@example.com>;tag=12345
参数:
tag:唯一标识对话中的参与者(由 UAC 生成,避免重复)。
显示名:可包含可读名称(如 "Alice"),非必需。
(3) 规则
UAS 必须原样返回 From 头域(包括 tag)在响应中。
3. To
(1) 作用
标识目标方:标记请求的预期接收者(可能未实际处理请求)。
对话匹配:与 From 和 Call-ID 共同标识一个 SIP 对话。
(2) 格式
To: "Bob" <sip:bob@example.org>;tag=67890
参数:
tag:由 UAS 在响应中添加,用于区分同一对话中的不同参与者。
初始请求:To 头域可能无 tag,直到 UAS 生成响应。
4. CSeq
(1) 作用
事务排序:唯一标识一个事务(请求+响应),确保请求与响应匹配。
重传检测:相同 CSeq 值的请求视为重传。
(2) 格式
CSeq: 1 INVITE
组成:
序列号:数字(从 1 开始递增)。
方法名:必须与请求方法一致(如 INVITE, BYE)。
(3) 规则
每个新请求的 CSeq 序列号必须递增(同一对话内)。
UAS 必须验证 CSeq 方法是否与请求方法一致。
5. Call-ID
(1) 作用
唯一标识对话:全局唯一标识符,用于关联同一会话中的所有请求和响应。
(2) 格式
Call-ID: a84b4c76e66710@client.example.com
生成规则:通常为随机字符串 + @ + 主机名(如 UAC 的 IP/域名)。
唯一性:同一对话中所有消息的 Call-ID 必须相同。
6. Max-Forwards
(1) 作用
防循环:限制请求经过的代理跳数,避免无限循环。
(2) 格式
Max-Forwards: 70
初始值:通常设为 70(RFC 建议值)。
处理规则:
每经过一个代理,值减 1。
若值为 0,代理返回 483 Too Many Hops 错误。