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秒。

posted @ 2010-12-24 13:54  茫茫深海一条鱼  阅读(2529)  评论(0)    收藏  举报