SD-originated Keep-Alive Negotiation

SD-originated Keep-Alives are useful on TCP connections with iOS (iPhone Operating System) clients, such as iPhones or iPads. iOS places inactive clients in a dormant state after a period of time. Once in the dormant state, clients cannot transmit date unless awakened by network traffic. SD-originated Keep-Alives are generated at a sufficient frequency to prevent iOS clients from entering the dormant state.

SD-originated Keep-Alive negotiation is similar to the earlier described negotiation, except for the parameter used. SD-originated Keep-Alive negotiation requires the presence of a well known proprietary parameter in the Via header of Registration requests and responses issued and received by a SIP endpoint. The proprietary parameter can be defined as follows:

A SIP Via header field parameter that a SIP endpoint can insert in the topmost Via header field that it adds to the request, to explicitly indicate willingness to receive Keep-Alives from its adjacent downstream SIP entity. This same SIP endpoint can assign a value to this proprietary parameter in the response to specify the keep-alive interval.

As shown in the following sample registration exchange, the SIP endpoint signals its willingness to receive Keep-Alive messages by placing an rkeep parameter in the SIP Via header of a REGISTER request; the assigned value of 20 specifies the interval between Keep-Alives.

REGISTER sip:512@172.16.101.23:5060 SIP/2.0
Via: SIP/2.0/UDP 172.16.101.38:5070;branch=dd1;rkeep=20
From: "512" <sip:512@172.16.101.38:5070;transport=UDP>;tag=443322
To: "512" <sip:512@172.16.101.38:5070>
Call-ID:1-14400@172.16.101.38
CSeq: 1 REGISTER
Max-Forwards: 70
Contact: "512" <sip:512@172.16.101.38:5070>;expires:18000
User-Agent: ADTRAN_Total_Access_908e_(2nd_Gen)/A1.02.00.E
Content-Length: 0

The SD strips the rkeep parameter from the Via header of the REGISTER request, and forwards the request to the Registrar.

REGISTER sip:512@192.168.7.32:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.101.23:5060;branch=z9hG4bK3q43klh3dafekdepnbaqip04e1
From: "512" <sip:512@172.16.101.38:5070;transport=UDP>;tag=443322
To: "512" <sip:512@172.16.101.38:5070>
Call-ID: 1-14400@172.16.101.38
CSeq: 1 REGISTER
Max-Forwards: 69
Contact: "512" <sip:512@192.168.101.23:5060;transport=udp>;expires:18000
User-Agent: ADTRAN_Total_Access_908e_(2nd_Gen)/A1.02.00.E
Content-Length: 0
Allow: ACK, BYE, CANCEL, INFO, INVITE, NOTIFY, OPTIONS, REFER

The Registrar indicates successful registration with a 200 OK REGISTER response back to the SD. The expires parameter in the Contact header grants a registration period of 1 hour (3600 seconds).

SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.101.23:5060;branch=z9hG4bK3q43klh3dafekdepnbaqip04e1
From: "512" <sip:512@172.16.101.38:5070;transport=UDP>;tag=443322
To: "512" <sip:512@172.16.101.38:5070>;tag=b68b3d53a5a90225609112ff6c211bef.16a6
Call-ID: 1-14400@172.16.101.38
CSeq: 1 REGISTER
Contact: <sip:512@192.168.101.23:5060;transport=udp>;expires=3600
Server: OpenSER (1.3.0-notls (i386/linux))
Content-Length: 0

After inserting the rkeep parameter and assigned value in the Via header of the REGISTER response, the SD forwards the response to the endpoint The presence of the rkeep parameter signals the SD’s willingness to transmit Keep-Alive messages, and the parameter value specifies the exchange frequency in seconds.

SIP/2.0 200 OK
Via: SIP/2.0/UDP 172.16.101.38:5070;branch=dd1;rkeep=20
From: "512" <sip:512@172.16.101.38:5070;transport=UDP>;tag=443322
To: "512" <sip:512@172.16.101.38:5070>;tag=b68b3d53a5a90225609112ff6c211bef.16a6
Call-ID: 1-14400@172.16.101.38
CSeq: 1 REGISTER
Contact: <sip:512@172.16.101.38:5070>;expires=3600
Server: OpenSER (1.3.0-notls (i386/linux))
Content-Length: 0