Topik wawancara representatif

Wawancara Umum: Bagaimana ICE, STUN, dan TURN Membangun Koneksi WebRTC?

UmumSulit
Tim Redaksi Offer.ccDipublikasikan Diperbarui

Pertanyaan

Dua peramban harus membangun koneksi WebRTC melintasi jaringan yang tidak diketahui. Jelaskan bagaimana signaling, ICE, STUN, dan TURN bekerja bersama, bagaimana pasangan kandidat dipilih, dan bagaimana Anda mendiagnosis kegagalan ICE.

Konteks dan cakupan

Dua peramban memerlukan koneksi audio, video, atau data. Keduanya mungkin berada di LAN yang sama, di belakang NAT yang berbeda, atau di jaringan yang memblokir UDP. Jelaskan alur pembentukan koneksi dan alur kegagalannya. Jawaban harus membedakan saluran signaling yang bertukar deskripsi dari ICE, yang menemukan dan memeriksa jalur jaringan yang memungkinkan.

Panduan wawancara WebRTC publik Credmark secara eksplisit meminta kandidat untuk menjelaskan ICE serta peran STUN dan TURN. RFC 8445 mendefinisikan kandidat, daftar periksa (checklist), dan prosedur pemeriksaan konektivitas ICE; WebRTC.org mendokumentasikan bagaimana peer connection menggunakan server STUN atau TURN untuk mengumpulkan kandidat.

Apa yang dievaluasi oleh pewawancara

  • Apakah Anda memisahkan signaling, pengumpulan kandidat, pemeriksaan konektivitas, dan enkripsi media.
  • Apakah Anda menjelaskan kandidat host, server-reflexive, dan relay tanpa menjanjikan bahwa STUN "membuka port".
  • Apakah Anda dapat menyeimbangkan latensi jalur langsung terhadap bandwidth, privasi, dan biaya operasional TURN.

Sinyal utamanya adalah garis waktu kausal: deskripsi dan kandidat bergerak melalui signaling, pemeriksaan berjalan pada pasangan kandidat, dan hanya setelah itu jalur yang dipilih membawa media atau data terenkripsi.

Klarifikasi sebelum menjawab

  1. Apakah signaling sudah tersedia? ICE tidak mendefinisikan transport signaling WebSocket, HTTP, atau perpesanan aplikasi Anda.
  2. Apakah peer berkomunikasi browser-ke-browser atau di belakang SFU? SFU mengubah topologi media tetapi tetap membutuhkan konektivitas ke setiap peer.
  3. Apakah UDP dan TCP 443 diizinkan? Kebijakan firewall mengubah apakah kandidat host, reflexive, atau relay dapat berhasil.
  4. Berapa target biayanya? Relay TURN membawa lalu lintas, sehingga bitrate video dan persentase relay menentukan pengeluaran.

Jawaban 30 detik

"Signaling bertukar offer dan answer SDP ditambah kandidat ICE yang di-trickle; proses ini spesifik untuk aplikasi. Setiap peer mengumpulkan kandidat host, meminta alamat server-reflexive ke STUN, dan memperoleh kandidat relay TURN ketika jalur langsung mungkin gagal. ICE membentuk pasangan kandidat, mengirimkan pemeriksaan konektivitas terautentikasi, dan menominasikan pasangan yang berfungsi. DTLS kemudian mengautentikasi dan menurunkan kunci untuk media atau data. STUN membantu menemukan alamat yang dipetakan; TURN me-relay byte. NAT simetris, UDP yang diblokir, atau firewall yang restriktif dapat memaksa penggunaan TURN, jadi saya akan mengukur keberhasilan pasangan kandidat, waktu hingga terhubung, rasio relay, dan kegagalan berdasarkan jenis jaringan."

Jawaban mendalam langkah demi langkah

Langkah 1: Bertukar deskripsi melalui signaling.

Penelepon membuat offer yang berisi bagian media dan kredensial ICE, lalu mengirimkannya melalui layanan signaling aplikasi. Penerima mengembalikan answer. Signaling juga mengangkut kandidat yang di-trickle dan penanda end-of-candidates. Server signaling tidak membawa media hanya karena ia meneruskan SDP.

Langkah 2: Mengumpulkan jenis kandidat.

Kandidat host mewakili antarmuka lokal. Permintaan binding STUN memungkinkan peer mengetahui kandidat server-reflexive yang berisi alamat dan port publik terpetakan yang diamati oleh server STUN tersebut. Alokasi TURN membuat kandidat relay; server TURN menjadi titik akhir lalu lintas. Prioritas kandidat dan foundation membantu ICE membandingkan jalur, tetapi tidak menjamin bahwa pasangan dengan prioritas lebih tinggi akan berhasil lolos.

Langkah 3: Membentuk dan memeriksa pasangan kandidat.

Masing-masing pihak menggabungkan kandidat lokal dan jarak jauhnya. ICE menyusun pasangan ke dalam daftar periksa, mengirimkan pemeriksaan konektivitas STUN menggunakan kredensial ICE, dan mencatat responsnya. Pemeriksaan yang berhasil membuktikan bahwa lalu lintas dapat melintasi pasangan tersebut pada saat itu; ini tidak membuktikan ketersediaan di masa mendatang. Controlling agent menominasikan pasangan yang valid, dan kedua peer menyepakatinya.

Langkah 4: Mengamankan jalur yang dipilih.

Setelah konektivitas ICE terbentuk, DTLS mengautentikasi peer dan menurunkan kunci. SRTP melindungi audio dan video; SCTP di atas DTLS membawa data channel. ICE memilih keterjangkauan; ia tidak mengenkripsi muatan aplikasi. API peramban mengekspos status koneksi dan statistik kandidat yang dipilih, yang sangat penting untuk diagnosis.

Langkah 5: Menjelaskan hasil NAT umum.

Kandidat host pada LAN yang sama sering kali berfungsi. NAT full-cone atau yang kompatibel dapat mengizinkan kandidat server-reflexive. Pemetaan NAT simetris, pemfilteran yang bergantung pada endpoint, atau UDP yang diblokir dapat membuat kandidat langsung gagal. TURN melalui UDP, TCP, atau TLS pada port 443 menyediakan fallback relay, dengan latensi lebih tinggi, biaya bandwidth, dan bidang kepercayaan (trust surface) yang lebih besar.

Langkah 6: Mendiagnosis kegagalan dengan bukti.

Catat status signaling, status pengumpulan ICE, status koneksi ICE, jenis kandidat, pemeriksaan pasangan, pasangan kandidat yang dipilih, RTT, kesegaran izin (consent freshness), dan rumpun jaringan. Gunakan matriks terkontrol dari jaringan LAN, seluler, NAT simetris, VPN, dan jaringan dengan UDP terblokir. Jika pengumpulan berhasil tetapi pemeriksaan gagal, periksa kebijakan firewall dan NAT; jika hanya relay yang berhasil, tingkatkan kebijakan jalur langsung hanya setelah mengukur biaya relay dan kualitas panggilan.

Contoh jawaban berkualitas tinggi

"Saya akan menarik empat batasan. Layanan signaling aplikasi bertukar SDP, kredensial ICE, kandidat, dan end-of-candidates; ini bukan jalur media. Kandidat host mendeskripsikan antarmuka lokal, STUN menghasilkan pemetaan server-reflexive, dan TURN mengalokasikan relay. ICE menggabungkan kandidat lokal dan jarak jauh, memeriksa pasangan dengan pesan STUN terautentikasi, dan menominasikan sebuah pasangan. Setelah itu, DTLS menurunkan kunci, SRTP membawa audio/video, dan SCTP membawa data channel.

Jalur host atau reflexive langsung memiliki biaya lebih rendah dan sering kali latensi lebih rendah, tetapi NAT simetris dan UDP yang diblokir dapat memerlukan TURN. Saya akan menginstrumentasi pengumpulan kandidat, kesalahan pemeriksaan pasangan, waktu hingga terhubung, jenis kandidat yang dipilih, rasio relay, RTT, dan hilangnya izin berdasarkan kelas jaringan. Hal ini membedakan ketiadaan signaling dari kegagalan penelusuran NAT dan dari panggilan terhubung dengan jalur media yang buruk."

Kesalahan umum

  • Menyebut STUN sebagai relay → STUN melaporkan alamat yang dipetakan tetapi tidak membawa sesi → khususkan semantik relay untuk TURN.
  • Mengatakan signaling membangun media → signaling hanya mengangkut deskripsi dan kandidat → telusuri pemeriksaan ICE berikutnya dan pasangan yang dipilih.
  • Mengasumsikan respons STUN yang berhasil membuktikan konektivitas → pasangan peer masih bisa gagal karena pemfilteran → jalankan pemeriksaan ICE di antara kedua kandidat.
  • Menggunakan TURN untuk setiap panggilan tanpa mengukur → bandwidth dan latensi relay dapat mendominasi biaya dan kualitas → utamakan jalur langsung dan pantau rasio relay.
  • Memperlakukan ICE sebagai enkripsi → ICE memeriksa keterjangkauan, bukan kerahasiaan → jelaskan DTLS dan SRTP/SCTP secara terpisah.

Pertanyaan lanjutan dan tanggapan

Pertanyaan lanjutan 1: Mengapa STUN bisa berhasil sementara koneksi peer tetap gagal?

STUN hanya menunjukkan bahwa server mengamati pemetaan dari satu sisi. Peer jarak jauh mungkin tidak dapat mengirim ke pemetaan tersebut karena NAT menggunakan pemetaan atau pemfilteran yang bergantung pada endpoint, atau karena firewall memblokir protokol tersebut. ICE harus menguji pasangan secara lengkap; permintaan STUN yang berhasil bukan jaminan jalur.

Pertanyaan lanjutan 2: Kapan sistem harus memaksakan TURN?

Paksakan atau utamakan TURN ketika kebijakan melarang alamat peer, pemeriksaan langsung berulang kali gagal, atau kelas jaringan terkontrol diketahui memblokir UDP. Gunakan kredensial berumur pendek, relay regional, batas kecepatan (rate limits), dan alarm kapasitas. Memaksakan TURN secara global menyembunyikan regresi jalur langsung dan meningkatkan biaya bandwidth, jadi jadikan ini kebijakan eksplisit dengan pengukuran.

Pertanyaan lanjutan 3: Panggilan terhubung tetapi video buruk. Apa yang Anda periksa?

Baca pasangan kandidat yang dipilih dan apakah itu relay, RTT, kehilangan paket, jitter, kesegaran izin, dan adaptasi bitrate. Bandingkan panggilan yang sama pada jalur langsung dan relay, periksa antrean CPU dan encoder, serta periksa apakah wilayah SFU atau TURN jauh. Keberhasilan ICE membuktikan keterjangkauan; ini tidak membuktikan kapasitas yang memadai atau kualitas media.

Sumber publik

Pertanyaan terkait