ICE를 실행하는 단말들은 통신이 가능한 모든 주소를 식별한다. 처음에 클라이언트는 STUN 메시지를 TURN 서버로 전송하고 수신하는 과정에서 릴레이 주소를 확인한다. 릴레이 주소는 TURN 서버가 패킷 릴레이를 위해 할당하는 주소다.
Candidate는 IP 주소와 포트 넘버의 조합으로 표시된 주소를 의미한다. TURN 서버는 Relayed Candidate와 Server Reflexive Candidate(단말의 공인 IP 주소)를 응답하고, STUN 서버는 Server Reflexive Candidate(단말의 공인 IP 주소)를 응답한다. 결국, 사설망에 있는 단말은 3개의 통신 가능한 주소를 획득한다.
Local Address: 자신의 사설 IP 주소와 포트 넘버
Server Reflexvie Address: 자신의 공인 IP 주소와 포트 넘버
Relayed Address: TURN 서버의 IP 주소와 포트 넘버
만일 단말이 인터넷 망에 있다면 Server Reflexive Address와 Local Address는 동일하다.
두 단말이 각각 3개의 주소를 가지고 있고 서로가 상대방의 주소 수집(Candidate Gathering)으로 알 수 있다. 그러면, Local Address와 Local Address, Server Reflexive Address와 Server Reflexive Address, 그리고 Relayed Address와 Relayed Address 간의 연결이 가능하다. 또한, 한 단말의 Local Address와 다른 단말의 Server Reflexive Address와도 연결이 가능하다.
ICE Candidate Gathering은 SDP Offer에 3개의 Candidate와 SDP Answer에 3개의 Candidate를 우선순위를 정하여 교환하는 것이다.
SIP 메시지에 전달되는 SDP 메시지에 따르면, RTP 패킷이 사용하는 목적지 주소인 'c=' 속성은 기존의 SDP와 동일하다. 'a=candidate' 속성에 우선순위를 정하여 IP 주소와 UDP 포트 넘버를 명시한다. Candidate 1은 Local Address인 단말의 사설 IP 주소이고, Candidate 2는 Server-reflexive Address인 단말의 공인 IP 주소를 전달한다. 만일 단말이 두 개 이상의 Local IP 주소를 사용한다면 모두 명기한다.
참조: 30장. ICE의 이해