STUN을 UDP를 통해 실행할 때 STUN 메시지가 네트워크에 의해 손실될 수 있습니다. STUN 요청/응답 트랜잭션의 신뢰성은 클라이언트 애플리케이션 자체에 의한 요청 메시지의 재전송을 통해 달성됩니다.
클라이언트는 RTO("Retransmission TimeOut") 간격으로 시작하여 STUN 요청 메시지를 재전송해야 하며, 각 재전송 후 두 배로 늘려야 합니다. RTO는 왕복 시간의 추정치입니다.
기본적으로 sgcWebSockets STUN Client는 RTO 500 ms와 Max Retries 값 7로 이미 구성되어 있습니다.
예를 들어, RTO가 500ms라고 가정하면, 요청은 0ms, 500ms, 1500ms, 3500ms, 7500ms, 15500ms 및 31500ms 시점에 전송됩니다. 클라이언트가 39500ms 후에도 응답을 받지 못하면, 클라이언트는 트랜잭션이 시간 초과된 것으로 간주합니다.
oSTUN := TsgcSTUNClient.Create(nil);
oSTUN.Host := 'stun.sgcwebsockets.com';
oSTUN.Port := 3478;
oSTUN.RetransmissionOptions.Enabled := true;
oSTUN.RetransmissionOptions.RTO := 500;
oSTUN.RetransmissionOptions.MaxRetries := 7;
oSTUN.SendRequest;