DIALOG
当UA
发送初始INVITE
请求后,只有接收到失败响应才有可能建立DIALOG
。通过callid,FROM
域中的tag
参数,TO
域中的tag
参数来唯一标识DIALOG
。 FROM
域中的参数由主叫添加,TO
域中的参数由被叫添加。
根据DIALOG的定义,只有当101-199或200消息中的TO域中带有tag参数时,此时才建立dialog。对通过101-199消息(目前一般是18×消息)建立的DIALOG,我们称之为早期会话(early dialog).
消息传送和定时器保护
无论是
Client
还是
Server
方,在定时器和消息重发的处理上,可分为与
INVITE
相关的
Transaction
和与
INVITE
不相关的
Transaction
。
RFC3261
中定义了两个基准定时器
T1=500ms和T2=4s
。
无论是可靠传送还是不可靠传送,当实体发送消息(包括请求或响应消息)后,都会启动一个64
倍的T1
定时器(计时器B、H、F),当此定时器终结时,如果没有收到相应的响应或确认消息,实体将会清掉相关的Transaction
。
一、与INVITE请求
消息相关的行为(Client
侧行为)
当SIP
实体(包括UA
和Proxy
)发送INVITE
消息后,无论是可靠传送还是不可靠传送,实体都会启动 Transaction
保护,启动定时器B
(Timer B=64*T1
,如果T1
=500ms,
则此定时器为32S
)。
在不可靠传送的情况下,实体同时会启动
T1
(
500ms
)
定时器(A定时器)
,
如果
T1
终结了没有收到任何响应消息,实体将会重发
INVITE
消息,以后的间隔分别为
2T1,4T1,8T1,16T1,32T1,
在此期间,如果收到响应消息,实体将会终止重发行为。
当定时器B
(Timer B=64T1
)终结时,如果实体仍然没有收到响应消息,实体将终止该呼叫请求。
二、与INVITE
消息相关的最终响应行为(Server
侧行为)
当被叫用户应答时,被叫侧UA
(UAS
)将会向对端发送200
消息,表示对INVITE
消息的确认,主叫侧UA
(UAC
收到200
消息)后,将会发送ACK
消息,表示收到200
消息。
因此,对Server
侧来讲,当发送200
消息后,为了等待ACK
消息,将会启动定时器H
(Timer H=64T1
)。
在不可靠传送的情况下,
Server
还会启动
T1
定时器(计时器G)
,
如果
T1
终结,没有收到
ACK
消息,
UAS
将会重发
200
消息。以后的间隔分别为
2T1,4T1,8T1,
当时间达到
T2
(
T2
=
8T1
)后,后续重发的间隔将一直为
T2。
当定时器H
(Timer H=64T1
)终了时,如果实体仍然没有收到ACK
确认消息,实体将会终止该呼叫请求。
其它的最终响应消息,消息的重传和定时器保护也与200
消息的相同。
三、与INVITE消息无关的请求消息的行为(Client
侧行为)
其它请求(非INVITE
请求)消息,例如INFO
消息或BYE
消息,实体接收到最终响应后,由于不需要对最终响应消息进行确认,因此消息重发行为上与INVITE
消息的重发存在不同。
当实体发送INFO
或BYE
消息后,实体将会启动定时器F
(Timer F=64T1
)。如果定时器F
终了时,没有收到最终响应消息,实体将会清掉Transaction
。
在不可靠传送的情况下,实体同时启动T1
定时器(计时器E)。如果没有收到任何响应消息,实体重发的行为将与INVITE
消息相关的最终响应行为(Server
)相同。如果在此期间没有收到临时响应消息,实体将会以T2
的间隔重发。
ACK
只有在响应非200 OK
时才和INVITE
一样,否则与INVITE
不为同一事务,只属于同一个对话。
定时器 | 缺省值 | 节 | 含义 |
---|---|---|---|
T1 | 500 ms | 17.1.1.1 | 经历来回时间(RTT) |
T2 | 4 秒 | 17.1.2.2 | 非 INVITE 请求和 INVITE 响应的最长重新传输时间间隔 |
T4 | 5 秒 | 17.1.2.2 | 消息可保留在网络中的最长持续时间 |
计时器 A | 最初为 T1 | 17.1.1.2 | INVITE 请求重新传输时间间隔(仅适用于 UDP) |
计时器 B | 64*T1 | 17.1.1.2 | INVITE 事务超时计时器 |
计时器 D | 大于 32 秒(对于 UDP) | 17.1.1.2 | 响应重新传输的等待时间 |
0 秒(对于 TCP 和 SCTP) | |||
计时器 E | 最初为 T1 | 17.1.2.2 | 非 INVITE 请求重新传输时间间隔(仅适用于 UDP) |
计时器 F | 64*T1 | 17.1.2.2 | 非 INVITE 事务超时计时器 |
计时器 G | 最初为 T1 | 17.2.1 | INVITE 响应重新传输时间间隔 |
计时器 H | 64*T1 | 17.2.1 | ACK 接收的等待时间 |
计时器 I | T4(对于 UDP) | 17.2.1 | ACK 重新传输的等待时间 |
0 秒(对于 TCP 和 SCTP) | |||
计时器 J | 64*T1(对于 UDP) | 17.2.2 | 重新传输非 INVITE 请求的等待时间 |
0 秒(对于 TCP 和 SCTP) | |||
计时器 K | T4(对于 UDP) | 17.1.2.2 | 响应重新传输的等待时间 |
0 秒(对于 TCP 和 SCTP) |