SIP中的定时器
1) 1XX:临时响应,表示请求消息正在被处理。
2) 2XX:成功响应,表示请求已被成功接收,完全理解并被接受。
3) 3XX:重定向响应,表示需采取进一步以完成该请求。
4) 4XX:客户机错误,表示请求消息中包含语法错误信息或服务器无法完成客户机请求。
5) 5XX:服务器错误,表示服务器无法完成合法请求。
6) 6XX:全局故障,表示任何服务器无法完成该请求。
|INVITE from TU
Timer A fires |INVITE sent
Reset A, V Timer B fires
INVITE sent +-----------+ or Transport Err.
+---------| |---------------+inform TU
| | Calling | |
+-------->| |-------------->|
+-----------+ 2xx |
| | 2xx to TU |
| |1xx |
300-699 +---------------+ |1xx to TU |
ACK sent | | |
resp. to TU | 1xx V |
| 1xx to TU -----------+ |
| +---------| | |
| | |Proceeding |-------------->|
| +-------->| | 2xx |
| +-----------+ 2xx to TU |
| 300-699 | |
| ACK sent, | |
| resp. to TU| |
| | | NOTE:
| 300-699 V |
| ACK sent +-----------+Transport Err. | transitions
| +---------| |Inform TU | labeled with
| | | Completed |-------------->| the event
| +-------->| | | over the action
| +-----------+ | to take
| ^ | |
| | | Timer D fires |
+--------------+ | - |
| |
V |
+-----------+ |
| | |
| Terminated|<--------------+
| |
+-----------+
Figure 5: INVITE client transaction
1 INVITE事务是由三次握手组成的,客户端发送一个INVITE,服务器事务发送一个响应,然后客户端事务发送一个ACK。对于不可靠传输(譬如UDP),客户端事务重发请求,重发的间隔时间,第一次是T1秒,之后每次都是前一次的两倍。
T1是round-trip时间(RTT)的估值,默认的话是500毫秒。几乎所有的事务定时器都是根据T1来测量,并通过改变T1来调整他们的值。
如果客户端事务接收到服务器端的临时响应或最终响应,那么就不会再重发请求了。
以可靠传输协议发送的请求是不需要重传的。
2 Timer B是事务超时定时器,是64*T1,刚好是7次重传的时间。如果INVITE在Timer B超时的时候还没有响应,那么该事务就终结了。
3 当客户端事务在“Calling”或“Proceeding”的时候接收到300-699的响应就会进入“Completed”的状态,这时Timer D就启动了。因为服务器端事务停留在Completed状态的定时器Timer H是64*T1,而服务器端的T1是客户端不知道,所以客户端事务就假设Timer D为32秒了(64*0.5)了。如果客户端事务处于“Completed”的状态而且接收到服务器端最后一个响应的重传则会丢弃,直到Timer D超时。要注意的是,对于可靠传输(如TCP,Timer D的值为0秒)。
4 Timer D超时之后,就转向Terminated状态了。之后,该事务就立即销毁了。
5 注意:如果TU是UAC core,那么在接收到2xx响应之后要回复一个ACK请求。图5中接收到2xx响应之后并没有看到产生ACK,这是因为对于2xx响应的ACK是有TU直接交付给传输层传输的,不经过状态机。
|Request from TU
|send request
Timer E V
send request +-----------+
+---------| |-------------------+
| | Trying | Timer F |
+-------->| | or Transport Err.|
+-----------+ inform TU |
200-699 | | |
resp. to TU | |1xx |
+---------------+ |resp. to TU |
| | |
| Timer E V Timer F |
| send req +-----------+ or Transport Err. |
| +---------| | inform TU |
| | |Proceeding |------------------>|
| +-------->| |-----+ |
| +-----------+ |1xx |
| | ^ |resp to TU |
| 200-699 | +--------+ |
| resp. to TU | |
| | |
| V |
| +-----------+ |
| | | |
| | Completed | |
| | | |
| +-----------+ |
| ^ | |
| | | Timer K |
+--------------+ | - |
| |
V |
NOTE: +-----------+ |
| | |
transitions | Terminated|<------------------+
labeled with | |
the event +-----------+
over the action
to take
Figure 6: non-INVITE client transaction
1 客户端发出一个non-INVITE请求之后,进入Trying状态,Timer E(请求重传定时器)启动,初始值是T1秒,之后时间间隔是之前的两倍,直到等于T2秒,然后一直以T2秒超时。如果接收到临时响应,则仍然重传请求,只不过重传间隔时间是T2秒。Timer F(事务超时定时器)是64T1,如果Timer F超时或者传输错误,那么就进入“Terminated”状态。如果Clinet Transaction在“Trying”状态接收到200-699的响应就进入“Completed”。如果Client Transaction处于“Trying”状态,接收到1xx响应,那么它就进入“Proceeding”状态,仍然启动Timer E和Timer F,Timer E fire 则发送请求,Timer F超时则进入“Terminated”状态,如果仍接收到1xx,那么仍然处于“Procedding”。如果接收到200——699的响应,那么就进入“Completed”,启动Timer K。Timer K fire的时候,就进入Terminated状态。Timer K等于T4,5秒。

浙公网安备 33010602011771号