WebRTC Nedir ?

Ali KARABAY
4 min readDec 16, 2020

--

WebRTC, geliştiricilerin gerçek zamanlı ses, video ve veri aktarım yetenekleriyle web uygulamalarını kolayca oluşturmalarına yardımcı olan basit JavaScript API’leri sağlar. WebRTC’deki son gelişmeler, yerel uygulamalara dahil edilmesini de sağlamıştır. API başlığı altında çok şey olduğu için, teknolojiden tam olarak yararlanmak için WebRTC kavramını ve çalışmasını anlamak önemlidir.

Bir WebRTC bağlantısı kurmak için aşağıdaki iki adımı gerçekleştirmemiz gerekir:

  1. Bir akranın yerini bulun.
  2. WebRTC bağlantısını kurması için bir eşi bilgilendirin.

Bunu bir telefon görüşmesi yapmak gibi düşünün, biriyle telefonda konuşmanız gerektiğinde, diğer kişinin telefon numarasını çevirir ve o kişiyle bağlantı kurarsınız. Aynı şey birisi sizi aramak istediğinde de olur. Mobil iletişim durumunda, cep telefonu / telefon numaralarını bir kullanıcının kimliği olarak kullanırız. Bu tanımlama ayrıca telekomünikasyon sistemleri tarafından bir kullanıcının yerini belirlemek için kullanılır.

Ancak, web uygulamaları birbirlerini ‘aranamaz ve arayamaz’. Dünyadaki milyonlarca tarayıcının her birine atanmış benzersiz bir kimlik (bir telefon numarası gibi) yoktur. Ancak, bu uygulamaların bulunduğu sisteme, bir eşin ‘yerini’ bulmak için kullanılabilen benzersiz bir IP adresi atanır.

Ancak bu süreç göründüğü kadar kolay değildir. Çünkü bu sistemlerin çoğu bir Ağ Adres Çevirisi (NAT) cihazının arkasında oturmaktadır . Kullanılabilir genel IP adreslerinde güvenlik ve IPv4 sınırlamaları için NAT aygıtları gereklidir. Bir NAT cihazı, yerel bir ağ içindeki sistemlere özel IP adresleri atar. Bu özel IP adresleri yalnızca yerel ağ içinde geçerlidir ve görünür durumdadır ve ağ dışındaki sistemler ağ içindeki cihazların genel IP’sinin farkında olmadığından dış dünyadan gelen iletişimi kabul etmek için kullanılamaz.

NAT cihazlarının katılımı nedeniyle, bir eş, NAT tarafından atanan özel bir IP adresi tarafından maskelenmiş olduğundan kendi genel IP adresini bilmez. Ve bu nedenle, bağlantıları kabul etmek için genel IP adresini başka bir eşle paylaşamaz. Daha anlaşılır bir ifadeyle, birisinin size telefon etmesini istiyorsanız, telefon numaranızı diğer kişiye vermeniz gerekir. Ancak NAT varlığında, odanızın telefon numarasının dış dünyadan gizlendiği bir otelde kalmak gibi, otele gelen aramalar resepsiyonda ele alınır ve ayrıca istek üzerine odanıza yönlendirilir. Bu tür dolaylı bağlantı biçimi, bir uçtan uca bağlantı teknolojisinde amaçlanmamıştır.

Bunu aşmak için Etkileşimli Bağlantı Kuruluşu (ICE) adı verilen bir protokol kullanıyoruz . ICE’nin işi, iki akranı birbirine bağlamak için mümkün olan en iyi yolu bulmaktır. ICE doğrudan bağlantı gerçekleştirebilir, yani NAT yokluğunda ve ayrıca dolaylı bağlantılar, yani bir NAT varlığında. ICE çerçevesi bize ‘ICE adayları’ sağlıyor. ‘ICE adayları’, kendi genel IP adresimizi, bağlantı noktası numaramızı ve bağlantıyla ilgili diğer bilgileri içeren nesnelerden başka bir şey değildir.

NAT’ın yokluğunda, eşin genel IP adresi hazır olduğu için ICE oldukça basittir. Bununla birlikte, NAT varlığında ICE, NAT için Oturum Geçiş Yardımcı Programları (STUN) ve / veya NAT (TURN) etrafında Röleler Kullanarak olarak adlandırılan varlıklara dayanır.

Bir STUN sunucusu temelde bir eşin kendi genel IP adresini bulmasına izin verir. Kendi genel IP adresini bilmesi gereken eşler, STUN sunucusuna bir istek gönderir. STUN sunucusu, o eşin genel IP adresiyle yanıt verir. Bu genel adres artık sizi bulabilmeleri için diğer meslektaşlarla paylaşılabilir. Ancak, eş karmaşık bir NAT ve / veya bir güvenlik duvarının arkasındaysa, STUN bile istekte bulunan eşi bulamaz ve IP adresini sağlayamaz. Bu gibi durumlarda, ICE bağlantıyı kurmak için TURN’a güvenir. TURN, adından da anlaşılacağı gibi, bir aktarma sunucusudur ve iki eş arasında doğrudan bağlantı mümkün olmadığında veri, ses, video aktarımı için bir aracı görevi görür.

STUN sunucusu, yalnızca genel IP bulma sürecinde yer alır. WebRTC bağlantısı kurulduktan sonra, diğer tüm iletişim WebRTC aracılığıyla gerçekleşir. Bununla birlikte, TURN durumunda, WebRTC bağlantısı kurulduktan sonra bile TURN sunucusu boyunca gereklidir.

Bir TURN sunucusu, amaçlanmayan bir şeydir, ancak STUN sınırlamaları nedeniyle ona güvenmek zorundayız. Bir STUN sunucusu, zamanın yalnızca yaklaşık% 86'sında başarılıdır.

“ICE karmaşıktır çünkü karmaşık bir dünyada yaşıyoruz.”

Artık ICE adaylarını elde ettiğimize göre, bir sonraki adım, bu adayları bağlanmak istediğimiz bir akrana göndermektir. Adaylarla birlikte oturum bilgileri, zaman açıklaması, medya açıklaması gibi Oturum Açıklamaları gönderilir. ICE adayları ve Oturum Açıklaması bir nesnenin içinde toplanır ve Oturum Açıklama Protokolü (SDP) kullanılarak iletilir . Bazı durumlarda, ICE adayları Oturum Açıklaması ile aynı nesnede toplanmaz ve ayrı olarak gönderilir, buna Trickle ICE denir (bu tamamen yeni bir kavramdır, şimdilik derinlemesine girmeyelim!).

Bilgileri diğer akrana ‘göndermemiz’ gerektiğini yazdım. Ancak, yalnızca gönderenin IP adresini bildiğimizde ve alıcı eşin IP adresini bilmediğimizde adaylar ve oturum açıklaması nasıl aktarılır? WebRTC bağlantısı henüz kurulmadığına göre, bu bilgiler hangi ortam aracılığıyla aktarılıyor?

Tüm bu soruların cevabı, Sinyal Mekanizması adı verilen bir kavramda yatıyor . Bir WebRTC bağlantısı kurulmadan önce, yukarıdaki bilgileri eşler arasında aktarmak ve bir WebRTC bağlantısı için birbirlerini nasıl bulacaklarını ve birbirlerine nasıl bağlanacaklarını bildirmek için bir ortama ihtiyacımız var. Sinyalleme mekanizması burada devreye giriyor. Adından da anlaşılacağı gibi bir sinyalleme mekanizması, bağlanmayı amaçlayan iki eş arasında bağlantı sinyallerini (ICE adayları, Oturum açıklaması, vb.) Değiştirir.

WebRTC, bu tür bir sinyalleme mekanizmasının uygulanması için herhangi bir standart tanımlamaz ve kendi tercihine göre bir mekanizma oluşturması için bunu geliştiriciye bırakır. Bilgiyi değiş tokuş etmek için sinyalleşme mekanizması, ya bilgiyi ilgili eşlere kopyalayıp yapıştırarak ya da WebSockets, Socket.io, Sunucu Yan Olayları, vb. Gibi bir iletişim kanalı kullanarak gerçekleştirilebilir. Kısacası, bir sinyalleşme mekanizması sadece bir moddur. eşler arasında bağlantıyla ilgili bilgilerin değiş tokuşu oluşur ve böylece eşler birbirlerini tanımlayabilir ve WebRTC kullanarak daha fazla iletişim kurmaya başlayabilir.

Originally published at https://www.karabayyazilim.com.

--

--