draft-ietf-sip-session-timer-10.txt   draft-ietf-sip-session-timer-11.txt 
Internet Engineering Task Force SIP WG SIP Working Group S.Donovan
Internet Draft S.Donovan Internet Draft dynamicsoft
dynamicsoft Document: draft-ietf-sip-session-timer-11.txt J. Rosenberg
J.Rosenberg Category: Informational Dynamicsoft
dynamicsoft Expires: January, 2004 July 1, 2003
draft-ietf-sip-session-timer-10.txt
November 4, 2002
Expires: May 2003
Session Timers in the Session Initiation Protocol (SIP) Session Timers in the Session Initiation Protocol (SIP)
STATUS OF THIS MEMO Status of this Memo
This document is an Internet-Draft and is in full conformance with This document is an Internet-Draft and is in full conformance with
all provisions of Section 10 of RFC2026. all provisions of Section 10 of RFC2026 [1].
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that Task Force (IETF), its areas, and its working groups. Note that
other groups may also distribute working documents as Internet- other groups may also distribute working documents as Internet-
Drafts. Drafts. Internet-Drafts are draft documents valid for a maximum of
six months and may be updated, replaced, or obsoleted by other
Internet-Drafts are draft documents valid for a maximum of six months documents at any time. It is inappropriate to use Internet- Drafts
and may be updated, replaced, or obsoleted by other documents at any as reference material or to cite them other than as "work in
time. It is inappropriate to use Internet-Drafts as reference progress."
material or to cite them other than as "work in progress".
The list of current Internet-Drafts can be accessed at The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt http://www.ietf.org/ietf/1id-abstracts.txt
The list of Internet-Draft Shadow Directories can be accessed at
To view the list Internet-Draft Shadow Directories, see
http://www.ietf.org/shadow.html. http://www.ietf.org/shadow.html.
Abstract Abstract
This document defines an extension to the Session Initiation Protocol This document defines an extension to the Session Initiation
(SIP). This extension allows for a periodic refresh of SIP sessions Protocol (SIP). This extension allows for a periodic refresh of SIP
through a re-INVITE or UPDATE request. The refresh allows both user sessions through a re-INVITE or UPDATE request. The refresh allows
agents and proxies to determine if the SIP session is still active. both user agents and proxies to determine if the SIP session is
The extension defines two new header fields, Session-Expires, which still active. The extension defines two new header fields, Session-
conveys the lifetime of the session, and Min-SE, which conveys the Expires, which conveys the lifetime of the session, and Min-SE,
minimum allowed value for the session timer. which conveys the minimum allowed value for the session timer.
Table of Contents Table of Contents
1 Introduction ........................................ 3 1. Introduction
2 Terminology ......................................... 4
3 Overview of Operation ............................... 4
4 Session-Expires Header Field Definition ............. 6
5 Min-SE Header Field Definition ...................... 7
6 422 Response Code Definition ........................ 8
7 UAC Behavior ........................................ 8
7.1 Generating a Session Refresh Request ................ 8
7.2 Processing a 2xx Response ........................... 10
7.3 Processing a 422 Response ........................... 11
8 Proxy Behavior ...................................... 11
8.1 Processing of Requests .............................. 11
8.2 Processing of Responses ............................. 13
8.3 Session Expiration .................................. 13
9 UAS Behavior ........................................ 14
10 Performing Refreshes ................................ 16
11 Security Considerations ............................. 16
11.1 Inside Attacks ...................................... 17
11.2 Outside Attacks ..................................... 17
12 IANA Considerations ................................. 18
12.1 IANA Registration of Min-SE and Session-Expires
Header Fields .................................................. 18
12.2 IANA Registration of the 422 (Session Interval Too
Small) Response Code ........................................... 18
12.3 IANA Registration of the "timer" Option Tag ......... 18
13 Example Call Flow ................................... 19
14 Acknowledgements .................................... 24
15 Author's Addresses .................................. 24
16 Normative References ................................ 24
17 Informative References .............................. 24
1 Introduction
The Session Initiation Protocol (SIP) [1], does not define a The Session Initiation Protocol (SIP) [1], does not define a
keepalive mechanism for the sessions it establishes. Although the keepalive mechanism for the sessions it establishes. Although the
user agents may be able to determine if the session has timed out user agents may be able to determine if the session has timed out
using session specific mechanisms, proxies will not be able to do so. using session specific mechanisms, proxies will not be able to do
The result is that call stateful proxies will not always be able to so. The result is that call stateful proxies will not always be able
determine whether a session is still active or not. For instance, to determine whether a session is still active or not. For instance,
when a user agent fails to send a BYE message at the end of a when a user agent fails to send a BYE message at the end of a
session, or the BYE message gets lost due to network problems, a call session, or the BYE message gets lost due to network problems, a
stateful proxy will not know when the session has ended. In this call stateful proxy will not know when the session has ended. In
situation, the call stateful proxy will retain state for the call and this situation, the call stateful proxy will retain state for the
has no deterministic method of determining when the call state call and has no deterministic method of determining when the call
information no longer applies. state information no longer applies.
To resolve this problem, this extension defines a keepalive mechanism <Lastname> Category - Expiration 1
for SIP sessions. UAs send periodic re-INVITE or UPDATE [2] requests To resolve this problem, this extension defines a keepalive
(referred to as session refresh requests) to keep the session alive. mechanism for SIP sessions. UAs send periodic re-INVITE or UPDATE
The interval for the session refresh requests is determined through a [2] requests (referred to as session refresh requests) to keep the
negotiation mechanism defined here. If a session refresh request is session alive. The interval for the session refresh requests is
not received before the interval passes, the session is considered determined through a negotiation mechanism defined here. If a
terminated. Both UAs are supposed to send a BYE, and call stateful session refresh request is not received before the interval passes,
proxies can remove any state for the call. the session is considered terminated. Both UAs are supposed to send
a BYE, and call stateful proxies can remove any state for the call.
This refresh mechanism has additional applications. For the same This refresh mechanism has additional applications. For the same
reasons a call stateful proxy server would like to determine whether reasons a call stateful proxy server would like to determine whether
the session is still active, a user agent would like to make this the session is still active, a user agent would like to make this
determination. This determination can be made at a user agent without determination. This determination can be made at a user agent
the use of SIP level mechanisms; for audio sessions, periodic RTCP without the use of SIP level mechanisms; for audio sessions,
packets serve as an indication of liveness [5]. However, it is periodic RTCP packets serve as an indication of liveness [5].
desirable to separate SIP session liveness from the details of the However, it is desirable to separate SIP session liveness from the
particular session. details of the particular session.
Another application of the session timer is in the construction of a Another application of the session timer is in the construction of a
SIP Network Address Translator (NAT) Application Level Gateway (ALG) SIP Network Address Translator (NAT) Application Level Gateway (ALG)
[6]. The ALG embedded in a NAT will need to maintain state for the [6]. The ALG embedded in a NAT will need to maintain state for the
duration of a call. This state must eventually be removed. Relying on duration of a call. This state must eventually be removed. Relying
a BYE to trigger the removal of state, besides being unreliable, on a BYE to trigger the removal of state, besides being unreliable,
introduces a potential denial of service attack. introduces a potential denial of service attack.
This document proposes an extension to SIP that defines a session This document provides an extension to SIP that defines a session
expiration mechanism. Periodic refreshes, through re-INVITEs or expiration mechanism. Periodic refreshes, through re-INVITEs or
UPDATEs, are used to keep the session active. The extension is UPDATEs, are used to keep the session active. The extension is
sufficiently backwards compatible with SIP that it works so long as sufficiently backwards compatible with SIP that it works so long as
either one of the two participants in a dialog understand the either one of the two participants in a dialog understand the
extension. Two new header fields, Session-Expires and Min-SE, and a extension. Two new header fields, Session-Expires and Min-SE, and a
new response code, 422, are defined. Session-Expires conveys the new response code, 422, are defined. Session-Expires conveys the
duration of the session, and Min-SE conveys the minimum allowed value duration of the session, and Min-SE conveys the minimum allowed
for the session expiration. The 422 response code indicates that the value for the session expiration. The 422 response code indicates
session timer duration was too small. that the session timer duration was too small.
2 Terminology 2. Terminology
In this document, the key words "MUST", "MUSTNOT", "REQUIRED", In this document, the key words æMUSTÆ, æMUSTNOTÆ, æREQUIREDÆ,
"SHALL", "SHALLNOT", "SHOULD", "SHOULDNOT", "RECOMMENDED", "MAY", and æSHALLÆ, æSHALLNOTÆ, æSHOULDÆ, æSHOULDNOTÆ, æRECOMMENDEDÆ, æMAYÆ,
"OPTIONAL" are to be interpreted as described in RFC 2119 [3] and and æOPTIONALÆ are to be interpreted as described in RFC 2119 [3]}
indicate requirement levels for compliant SIP implementations. and indicate requirement levels for compliant SIP implementations.
Additionally, we define the following terms: Additionally, we define the following terms:
Session Interval: The largest amount of time that can occur Session Interval: The largest amount of time that can occur
between session refresh requests in a dialog before the between session refresh requests in a dialog before the session
session will be considered timed out. The session interval will be considered timed out. The session interval is conveyed
is conveyed in the Session-Expires header field defined in the Session-Expires header field defined here. The UAS
here. The UAS obtains this value from the Session-Expires obtains this value from the Session-Expires header field in a
2xx response to a session refresh request that it sends.
Proxies and UACs determine this value from the Session-Expires
S. Donovan et. Al. Informational 2
header field in a 2xx response to a session refresh request header field in a 2xx response to a session refresh request
that it sends. Proxies and UACs determine this value from that they receive.
the Session-Expires header field in a 2xx response to a
session refresh request that they receive.
Minimum Timer: Because of the processing load of mid-dialog Minimum Timer: Because of the processing load of mid-dialog
requests, all elements (proxy, UAC, UAS) can have a requests, all elements (proxy, UAC, UAS) can have a configured
configured minimum value for the session interval that they minimum value for the session interval that they are willing to
are willing to accept. This value is called the minimum accept. This value is called the minimum timer.
timer.
Session Expiration: The time at which an element will consider Session Expiration: The time at which an element will consider
the session timed out, if no successful session refresh the session timed out, if no successful session refresh
transaction occurs beforehand. transaction occurs beforehand.
Session Refresh Request: An INVITE or UPDATE request within a Session Refresh Request: An INVITE or UPDATE request within a
dialog. If the request generates a 2xx response, the dialog. If the request generates a 2xx response, the session
session expiration is increased to the current time plus expiration is increased to the current time plus the session
the session interval obtained from the response. A session interval obtained from the response. A session refresh request
refresh request is not to be confused with a target refresh is not to be confused with a target refresh request, defined in
request, defined in Section 6 of [1], which is a request Section 6 of [1], which is a request that can update the remote
that can update the remote target of a dialog. target of a dialog.
Refresh: Same as a session refresh request. Refresh: Same as a session refresh request.
3 Overview of Operation 3. Overview of Operation
This section provides a brief overview of operation of the extension. This section provides a brief overview of operation of the
It is tutorial in nature and should not be considered as normative. extension. It is tutorial in nature and should not be considered as
normative.
This extension has the property that it works even when only one UA This extension has the property that it works even when only one UA
in a dialog supports it. The processing steps differ for handling in a dialog supports it. The processing steps differ for handling
each of the four cases (UAC supports it, or doesn't, and UAS supports each of the four cases (UAC supports it, or doesn't, and UAS
it, or doesn't). For simplicity's sake, this section will describe supports it, or doesn't). For simplicity's sake, this section will
basic operation in the case where both sides support the extension. describe basic operation in the case where both sides support the
extension.
A UAC starts by sending an INVITE. It includes a Supported header A UAC starts by sending an INVITE. It includes a Supported header
with the option tag "timer", indicating support for this extension. with the option tag ætimerÆ, indicating support for this extension.
This request passes through proxies and B2BUAs, any one of which may This request passes through proxies and B2BUAs, any one of which may
have an interest in establishing a session timer. Each of them can have an interest in establishing a session timer. Each of them can
insert a Session-Expires header field into the request if none is insert a Session-Expires header field into the request if none is
already there, containing the desired interval. If one is already already there, containing the desired interval. If one is already
there, a proxy or B2BUA can reduce the interval, but not to a value there, a proxy or B2BUA can reduce the interval, but not to a value
lower than the Min-SE header field. The Min-SE header field contains lower than the Min-SE header field. The Min-SE header field contains
the minimum allowed value of the session interval. Its purpose, the minimum allowed value of the session interval. Its purpose,
explained below, is to ensure that the session interval is not lower explained below, is to ensure that the session interval is not lower
than any proxies configured minimum. than any proxy's configured minimum.
If the Session-Expires interval is too low for a proxy, it can reject If the Session-Expires interval is too low for a proxy, it can
the request with a 422 response. That response contains the Min-SE reject the request with a 422 response. That response contains the
header field, identifying the minimum session interval it is willing Min-SE header field, identifying the minimum session interval it is
to support. The UAC will try again, this time including the Min-SE willing to support. The UAC will try again, this time including the
header in the request. The header field contains the largest Min-SE Min-SE header in the request. The header field contains the largest
header field it observed in all 422 responses received previously.
This way, the minimum timer meets the constraints of all proxies S. Donovan et. Al. Informational 3
along the path. Min-SE header field it observed in all 422 responses received
previously. This way, the minimum timer meets the constraints of all
proxies along the path.
After several INVITE/422 iterations, the request eventually arrives After several INVITE/422 iterations, the request eventually arrives
at the UAS. The UAS can adjust the value of the session interval as at the UAS. The UAS can adjust the value of the session interval as
if it was a proxy, and when done, it places the final session if it was a proxy, and when done, it places the final session
interval into the Session-Expires header field in a 2xx response. The interval into the Session-Expires header field in a 2xx response.
Session-Expires header field also contains a "refresher" parameter, The Session-Expires header field also contains a ærefresherÆ
which indicates who is doing the refreshing - the UA that is parameter, which indicates who is doing the refreshing - the UA that
currently the UAC, or the UA that is currently the UAS. As the 2xx is currently the UAC, or the UA that is currently the UAS. As the
response travels back through the proxy chain, each proxy or B2BUA 2xx response travels back through the proxy chain, each proxy or
can observe the final session interval (they can't change it). B2BUA can observe the final session interval, but they can't change
it.
From the Session-Expires header field in the response, both UAs know From the Session-Expires header field in the response, both UAs know
that a session timer is active, they know when it will expire, and that a session timer is active, they know when it will expire, and
they know who is refreshing. At some point before the expiration, the they know who is refreshing. At some point before the expiration,
currently active refresher generates a session refresh request, which the currently active refresher generates a session refresh request,
is a re-INVITE or UPDATE [2] request. If the refresher never gets a which is a re-INVITE or UPDATE [2] request. If the refresher never
response to that session refresh request, it sends a BYE to terminate gets a response to that session refresh request, it sends a BYE to
the session. Similarly, if the other side never gets the session terminate the session. Similarly, if the other side never gets the
refresh request before the session expires, it sends a BYE. session refresh request before the session expires, it sends a BYE.
The refresh requests sent once the session is established are The refresh requests sent once the session is established are
processed identically to the initial requests, as described above. processed identically to the initial requests, as described above.
This means that a successful session refresh request will extend the This means that a successful session refresh request will extend the
session, as desired. session, as desired.
The extension introduces additional complications beyond this basic The extension introduces additional complications beyond this basic
flow to support cases where only one of the UA support it. One such flow to support cases where only one of the UAs supports it. One
complication is that a proxy may need to insert the Session-Expires such complication is that a proxy may need to insert the Session-
header into the response, in the event that the UAS doesn't support Expires header into the response, in the event that the UAS doesn't
the extension. The negotiation of the role of refresher is also support the extension. The negotiation of the role of refresher is
affected by this capability; it takes into consideration which also affected by this capability; it takes into consideration which
participants support the extension. participants support the extension.
It is worth noting that the session timer refreshes the session, not It is worth noting that the session timer refreshes the session, not
the dialog used to establish the session. Of course, the two are the dialog used to establish the session. Of course, the two are
related. If the session expires, a BYE is sent, which terminates the related. If the session expires, a BYE is sent, which terminates the
session and generally, the dialog. session and generally, the dialog.
4 Session-Expires Header Field Definition 4. Session-Expires Header Field Definition
The Session-Expires header field conveys the session interval for a The Session-Expires header field conveys the session interval for a
SIP session. It is placed only in INVITE or UPDATE requests, and is SIP session. It is placed only in INVITE or UPDATE requests, as well
allowed in any 2xx response to an INVITE or UPDATE. Like the SIP as in any 2xx response to an INVITE or UPDATE. Like the SIP Expires
Expires header field, it contains a delta-time. header field, it contains a delta-time.
There is no absolute minimum value for the Session-Expires header There is no absolute minimum value for the Session-Expires header
field. However, 1800 seconds (30 minutes) is RECOMMENDED. In other field. However, 1800 seconds (30 minutes) is RECOMMENDED. In other
words, SIP entites MUST be prepared to handle Session-Expires header words, SIP entities MUST be prepared to handle Session-Expires
field values of any duration, but entities that insert the Session-
Expires header field SHOULD NOT choose values less than 30 minutes.
Small session intervals can be destructive to the network. They cause S. Donovan et. Al. Informational 4
excessive messaging traffic that affects both user agents and proxy header field values of any duration, but entities that insert the
servers. They increase the possibility of "glare" which can occur Session-Expires header field SHOULD NOT choose values less than 30
when both user agents send a re-INVITE or UPDATE at the same time. minutes.
Since the primary purpose of the session timer is to provide a means
to time out state in SIP elements, very small values won't generally Small session intervals can be destructive to the network. They
be needed. 30 minutes was chosen since 95% of phone calls are less cause excessive messaging traffic that affects both user agents and
than this duration. However, the 30 minute minimum is listed as a proxy servers. They increase the possibility of æglareÆ which can
SHOULD, and not a MUST, since the exact value for this number is occur when both user agents send a re-INVITE or UPDATE at the same
dependent on many network factors, including network bandwidths and time. Since the primary purpose of the session timer is to provide a
latencies, computing power, memory availability, network topology, means to time out state in SIP elements, very small values won't
and of course, the application scenario. After all, SIP can set up generally be needed. 30 minutes was chosen since 95% of phone calls
any kind of session, not just a phone call. At the time of are less than this duration. However, the 30 minute minimum is
publication of this document, 30 minutes seems appropriate. Advances listed as a SHOULD, and not a MUST, since the exact value for this
in technologies may result in the number being excessively large five number is dependent on many network factors, including network
years in the future. bandwidths and latencies, computing power, memory availability,
network topology, and of course, the application scenario. After
all, SIP can set up any kind of session, not just a phone call. At
the time of publication of this document, 30 minutes seems
appropriate. Advances in technologies may result in the number being
excessively large five years in the future.
The default value of the Session-Expires header field, when not The default value of the Session-Expires header field, when not
present, is infinity. This means that absence of the Session-Expires present, is infinity. This means that absence of the Session-Expires
header field implies no expiration. header field implies no expiration.
The syntax of the Session-Expires header field is: The syntax of the Session-Expires header field is:
Session-Expires = ("Session-Expires" / "x") HCOLON delta-seconds Session-Expires = ('Session-Expires' / 'x') HCOLON delta-seconds
*(SEMI se-params) *(SEMI se-params)
se-params = refresher-param / generic-param se-params = refresher-param / generic-param
refresher-param = "refresher" EQUAL ("uas" / "uac") refresher-param = 'refresher' EQUAL ('uas' / 'uac')
Note that a compact form, the letter x, has been reserved for Note that a compact form, the letter x, has been reserved for
Session-Expires. The BNF for delta-seconds and generic-param is Session-Expires. The BNF for delta-seconds and generic-param is
defined in Section 25 of RFC 3261 [1]. defined in Section 25 of RFC 3261 [1].
Table 1 is an extension of Tables 2 and 3 in [1] for the Session- Table 1 is an extension of Tables 2 and 3 in [1] for the Session-
Expires and Min-SE header fields. The column "PRA" is for the PRACK Expires and Min-SE header fields. The column 'PRA' is for the PRACK
method [7], "UPD" is for the UPDATE method [2], "SUB" is for the method [7], æUPDÆ is for the UPDATE method [2], æSUBÆ is for the
SUBSCRIBE method [8], and "NOT" is for the NOTIFY method [8]. SUBSCRIBE method [8], and æNOTÆ is for the NOTIFY method [8].
Header field where proxy ACK BYE CAN INV OPT REG PRA UPD SUB NOT Header field where proxy ACK BYE CAN INV OPT REG PRA UPD SUB NOT
_____________________________________________________________________
Session-Expires R amr - - - o - - - o - - Session-Expires R amr - - - o - - - o - -
Session-Expires 2xx ar - - - o - - - o - - Session-Expires 2xx ar - - - o - - - o - -
Min-SE R amr - - - o - - - o - - Min-SE R amr - - - o - - - o - -
Min-SE 422 - - - m - - - m - - Min-SE 422 - - - m - - - m - -
Table 1: Session-Expires and Min-SE Header Fields Table 1 Session-Expires and Min-SE Header Fields}
5 Min-SE Header Field Definition 5. Min-SE Header Field Definition
S. Donovan et. Al. Informational 5
The Min-SE header field indicates the minimum value for the session The Min-SE header field indicates the minimum value for the session
interval, in units of delta-seconds. When used in an INVITE or UPDATE interval, in units of delta-seconds. When used in an INVITE or
request, it indicates the smallest value of the session interval UPDATE request, it indicates the smallest value of the session
which can be used for that session. interval that can be used for that session.
When not present, the default value for this header field is zero. When not present, the default value for this header field is zero.
The Min-SE header field MUSTNOT be used in responses except those The Min-SE header field {MUSTNOT} be used in responses except those
with a 422 response code. It indicates the minimum value of the with a 422 response code. It indicates the minimum value of the
session interval that the server is willing to accept. session interval that the server is willing to accept.
The syntax of the Min-SE header field is: The syntax of the Min-SE header field is:
Min-SE = "Min-SE" HCOLON delta-seconds *(SEMI generic-param) Min-SE = 'Min-SE' HCOLON delta-seconds *(SEMI generic-param)
6 422 Response Code Definition 6. 422 Response Code Definition
This extension introduces the 422 (Session Interval Too Small) This extension introduces the 422 (Session Interval Too Small)
response code. It is generated by a UAS or proxy when a request response code. It is generated by a UAS or proxy when a request
contains a Session-Expires header field with a duration that is below contains a Session-Expires header field with a duration that is
the minimum timer for the server. The 422 response MUST contain a below the minimum timer for the server. The 422 response MUST
Min-SE header field with the minimum timer for that server. contain a Min-SE header field with the minimum timer for that
server.
7 UAC Behavior
7.1 Generating a Session Refresh Request
A UAC which supports the session timer extension defined here MUST 7. UAC Behavior
7.1 Generating an Initial Session Refresh Request
A UAC that supports the session timer extension defined here MUST
include a Supported header field in each request (except ACK), include a Supported header field in each request (except ACK),
listing the option tag "timer" [1]. It MUST do so even if the UAC is listing the option tag 'timer' [1]. It MUST do so even if the UAC is
not requesting usage of the session timer for this session. not requesting usage of the session timer for this session.
The UAC MAY include a Require header field in the request with the The UAC MAY include a Require header field in the request with the
value "timer" to indicate that the UAS must support the session timer value ætimerÆ to indicate that the UAS must support the session
to participate in the session. This does not mean that the UAC is timer to participate in the session. This does not mean that the
requiring the UAS to perform the refreshes, just that it is requiring UAC is requiring the UAS to perform the refreshes, just that it is
the UAS to support the extension. In addition, the UAC MAY include a requiring the UAS to support the extension. In addition, the UAC MAY
Proxy-Require header field in the request with the value "timer" to include a Proxy-Require header field in the request with the value
indicate that proxies must support session timer in order to 'timer' to indicate that proxies must support session timer in order
correctly process the request. However, usage of either Require or to correctly process the request. However, usage of either Require
Proxy-Require by the UAC is NOT RECOMMENDED. They are not needed, or Proxy-Require by the UAC is NOT RECOMMENDED. They are not needed,
since the extension works even when only the UAC supports the since the extension works even when only the UAC supports the
extension. The Supported header field containing "timer" MUST still extension. The Supported header field containing 'timer' MUST still
be included even if the Require or Proxy-Require header fields are be included even if the Require or Proxy-Require header fields are
present containing "timer". present containing 'timer'.
The UAC MUST insert the Min-SE header field into a session refresh
request for a particular dialog if it has ever received a 422
response to a previous session refresh request on the same dialog, or
if it has received a session refresh request on that dialog which
contained a Min-SE header field. Similarly, if no dialog has been
established yet, a UAC MUST insert the Min-SE header field into an
INVITE request if it has ever received a 422 response to a previous
INVITE request with the same Call-ID.
The value of the Min-SE header field present in a session refresh
request MUST be the largest value amongst all Min-SE header field
values returned in all 422 responses, or received in session refresh
requests, on the same dialog, if a dialog has been established. If no
dialog has been established, the Min-SE header field value is set to
the largest value amongst all Min-SE header field values returned in
all 422 responses for an INVITE request with the same Call-ID. A
result of this rule is that the maximum value of the Min-SE is
effectively "cleared" once the dialog is established, and from that
point on, only the values from proxies known to be on the proxy path
will end up being used.
The UAC may have its own opinions about the minimum session interval.
In that case, if the value above is too small, the UAC MAY increase
it.
A UAC MAY include the Min-SE header field in an INVITE request A UAC MAY include the Min-SE header field in the initial INVITE
outside of a dialog, even if it never received a 422 previously. request.
A UAC MAY include a Session-Expires in an initial session refresh A UAC MAY include a Session-Expires in an initial session refresh
request request if it wishes for a session timer to be applied to the request if it wishes for a session timer to be applied to the
session. The value of this header field indicates the session session. The value of this header field indicates the session
interval desired by the UAC. In a session refresh request sent within interval desired by the UAC. If a Min-SE header is included in the
a dialog with an active session timer, the header field SHOULD be
present. When present, it MUST be equal to the maximum of the Min-SE
header field (recall that its default value when not present is zero)
and the current session interval.
In an initial session refresh request, the UAC MAY include the S. Donovan et. Al. Informational 6
refresher parameter with value "uac" if it wishes to perform the initial session refresh request, the value of the Session-Expires
refreshes. However, it is RECOMMENDED that the parameter be omitted, MUST be equal to the value in Min-SE.
so that it can be selected by the negotiation mechanisms described
below. If the session refresh request is not the initial one, it is
RECOMMENDED that the refresher parameter be set to "uac" if the
element sending the request is currently performing refreshes, else
"uas" if its peer is performing the refreshes. This way, the role of
refresher does not change on each refresh. However, if it wishes to
explicitly change the roles, it MAY use a value of "uas" if it knows
that the other side supports session timer. It could know this by
having received a request from its peer with a Supported header field
containing the value "timer". If it wishes to reselect the roles, it
MAY omit the parameter.
A re-INVITE generated to refresh the session is a normal re-INVITE, The UAC MAY include the refresher parameter with value 'uac' if it
and an UPDATE generated to refresh a session is a normal UPDATE. If a wishes to perform the refreshes. However, it is RECOMMENDED that the
UAC knows that its peer supports the UPDATE method, it is RECOMMENDED parameter be omitted, so that it can be selected by the negotiation
that UPDATE be used instead of a re-INVITE. A UA can make this mechanisms described below.
determination if it has seen an Allow header field from its peer with
the value "UPDATE", or through a mid-dialog OPTIONS request. It is
RECOMMENDED that the UPDATE request not contain an offer [4], but a
re-INVITE SHOULD contain one, even if the details of the session have
not changed. In that case, the offer MUST indicate that it has not
changed. In the case of SDP, this is accomplished by including the
same value for the origin field as previous SDP messages to its peer.
The same is true for an answer exchanged as a result of a session
refresh request; if it has not changed, that MUST be indicated.
7.2 Processing a 2xx Response 7.2 Processing a 2xx Response
Session timer requires a UA to create and maintain state. This state Session timer requires a UA to create and maintain state. This state
includes the session interval, the session expiration, and the includes the session interval, the session expiration, and the
identity of the refresher. This state is associated with the dialog identity of the refresher. This state is associated with the dialog
on which the session has been negotiated. on which the session has been negotiated.
When a 2xx response to a session refresh request arrives, it may or When a 2xx response to a session refresh request arrives, it may or
may not contain a Require header field with the value "timer". If it may not contain a Require header field with the value ætimerÆ. If it
does, the UAC MUST look for the Session-Expires header field to does, the UAC MUST look for the Session-Expires header field to
process the response. process the response.
If there was a Require header field in the response with the value If there was a Require header field in the response with the value
"timer", the Session-Expires header field will always be present. ætimerÆ, the Session-Expires header field will always be present.
UACs MUST be prepared to receive a Session-Expires header field in a UACs MUST be prepared to receive a Session-Expires header field in a
response even if none were present in the request. The "refresher" response even if none were present in the request. The ærefresherÆ
parameter will be present in the Session-Expires header field, parameter will be present in the Session-Expires header field,
indicating who will be performing the refreshes. The UAC MUST set the indicating who will be performing the refreshes. The UAC MUST set
identity of the refresher to the value of this parameter. If the the identity of the refresher to the value of this parameter. If the
parameter contains the value "uac", the UAC will perform them. It is parameter contains the value æuacÆ, the UAC will perform them. It is
possible that the UAC requested session timer (and thus included a possible that the UAC requested session timer (and thus included a
Session-Expires header field in the request), but there was no Session-Expires header field in the request), but there was no
Require or Session-Expires header field in the 2xx response. This Require or Session-Expires header field in the 2xx response. This
will happen when the UAS doesn't support the session timer extension, will happen when the UAS doesn't support the session timer
and only the UAC has asked for a session timer (no proxies have extension, and only the UAC has asked for a session timer (no
requested it). In this case, if the UAC still wishes to use the proxies have requested it). In this case, if the UAC still wishes to
session timer (they are purely for its benefit alone), it has to use the session timer (they are purely for its benefit alone), it
perform them. To do this, the UAC follows the procedures defined in has to perform them. To do this, the UAC follows the procedures
this specification as if the Session-Expires header field were in the defined in this specification as if the Session-Expires header field
2xx response, and its value was the same as the one in the request, were in the 2xx response, and its value was the same as the one in
but with a refresher parameter of "uac". the request, but with a refresher parameter of æuacÆ.
If the 2xx response did not contain a Session-Expires header field, If the 2xx response did not contain a Session-Expires header field,
there is no session expiration. In this case, no refreshes need to be there is no session expiration. In this case, no refreshes need to
sent. A 2xx without a Session-Expires can come for both initial and be sent. A 2xx without a Session-Expires can come for both initial
mid-dialog session refresh requests. This means that the session and mid-dialog session refresh requests. This means that the session
timer can be "turned-off" mid dialog by receiving a response without timer can be æturned-offÆ mid dialog by receiving a response without
a Session-Expires header. a Session-Expires header.
The UAC remembers the session interval for a session as the value of The UAC remembers the session interval for a session as the value of
the delta-time from the Session-Expires header field in the most the delta-time from the Session-Expires header field in the most
recent 2xx response to a session refresh request on a dialog. It is recent 2xx response to a session refresh request on a dialog. It is
explicitly allowed for there to be differing session intervals (or explicitly allowed for there to be differing session intervals (or
none at all) on differing dialogs established as a result of a single none at all) on differing dialogs established as a result of a
INVITE. It also remembers whether it, or its peer, is the refresher
on for the session. S. Donovan et. Al. Informational 7
single INVITE. It also remembers whether it, or its peer, is the
refresher on for the session.
If the UAC must perform the refreshes, it computes the session If the UAC must perform the refreshes, it computes the session
expiration for that session. The session expiration is the time of expiration for that session. The session expiration is the time of
reception of the last 2xx response to a session refresh request on reception of the last 2xx response to a session refresh request on
that dialog plus the session interval for that session. If UA wishes that dialog plus the session interval for that session. If UA wishes
to continue with the session beyond the session expiration, it MUST to continue with the session beyond the session expiration, it MUST
generate a refresh before the session expiration. It is RECOMMENDED generate a refresh before the session expiration. It is RECOMMENDED
that this refresh be sent once half the session interval has elapsed. that this refresh be sent once half the session interval has lapsed.
Additional procedures for this refresh are described in Section 10. Additional procedures for this refresh are described in Section
Section 10.
7.3 Processing a 422 Response 7.3 Processing a 422 Response
If the response to a session refresh request is a 422 (Session If the response to a session refresh request is a 422 (Session
Interval Too Small) response message, then the UAC MAY retry the Interval Too Small) response message, then the UAC MAY retry the
request. The procedures for retrying are described in Section 7.1. request. The procedures for retrying are described in Section
This new request constitutes a new transaction and SHOULD have the Section 7.1. This new request constitutes a new transaction and
same value of the Call-ID, To, and From of the previous request, but SHOULD have the same value of the Call-ID, To, and From of the
the CSeq should contain a new sequence number that is one higher than previous request, but the CSeq should contain a new sequence number
the previous. that is one higher than the previous.
8 Proxy Behavior 7.4 Generating Subsequent Session Refresh Requests
The values of Supported, Require and Proxy-Require used in the
initial Session refresh request MUST be used.
The UAC MUST insert the Min-SE header field into a session refresh
request for a particular dialog if it has ever received a 422
response to a previous session refresh request on the same dialog,
or if it has received a session refresh request on that dialog which
contained a Min-SE header field. Similarly, if no dialog has been
established yet, a UAC MUST insert the Min-SE header field into an
INVITE request if it has ever received a 422 response to a previous
INVITE request with the same Call-ID.
The value of the Min-SE header field present in a session refresh
request MUST be the largest value amongst all Min-SE header field
values returned in all 422 responses, or received in session refresh
requests, on the same dialog, if a dialog has been established. If
no dialog has been established, the Min-SE header field value is set
to the largest value amongst all Min-SE header field values returned
in all 422 responses for an INVITE request with the same Call-ID. A
result of this rule is that the maximum value of the Min-SE is
effectively æclearedÆ once the dialog is established, and from that
point on, only the values from proxies known to be on the proxy path
will end up being used.
The UAC may have its own opinions about the minimum session
interval. In that case, if the value above is too small, the UAC MAY
increase it.
S. Donovan et. Al. Informational 8
In a session refresh request sent within a dialog with an active
session timer, the Sesssion-Expires header field SHOULD be present.
When present, it MUST be equal to the maximum of the Min-SE header
field (recall that its default value when not present is zero) and
the current session interval.
If the session refresh request is not the initial one, it is
RECOMMENDED that the refresher parameter be set to æuacÆ if the
element sending the request is currently performing refreshes, else
æuasÆ if its peer is performing the refreshes. This way, the role of
refresher does not change on each refresh. However, if it wishes to
explicitly change the roles, it MAY use a value of æuasÆ if it knows
that the other side supports session timer. It could know this by
having received a request from its peer with a Supported header
field containing the value ætimerÆ. If it wishes to reselect the
roles, it MAY omit the parameter.
A re-INVITE generated to refresh the session is a normal re-INVITE,
and an UPDATE generated to refresh a session is a normal UPDATE. If
a UAC knows that its peer supports the UPDATE method, it is
RECOMMENDED that UPDATE be used instead of a re-INVITE. A UA can
make this determination if it has seen an Allow header field from
its peer with the value æUPDATEÆ, or through a mid-dialog OPTIONS
request. It is RECOMMENDED that the UPDATE request not contain an
offer [4], but a re-INVITE SHOULD contain one, even if the details
of the session have not changed. In that case, the offer MUST
indicate that it has not changed. In the case of SDP, this is
accomplished by including the same value for the origin field as
previous SDP messages to its peer. The same is true for an answer
exchanged as a result of a session refresh request; if it has not
changed, that MUST be indicated.
8. Proxy Behavior
Session timers are mostly of interest to call stateful proxy servers Session timers are mostly of interest to call stateful proxy servers
and B2BUAs. However, a stateful proxy server MAY also follow the and B2BUAs. However, a stateful proxy server MAY also follow the
rules described here. Stateless proxies MUST NOT attempt to request rules described here. Stateless proxies MUST NOT attempt to request
session timers. Proxies which ask for session timers SHOULD record- session timers. Proxies which ask for session timers SHOULD record-
route, since they won't receive refreshes if they don't. route, since they won't receive refreshes if they don't.
The proxy processing rules require the proxy to remember The proxy processing rules require the proxy to remember
information between the request and response, ruling out information between the request and response, ruling out
stateless proxies. stateless proxies.
8.1 Processing of Requests 8.1 Processing of Requests
Processing of requests is identical for all session refresh requests. Processing of requests is identical for all session refresh
requests.
To request a session timer for a session, a proxy makes sure that a To request a session timer for a session, a proxy makes sure that a
Session-Expires header field is present in a session refresh request Session-Expires header field is present in a session refresh request
for that session. A proxy MAY insert a Session-Expires header field for that session. A proxy MAY insert a Session-Expires header field
S. Donovan et. Al. Informational 9
in the request before forwarding it, if none was present in the in the request before forwarding it, if none was present in the
request. This Session-Expires header field may contain any desired request. This Session-Expires header field may contain any desired
expiration time the proxy would like, but not with a duration lower expiration time the proxy would like, but not with a duration lower
than the value in the Min-SE header field in the request, if present. than the value in the Min-SE header field in the request, if
The proxy MUST NOT include a refresher parameter in the header field present. The proxy MUST NOT include a refresher parameter in the
value. header field value.
If the request already had a Session-Expires header field, the proxy If the request already had a Session-Expires header field, the proxy
or B2BUA MAY reduce its value, but MUST NOT set it to a duration or B2BUA MAY reduce its value, but MUST NOT set it to a duration
lower than the value in the Min-SE header field in the request, if lower than the value in the Min-SE header field in the request, if
present. If the value of the Session-Expires header field is greater present. If the value of the Session-Expires header field is greater
than or equal to the value in the Min-SE header field (recall that than or equal to the value in the Min-SE header field (recall that
the default is zero when the Min-SE header field is not present), the the default is zero when the Min-SE header field is not present),
proxy MUST NOT increase the value of the Session-Expires header the proxy MUST NOT increase the value of the Session-Expires header
field. If the value of the Session-Expires header field is lower than field. If the value of the Session-Expires header field is lower
the value of the Min-SE header field (possibly because the proxy than the value of the Min-SE header field (possibly because the
increased the value of the Min-SE header field, as described below), proxy increased the value of the Min-SE header field, as described
the proxy MUST increase the value of the Session-Expires header field below), the proxy MUST increase the value of the Session-Expires
to make it equal to Min-SE header field value. The proxy MUST NOT header field to make it equal to Min-SE header field value. The
insert or modify the value of the "refresher" parameter in the proxy MUST NOT insert or modify the value of the ærefresherÆ
Session-Expires header field. parameter in the Session-Expires header field.
If the request contains a Supported header field with a value If the request contains a Supported header field with a value
"timer", the proxy MAY reject the INVITE request with a 422 (Session ætimerÆ, the proxy MAY reject the INVITE request with a 422 Session
Interval Too Small) response if the session interval in the Session- Interval Too Small) response if the session interval in the Session-
Expires header field is smaller than the minimum interval defined by Expires header field is smaller than the minimum interval defined by
the proxy's local policy. When sending the 422 response, the proxy the proxy's local policy. When sending the 422 response, the proxy
MUST include a Min-SE header field with the value of its minimum MUST include a Min-SE header field with the value of its minimum
interval. interval.
If the request doesn't indicate support for session timer, but the If the request doesn't indicate support for session timer, but the
request contains a session interval that is too small, the proxy request contains a session interval that is too small, the proxy
cannot usefully reject the request, as this would result in a call cannot usefully reject the request, as this would result in a call
failure. Rather, the proxy SHOULD insert a Min-SE header field failure. Rather, the proxy SHOULD insert a Min-SE header field
containing its minimum interval. If a Min-SE header field is already containing its minimum interval. If a Min-SE header field is already
present, the proxy SHOULD increase (but MUST NOT decrease) the value present, the proxy SHOULD increase (but MUST NOT decrease) the value
to equal its minimum interval. The proxy MUST then increase the to equal its minimum interval. The proxy MUST then increase the
Session-Expires header field value to be equal to the value in the session-Expires header field value to be equal to the value in the
Min-SE header field, as described above. A proxy MUST NOT insert a Min-SE header field, as described above. A proxy MUST NOT insert a
Min-SE header field, or modify the value of an existing header field, Min-SE header field, or modify the value of an existing header
in a proxied request if that request contains a Supported header field, in a proxied request if that request contains a Supported
field with the value "timer". This is needed to protect against header field with the value ætimerÆ. This is needed to protect
certain denial of service attacks, described in Section 11. against certain denial of service attacks, described in Section
Section 11.
Assuming the proxy has requested a session timer (and thus has Assuming the proxy has requested a session timer (and thus has
possibly inserted the Session-Expires header field or reduced it), possibly inserted the Session-Expires header field or reduced it),
the proxy MUST remember that it is using a session timer, and also the proxy MUST remember that it is using a session timer, and also
remember the value of the Session-Expires header field from the remember the value of the Session-Expires header field from the
proxied request. This MUST be remembered for the duration of the proxied request. This MUST be remembered for the duration of the
transaction. The proxy MUST remember, for the duration of the transaction. The proxy MUST remember, for the duration of the
transaction, whether the request contained the Supported header field transaction, whether the request contained the Supported header
with the value "timer". field with the value ætimerÆ.
S. Donovan et. Al. Informational 10
If the request did not contain a Supported header field with the If the request did not contain a Supported header field with the
value "timer", the proxy MAY insert a Require header field into the value ætimerÆ, the proxy MAY insert a Require header field into the
request, with the value "timer". However, this is NOT RECOMMENDED. request, with the value ætimerÆ. However, this is NOT RECOMMENDED.
This allows the proxy to insist on session timer for the session. This allows the proxy to insist on session timer for the session.
This header field is not needed if a Supported header field was in This header field is not needed if a Supported header field was in
the request; in this case, the proxy can already be sure that the the request; in this case, the proxy can already be sure that the
session timer can be used for the session. session timer can be used for the session.
8.2 Processing of Responses 8.2 Processing of Responses
When the final response to the request arrives, it is examined by the When the final response to the request arrives, it is examined by
proxy. the proxy.
If the response does not contain a Session-Expires header field, but If the response does not contain a Session-Expires header field, but
the proxy remembers that it requested a session timer in the request the proxy remembers that it requested a session timer in the request
(by inserting, modifying, or examining and accepting the Session- (by inserting, modifying, or examining and accepting the Session-
Expires header field in the proxied request), this means that the UAS Expires header field in the proxied request), this means that the
did not support the session timer. If the proxy remembers that the UAS did not support the session timer. If the proxy remembers that
UAC did not support session timer either, the proxy forwards the the UAC did not support session timer either, the proxy forwards the
response upstream normally. There is no session expiration for this response upstream normally. There is no session expiration for this
session. If, however, the proxy remembers that the UAC did support session. If, however, the proxy remembers that the UAC did support
session timer, additional processing is needed. session timer, additional processing is needed.
Because there is no Session-Expires or Require header field in the Because there is no Session-Expires or Require header field in the
response, the proxy knows it is the first session-timer-aware proxy response, the proxy knows it is the first session-timer-aware proxy
to receive the response. This proxy MUST insert a Session-Expires to receive the response. This proxy MUST insert a Session-Expires
header field into the response with the value it remembered from the header field into the response with the value it remembered from the
forwarded request. It MUST set the value of the "refresher" parameter forwarded request. It MUST set the value of the ærefresherÆ
to "uac". The proxy MUST insert the Require header field into the parameter to æuacÆ. The proxy MUST insert the Require header field
response, with the value "timer", before forwarding it upstream. into the response, with the value ætimerÆ, before forwarding it
upstream.
If the received response contains a Session-Expires header field, no If the received response contains a Session-Expires header field, no
modification of the response is needed. modification of the response is needed.
In all cases, if the 2xx response forwarded upstream by the proxy In all cases, if the 2xx response forwarded upstream by the proxy
contains a Session-Expires header field, its value represents the contains a Session-Expires header field, its value represents the
session interval for the session associated with that response. The session interval for the session associated with that response. The
proxy computes the session expiration as the time when the 2xx proxy computes the session expiration as the time when the 2xx
response is forwarded upstream, plus the session interval. This response is forwarded upstream, plus the session interval. This
session expiration MUST update any existing session expiration for session expiration MUST update any existing session expiration for
the session. The refresher parameter in the Session-Expires header the session. The refresher parameter in the Session-Expires header
field in the 2xx response forwarded upstream will be present, and it field in the 2xx response forwarded upstream will be present, and it
indicates which UA is performing the refreshes. There can be multiple indicates which UA is performing the refreshes. There can be
2xx responses to a single INVITE, each representing a different multiple 2xx responses to a single INVITE, each representing a
dialog, resulting in multiple session expirations, one for each different dialog, resulting in multiple session expirations, one for
session associated with each dialog. each session associated with each dialog.
The proxy MUST NOT modify the value of the Session-Expires header The proxy MUST NOT modify the value of the Session-Expires header
field received in the response (assuming one was present) before field received in the response (assuming one was present) before
forwarding it upstream. forwarding it upstream.
S. Donovan et. Al. Informational 11
8.3 Session Expiration 8.3 Session Expiration
When the current time equals or passes the session expiration for a When the current time equals or passes the session expiration for a
session, the proxy MAY remove associated call state, and MAY free any session, the proxy MAY remove associated call state, and MAY free
resources associated with the call. Unlike the UA, it MUST NOT send a any resources associated with the call. Unlike the UA, it MUST NOT
BYE. send a BYE.
9 UAS Behavior 9. Proxy UAS Behavior
The UAS must respond to a request for a session timer by the UAC or
a proxy in the path of the request, or it may request that a session
Timer be used itself.
When a UAS receives a session refresh request, the processing of that If an incoming request contains a Supported header field with a
request can logically be broken into two steps. In the first step, value ætimerÆ and a Session Expires header, the UAS MAY reject the
the UAS acts as a "virtual proxy", and follows the rules specified in INVITE request with a 422 (Session Interval Too Small) response if
Section 8.1 as if it were a proxy. This means that the same session the session interval in the Session-Expires header field is smaller
timer manipulations that a proxy can do, can also be done by a UAS. than the minimum interval defined by the UAS' local policy. When
Specifically, this means that it can insert or reduce the session sending the 422 responses, the UAS MUST include a Min-SE header
interval (but not below Min-SE header field value, if present), field with the value of its minimum interval.
reject the request with a 422, and insert/increase the Min-SE header
field value, just as a proxy can. Of course, rather than proxying the
request, the "modified" request is passed into the second step of
processing, which we call the "virtual UAS" processing. Viewing the
UAS as the concatenation of a proxy and a UAS-specific processing
component simplifies the specification of behavior and guarantees
consistency. This separation is for the purposes of defining
behavior. It does not mandate that the implementation work this way.
Once the request is received by the virtual UAS (assuming it is If the UAS wishes to accept the request, it copies the value of the
received; it may have been rejected with a 422 based on the rules in Session-Expires header field from the request into the 2xx response.
Section 8.1), virtual UAS processing begins. From this point forward, The UAS response MAY reduce its value, but MUST NOT set it to a
the term "UAS" refers to the "virtual UAS". If the UAS wishes to duration lower than the value in the Min-SE header field in the
accept request, it copies the value of the Session-Expires header request, if present. If the value of the Session-Expires header
field from the request into the 2xx response. Of course, this request field is greater than or equal to the value in the Min-SE header
refers to the one received from the "virtual proxy". field (recall that the default is zero when the Min-SE header field
is not present), the UAS MUST NOT increase the value of the Session-
Expires header field. If the value of the Session-Expires header
field is lower than the value of the Min-SE header field (possibly
because a proxy increased the value of the Min-SE header field),
the UAS MUST increase the value of the Session-Expires header field
to make it equal to Min-SE header field value.
If the incoming request contains a Supported header field with a
value ætimerÆ but does not contain a Session-Expires header, the UAC
indicated support for timers, but did not request one. The UAS may
request a session timer in the 2XX response by including a Session-
Expires header. The value MUST NOT be set it to a duration lower
than the value in the Min-SE header field in the request, if
present.
The UAS MUST set the value of the refresher parameter in the The UAS MUST set the value of the refresher parameter in the
Session-Expires header field in the 2xx response. This value Session-Expires header field in the 2xx response. This value
specifies who will perform refreshes for the dialog. The value is specifies who will perform refreshes for the dialog. The value is
based on the value of this parameter in the request, and on whether based on the value of this parameter in the request, and on whether
the UAC supports the session timer extension. The UAC supports the the UAC supports the session timer extension. The UAC supports the
extension if the "timer" option tag was present in a Supported header extension if the ætimerÆ option tag was present in a Supported
field in the request. Table 2 defines how the value in the response header field in the request. Table 1 defines how the value in the
is set. A value of 'none' in the 2nd column means that there was no response is set. A value of 'none' in the 2nd column means that
refresher parameter in the request. A value of 'NA' in the third there was no refresher parameter in the request. A value of 'NA' in
column means that this particular combination shouldn't happen, as the third column means that this particular combination shouldn't
it's disallowed by the protocol. happen, as it's disallowed by the protocol.
The fourth row of Table 2 describes a case where both the UAC and UAS S. Donovan et. Al. Informational 12
support the session timer extension, and the UAC did not select who
will perform refreshes. This allows the UAS to decide whether it, or
the UAC, will perform the refreshes. However, as the table indicates,
UAC supports? refresher parameter refresher parameter UAC supports? refresher parameter refresher parameter
in request in response in request in response
N none uas N none uas
N uac NA N uac NA
N uas NA N uas NA
Y none uas or uac Y none uas or uac
Y uac uac Y uac uac
Y uas uas Y uas uas
Table 2: UAS Behavior Table 2: UAS Behavior
the UAS cannot overried the UAC's choice of refresher, if it made The fourth row of Table 2 describes a case where both the UAC and
one. UAS support the session timer extension, and the UAC did not select
who will perform refreshes. This allows the UAS to decide whether
it, or the UAC, will perform the refreshes. However, as the table
indicates, the UAS cannot overried the UAC's choice of refresher, if
it made one.
If the refresher parameter in the Session-Expires header field in the If the refresher parameter in the Session-Expires header field in
2xx response has a value of "uac", the UAS MUST place a Require the 2xx response has a value of æuacÆ, the UAS MUST place a Require
header field into the response with the value "timer". This is header field into the response with the value ætimerÆ. This is
because the uac is performing refreshes and the response has to be because the uac is performing refreshes and the response has to be
processed for the UAC to know this. If the refresher parameter in the processed for the UAC to know this. If the refresher parameter in
2xx response has a value of "uas", and the Supported header field in the 2xx response has a value of æuasÆ, and the Supported header
the request contained the value "timer", the UAS SHOULD place a field in the request contained the value ætimerÆ, the UAS SHOULD
Require header field into the response with the value "timer". In place a Require header field into the response with the value
this case, the UAC is not refreshing, but it is supposed to send a ætimerÆ. In this case, the UAC is not refreshing, but it is supposed
BYE if it never receives a refresh. Since the call will still succeed to send a BYE if it never receives a refresh. Since the call will
without the UAC doing this, insertion of the Require is a SHOULD still succeed without the UAC doing this, insertion of the Require
here, rather than a MUST. is a SHOULD here, rather than a MUST.
The UAS, just like the UAC, stores state for the session timer. This The UAS, just like the UAC, stores state for the session timer. This
state includes the session interval, the session expiration, and the state includes the session interval, the session expiration, and the
identity of the refresher. This state is bound to the dialog used to identity of the refresher. This state is bound to the dialog used to
set up the session. The session interval is set to the value of the set up the session. The session interval is set to the value of the
delta-time from the Session-Expires header field in the most recent delta-time from the Session-Expires header field in the most recent
2xx response to a session refresh request on that dialog. It also 2xx response to a session refresh request on that dialog. It also
remembers whether it, or its peer, is the refresher on the leg, based remembers whether it, or its peer, is the refresher on the leg,
on the value of the refresher parameter from the most recent 2xx based on the value of the refresher parameter from the most recent
response to a session refresh request on that dialog. If the most 2xx response to a session refresh request on that dialog. If the
recent 2xx response had no Session-Expires header field, there is no most recent 2xx response had no Session-Expires header field, there
session expiration, and no refreshes need to be performed. is no session expiration, and no refreshes need to be performed.
If the UAS must refresh the session, it computes the session If the UAS must refresh the session, it computes the session
expiration. The session expiration is the time of transmission of the expiration. The session expiration is the time of transmission of
last 2xx response to a session refresh request on that dialog plus the last 2xx response to a session refresh request on that dialog
the session interval. If UA wishes to continue with the session plus the session interval. If UA wishes to continue with the session
beyond the session expiration, it MUST generate a refresh before the beyond the session expiration, it MUST generate a refresh before the
session expiration. It is RECOMMENDED that this refresh be sent once session expiration. It is RECOMMENDED that this refresh be sent once
half the session interval has elapsed. Additional procedures for this half the session interval has elapsed. Additional procedures for
refresh are described in Section 10. this refresh are described in Section ref{sec:refresh}.
10 Performing Refreshes S. Donovan et. Al. Informational 13
The side generating a refresh does so according to the UAC procedures 10. Performing Refreshes
defined in Section 7. Note that only a 2xx response to a session
refresh request extends the session expiration. This means that a UA The side generating a refresh does so according to the UAC
could attempt a refresh, and receive a 422 response with a Min-SE procedures defined in Section 7. Note that only a 2xx response to a
header field that contains a value much larger than the current session refresh request extends the session expiration. This means
session interval. The UA will still need to send an session refresh that a UA could attempt a refresh, and receive a 422 response with a
request before the session expiration (which has not changed), even Min-SE header field that contains a value much larger than the
though this request will contain a value of the Session-Expires that current session interval. The UA will still need to send a session
is much larger than the current session interval. refresh request before the session expiration (which has not
changed), even though this request will contain a value of the
Session-Expires that is much larger than the current session
interval.
If no 2xx response to a session refresh request is received before If no 2xx response to a session refresh request is received before
the session expiration, the UA SHOULD send a BYE request to terminate the session expiration, the UA SHOULD send a BYE request to
the session. It SHOULD send this BYE slightly before session terminate the session. It SHOULD send this BYE slightly before
expiration. The minimum of ten seconds and one third the session session expiration. The minimum of ten seconds and one third the
interval is RECOMMENDED. session interval is RECOMMENDED.
For example, if the session interval is 120 seconds, one For example, if the session interval is 120 seconds, one third
third of this is 40 seconds. Since the minimum of 10 of this is 40 seconds. Since the minimum of 10 seconds and 40
seconds and 40 seconds is 10 seconds, the BYE would be sent seconds is 10 seconds, the BYE would be sent 10 seconds before
10 seconds before the session expires. the session expires.
Similarly, if the side not performing refreshes does not receive a Similarly, if the side not performing refreshes does not receive a
session refresh request before the session expiration, they SHOULD session refresh request before the session expiration, they SHOULD
send a BYE to terminate the session, slightly before the session send a BYE to terminate the session, slightly before the session
expiration. The minimum of ten seconds and one third the session expiration. The minimum of ten seconds and one third the session
interval is RECOMMENDED. interval is RECOMMENDED.
Firewalls and NAT ALGs may be very unforgiving about Firewalls and NAT ALGs may be very unforgiving about allowing
allowing SIP traffic to pass after the expiration time of SIP traffic to pass after the expiration time of the session.
the session. It is for this reason that the BYE should be It is for this reason that the BYE should be sent before the
sent before the expiration. expiration.
11 Security Considerations 11. Security Considerations
The session timer introduces the capability of a proxy or UA element The session timer introduces the capability of a proxy or UA element
to force compliant UAs to send refreshes at a rate of the element's to force compliant UAs to send refreshes at a rate of the element's
choosing. This introduces the possibility of denial-of-service choosing. This introduces the possibility of denial-of-service
attacks with significant amplification properties. These attacks can attacks with significant amplification properties. These attacks can
be launched from "outsiders" - elements which attempt to modify be launched from æoutsidersÆ - elements which attempt to modify
messages in transit, or by "insiders" - elements which are messages in transit, or by æinsidersÆ - elements which are
legitimately in the request path, but are intent on doing harm. legitimately in the request path, but are intent on doing harm.
Fortunately, both cases are adequately handled by this specification. Fortunately, both cases are adequately handled by this
specification.
11.1 Inside Attacks 11.2 Inside Attacks
This introduces the possibility of rogue proxies or UAs introducing This introduces the possibility of rogue proxies or UAs introducing
denial-of-service attacks. However, the mechanisms in this denial-of-service attacks. However, the mechanisms in this
specification prevent that from happening. specification prevent that from happening.
First, consider the case of a rogue UAC that wishes to force a UAS to S. Donovan et. Al. Informational 14
generate refreshes at a rapid rate. To do so, it inserts a Session- First, consider the case of a rogue UAC that wishes to force a UAS
Expires header field into an INVITE with a low duration and a to generate refreshes at a rapid rate. To do so, it inserts a
refresher parameter equal to uas. Assume it places a Supported header Session-Expires header field into an INVITE with a low duration and
field into the request. Any proxy, or the UAS, which objects to this a refresher parameter equal to uas. Assume it places a Supported
low timer will reject the request with a 422, therefore preventing header field into the request. Any proxy, or the UAS, which objects
the attack. If no Supported header field was present, the proxies to this low timer will reject the request with a 422, therefore
will insert a Min-SE header field into the request before forwarding preventing the attack. If no Supported header field was present, the
it. As a result, the UAS will not choose a session timer lower than proxies will insert a Min-SE header field into the request before
the minimum acceptable one to all elements on the path. This too forwarding it. As a result, the UAS will not choose a session timer
prevents the attack. lower than the minimum acceptable one to all elements on the path.
This too prevents the attack.
Next, consider the case of a rogue UAS that wishes to force a UAC to Next, consider the case of a rogue UAS that wishes to force a UAC to
generate refreshes at a rapid rate. In that case, the UAC has to generate refreshes at a rapid rate. In that case, the UAC has to
support session timer. The initial INVITE arrives at the rogue UAS, support session timer. The initial INVITE arrives at the rogue UAS,
which returns a 2xx with a very small session interval. The UAC uses which returns a 2xx with a very small session interval. The UAC uses
this timer, and quickly sends a refresh. Section 7.1 requires the UAC this timer, and quickly sends a refresh. Section 7.1 requires the
to copy the current session interval into the Session-Expires header UAC to copy the current session interval into the Session-Expires
field in the request. This enables the proxies to see the current header field in the request. This enables the proxies to see the
value. The proxies will reject this request, and provide a Min-SE current value. The proxies will reject this request, and provide a
with a higher minimum. The UAC will then use this higher minimum. Min-SE with a higher minimum. The UAC will then use this higher
Note, that if the proxies did not reject the request, but rather minimum. Note, that if the proxies did not eject the request, but
proxied the request with a Min-SE header field, an attack would still rather proxied the request with a Min-SE header field, an attack
be possible. The UAS could discard this header field in a 2xx would still be possible. The UAS could discard this header field in
response, and force the UAC to continue to generate rapid requests. a 2xx response, and force the UAC to continue to generate rapid
requests.
In a similar fashion, a rogue proxy cannot force either the UAC or In a similar fashion, a rogue proxy cannot force either the UAC or
UAS to generate refreshes unless the proxy remains on the signaling UAS to generate refreshes unless the proxy remains on the signaling
path, and sees every request and response. path, and sees every request and response.
11.2 Outside Attacks 11.2 Outside Attacks
An element that can observe and modify a request or response in An element that can observe and modify a request or response in
transit can force rapid session refreshes. To prevent that, requests transit can force rapid session refreshes. To prevent that, requests
and responses need to be protected by message integrity. Since the and responses need to be protected by message integrity. Since the
session timer headers are not end-to-end, and are manipulated by session timer headers are not end-to-end, and are manipulated by
proxies, the SIP S/MIME capabilities are not suitable for this task. proxies, the SIP S/MIME capabilities are not suitable for this task.
Rather, integrity needs to be protected using hop-by-hop mechanisms. Rather, integrity needs to be protected using hop-by-hop mechanisms.
As a result, it is RECOMMENDED that an element which sends a request As a result, it is RECOMMENDED that an element that sends a request
with a Session-Expires header field, or a Supported header field with with a Session-Expires header field, or a Supported header field
the value "timer", do so using IPSec or TLS. Since adequate with the value ætimerÆ, do so using IPSec or TLS. Since adequate
protection is obtained only if TLS or IPSec is applied on each hop, protection is obtained only if TLS or IPSec is applied on each hop,
it is RECOMMENDED that the SIPS URI scheme be used in conjunction it is RECOMMENDED that the SIPS URI scheme be used in conjunction
with this extension. This means that proxies which record-route and with this extension. This means that proxies that record-route and
request session timer, SHOULD record-route with a SIPS URI. A UA request session timer, SHOULD record-route with a SIPS URI. A UA
which inserts a Session-Expires header into a request or response that inserts a Session-Expires header into a request or response
SHOULD include a Contact URI thats a SIPS URI. SHOULD include a Contact URI that is a SIPS URI.
12 IANA Considerations 12. IANA Considerations
S. Donovan et. Al. Informational 15
This extension defines two new header fields, a new response code, This extension defines two new header fields, a new response code,
and a new option tag. SIP [1] defines IANA procedures for registering and a new option tag. SIP [1] defines IANA procedures for
these. registering these.
12.1 IANA Registration of Min-SE and Session-Expires Header Fields 12.1 IANA Registration of Min-SE and Session-Expires Header Fields
The following is the registration for the Min-SE header field: The following is the registration for the Min-SE header field:
RFC Number: RFC XXXX [Note to IANA: Fill in with the RFC number RFC Number: RFC XXXX [Note to IANA: Fill in with the RFC number
of this specification.] of this specification.]
Header Name: Min-SE Header Name: Min-SE
skipping to change at page 18, line 38 skipping to change at line 837
field: field:
RFC Number: RFC XXXX [Note to IANA: Fill in with the RFC number RFC Number: RFC XXXX [Note to IANA: Fill in with the RFC number
of this specification.] of this specification.]
Header Name: Session-Expires Header Name: Session-Expires
Compact Form: x Compact Form: x
12.2 IANA Registration of the 422 (Session Interval Too Small) Response 12.2 IANA Registration of the 422 (Session Interval Too Small) Response
Code Code}
The following is the registration for the 422 (Session Interval Too The following is the registration for the 422 (Session Interval Too
Small) response code: Small) response code:
Response Code: 422 Response Code: 422
Default Reason Phrase: Session Interval Too Small Default Reason Phrase: Session Interval Too Small
RFC Number: RFC XXXX [Note to IANA: Fill in with the RFC number RFC Number: RFC XXXX [Note to IANA: Fill in with the RFC number
of this specification.] of this specification.]
12.3 IANA Registration of the "timer" Option Tag 12.3 IANA Registration of the ætimerÆ Option Tag}
The following is the registration for the "timer" option tag:
The following is the registration for the ætimerÆ option tag:
Name: timer Name: timer
Description: This option tag is for support of the session timer Description: This option tag is for support of the session
extension. Inclusion in a Supported header field in a timer extension. Inclusion in a Supported header field in a
request or response indicates that the UA is capable of request or response indicates that the UA is capable of
performing refreshes according to that specification. performing refreshes according to that specification. Inclusion
Inclusion in a Require header in a request means that the in a Require header in a request means that the UAS must
UAS must understand the session timer extension to process understand the session timer extension to process the request.
the request. Inclusion in a Require header field in a Inclusion in a Require header field in a response indicates
response indicates that the UAC must look for the Session-
Expires header field in the response, and process
accordingly.
13 Example Call Flow S. Donovan et. Al. Informational 16
that the UAC must look for the Session-Expires header field in
the response, and process accordingly.
13. Example Call Flow
Figure 1 gives an example of a call flow that makes use of the Figure 1 gives an example of a call flow that makes use of the
session timer. In this example, both the UAC and UAS support the session timer. In this example, both the UAC and UAS support the
session timer extension. The initial INVITE request generated by the session timer extension. The initial INVITE request generated by the
UAC, Alice (message 1), might look like: UAC, Alice (message 1), might look like:
INVITE sip:bob@biloxi.com SIP/2.0 INVITE sip:bob@biloxi.com SIP/2.0
Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8 Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8
Supported: timer Supported: timer
Session-Expires: 50 Session-Expires: 50
skipping to change at page 19, line 42 skipping to change at line 890
From: Alice <sip:alice@atlanta.com>;tag=1928301774 From: Alice <sip:alice@atlanta.com>;tag=1928301774
Call-ID: a84b4c76e66710 Call-ID: a84b4c76e66710
CSeq: 314159 INVITE CSeq: 314159 INVITE
Contact: <sip:alice@pc33.atlanta.com> Contact: <sip:alice@pc33.atlanta.com>
Content-Type: application/sdp Content-Type: application/sdp
Content-Length: 142 Content-Length: 142
(Alice's SDP not shown) (Alice's SDP not shown)
This request indicates that Alice supports the session timer, and is This request indicates that Alice supports the session timer, and is
request session refreshes every 50 seconds. This arrives at the first request session refreshes every 50 seconds. This arrives at the
proxy, P1. This session interval is below the minimum allowed value first proxy, P1. This session interval is below the minimum allowed
of 3600. So, P1 rejects the request with a 422 (message 2): value of 3600. So, P1 rejects the request with a 422 (message 2):
SIP/2.0 422 Session Interval Too Small SIP/2.0 422 Session Interval Too Small
Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8 Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8
;received=192.0.2.1 ;received=192.0.2.1
Min-SE: 3600 Min-SE: 3600
To: Bob <sip:bob@biloxi.com>;tag=9a8kz To: Bob <sip:bob@biloxi.com>;tag=9a8kz
From: Alice <sip:alice@atlanta.com>;tag=1928301774 From: Alice <sip:alice@atlanta.com>;tag=1928301774
Call-ID: a84b4c76e66710 Call-ID: a84b4c76e66710
CSeq: 314159 INVITE CSeq: 314159 INVITE
This response contains an Min-SE header field with the value of 3600. This response contains an Min-SE header field with the value of
Alice then retries the request. This time, the request contains a 3600. Alice then retries the request. This time, the request
Min-SE header, since Alice has received a 422 for other INVITE contains a Min-SE header, since Alice has received a 422 for other
requests with the same Call-ID. The new request (message 4) might INVITE requests with the same Call-ID. The new request (message 4)
look like: might look like:
INVITE sip:bob@biloxi.com SIP/2.0 INVITE sip:bob@biloxi.com SIP/2.0
Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds9 Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds9
Supported: timer Supported: timer
Session-Expires: 3600 Session-Expires: 3600
Min-SE: 3600 Min-SE: 3600
Max-Forwards: 70 Max-Forwards: 70
To: Bob <sip:bob@biloxi.com> To: Bob <sip:bob@biloxi.com>
S. Donovan et. Al. Informational 17
From: Alice <sip:alice@atlanta.com>;tag=1928301774 From: Alice <sip:alice@atlanta.com>;tag=1928301774
Call-ID: a84b4c76e66710 Call-ID: a84b4c76e66710
CSeq: 314160 INVITE CSeq: 314160 INVITE
Contact: <sip:alice@pc33.atlanta.com> Contact: <sip:alice@pc33.atlanta.com>
Content-Type: application/sdp Content-Type: application/sdp
Content-Length: 142 Content-Length: 142
(Alice's SDP not shown) (Alice's SDP not shown)
Proxy P1 record-routes. Since the session interval is now acceptable Proxy P1 record-routes. Since the session interval is now acceptable
to it, it forwards the request to P2 (message 5). However, the to it, it forwards the request to P2 (message 5). However, the
session interval is below its minimum configured amount of 4000. So, session interval is below its minimum configured amount of 4000. So,
it rejects the request with a 422 response code (message 6), and it rejects the request with a 422 response code (message 6), and
includes a Min-SE header field with the value of 4000. Once more, includes a Min-SE header field with the value of 4000. Once more,
Alice retries the INVITE. This time, the Min-SE header field in her Alice retries the INVITE. This time, the Min-SE header field in her
INVITE is the maximum of all Min-SE she has received (3600 and 4000). INVITE is the maximum of all Min-SE she has received (3600 and
Message 10 might look like: 4000). Message 10 might look like:
Alice Proxy P1 Proxy P2 Bob
|(1) INVITE | | |
|SE: 50 | | |
|----------->| | |
|(2) 422 | | |
|MSE: 3600 | | |
|<-----------| | |
|(3) ACK | | |
|----------->| | |
|(4) INVITE | | |
|SE:3600 | | |
|MSE:3600 | | |
|----------->| | |
| |(5) INVITE | |
| |SE:3600 | |
| |MSE:3600 | |
| |----------->| |
| |(6) 422 | |
| |MSE:4000 | |
| |<-----------| |
| |(7) ACK | |
| |----------->| |
|(8) 422 | | |
|MSE:4000 | | |
|<-----------| | |
|(9) ACK | | |
|----------->| | |
|(10) INVITE | | |
|SE:4000 | | |
|MSE:4000 | | |
|----------->| | |
| |(11) INVITE | |
| |SE:4000 | |
| |MSE:4000 | |
| |----------->| |
| | |(12) INVITE |
| | |SE:4000 |
| | |MSE:4000 |
| | |----------->|
| | |(13) 200 OK |
| | |SE:4000 |
| | |<-----------|
| |(14) 200 OK | |
| |SE:4000 | |
| |<-----------| |
|(15) 200 OK | | |
|SE:4000 | | |
|<-----------| | |
|(16) ACK | | |
|----------->| | |
| |(17) ACK | |
| |------------------------>|
|(18) UPDATE | | |
|SE:4000 | | |
|----------->| | |
| |(19) UPDATE | |
| |SE:4000 | |
| |------------------------>|
| |(20) 200 OK | |
| |SE:4000 | |
| |<------------------------|
|(21) 200 OK | | |
|SE:4000 | | |
|<-----------| | |
| |(22) BYE | |
| |<------------------------|
|(23) BYE | | |
|<-----------| | |
| |(24) 408 | |
| |------------------------>|
Figure 1: Example Session Timer Flow
INVITE sip:bob@biloxi.com SIP/2.0 INVITE sip:bob@biloxi.com SIP/2.0
Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds10 Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds10
Supported: timer Supported: timer
Session-Expires: 4000 Session-Expires: 4000
Min-SE: 4000 Min-SE: 4000
Max-Forwards: 70 Max-Forwards: 70
To: Bob <sip:bob@biloxi.com> To: Bob <sip:bob@biloxi.com>
From: Alice <sip:alice@atlanta.com>;tag=1928301774 From: Alice <sip:alice@atlanta.com>;tag=1928301774
Call-ID: a84b4c76e66710 Call-ID: a84b4c76e66710
CSeq: 314161 INVITE CSeq: 314161 INVITE
Contact: <sip:alice@pc33.atlanta.com> Contact: <sip:alice@pc33.atlanta.com>
Content-Type: application/sdp Content-Type: application/sdp
Content-Length: 142 Content-Length: 142
(Alice's SDP not shown) (Alice's SDP not shown)
P1 record-routes once again, but P2 does not (this wouldn't normally P1 record-routes once again, but P2 does not (this wouldn't normally
happen; presumably, if it asked for session timer, it would record- happen; presumably, if it asked for session timer, it would record-
route the subsequent request). The UAS receives the request. It route the subsequent request). The UAS receives the request. It
copies the Session-Expires header from the request to the response, copies the Session-Expires header from the request to the response,
and adds a refresher parameter with value "uac". This 200 OK is and adds a refresher parameter with value æuacÆ. This 200 OK is
forwarded back to Alice. The response she receives (message 15) might forwarded back to Alice. The response she receives (message 15)
look like: might look like:
SIP/2.0 200 OK SIP/2.0 200 OK
Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds10 Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds10
;received=192.0.2.1 ;received=192.0.2.1
Require: timer Require: timer
Supported: timer Supported: timer
Record-Route: sip:p1.atlanta.com;lr Record-Route: sip:p1.atlanta.com;lr
Session-Expires: 4000;refresher=uac Session-Expires: 4000;refresher=uac
To: Bob <sip:bob@biloxi.com>;tag=9as888nd To: Bob <sip:bob@biloxi.com>;tag=9as888nd
From: Alice <sip:alice@atlanta.com>;tag=1928301774 From: Alice <sip:alice@atlanta.com>;tag=1928301774
Call-ID: a84b4c76e66710 Call-ID: a84b4c76e66710
CSeq: 314161 INVITE CSeq: 314161 INVITE
S. Donovan et. Al. Informational 18
Contact: <sip:bob@192.0.2.4> Contact: <sip:bob@192.0.2.4>
Content-Type: application/sdp Content-Type: application/sdp
Content-Length: 142 Content-Length: 142
(Bob's SDP not shown) (Bob's SDP not shown)
Alice generates an ACK (message 16), which is routed through P1 and Alice generates an ACK (message 16), which is routed through P1 and
then to Bob. Since Alice is the refresher, around 3000 seconds later, then to Bob. Since Alice is the refresher, around 3000 seconds
Alice sends an UPDATE request to refresh the session. Since this later, Alice sends an UPDATE request to refresh the session. Since
request is part of an established dialog, and Alice has not received this request is part of an established dialog, and Alice has not
any 422 responses or requests on that dialog, there is no Min-SE received any 422 responses or requests on that dialog, there is no
header field in her request (message 18): Min-SE header field in her request (message 18):
UPDATE sip:bob@192.0.2.4 SIP/2.0 UPDATE sip:bob@192.0.2.4 SIP/2.0
Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds12 Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds12
Route: sip:p1.atlanta.com;lr Route: sip:p1.atlanta.com;lr
Supported: timer Supported: timer
Session-Expires: 4000;refresher=uac Session-Expires: 4000;refresher=uac
Max-Forwards: 70 Max-Forwards: 70
To: Bob <sip:bob@biloxi.com>;tag=9as888nd To: Bob <sip:bob@biloxi.com>;tag=9as888nd
From: Alice <sip:alice@atlanta.com>;tag=1928301774 From: Alice <sip:alice@atlanta.com>;tag=1928301774
Call-ID: a84b4c76e66710 Call-ID: a84b4c76e66710
CSeq: 314162 UPDATE CSeq: 314162 UPDATE
Contact: <sip:alice@pc33.atlanta.com> Contact: <sip:alice@pc33.atlanta.com>
This is forwarded through P1 to Bob. Bob generates a 200 OK, copying This is forwarded through P1 to Bob. Bob generates a 200 OK, copying
the Session-Expires header field into the response. This is forwarded the Session-Expires header field into the response. This is
through P1, and arrives at Alice. The response she receives (message forwarded through P1, and arrives at Alice. The response she
21) might look like: receives (message 21) might look like:
SIP/2.0 200 OK SIP/2.0 200 OK
Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds12 Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds12
;received=192.0.2.1 ;received=192.0.2.1
Require: timer Require: timer
Session-Expires: 4000;refresher=uac Session-Expires: 4000;refresher=uac
To: Bob <sip:bob@biloxi.com>;tag=9as888nd To: Bob <sip:bob@biloxi.com>;tag=9as888nd
From: Alice <sip:alice@atlanta.com>;tag=1928301774 From: Alice <sip:alice@atlanta.com>;tag=1928301774
Call-ID: a84b4c76e66710 Call-ID: a84b4c76e66710
CSeq: 314162 UPDATE CSeq: 314162 UPDATE
Contact: <sip:bob@192.0.2.4> Contact: <sip:bob@192.0.2.4>
Shortly afterwards, Alice's UA crashes. As a result, she never sends Shortly afterwards, Alice's UA crashes. As a result, she never sends
an session refresh request. 3990 seconds later, Bob gives up, and an session refresh request. 3990 seconds later, Bob gives up, and
sends a BYE request (message 22). This is sent to P1. P1 attempts to sends a BYE request (message 22). This is sent to P1. P1 attempts to
deliver it, but fails (since Alice's UA has crashed). P1 then returns deliver it, but fails (since Alice's UA has crashed). P1 then
a 408 (Request Timeout) to Bob. returns a 408 (Request Timeout) to Bob.
14 Acknowledgements
14. Acknowledgements
The authors wish to thank Brett Tate for his contributions to this The authors wish to thank Brett Tate for his contributions to this
work. work. Brian Rosen completed the editing of this latest draft.
15 Author's Addresses 15. Author's Addresses
S. Donovan et. Al. Informational 19
Steven R. Donovan Steven R. Donovan
dynamicsoft dynamicsoft
5100 Tennyson Parkway 5100 Tennyson Parkway
Suite 1200 Suite 1200
Plano, Texas 75024 Plano, Texas 75024
email: sdonovan@dynamicsoft.com email: sdonovan@dynamicsoft.com
Jonathan Rosenberg Jonathan Rosenberg
dynamicsoft dynamicsoft
72 Eagle Rock Avenue 72 Eagle Rock Avenue
First Floor First Floor
East Hanover, NJ 07936 East Hanover, NJ 07936
email: jdrosen@dynamicsoft.com email: jdrosen@dynamicsoft.com
16 Normative References 16. Normative References
[1] J. Rosenberg, H. Schulzrinne, G. Camarillo, A. Johnston, J. [1] J. Rosenberg, H. Schulzrinne, G. Camarillo, A. Johnston, J.
Peterson, R. Sparks, M. Handley, and E. Schooler, "SIP: session Peterson, R. Sparks, M. Handley, and E. Schooler, "SIP: session
initiation protocol," RFC 3261, Internet Engineering Task Force, June initiation protocol," RFC 3261, Internet Engineering Task Force,
2002. June 2002.
[2] J. Rosenberg, "The session initiation protocol (SIP) UPDATE [2] J. Rosenberg, "The session initiation protocol (SIP) UPDATE
method," RFC 3311, Internet Engineering Task Force, Oct. 2002. method," RFC 3311, Internet Engineering Task Force, Oct. 2002.
[3] S. Bradner, "Key words for use in RFCs to indicate requirement [3] S. Bradner, "Key words for use in RFCs to indicate requirement
levels," RFC 2119, Internet Engineering Task Force, Mar. 1997. levels," RFC 2119, Internet Engineering Task Force, Mar. 1997.
[4] J. Rosenberg and H. Schulzrinne, "An offer/answer model with [4] J. Rosenberg and H. Schulzrinne, "An offer/answer model with
session description protocol (SDP)," RFC 3264, Internet Engineering session description protocol (SDP)," RFC 3264, Internet Engineering
Task Force, June 2002. Task Force, June 2002.
17 Informative References 17. Informative References
[5] H. Schulzrinne, S. Casner, R. Frederick, and V. Jacobson, "RTP: a [5] H. Schulzrinne, S. Casner, R. Frederick, and V. Jacobson, "RTP:
transport protocol for real-time applications," RFC 1889, Internet a transport protocol for real-time applications," RFC 1889, Internet
Engineering Task Force, Jan. 1996. Engineering Task Force, Jan. 1996.
[6] P. Srisuresh and M. Holdrege, "IP network address translator [6] P. Srisuresh and M. Holdrege, "IP network address translator
(NAT) terminology and considerations," RFC 2663, Internet Engineering (NAT) terminology and considerations," RFC 2663, Internet
Task Force, Aug. 1999. Engineering Task Force, Aug. 1999.
[7] J. Rosenberg and H. Schulzrinne, "Reliability of provisional [7] J. Rosenberg and H. Schulzrinne, "Reliability of provisional
responses in session initiation protocol (SIP)," RFC 3262, Internet responses in session initiation protocol (SIP)," RFC 3262, Internet
Engineering Task Force, June 2002. Engineering Task Force, June 2002.
[8] A. B. Roach, "Session initiation protocol (sip)-specific event [8] A. B. Roach, "Session initiation protocol (sip)-specific event
notification," RFC 3265, Internet Engineering Task Force, June 2002. notification," RFC 3265, Internet Engineering Task Force, June 2002.
Full Copyright Statement S. Donovan et. Al. Informational 20
Copyright (c) The Internet Society (2002). All Rights Reserved. Full Copyright Statement
"Copyright (C) The Internet Society (date). All Rights Reserved.
This document and translations of it may be copied and furnished to This document and translations of it may be copied and furnished to
others, and derivative works that comment on or otherwise explain it others, and derivative works that comment on or otherwise explain it
or assist in its implementation may be prepared, copied, published or assist in its implementation may be prepared, copied, published
and distributed, in whole or in part, without restriction of any and distributed, in whole or in part, without restriction of any
kind, provided that the above copyright notice and this paragraph are kind, provided that the above copyright notice and this paragraph
included on all such copies and derivative works. However, this are included on all such copies and derivative works. However, this
document itself may not be modified in any way, such as by removing document itself may not be modified in any way, such as by removing
the copyright notice or references to the Internet Society or other the copyright notice or references to the Internet Society or other
Internet organizations, except as needed for the purpose of Internet organizations, except as needed for the purpose of
developing Internet standards in which case the procedures for developing Internet standards in which case the procedures for
copyrights defined in the Internet Standards process must be copyrights defined in the Internet Standards process must be
followed, or as required to translate it into languages other than followed, or as required to translate it into
English.
The limited permissions granted above are perpetual and will not be
revoked by the Internet Society or its successors or assigns.
This document and the information contained herein is provided on an S. Donovan et. Al. Informational 21
"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
 End of changes. 

This html diff was produced by rfcdiff 1.23, available from http://www.levkowetz.com/ietf/tools/rfcdiff/