WebRTC ICE Restart Purpose and Mechanism
In WebRTC-based applications, maintaining a stable media connection is critical, even when network conditions change abruptly. This article explains the explicit purpose and technical mechanism of triggering an Interactive Connectivity Establishment (ICE) restart, detailing how WebRTC recovers dropped connections by renegotiating network paths between peers without terminating the active session.
The Purpose of an ICE Restart
The primary purpose of an ICE restart is to restore a broken or degraded WebRTC connection when the existing network path becomes unviable. Because WebRTC connections are peer-to-peer, they rely on specific network paths (candidate pairs) established at the beginning of the session. If those paths fail, the session will stall or disconnect.
An ICE restart is explicitly triggered under the following scenarios:
* Network Interface Switching: When a user transitions
from a Wi-Fi network to a cellular data network (or vice versa), their
local IP address changes, rendering the original ICE candidates
obsolete. * Temporary Network Blackouts: If a user
passes through a tunnel or experiences a brief drop in connectivity, the
existing ICE connection state may transition to failed or
disconnected. * NAT or Firewall Rebinding:
If a local router changes the mapping of public ports, the UDP binding
used for the media stream might close, requiring a new path to be
negotiated.
Rather than forcing the user to tear down the entire peer connection and restart the call from scratch—which results in a poor user experience—an ICE restart seamlessly updates the transport layer while keeping the existing media tracks and application state active.
The Mechanism of an ICE Restart
The ICE restart mechanism relies on a fresh offer/answer SDP (Session Description Protocol) exchange that generates new ICE credentials, prompting both peers to gather and test new network candidates.
The step-by-step technical workflow of an ICE restart operates as follows:
1. Detection of Connection Failure
The application or the WebRTC engine detects a connection issue. This
is usually observed when the
RTCPeerConnection.iceConnectionState changes to
disconnected or failed, or when the
application detects a change in the local network interfaces via
standard web APIs.
2. Initiating the Restart
The initiating peer calls the WebRTC API to flag that the next
negotiation must perform an ICE restart. * In modern browsers, this is
triggered by calling the RTCPeerConnection.restartIce()
method. * Alternatively, in older implementations, this is done by
passing { iceRestart: true } as an option to the
createOffer() method.
3. Generating a New SDP Offer
The initiator creates a new SDP offer. The defining characteristic of
an ICE restart in the SDP is the generation of brand-new ICE
credentials: * ice-ufrag (Username
Fragment): A new, unique string is generated. *
ice-pwd (Password): A new, unique password
is generated.
When the remote peer receives this SDP offer with different
ice-ufrag and ice-pwd values than the previous
exchange, it recognizes that an ICE restart is occurring. It immediately
discards its old ICE state for this session.
4. SDP Answer and Candidate Gathering
The remote peer processes the offer and responds with its own SDP answer, which also contains newly generated ICE credentials.
Simultaneously, both peers begin the ICE gathering process again. They query STUN and TURN servers to discover their current local, reflexive, and relay candidates.
5. Candidate Exchange and Connectivity Checks
Peers exchange these new candidates via signaling (using
addIceCandidate()). The ICE agents on both sides then
perform connectivity checks (STUN binding requests) using the new
username fragments and passwords.
6. Nomination and Recovery
Once a valid, high-priority candidate pair is validated, the WebRTC
engine nominates this new pair for media transmission. The media packets
seamlessly transition to the new path, and the
iceConnectionState transitions back to
connected or completed, successfully resolving
the connection drop.