SIP Description/Call Flow
SIP, session initiation protocol, is the protocol used to facilitate the transfer of Non-Audio VoIP call data. It is used to initiate and maintain a call from start to end.
Common SIP Methods:
- ACK - Used as an acknowledgement of receipt and/or acceptance of a SIP message
- BYE - Used to end a session in progress (i.e. after a 200 OK)
- CANCEL - Used to cancel a session before it begins (i.e. before a 200 OK)
- INVITE - Used to initiate a new session
- RE-INVITE - This is a second invite sent with the same Call-ID. This is done to change aspects of the dialog.
Uncommon SIP Methods:
- OPTIONS - Used to ask a SIP server what methods are supported
- MESSAGE - Single message transmission used in instant messaging (RFC3428)
- UPDATE - Essentially like a re-invite, but it can be sent at any time during the dialog (i.e. both before and after the 200 OK or any other non-provisional response code)
Typical Call Flow (Successful, no Re-invite)
I - Initiator
R - Recipient
I -------- | INVITE------- | > R | |
I <------ | 100 Trying------ | R | |
I <--- | 180/183 Ringing----- | R | |
I <------- | 200 OK -------- | R | |
I ----------- | ACK-------- | > R | |
I ----------- | BYE-------- | > R (Direction Interchangeable) | |
I <-------- | 200 OK--------- | R (Direction is opposite the path of the BYE) |
Notes
-A dialog may have a 180 Ringing, which is a standard ringing response; a 183 ringing, which is typically early media (i.e. ringing in the actual RTP stream or in some cases, an IVR or operator message); or go directly to a 200 OK, which is typically in cases of IVRs.
-The BYE message is initiated by the end that hangs up the call first. If this is done before a 200 OK is sent, this will be a CANCEL instead of a BYE message.
-Error and Redirect Responses (3xx, 4xx, 5xx, 6xx) will typically come before the 180/183 ringing portion of a call.
-Re-invites can be initiated by either side at any time between the initial 200 OK and the BYE closing the dialog.
-Dialogs with re-invites that are rejected will continue until one of the 2 sides end the call. A error code (4xx, 5xx, 6xx level responses) should not end the session outright.