Protokol katmanlarından bahsettiğime göre artık ağların nasıl çalıştığına
dair gerçekleri öğrenmenin ve SOCK_DGRAM paketlerinin
nasıl oluşturulduğuna dair örnekler vermenin zamanı geldi. Pratik olarak
bu bölümü atlayabilirsiniz, ancak burayı okursanız iyi bir temel bilgiye
sahip olursunuz.
Hey çocuklar, Veri Paketleme konusunu öğrenme zamanı! Bu çok çok önemli.
O kadar önemli o kadar önemli ki burada yani Chico Eyaletinde ağ
teknolojilerine dair bir kurs alırsanız bu konu ile mutlaka
karşılaşırsınız ;-). Temelde konu şu: bir paket doğar,
sonra bu paket önce muhatap olduğu ilk protokol tarafından (mesela TFTP
protokolü) ile bir başlık (ve ender olarak da olsa bir dipnot ile)
kullanılarak paketlenir (kapsüle konur), ardından tüm bu yığın
(TFTP başlığı da dahil) bir sonraki protokolün (örn. UDP) kurallarına
göre paketlenir, sonra IP ve en sonundaki en alt katman olan donanım
katmanındaki fiziksel protokol ile (örn. Ethernet) paketlenir.
Başka bir bilgisayar bu paketlenmiş paketi aldığında önce donanım Ethernet
başlığını çıkarır, ardından işletim sistemi çekirdeği IP ve UDP başlıklarını
alır ve ardından da TFTP programı TFTP başlığını alır ve içindeki veriye
erişir.
Artık şu kötü üne sahip Katmanlı Ağ Modeli (Layered Network Model)
kavramından bahsedebilirim. Bu ağ modeli diğer modellere pek çok
üstünlüğü bulunan bir ağ işlevselliğinden bahseder. Mesela yazdığınız
soket programının tek bir harfini bile değiştirmenize gerek kalmadan
bu programı farklı fiziksel donanımlar üzerinde çalıştırabilirsiniz
(seri, thin Ethernet, AUI, her ne ise) çünkü düşük seviyedeki programlar
sizin yerinize ayrıntıları hallederler. Ağ donanımının fiziksel detayları
ve topolojisi soket programcısını ilgilendirmez.
Daha fazla laf kalabalığı yapmadan bu müthiş modelin katmanlarını liste
olarak vereyim, ağ ile ilgili sınava girerseniz işe yarayabilir:
- Uygulama
- Sunum
- Oturum
- Taşıma
- Ağ
- Veri Bağlantısı
- Fiziksel
Fiziksel katman donanımla ilgilidir (seri, Ethernet, vs.). Uygulama
katmanı fiziksel katmandan alabildiğine uzaktır -- kullanıcılar ağ ile bu
katmanda temas kurar.
Açıkçası bu model o kadar geneldir ki eğer isterseniz bu modeli arabanıza
bile uygulayabilirsiniz. Unix ile daha uyumlu bir katmanlı model şöyle
yazılabilir:
Uygulama Katmanı (telnet, ftp, etc.)
Konaktan Konağa Taşıma Katmanı (TCP, UDP)
Internet Katmanı (IP ve yönlendirme)
Ağa Erişim Katmanı (Ethernet, ATM ya da her ne ise)
Bu aşamada söz konusu katmanların veri paketlenmesinin hangi aşamalarına
karşılık geldiğini görebiliyor olmalısınız.
Tek bir paketi oluşturmak için ne kadar çok iş yapılması gerektiğini
gördünüz mü! Aman allahım! Üstelik paket başlık bilgilerini de
cat komutunu kullanarak elle girmeniz gerekiyor!
Şaka şaka! Tek yapmanız gereken eğer veri akış soketi kullanıyorsanız
send() ile veriyi göndermek. Eğer veri paketi soketi
kullanıyorsanız bu sefer de yapılması gereken paketi uygun şekilde
paketleyip sendto() işlevini kullanarak bunu yollamak.
Çekirdek sizin için Taşıma katmanını ve Internet katmanını kurar,
donanımınız da Ağa Erişim Katmanını halleder. Ah, modern teknoloji.
Ağ teorisi ile ilgili kısa dersimiz burada sona eriyor. Ah evet tabii ki
yönlendirmeyle ilgili söylemem gereken şeyler vardı: unutun! Bundan
bahsetmeyeceğim. Yönlendirici (router) IP başlığını çeker yönlendirme
tablosuna bakar, seçim yapar, vs. vs. vs. Eğer gerçekten meraklı iseniz
IP RFC belgesine bakın. Bunu
öğrenmezsiniz ölmezsiniz.