9.2. Katmanlı protokoller

Bir çerçeveyi kameradan başka bir şehirdeki bir sunucuya göndermek, aynı anda birkaç sorunu çözmek anlamına gelir. Elektriksel sinyalin ilk telden geçmesi gerekir. O teldeki baytların yerel bir anahtardan yolunu bulması gerekir. Yerel ağın mesajı, kendisiyle internetin geri kalanı arasında ne varsa ona devretmesi gerekir. Yolculuktan sağ çıkan paketlerin sırayla yeniden birleştirilmesi gerekir. Alıcının, bunları kendi programlarından hangisine vereceğini bilmesi gerekir. Ve baytların kendisi, her iki ucun da üzerinde anlaştığı bir anlam taşımalıdır.

Bunların hepsini tek bir kod bloğunda çözmeye çalışmak yönetilemez olurdu. Standart yanıt, işi katmanlara bölmektir. Her katman iyi tanımlanmış tek bir sorunu çözer ve üstündeki katmana basit bir hizmet sunar. Bir program yalnızca hemen altındaki katmanla konuşur; onun altındaki katmanlar görünmezdir.

Aşağıdan yukarıya doğru etiketlenmiş beş kutudan oluşan dikey bir yığın: fiziksel, bağlantı, ağ, taşıma, uygulama. Sağ taraftaki bir ok yığının yukarısını işaret eder ve "oluşturduğumuz" diye etiketlenmiştir. Sol taraftaki bir ok yığının aşağısını işaret eder ve "sağlanan" diye etiketlenmiştir.

Bir ağ yığınının her katmanı tek bir sorunu çözer ve bir sonrakine temiz bir soyutlama sunar.

9.2.1. Beş katman

Aşağıdaki adlar, bu bölümün geri kalanında kullanılan adlardır. Bunlar, ağların etrafında tasarlandığı standart modelden gelir. Katmanlar arasındaki tam sınırlar bazen belirsizdir, ancak her birinin oynadığı rol sabittir.

Fiziksel katman. Bitleri aynı tel ya da telsiz üzerindeki iki cihaz arasında taşır. Voltaj seviyeleri, ışık darbeleri, RF modülasyonu. Kameranın buradaki işi çoğunlukla doğru kabloyu takmak ya da doğru kablosuz ağa katılmaktır; gerisini silikon halleder.

Bağlantı katmanı. Çerçeveleri (küçük bayt parçalarını) aynı yerel bölümü paylaşan iki cihaz arasında taşır. Her çerçevenin tek bir belirli komşuya yönlendirilebilmesi için donanım adresleri ekler. Ethernet ve Wi-Fi, kameranın pratikte karşılaştığı iki bağlantı teknolojisidir.

Ağ katmanı. Paketleri yalnızca aynı yerel bölümde değil, internet üzerindeki herhangi iki cihaz arasında taşır. Bir ana bilgisayarı, hangi kabloda olduğundan bağımsız olarak tanımlayan yazılım düzeyinde bir adres ve bir paketi varış noktasına ulaşana kadar bir yerel bölümden diğerine sıçratan bir yönlendirme mekanizması ekler. Bu, kameranın Python kodunun söyleyecek bir şeyinin olmaya başladığı ilk katmandır.

Taşıma katmanı. Paketlerin üzerinde oturur ve teslimatı yalnızca ana bilgisayarların kendileri arasında değil, iki ana bilgisayardaki programlar arasında sunar. İki türü yaygındır: biri bağlı, sıralı bir bayt akışı sunar (çoğu trafik için iş atı), diğeri ise birbirinden bağımsız ilerleyen kendi kendine yeten mesajlar sunar (düşük ek yük garantilerden daha önemli olduğunda kullanılır). Aynı ana bilgisayardaki birden çok programın paralel olarak görüşme yürütebilmesi için port numaraları ekler.

Uygulama katmanı. Taşımanın üzerindeki her şey: baytlara anlam kazandıran protokoller. Bir web tarayıcısının sayfaları yüklemek için konuştuğu protokoller – ve okuyucunun zaten her gün kullandığı neredeyse her diğer internet hizmetinin arkasındaki protokoller – burada yer alır. Öğretici taşımayı ayrıntılı olarak ele alır; bu katman kendisine ait bir devam bölümü alır.

9.2.2. Katmanların çalışma zamanında nasıl yığıldığı

Kamera ağ üzerinden bayt gönderdiğinde, her katman bir zarfı başka bir zarfın içine yerleştirir gibi kendi başlığını verinin önüne ekler:

  • Önce uygulamanın baytları girer.

  • Taşıma katmanı, bunları hangi programa ait olduklarını (port numarasını) söyleyen küçük bir başlıkla sarar.

  • Ağ katmanı, bunu hangi ana bilgisayara yönlendirildiklerini (yazılım düzeyinde adresi) söyleyen bir başlıkla sarar.

  • Bağlantı katmanı, bunu yerel bölümdeki hangi cihaza bir sonraki adımda teslim edileceğini (donanım adresini) söyleyen bir başlıkla sarar.

  • Fiziksel katman, tüm paketi bir teldeki bitlere dönüştürür.

Diğer uçta, her katman kendi başlığını soyar ve geri kalanını yukarıya teslim eder. Alıcı uygulama, ağ, bağlantı ve fiziksel katmanların hiç var olmadığından habersiz şekilde baytlarını geri alır.

Bu iç içe yerleştirme, öğreticinin neden aşağıdan yukarıya ilerlediğinin nedenidir. Alttaki katmanın ne yaptığını anlamak, üstteki katmanı kaçınılmaz hissettirir. En alttaki iki katman her biri tek bir sayfada ele alınır, çünkü Python’dan yapılandırılacak neredeyse hiçbir şey yoktur. Ağ katmanından yukarıya doğru, Python’un rolü büyüdükçe tempo yavaşlar.