WebRTC (Web Real-Time Communication) adalah teknologi yang memungkinkan komunikasi peer-to-peer langsung antar browser. Namun, salah satu tantangan terbesar dalam WebRTC adalah menghubungkan dua perangkat yang berada di balik NAT (Network Address Translation) atau firewall. Di sinilah peran STUN dan TURN server menjadi sangat penting.
STUN (Session Traversal Utilities for NAT) adalah protokol yang membantu perangkat menemukan alamat IP publik dan port yang digunakan untuk komunikasi. Ketika dua perangkat ingin terhubung, mereka mengirim permintaan ke STUN server, dan server tersebut akan memberi tahu alamat publik mereka. Informasi ini kemudian dibagikan ke perangkat lain untuk memulai koneksi P2P.
STUN server biasanya gratis dan ringan. Contohnya: stun.l.google.com:19302 (milik Google).
TURN (Traversal Using Relays around NAT) digunakan ketika koneksi langsung (via STUN) tidak memungkinkan — misalnya karena NAT simetris atau firewall yang sangat ketat. Dalam skenario ini, data tidak dikirim langsung antar perangkat, melainkan melalui server relay (TURN server) yang meneruskan data dari satu perangkat ke perangkat lain.
TURN server membutuhkan bandwidth dan biaya operasional yang lebih besar, tetapi sangat penting untuk koneksi yang stabil di jaringan yang kompleks.
ICE adalah framework yang digunakan WebRTC untuk menemukan jalur komunikasi terbaik. Prosesnya:
ICE akan memprioritaskan koneksi langsung (P2P) karena lebih cepat dan murah. TURN hanya digunakan sebagai opsi terakhir.
const configuration = {
iceServers: [
{ urls: 'stun:stun.l.google.com:19302' },
{ urls: 'stun:stun1.l.google.com:19302' },
{
urls: 'turn:turn.anydomain.com:3478',
username: 'user',
credential: 'password'
}
]
};
const peerConnection = new RTCPeerConnection(configuration);
STUN dan TURN adalah komponen penting dalam WebRTC. STUN memungkinkan koneksi P2P langsung di sebagian besar kasus, sedangkan TURN menjadi "jalan darurat" untuk koneksi di jaringan yang rumit. Dengan memahami keduanya, lo bisa membangun aplikasi WebRTC yang lebih andal dan stabil.