Murat Yıldırımoğlu
Internet'in yaygınlaşmasıyla birlikte TCP/IP kısaltmasını çok sık duymaya başladık. Bu kısaltmanın bir bilgisayar ağı protokolü olduğu, Internet'in bu protokol üzerine kurulu olduğu hep tekrarlandı. Buraya kadar anladık. Ama hiçkimse de çıkıp bu TCP/IP'yi doğru düzgün anlatmadı. Internet'e bağlanırken girdiğimiz değerler (IP, subnet mask, default gateway vs. vs.) ne anlama geliyor, bunları yanlış girince niye Internet'e çıkamıyoruz, kısacası nasıl oluyor da oluyor, hiç bilemedik. Ama artık yeter. Size bu yazıda TCP/IP'nin ne olduğunu bir bir anlatacağım. Artık gerçekler karanlıkta kalmayacak.
TCP/IP, Transmission Control Protocol/Internet Protocol ifadesinin kısaltması. Türkçesi İletim Kontrol Protokolü/İnternet Protokolü oluyor. Protokol belli bir işi düzenleyen kurallar dizisi demek.. Örneğin, devlet protokolü devlet erkanının nerede duracağını, nasıl oturup kalkacağını düzenler. Ağ protokolleri de bilgisayarlar arası bağlantıyı, iletişimi düzenliyor. TCP/IP'nin adına bakıp tek bir protokol olduğunu düşünmeyin. TCP/IP, bir protokoller kümesi. Herbiri değişik işler yapan bir yığın protokolden oluşuyor.
Şimdi biraz TCP/IP'nin tarihinden söz edelim.
TCP/IP'nin kökleri 1960'ların sonunda ve 1970'lerin başında Amerikan Savunma Bakanlığı'na bağlı İleri Araştırma Projeleri Ajansının (Advanced Research Projects Agency, ARPA) yürüttüğü paket anahtarlamalı ağ deneylerine kadar uzanır. TCP/IP'nin yaratılmasını sağlayan proje, ABD'deki bilgisayarların bir felaket anında da ayakta kalabilmesini, birbirleriyle iletişiminin devam etmesini amaçlıyordu. Şimdi baktığımız zaman projenin fazlasıyla amacına ulaştığını ve daha başka şeyleri de başardığını görüyoruz.
Bu projenin ilk aşamasında 1970'de ARPANET bilgisayarları Network Control Protocol'ünü kullanmaya başladılar. 1972'de ilk Telnet spesifikasyonu tanımlandı. 1973'de FTP (File Transfer Protocol) tanımlandı. 1974'de Transmission Control Program ayrıntılı bir şekilde tanımlandı. 1981'de IP standardı yayımlandı. 1982'de, Defense Communications Agency (DCA) ve ARPA, TCP ile IP'yi TCP/IP Protokol Suiti olarak tanımladı. 1983'de ARPANET NCT'den TCP/IP'ye geçti. 1984'de Domain Name System (DNS) tanıtıldı.
Yukarda kısaca yer verdiğimiz tarihçe aynı zamanda İnternet'in tarihçesidir. İnternet ile TCP/IP ayrılmaz kardeşlerdir. TCP/IP, İnternet'in temelidir.
Bu kısa tarihçeden sonra bir yerel alan bilgisayar ağı üzerinde TCP/IP'yi anlatmaya geçelim. Burada anlatılanlar İnternet üzerinde de geçerlidir.
TCP/IP ile kurulan bir bilgisayar ağında bir bilgisayarı üç parametre ile tanımlarız. Bu paramatreler bilgisayarın adı, IP adresi ve MAC adresidir. TCP/IP protokoller kümesi bu üç parametreyi kullanarak bilgisayarları birbirine bağlar.
Bilgisayarın adı kullanıcı tarafından işletim sistemi yüklenirken bilgisayara verilen addır (Bilgisayarlara MUHASEBE, SATIS ya da AHMET gibi açıklayıcı ve kolay adlar verilir). MAC adresi bilgisayarların ağ kartının ya da benzer ağ cihazlarının içine değiştirilmez bir şekilde yerleştirilmiş bulunan bir adrestir (0020AFF8E771 örneğinde olduğu gibi onaltılı düzende rakamlardan oluşur). IP adresi ise 184.108.40.206 örnek adresinde olduğu gibi 4 bölümden oluşan bir adrestir. Nokta ile bir diğerinden ayrılan bu bölümlerin herbiri 0 ile 255 arasında bir değer alabilir.
IP adresinin ilk bölümü adresin sınıfını gösterir. IP adresleri kabaca üç sınıftır: Bu sınıflar A, B ve C sınıfları olarak adlandırılır. A sınıfı adreslerin ilk bölümü 1 ile 126 arasında bir değer olabilir. B sınıfı adreslerin ilk bölümü ise 128 ile 191 arasında yer alır. C sınıfı adresler 192 ile 223 arasında bulunur. 223'den sonrası ne oldu diye sorabilirsiniz. 223'ün üzeri bizi hiç ilgilendirmeyen işler için ayrılmıştır.
Dikkatli okuyucu arada 127 ile başlayan adreslerin kayıp olduğunu farketmiştir. 127 ile başlayan adresler özel işler için ayrılmıştır. Bu adreslerin bir tanesi bizi ilgilendirir ve sık sık kullanmamız gerekir. Bu adres 127.0.0.1'dir ve kendi bilgisayarımızı gösterir. İşlerin yolunda gidip gitmediğini görmek için ilkönce bu adresi kullanırız.
İnternet'te A sınıfı adresler çok değerli adreslerdir ve büyük, çok büyük ağlardaki bilgisayarlar için ayrılmıştır. Örneğin, IBM'in adresleri A sınıfı adresleridir. Şu anda Internet'te A sınıfı adresleri tükenmiştir, kimseye verilmemektedir. A sınıfı adres alan bir işletme yaklaşık olarak 16 milyon bilgisayarı bu adreslerle tanımlayabilir.
İnternet'te B sınıfı adresler de şu anda tükenmiştir. Bir B sınıfı adreste yaklaşık 65.000 bilgisayar tanımlanabilir. Örneğin, Microsoft'a bir B sınıfı adres alanı ayrılmıştır.
C Sınıfı adresler halen boldur, kullanılabilir. Ama C sınıfı bir adres alanı ile de ancak 250 küsur adres tanımlanabilir.
Bir yerel ağ kurarken İnternet'teki adres kısıtlamaları bizi bağlamaz. Kendi ağımız için her sınıftan adres verebiliriz. Burada verilen adreslerin İnternet ile bir bağlantısı yoktur. Bu noktaya dikat ediniz. TCP/IP'yi anlamak için kendimizi bir yerel ağ, daha sonra da bir geniş alan ağı ile kısıtlayacağız. Böyle bir ağın İnternet bağlantısı ise bambaşka bir konudur.
Şimdi kendi bilgisayar ağımız için bir C sınıfı adres alanı tanımlayalım. Bilgisayarlarımıza vereceğimiz adresler 220.127.116.11 ile 18.104.22.168 arasında yer alsın. Örnek adresler:
Birinci bilgisayar için 22.214.171.124
İkinci bilgisayar için 126.96.36.199
....
...
Sonuncu bilgisayar için 188.8.131.52
Dikkat ederseniz bütün bilgisayarların adreslerinin ilk üç hanesi sabit: 220.107.2. Bu adrese, tam olarak söylemek gerekirse 184.108.40.206 adresine ağ tanımlayıcısı (network ID) denir. Yani, sizin ağınızın adresi nedir derlerse 220.127.116.11 diyebiliriz. 18.104.22.168 bizim ağımızın adresidir.
Buradan çıkaracağımız ilk sonuç şu: Hiçbir bilgisayara sonu 0 ile biten bir adres veremeyiz. Sonu 0 ile biten adresler bir ağı tanımlar.
Bilgisayarlarımıza veremiyeceğimiz ikinci bir adres de sonu 255 ile biten bir adrestir. Örnek ağımızdaki bilgisayarların adresleri arasında 22.214.171.124 yer alamaz. Sonu 255 ile biten adresler broadcast adresleridir. Broadcast yayın demektir; aynen radyo televiyon yayınındaki gibi. Yani, belli bir bilgisayara değil de tüm ağa mesaj göndereceğimiz zaman sonu 255 ile biten bir adresi kullanırız; ağa yayın yaparız. Örnek ağımızda herkese gidecek bir mesajın hedef adresi 126.96.36.199 olur.
Şimdi biraz toparlayalım. IP adresleri iki bölümden oluşur. İlk bölüm ağın adresidir. İkinci bölüm ağ içindeki bilgisayarların adresleridir. Örneğimizdeki adreslerde "220.107.2." ifadesini içeren bölüm ağı tanımlar. Geri kalan kısım ise (100,101,....200 gibi) ağdaki bilgisayarların herbirini tanımlar. Başka bir ağda ağ adresi 188.8.131.52 şeklinde, bir başkasında ise 184.108.40.206 şeklinde olabilir. Ağ adresleri seçtiğimiz sınıfa bağlıdır.
Bir bilgisayar, IP adresinin hangi bölümünün ağı tanımladığını, hangi bölümünün ise bilgisayarları tanımladığını bilmek zorundadır. Bunun için subnet mask bilgisini kullanır. Subnet mask'i ağ maskesi şeklinde çevirebiliriz. Subnet mask de bir IP adresidir; dört bölümden oluşur ve ağ adresinin hangi bölüme kadar geldiğini göstermek için kullanılır. Örneğimizde subnet mask 255.255.255.0'dır. Bilgisayarlar kendi ağ tanımlayıcılarını bulmak için subnet mask'i kullanırlar. Bu yüzden subnet mask'in doğru şekilde girilmesi önemlidir. Yanlış girilen subnet mask değeri bilgisayarın diğer bilgisayarlarla iletişimini engeller.
Bilgisayarlar ağ tanımlayıcılarını bulmak için subnet mask'i nasıl kullanırlar? Şimdi örnek bilgisayarımızdaki üç bilgisayarın adres bilgilerini şekil 1'deki gibi girdiğimizi varsayalım:
Yukardaki şekilde MUHASEBE ve SATIS bilgisayarlarının subnet mask'i doğru, AHMET bilgisayarının subnet mask'i yanlış girilmiştir. Şimdi AHMET adlı bilgisayarın MUHASEBE adlı bilgisayara bir bilgi iletmek istediğini varsayalım. AHMET bilgisayarı MUHASEBE'nin IP adresini kullanacaktır. AHMET, bilgi göndereceği bilgisayarın, yani MUHASEBE'nin, kendi ağında olup olmadığını anlamak için şu işlemleri yapar. Önce kendi IP adresi ile subnet mask'ini AND işleminden geçirir; sonuç 220.127.116.11'dır (İnanmayan bu rakamları 0 ve 1'lerden oluşan ikili düzendeki rakamlara çevirip AND işlemini kontrol edebilir). Bu rakam ona göre içinde bulunduğu ağın tanımlayıcısıdır. Sonra kendi subnet mask'i ile MUHASEBE'nin IP adresini AND işleminden geçirir; sonuç 18.104.22.168'dir. Yani, MUHASEBE'nin bulunduğu ağın tanımlayıcısı, adresi 22.214.171.124'dir. Bu iki adres aynı olmadığı için AHMET bilgisayarı MUHASEBE bilgisayarının başka bir ağda bulunduğunu varsayar. Bu da yanlış bir varsayım olduğu için MUHASEBE bilgisayarına bilgi gönderemez. Bu hatanın giderilmesi oldukça basittir. AHMET'in subnet mask değerini diğer bilgisayarlarla aynı yaparsanız bütün bilgisayar aynı ağ üzerinde bulunduklarını hesaplayıp birbirlerine bilgi gönderebilirler.
Bir bilgisayar ancak kendi ağı üzerindeki bir bilgisayara bilgi gönderebilir. Başka bir ağda bulunan bilgisayarlara bilgi göndermek gerekirse yönlendirici (Router) adı verilen cihazlar kullanılır. Cihaz dedik ama üzerinde birden fazla ağ kartı bulunan bilgisayarlar da yönlendirici görevi görürler.
Şekil 2'de iki ayrı ağ, yönlendirici görevi gören G bilgisayarı yardımı ile birbirine bağlanmış. SATIS bilgisayarı MEHMET bilgisayarına bilgi göndermek isterse yukarda anlattığımız işlemleri yaparak MEHMET bilgisayarının kendi ağında olmadığını anlar, ileteceği bilgiyi G bilgisayarına gönderir. G bilgisayarında iki adet ağ kartı bulunmaktadır. Kartların birisi 126.96.36.199 ağına, diğeri 188.8.131.52 ağına bağlıdır. G'de çalışmakta olan işletim sistemi (Windows NT ya da Novell Netware gibi) bu iki kart arasındaki bağlantıyı sağlar.
G bilgisayarında bulunan ağ kartlarının herbirinin ayrı bir IP adresi vardır. Şekil 2'de bu adresler 184.108.40.206 ve 220.127.116.11 şeklindedir.
Bilgisayarlar karşıdaki ağda bulunan bir bilgisayara bilgi gönderecekleri zaman bilgiyi, G'nin kendi taraflarında bulunan IP adresine gönderirler. Örneğin, 18.104.22.168 ağındaki bilgisayarlar bilgilerini 22.214.171.124 adresine gönderirler. G bilgisayarı bu adrese gelen bilgiyi alır ve 126.96.36.199 ağına geçirir.
Peki, 188.8.131.52 ağındaki bilgisayarlar kendi ağlarında bulunmayan bir bilgisayara bilgi gönderecekleri zaman yönlendiricinin adresini nereden buluyorlar? Eğer bilgisayarınızda bulunan TCP/IP konfigürasyon bilgilerine bakarsanız orada Default Gateway şeklinde bir adres alanı görürsünüz. Default Gateway varsayılan geçit demektir ve yönlendiricinin adresini gösterir. . 184.108.40.206 adresi ile tanımlanan ağdaki bilgisayarlar Default Gateway değeri olarak G bilgisayarındaki 220.127.116.11 adresini verirler. 18.104.22.168 ağındaki bilgisayarlar ise Default Gateway olarak yönlendiricinin kendi taraflarındaki adresini, yani, 22.214.171.124 adresini verirler.
Yukarda herşey IP adresleriyle oluyor bitiyor gibi görünüyor. Gerçekte ise iletişimden hemen önce IP adreslerinin MAC adreslerine çevrilmesi gerekir. Ağ üzerinde iletişim aslında yalnızca MAC adresleri ile gerçekleşir. Çünkü IP adresleri TCP/IP protokolüne özeldir. Başka bir protokolde, örneğin, Novell'in kullandığı IPX/SPX protokolünde IP adresi diye bir şey yoktur. Her protokol kendine göre bir adresleme şeması kullanır ama bu şemalarda yer alan adreslerin dönüp dolaşıp MAC adreslerine çevrilmesi gerekir ki bilgisayarlar birbirleriyle iletişime geçebilsinler.
Bir bilgisayar bir başka bilgisayarın IP adresine sahipse ama MAC adresine sahip değilse Adres Çözümleme Protokolü (Adress Resolution Protocol, ARP) adı verilen bir protokol kullanarak IP adresini MAC adresine çevirir. TCP/IP'nin bir protokol kümesi olduğunu söylemiştik. İşte ARP bu kümenin bir üyesi.
İletişime geçeceği bilgisayarın IP adresini bilen bilgisayar ARP protokolü ile "Bu IP adresi kiminse bana MAC adresini söylesin" şeklinde bir mesaj oluşturur ve bu mesajı broadcast yapar, yani ağdaki tüm bilgisayarlara gönderir. Ağdaki bilgisayarların tümü bu mesajı alırlar, eğer söz konusu IP adresi kendilerine ait değilse mesajı çöpe atarlar. Mesajdaki IP adresinin sahibi olan bilgisayar ise kendi IP adresini tanır ve hemen "Bu IP adresi bana ait, benim MAC adresim şu" şeklinde bir mesaj ile yanıt verir. İlk bilgisayar artık diğer bilgisayarın MAC adresini bildiği için asıl mesajını doğrudan (broadcast yapmadan) gönderebilir.
Peki, bir bilgisayar IP adresini nasıl alır? Bunun iki yolu var: Ya siz bu adresi elle girersiniz, ya da bir bilgisayar belli bir adres havuzundan aldığı adresleri diğer bilgisayarlara dağıtır. Adresleri elle girmenin en büyük sakıncası adreslerin, subnet mask değerinin ve default gateway gibi diğer bazı bilgilerin yanlış girilebilmesidir. Eğer ağınızdaki bilgisayar sayısı onu aşıyorsa adresleri elle girmek pek akıllıca değildir. Bu adresleri otomatik olarak dağıtmanın bir yolu vardır ve bu yolun adı Dinamik Bilgisayar Konfigürasyonu Protokolü (Dynamic Host Configuration Protocol, DHCP) 'dür. Bu protokol ile bir bilgisayar DHCP sunucu (server) olarak tanımlanır ve IP adres dağıtımı bu sunucu üzerinden yapılır. DHCP üzerinde bir IP adres aralığı tanımlıdır (örneğin, 126.96.36.199 ile 188.8.131.52 arası gibi). Henüz IP adresi almamış olan bir bilgisayar, eğer IP adresini DHCP'den alacağı belirtilmişse, açıldığında "Ben yeni açıldım, henüz bir IP adresim yok, eğer ortamda bir DHCP sunucu varsa bana bir IP adresi göndersin" anlamında bir masaj yayınlar (broadcast eder). Eğer ortamda bir DHCP sunucu tanımlı ise bu mesajı alır "Ben bir DHCP sunucu olduğuma göre bu mesaja yanıt vermek bana yakışır" şeklinde düşünüp kendisinde tanımlı olan IP adreslerinden boşta olanlardan birisini seçerek bilgisayara gönderir. IP adresi alan bilgisayarda artık diğer bilgisayarlarla iletişim kurarken bu adresi kullanır.
Bir IP adresinin nasıl alındığını gördük, IP adresinin MAC adresine nasıl çevrildiğini de gördük. Şimdi "İyi ama, biz Windows 95'de ya da Windows NT'de Ağ Komşuları (ya da Network Neighborhood'a) tıkladığımızda karşımıza IP adresleri ya da MAC adresleri gelmiyor ki, yalnızca bilgisayar adları geliyor" diyebilirsiniz; haklısınız. Başta söylediklerimizi anımsayalım: TCP/IP dünyasında bir bilgisayarı üç şey belirler: Bilgisayarın adı, IP adresi, MAC adresi. Bir bilgisayarın MAC adresini ya da IP adresini değil de adını kullanmak kolayımıza gelir değil mi?. Aksi takdirde bilgisayarların IP adreslerini daha da kötüsü MAC adreslerini ezberlemek zorunda kalabilirdik.
Bilgisayar adını kullanmak kolayımıza geliyor ama ağ üzerinde de iletişim gerçekte MAC adresleri üzerinden gerçekleşiyor. O zaman bilgisayar adını önce IP adresine çeviren sonra da MAC adresine çeviren mekanizmalar, protokoller olmalı, değil mi?. IP adresini MAC adresine çeviren protokolü görmüştük (belleği zayıf olanlara anımsatalım; bu protokolün adı ARP idi). Peki, bilgisayar adları IP adreslerine nasıl çevriliyor? Burada çeşitli seçenekler var. Microsoft'un önerdiği şey WINS (Windows İnternet Adlandırma Servisi, Windows Internet Naming Service). Bir makinayı WINS sunucusu olarak tanımlıyoruz, bütün bilgisayarlar gidip adlarını ve IP adreslerini bu sunucuya bildiriyorlar (aynen yeni bir eve taşındığımızda hane halkının mahallenin muhtarına kaydolması gibi). Bir bilgisayar adını bildiği bir bilgisayarın IP adresini bulmak istediği zaman broadcast yapmak yerine bu sunucuya gidiyor "şu addaki bilgisayarın IP adresi ne ola ki?" şeklinde bir soru soruyor. WINS sunucu da kendi veritabanına bakıp soruyu yanıtlıyor. Bu aşamadan sonrasını biliyoruz ( ARP ile IP adresi MAC adresine çevriliyor).
İyi güzel de bilgisayarlar ortamda bir WINS sunucunun var olup olmadığını ve varsa adresini nereden biliyorlar?
Yukarda DHCP'yi anlatırken DHCP sunucunun IP adresinin yanısıra başka bilgileri göndrebileceğini söylemiştik. İşte bu bilgilerden birisi de WINS sunucunun adresi. DHCP sunucudan IP adresi alan bilgisayarlar ortamdaki WINS sunucunun adresini de öğreniyorlar ve gidip kendilerini kaydettiriyorlar. Bu işlem otomatik olarak, el değmeden son derece fenni yöntemlerle gerçekleşiyor.
Son cümleyi biraz abarttık, değil mi? Ama bunun da bir nedeni var: WINS, Microsoft tarafından bulunan ve kullanılan bir yöntem. İnternet'te ad-IP eşleştirmesi için başka bir yöntem kullanılıyor: DNS (Domain Namin System). Bu sistemde bilgisayar adları ve IP adresleri DNS sunucu olarak konumlandırılan bilgisayarlara "elle" kaydediliyor. Bir bilgisayar adını bildiği bir bilgisayarın IP adresini öğrenmek isterse DNS sunucuya gidiyor ve adresi soruyor.
DNS sisteminin kötülüğü bilgilerin elle girilmesinde ve statik olmasında. Bilgisayar adlarının ve IP adreslerinin elle girilmesi ve değiştirilmesi gerekiyor.
Windows NT'de 4.0 versiyonuna kadar bir DNS sunucu fonksiyonu bulunmuyordu. 4.0 ile birlikte DNS sunucu fonksiyonu da eklendi. Üstelik Microsoft DNS'i WINS' e bağlamayı da başardı. 4.0'da, DNS sunucu bir kayıtı kendi veritabanında bulamazsa ortamdaki bir WINS sunucuya sorabilir ve ondan aldığı yanıtı iletebilir. Güzel bir olanak; hem Microsoft'un çözümünü koruyor hem de DNS sunucu isteklerini karşılıyor.
Ağ Adreslerinin Yeni Gösterim Şekli
Ağ adresleri için subnet maskesini muhakkak belirtmek gerekir. Örnek bir ağ adresi 184.108.40.206 subnet maskesi 255.255.0.0 şeklindedir. Örnekteki subnet maskesinde toplam 16 adet 1 bulunur (sekiz bitin hepsi de 1 olursa bu kombinasyonun onluk düzendeki karşılığı 255 eder). Bu ağ adreslerini daha ekonomik bir şekilde yazmak için yeni bir usül kullanılmaktadır. Bu usülde örnekteki ağ şu şekilde yazılabilir: 220.127.116.11/16. Bu ifadedeki \16 ifadesi subnet maskesinde tam 16 adet 1 olduğunu gösterir; yani, subnet maskesi 255.255.0.0 şeklindedir.
İç Kullanım İçin Rezerv Edilmiş IP Adresleri
İnternetin başından beri bazı IP adresi blokları (ağ adresleri) iç kullanım için rezerve edilmiştir. Bu adresler yalnızca bir kurumun içinde kullanılır, kesinlikle İnternetteki bir bilgisayara verilmez. Bu ağ adresleri şu şekildedir:
10.0.0.0/8
169.254.0.0/16
172.16.0.0/16 ile 172.31.0.0/16 ağları arasındaki tüm ağlar
192.168.0.0/24
Kendi kurumunuzda IP adreslemesini yaparken bu iç kullanım için rezerv edilmiş IP adresi bloklarından birini (ağ adreslerinden birini) alıp kullanabilirsiniz. Örneğin, kurumunuz için 192.168.0.0/24 ağ adresini seçerseniz kurumunuzdaki bilgisayarlara 192.168.0.1den başlayan ve 192.168.0.254de biten IP adreslerini verebilirsiniz (tabii aynı IP adresini birden fazla bilgisayara vermemek gerektiğini unutmayın).