SERVER------+
|
|
+-----+-------+
| Application |-->Bir kullanıcı data transferini başlattığında
| Layer | bu katman isteği Transport Layer'e iletir
+-----+-------+
|
|
+-----+-------+
| Transport |-->Bu katman dataya bir header ekler ve
| Layer | Network Layer'e gönderir
+-----+-------+
|
|
+-----+-------+
| Network |-->Bu katmanda routing amaçlı kullanılmak üzere
| Layer | dataya source ve destination IP'leri eklenir
+-----+-------+
|
|
+-----+-------+
| DataLink |-->Yukarıdaki katmanlar ve Physical Layer arasındaki
| Layer | data akışı üzerinde hata kontrolünü yapar
+-----+-------+
|
|
+-----+-------+
| Physical |-->Bu katman kullanılan ortam(modem veya ethernet)
| Layer | üzerinden datayı gönderir/kabul eder.
+-----+-------+
Sonuçta bir göndermek istediğiniz data bu katmanlardan geçer ulaştığı makinede de bunun tam tersi işleme tabi tutulur. Bu işlemler esnasında yoğun bir hata kontrolü yapılmaktadır. Her katman altındaki veya üstündeki katmandan data alıp ona data gönderebilir. Her katman bir çok protokol ile ilişkilidir.
3.4. PROTOKOLLER
================Yukarıda TCP/IP üzerinden protokol stack'ini kullanarak bir datanın nasıl transfer edildiğini gördünüz. Şimdi bu katmanlarda kullanılan bazı belli başlı protokolleri yakından inceleyelim. İlk olarak yukarıda temel bölümleme ile ayırdığımız network-level protokollere bir göz atalım.
3.4.1. ARP (ADDRESS RESOLUTION PROTOCOL)
========================================Bir network üzerindeki iki bilgisayar haberleşirken datalar packetlere ayrılarak gönderilirler. Bu packetlerin içinde datanın geldiği ve gideceği bilgisayarların IP adresleri saklanmaktadır. Ancak iletişimin kurulabilmesi için bu 32 bitlik IP adreslerinin 48 bitlik hardware adreslerine çevirilmesi gerekir. İşte bu çevrim işini gerçekleştiren protokole ARP denmektedir. ARP bunu gerçekleştirirken bir cache mekanizması kullanır. Yani hangi IP'nin hangi adrese denk geldiğini saklar. Bu da zamandan ve network kaynaklarından tasarruf sağlar.
3.4.2 ICMP (INTERNET CONTROL MESSAGE PROTOCOL)
==============================================ICMP'nin görevi kısaca iki bilgisayar arasındaki bir transfer esnasında hata kontrolünü yapmaktır. Böylece karşıdaki bilgisayarın durumunu anlayabilirsiniz(hala bağlı mı değil mi gibi). En çok bilinen ICMP uygulaması ping adındaki programdır. Bu program karşıdaki makineye bir packet gönderir ve echo olarak bir cevap dönmezse karşıdaki bilgisayarın koptuğunu anlayabilirsiniz.
Ayrıca bu utility sayesinde gönderdiğiniz packetlerin ne kadar sürede karşıya ulaştığını da öğrenebilirsiniz. Bir çok IRC client'inde bu program dahil edilmiştir ve böylece yazdığınız mesajların karşıdaki kişiye ne kadar süre sonra gittiğini öğrenebilirsiniz. Eğer bu süre bayağı büyükse IRC kullanıcılarının LAG olarak tabir ettikleri durum ortaya çıkar.
3.4.3. IP (INTERNET PROTOCOL)
=============================IP Network Layer'e bağlıdır. IP'nin görevi kısaca TCP/IP suitindeki bütün protokoller için packet dağıtımını sağlamaktır. Daha iyi anlamanız için aşağıda bir datagramın yapısını göstermeye çalıştım.
+----------------++----------------++----------------++----------------+
| Çeşitli Header || Kaynak || Hedef || Data |
| Bilgileri || IP Adresi || IP Adresi || |
+----------------++----------------++----------------++----------------+
\\ / \\ / \\
\\-----------------------+------------------------/ \\-----+------/
Header Data
IP'nin ilginç yanlarından birisi de şudur. Bazı networkler daha küçük packetler istiyor olabilirler. Bu durumda packetler parçalara ayrılırlar ve bilgisayara ulaştıkları sıraya bağımlı olmaksızın tekrar bütünleştirilebilirler.
Header'da saklanan diğer bilgilerden de biraz bahsedelim. Burada hangi protokolün kullanıldığı, header checksum'ı(checksum'ın ne olduğunu sonraki konularımızda bahsedeceğim) ve time-to-live belirteci gibi bilgiler bulunmaktadır. Time-to-live bir paketin ne kadar süre internette dolaşacağını belirler. Sayısal bir değerdir ve zaman geçtikçe birer birer azaltılır, 0 olduğunda ise packet ölür.
3.4.4. TCP (TRANSMISSION CONTROL PROTOCOL)
==========================================
TCP internet üzerinde dosya transferi ve remote session gibi önemli görevleri yerine getiren en önemli protokoldür. TCP bunu (güvenilir)reliable data transfer denilen bir metod ile gerçekleştirir. Yani biraz daha teknik söylersek TCP bize reliable stream delivery'i sağlar ve bunun sayesinde datamızın aynı sırayla ve aynı içerikle gönderildiğinden emin oluruz.
TCP bunu, 3 bölümle incelenebilen sanal bir devre üzerinden gerçekleştirir. Yine anlamayı kolaylaştırmak için aşağıya bir şekil çizmeye çalıştım.
+-------------------------------------------------------------------+
CLIENT | Client bilgisayar server makinada bağlanacağı portu |----> SERVER
| belirterek bir connection request gönderir. |
+-------------------------------------------------------------------+
+-------------------------------------------------------------------+
CLIENT <--- | Server isteğin alındığını belirten bir mesaj gönderir | SERVER
| ayrıca bağlantı için bir sıra da client'a gönderilir. |
+-------------------------------------------------------------------+
+-------------------------------------------------------------------+
CLIENT | Client da bunu aldığını belirten bir mesaj gönderir |----> SERVER
| ve böylece aradaki sanal devre açılmış olur. |
+-------------------------------------------------------------------+
Devre açıldıktan sonra data aynı anda her iki yönde de transfer edilebilir ki buna full-duplex transmission path denir. Bu sayede data transferi esnasında oluşan hatalar istemci(client) makinaya bildirilir. Buna ek olarak TCP çok güçlü bir hata-kontrol mekanizmasına sahiptir. Gönderilen her data bloğu için bir numara üretilir. Client makina da kendisine başarılı bir şekilde ulaşan her blok için server'a transferin temiz:) olduğuna dair bir mesaj gönderir ve böylece transfer başarıyla gerçekleştirilmiş olur.
Eğer transfer başarısız olursa ne olur? Bu durumda iki ihtimal ortaya çıkmaktadır:
1- Client makina bir hata mesajı alır
2- Client makinaya hiç bir şey ulaşmaz
Birinci durumda hayati(bağlantının düşmesi ya da iletişimin kapatılması gibi) bir hata olmadığı müddetçe data yeniden gönderilir. Aynı şekilde eğer client'tan belirli bir süre alındı mesajı gelmezse de data yeniden gönderilir. Bu göndermeler transfer tamamlanıncaya kadar devam eder.
Şimdi yukarıdaki şeklin ilk basamağında bahsettiğimiz portlardan ve nasıl kullanıldıklarından, bir client request gönderdiğinde server'da neler olduğunu biraz daha yakından inceleyelim.
3.4.4.1 inetd(EN BABA DAEMON:)
============================== Şimdi ilk olarak daemon nedir onu bir açıklayalım. Daemonlar arka planda çalışan ve başka process'leri dinleyen programlardır. Bunları DOS'taki TSR(Terminate and Stay Resident) programlara benzetebilirsiniz. Burada bizim dinlediğimiz processler connection request'lerdir.
Şimdi herşeyi kısaca toplamak gerekirse; siz bir server'a bağlanmak istersiniz. Ancak bağlanırken bir port numarası da belirtmeniz gerekir. Çünkü her portu dinleyen başka bir process bulunmaktadır. Bu da -birazdan göreceğiz- aslında hangi protokolle haberleşmek istediğinizi belirtmektedir.
Bütün bu processlerin ayrı ayrı çalışması server'ın kaynaklarını yiyip bitirebilir. O yüzden bu processlerin hepsinin kendi portunu dinlemesindense bir tane ana daemon yapılmış ve dışarıdan gelen bütün istekleri dinlemesi sağlanmıştır. Bu daemon kendisine bir istek geldiği zaman isteği inceler ve onunla ilgili olan process'i çalıştırıp iletişimin kurulmasını sağlar. Yani inetd aslında bir nevi trafik polisliği yapmaktadır.
Bunun için inetd server'ın açılması ile beraber çalıştırılır ve ancak kapatılırken durdurulur. UNIX'de /etc dizinin altındaki inetd.conf dosyası ile inetd daemonunun hangi process'leri çalıştıracağını ayarlayabilirsiniz.
3.4.4.2 PORTLAR
=============== Sanırım yukarıdaki açıklamalardan portların ne olduğu hakkında bir fikriniz oldu. Son bir örnek vererek bu konuyu da kapatalım. Bir server üzerinde binlerce port bulunur. Server üzerinde çalışan ve network üzerinden iletişim sağlayacak olan programlar kendilerine atanmış özel portları dinlerler. Bir kullanıcı da bu server üzerindeki bir servise erişmek istiyorsa o server’ın IP adresini ve o servisin dinlediği port numarasını gönderir. Böylece o servisle iletişim kurmuş olur. Örneğin web server’lar genel olarak 80 numaralı portu dinlerler. Hepimizin kullandığı web browser’lar (yani burada client programlar) aslında adresini yazdığımız server’ın 80. portuna bir istek göndermektedir. Aşağıda şu an günümüzde standart olmuş belli başlı servislerin dinlendiği port numaralarını veriyorum.
FTP (File Transfer Protocol) -> 21
Telnet -> 23
SMTP (Simple Mail Transfer Protocol) -> 25
Gopher (Artık kalmadı ya neyse -> 70
Finger -> 79
Hypertext Transfer Protocol -> 80
Network News Transfer Protocol -> 119
*** Evet şimdi şöyle bir toparlayalım. TCP/IP suitini iki ana bölüme ayırmıştık. Öncelikle belli başlı network level prtokolleri inceledik. TCP protokolünde portların tanımını yaptık ve bu portları bazı servislerin dinlediğinden bahsettik. İşte yukarıdaki bahsedilen bütün servisler application level protokollerdir. Yani kullanıcının gözlemleyebildiği protokollerdir. Şimdi yukarıdaki tablodaki protokolleri kısaca inceleyelim.