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 131.107.2.101 ö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.107.2.100
ile 220.107.2.200 arasında yer alsın. Örnek adresler:
Birinci
bilgisayar için 220.107.2.100
İkinci
bilgisayar için 220.107.2.101
....
...
Sonuncu
bilgisayar için 220.107.2.200
Dikkat ederseniz bütün bilgisayarların
adreslerinin ilk üç hanesi sabit: 220.107.2. Bu adrese, tam olarak söylemek
gerekirse 220.107.2.0 adresine ağ tanımlayıcısı (network ID) denir. Yani, sizin
ağınızın adresi nedir derlerse 220.107.2.0 diyebiliriz. 220.107.2.0 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 220.107.2.255 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 220.107.2.255 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 131.107.0.0
şeklinde, bir başkasında ise 90.0.0.0 ş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.107.2.96'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ç 220.107.2.112'dir. Yani, MUHASEBE'nin bulunduğu ağın
tanımlayıcısı, adresi 220.107.2.112'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 220.107.2.0 ağına, diğeri 131.107.2.0 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 220.107.2.150 ve
131.107.2.30 ş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, 220.107.2.0 ağındaki bilgisayarlar
bilgilerini 220.107.2.150 adresine gönderirler. G bilgisayarı bu adrese gelen
bilgiyi alır ve 131.107.2.0 ağına geçirir.
Peki, 220.107.2.0 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. . 220.107.2.0 adresi ile
tanımlanan ağdaki bilgisayarlar Default Gateway değeri olarak G
bilgisayarındaki 220.107.2.150 adresini verirler. 131.107.2.0 ağındaki bilgisayarlar
ise Default Gateway olarak yönlendiricinin kendi taraflarındaki adresini, yani,
131.107.2.30 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, 220.107.2.100
ile 220.107.2.200 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 155.67.0.0 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: 155.67.0.0/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
İnternet’in 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 İnternet’teki 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.1’den başlayan ve
192.168.0.254’de biten IP adreslerini verebilirsiniz (tabii aynı IP adresini birden
fazla bilgisayara vermemek gerektiğini unutmayın).