• No results found

INVITE Client Transaction

In document SIP: Session Initiation Protocol (Page 86-89)

16 Proxy Behavior

17.1 Client Transaction

17.1.1 INVITE Client Transaction

3256

17.1.1.1 Overview ofINVITETransaction TheINVITEtransaction consists of a three-way handshake.

3257

The client transaction sends anINVITE, the server transaction sends responses, and the client transaction

3258

sends an ACK. For unreliable transports (such as UDP), the client transaction retransmits requests at an

3259

interval that starts at T1 seconds and doubles after every retransmission. T1 is an estimate of the

round-3260

trip time (RTT), and it defaults to 500 ms. Nearly all of the transaction timers described here scale with

3261

T1, and changing T1 adjusts their values. The request is not retransmitted over reliable transports. After

3262

receiving a 1xx response, any retransmissions cease altogether, and the client waits for further responses.

3263

The server transaction can send additional 1xx responses, which are not transmitted reliably by the server

3264

transaction. Eventually, the server transaction decides to send a final response. For unreliable transports,

3265

that response is retransmitted periodically, and for reliable transports, it is sent once. For each final response

3266

that is received at the client transaction, the client transaction sends an ACK, the purpose of which is to

3267

quench retransmissions of the response.

3268

17.1.1.2 Formal Description The state machine for theINVITEclient transaction is shown in Figure 5.

3269

The initial state, “calling”,MUSTbe entered when the TU initiates a new client transaction with anINVITE

3270

request. The client transactionMUSTpass the request to the transport layer for transmission (see Section 18).

3271

If an unreliable transport is being used, the client transaction MUSTstart timer A with a value of T1. If a

3272

reliable transport is being used, the client transactionSHOULD NOTstart timer A (Timer A controls request

3273

retransmissions). For any transport, the client transactionMUSTstart timer B with a value of 64*T1 seconds

3274

(Timer B controls transaction timeouts).

3275

When timer A fires, the client transaction MUST retransmit the request by passing it to the transport

3276

layer, andMUSTreset the timer with a value of 2*T1. The formal definition of retransmit within the context

3277

of the transaction layer is to take the message previously sent to the transport layer and pass it to the transport

3278

layer once more.

3279

When timer A fires 2*T1 seconds later, the request MUSTbe retransmitted again (assuming the client

3280

transaction is still in this state). This processMUSTcontinue so that the request is retransmitted with intervals

3281

that double after each transmission. These retransmissionsSHOULDonly be done while the client transaction

3282

is in the “calling” state.

3283

The default value for T1 is 500 ms. T1 is an estimate of the RTT between the client and server

trans-3284

actions. ElementsMAY(though it isNOT RECOMMENDED) use smaller values of T1 within closed, private

3285

networks that do not permit general Internet connection. T1 MAY be chosen larger, and this is RECOM

-3286

MENDED if it is known in advance (such as on high latency access links) that the RTT is larger. Whatever

3287

the value of T1, the exponential backoffs on retransmissions described in this sectionMUSTbe used.

3288

|INVITE from TU Timer A fires |INVITE sent Reset A, V Timer B fires INVITE sent +−−−−−−−−−−−+ or Transport Err.

+−−−−−−−−−| |−−−−−−−−−−−−−−−+inform TU | | Calling | | +−−−−−−−−>| |−−−−−−−−−−−−−−>|

+−−−−−−−−−−−+ 2xx | | | 2xx to TU | | |1xx | 300−699 +−−−−−−−−−−−−−−−+ |1xx to TU | ACK sent | | | resp. to TU | 1xx V | | 1xx to TU −−−−−−−−−−−+ | | +−−−−−−−−−| | | | | |Proceeding |−−−−−−−−−−−−−−>|

| +−−−−−−−−>| | 2xx | | +−−−−−−−−−−−+ 2xx to TU | | 300−699 | | | ACK sent, | | | resp. to TU| | | | | NOTE:

| 300−699 V | | ACK sent +−−−−−−−−−−−+Transport Err. | transitions | +−−−−−−−−−| |Inform TU | labeled with | | | Completed |−−−−−−−−−−−−−−>| the event | +−−−−−−−−>| | | over the action | +−−−−−−−−−−−+ | to take | ^ | | | | | Timer D fires | +−−−−−−−−−−−−−−+ | − | | | V | +−−−−−−−−−−−+ | | | | | Terminated|<−−−−−−−−−−−−−−+

| | +−−−−−−−−−−−+

Figure 5: INVITEclient transaction

If the client transaction is still in the “calling” state when timer B fires, the client transaction SHOULD

3289

inform the TU that a timeout has occurred. The client transactionMUST NOTgenerate anACK. The value of

3290

64*T1 is equal to the amount of time required to send seven requests in the case of an unreliable transport.

3291

If the client transaction receives a provisional response while in the ”Calling” state, it transitions to the

3292

“proceeding” state. In the “proceeding” state, the client transactionSHOULD NOTretransmit the request any

3293

longer. Furthermore, the provisional responseMUSTbe passed to the TU. Any further provisional responses

3294

MUSTbe passed up to the TU while in the “proceeding” state.

3295

When in either the ”Calling” or “Proceeding” states, reception of a response with status code from

3296

300-699MUSTcause the client transaction to transition to “Completed”. The client transaction MUSTpass

3297

the received response up to the TU, and the client transaction MUSTgenerate anACK request, even if the

3298

transport is reliable (guidelines for constructing theACKfrom the response are given in Section 17.1.1.3)

3299

and then pass theACKto the transport layer for transmission. TheACKMUSTbe sent to the same address,

3300

port, and transport to which the original request was sent. The client transaction SHOULD start timer D

3301

when it enters the “Completed” state, with a value of at least 32 seconds for unreliable transports, and a

3302

value of zero seconds for reliable transports. Timer D reflects the amount of time that the server transaction

3303

can remain in the “Completed” state when unreliable transports are used. This is equal to Timer H in the

3304

INVITEserver transaction, whose default is 64*T1. However, the client transaction does not know the value

3305

of T1 in use by the server transaction, so an absolute minimum of 32s is used instead of basing Timer D on

3306

T1.

3307

Any retransmissions of the final response that are received while in the “Completed” stateMUSTcause

3308

theACK to be re-passed to the transport layer for retransmission, but the newly received response MUST

3309

NOTbe passed up to the TU. A retransmission of the response is defined as any response which would match

3310

the same client transaction based on the rules of Section 17.1.3.

3311

If timer D fires while the client transaction is in the “Completed” state, the client transaction MUSTmove

3312

to the terminated state, and itMUSTinform the TU of the timeout.

3313

When in either the “Calling” or “Proceeding” states, reception of a 2xx response MUSTcause the client

3314

transaction to enter the ”Terminated” state, and the responseMUSTbe passed up to the TU. The handling of

3315

this response depends on whether the TU is a proxy core or a UAC core. A UAC core will handle generation

3316

of theACKfor this response, while a proxy core will always forward the 200 (OK) upstream. The differing

3317

treatment of 200 (OK) between proxy and UAC is the reason that handling of it does not take place in the

3318

transaction layer.

3319

The client transaction MUST be destroyed the instant it enters the ”Terminated” state. This is actually

3320

necessary to guarantee correct operation. The reason is that 2xx responses to anINVITEare treated

differ-3321

ently; each one is forwarded by proxies, and theACKhandling in a UAC is different. Thus, each 2xx needs

3322

to be passed to a proxy core (so that it can be forwarded) and to a UAC core (so it can be acknowledged). No

3323

transaction layer processing takes place. Whenever a response is received by the transport, if the transport

3324

layer finds no matching client transaction (using the rules of Section 17.1.3), the response is passed directly

3325

to the core. Since the matching client transaction is destroyed by the first 2xx, subsequent 2xx will find no

3326

match and therefore be passed to the core.

3327

17.1.1.3 Construction of theACK Request This section specifies the construction ofACK requests

3328

sent within the client transaction. A UAC core that generates anACKfor 2xxMUSTinstead follow the rules

3329

described in Section 13.

3330

TheACKrequest constructed by the client transactionMUSTcontain values for theCall-ID,From, and

3331

Request-URIthat are equal to the values of those header fields in the request passed to the transport by

3332

the client transaction (call this the “original request”). TheToheader field in theACKMUSTequal theTo

3333

header field in the response being acknowledged, and therefore will usually differ from theToheader field

3334

in the original request by the addition of the tag parameter. The ACKMUST contain a singleViaheader

3335

field, and thisMUSTbe equal to the topViaheader field of the original request. TheCSeqheader field in

3336

theACK MUSTcontain the same value for the sequence number as was present in the original request, but

3337

the method parameterMUSTbe equal to “ACK”.

3338

If the INVITErequest whose response is being acknowledged had Routeheader fields, those header

3339

fields MUSTappear in theACK. This is to ensure that theACKcan be routed properly through any

down-3340

stream stateless proxies.

3341

Although any request MAYcontain a body, a body in an ACK is special since the request cannot be

3342

rejected if the body is not understood. Therefore, placement of bodies inACKfor non-2xx isNOT RECOM

-3343

MENDED, but if done, the body types are restricted to any that appeared in theINVITE, assuming that the

3344

response to theINVITEwas not 415. If it was, the body in theACKMAYbe any type listed in theAccept

3345

header field in the 415.

3346

For example, consider the following request:

3347

INVITE sip:[email protected] SIP/2.0

3348

Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKkjshdyff

3349

To: Bob <sip:[email protected]>

3350

From: Alice <sip:[email protected]>;tag=88sja8x

3351

Max-Forwards: 70

3352

Call-ID: 987asjd97y7atg

3353

CSeq: 986759 INVITE

3354

TheACKrequest for a non-2xx final response to this request would look like this:

3355

ACK sip:[email protected] SIP/2.0

3356

Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKkjshdyff

3357

To: Bob <sip:[email protected]>;tag=99sa0xk

3358

From: Alice <sip:[email protected]>;tag=88sja8x

3359

Max-Forwards: 70

3360

Call-ID: 987asjd97y7atg

3361

CSeq: 986759 ACK

3362

In document SIP: Session Initiation Protocol (Page 86-89)