7.3. Protokoller

Çeşitli programlama dilleri karmaşık sözdizimine(sentaks) sahip olma ve çok harfli ayrılmışkelimeler kullanma (okunabilirlik için) eğilimindeyken, veri haberleşme dilleri daha kısa ve öz olmaya çalışırlar. Çok uzun baytlar yerine bireysel bitler kullanırlar. Bunun için ikna edici bir neden vardır: Veri bilgisayar içinde ışık hızına yakın hızda iletilirken bu hız iki bilgisayar arasında oldukça yavaştır. Veri haberleşmesinde kullanılan diller sade ve öz olduğundan onlara dil yerine protokol diyoruz. Veri bir bilgisayardan diğerine iletilirken her zaman birden fazla protokol kullanır. Bu protokoller katmanlara ayrılmıştır. Veri soğanın içine benzetilebilir: Veriye ulaşmak için birkaç kabuğu soymanız gerekir. Bu en iyi şekilde aşağıdaki resimle gösterilir:

Figure 7-1. ETHERNET TCP / IP YAPISI

+----------------+
|    Ethernet    |
|+--------------+|
||      IP      ||
||+------------+||
|||     TCP    |||
|||+----------+|||
||||   HTTP   ||||
||||+--------+||||
|||||   PNG  |||||
|||||+------+|||||
|||||| Data ||||||
|||||+------+|||||
||||+--------+||||
|||+----------+|||
||+------------+||
|+--------------+|
+----------------+

Bu örnekte Ethernet üzerinden bağlandığımız web sayfasından bir fotoğraf almaya çalışıyoruz.

Fotoğraf RGB değerleri sırasınıiçeren işlenmemişveriden oluşmaktadır ve yazılımımız onu işleyip fotoğrafa çevirir ve monitöre aktarır.

Yazılımımız işlenmemişverinin nasıl organize edildiğini bilmez. Sadece şunlarıbilir: RGB değerleri sırasımı, gri ton pikselleri mi, veya CMYK ile kodlanmışrenkler mi? Veri 8 bitlik quantumlardan mı oluşuyor, veya 16 bitliklerden mi, ya da 4 bit mi? Fotoğraf kaç adet sutun ve satırdan oluşmaktadır? Keskin pikseller transparan mı olmalıdır?

Yazılımımıza işlenmemişveriyi nasıl alacağınıbildirmek için veri PNG dosyasıolarak kodlanmıştır. GIF, veya JPEG olabilir di, ama PNG. Ve PNG bir protokoldür. Bu noktada, bazılarınızın şu şekilde bağırdığını duyabiliyorum: "Hayır değil! O bir dosya formatı" Evet, tabii ki dosya formatı. Ama veri haberleşmesi perspektifinden bakarsak dosya formatı bir protokoldür: dosya yapısıdildir, burda sade ve öz olan prosesimizle haberleşen verinin nasıl organize edildiğidir. Dolayısıyla o bir protokoldür. Eğer aldığımız bütün veri PNG dosyasıolsaydıyazılımımız ciddi bir problemle karşıkarşıya olacaktı: Dosyanın bir fotoğraf olduğu nasıl bilinecekti, tam tersine bir yazıdosyasıolabilirdi, ya da belki ses dosyası, veya başka bir dosya tipi? İkinci olarak, PNG formatı olduğunu nerden bilinecekti? Tam tersine GIF veya JPEG veya başka fotoğraf formatıolabilirdi. Bu bilgiyi elde etmek için başka bir protokol kullanıyoruz: HTTP. Bu protokol bize tam olarak verinin fotoğraf olduğunu ve PNG protokolünü kullandığınıanlatabilir. Ayrıca başka şeyleri de anlatabilir, ama izin verin protokol katmanlarıüzerine devam edelim. Dolayısıyla, şimdi elimizde PNG protokolünde kapsüllenmiş bazıveriler var, bunlarda HTTP protokolünde kapsüllenmişler.

Sunucudan bu verileri nasıl alabiliriz? Şu şekilde;Ethernet üzerinden TCP/IP kullanarak. Gerçekten, üç tane daha protokol. İçerden dışarıya devam etmek yerine şimdi Ethernet hakkında konuşacağım, çünkü geri kalanıaçıklayabilmek için burdan başlamak en iyisi. Ethernet yerel ağda(LAN) bilgisayarlarıbirbirine bağlayan ilgi çekici bir sistemdir. Her bir bilgisayarda 48 bitlik eşsiz adrese sahip olan ağ arabirim kartı(NIC) vardır. Dünyada hiçbir ethernet kartıaynıadrese sahip değildir. Bu NIC lerin hepsi birbiriyle bağlantılıdır. Ne zaman bir bilgisayar aynıEthernet ağında başka bilgisayarla haberleşmek istese ağ üzerinden bir mesaj gönderir. Her NIC bu mesajıgörür. Ama Ethernet protokolünün özelliğinden dolayı, veri varışNIC inin adresini içerir (diğer şeyler içinde). Dolayısıyla bütün ağ arabirim kartlarından sadece biri bu mesajıdikkate alacaktır, geri kalan yoksayacaktır. Ama bütün bilgisayarlar aynıağda değiller. Çünkü Ethernet'imizden aldığımız veri kendi yerel ağımızdan geldiği anlamına gelmez. Veri ağımıza internet üzerinden bağlanmışbaşka ağdan (belki Ethernet tabanlıolmayan bir ağ) gelmişolabilir. İnternette bütün veriler Internet Protokolü(IP) üzerinden iletilir. Temel rolü herhangi bir verinin nereden geldiğini ve nereye gitmesi gerektiğini belirtmesidir. Veriyi alacağımızıgaranti etmez, sadece veriyi aldığımızda nereden geldiğini bilmemizi sağlar. Veriyi almamıza rağmen, IP gönderilen verinin çeşitli parçalarınıaynı sırada alacağımızıgaranti etmez. Dolayısıyla, fotoğrafımızın merkezini sol üst köşesinden önce ve sağ alt köşesinden sonra alabiliriz örneğin. Gönderene kayıp veriyi tekrar göndermesi için soran ve verileri doğru sıraya koyan TCP (Nakil Kontrol Protokolü - Transmission Control Protocol) dir. Her şeyi hesaba katarsak, bir fotoğrafıbir bilgisayardan diğerine iletmek beşprotokol üzerinden olur. Biz PNG protokolünde kapsüllenmişveriyi aldık. O da HTTP ile kapsüllü, o da TCP ile, o da IP ile ve en son bütün veri Ethernet protokolü ile kapsüllüdür.

Bunun dışında veri yoldayken başka protokollerde işgörmüştür. Örneğin, eğer yerel ağımız internete dial-up bağlantısıyla bağlıysa, modem üzerinden PPP protokolünü kullanmışızdır. Bir geliştirici olarak şimdiye kadar şunu sormalısınız, "Bunların hepsini aklımda tutmam nasıl beklenir?" Senin talihine, hepsini aklında tutman gerekmiyor. Bazılarını aklında tutman gerekiyor, ama hepsi değil. Özgün olarak, fiziksel bağlantı(bizim durumumuzda Ethernet ve muhtemelen PPP) hakkında endişelenmemelisiniz. Bilmeniz gereken Internet Protokolü ve Transfer Kontrol Protokolüdür(TCP). Diğer bir deyişle, diğer bilgisayardan veri almak için bir şey yapmanıza gerek yok. Ancak veri için başvurmalısınız, ama bu da dosya açmak kadar basittir. Bir kere veriyi aldınız mı, veri ile ne yapacağınızıdüşünmek size kalmış. Bizim durumumuzda, HTTP protokolünü ve PNG dosya yapısınız anlamanız gerekir. Benzerlik kuracak olursak, bütün internet protokolleri bir gri alan olsun: Hepsini değil sadece belli bir kısmınıinceleyeceğiz yoksa tamamınıanlamak hiç kolay olmayacaktır. Soket arabirimi bizim için bu gri alanı ilgilendirir:

Figure 7-2. NETWORK DEVELOPER AREA

Biz herhangi bir protokolün sadece veriyi nasıl yorumladığını anlamalıyız, başka prosesten nasıl aldığıveya başka prosese nasıl yolladığıönemli değildir.