Browser'in başına oturan birisi icin, routing, gateway, metric, MTU vs. hemen hic bir anlam ifade etmez. O, tık tık tık.. sitelerde gezmeyi duşunur sadece. Fakat internetin kapılarını bu kullanıcıya acmak durumunda olan sistem yoneticisinin bunlar hakkında fikir sahibi olması gerekir. İşte bu noktada internetin oteki yuzunu ele alacağız. Yani web sayfalarının server'den cıkıp browser'a kadar nasıl ulaştığı hakkında bir şeyler soylemeye calışacağız. Sık sık duyduğunuz NAT, port, netmask gibi gibi kavramları kabaca acıklamanın gerekli olduğunu duşunuyorum.
Oncelikle bilinmesi gereken konu, ağ kavramıdır. Ağ denince, bir arabirime bağlı olan, kendi arasında butunluğu olan sistemi duşunuyoruz. Şimdi şoyle bir ornek duşunelim. Bir makinede iki ethernet kartı olsun. 1. Kart 1 hub'la 5 makineye, 2. kartda başka bir hubla 6 makineye bağlı olsun. Şimdi bu iki etherneti neden iki ayrı huba bağladık ? İki ağ elde etmek icin. Eğer iki etherneti tek huba bağlasaydık, tek bir ağa iki noktadan bağlanmış olurduk. Sanırım bu ornek şunu gostermekte yeterli: Bir ağ, kendi icersinde butunluğu olan ağ arabirimleri topluluğudur. Tabi bu arabirimler de bilgisayar, router, yazıcı vs. bağlıdır.
IPX ağlarında, network numarası, bu ağı niteler. Ağa ait tum birimler aynı network numarasını kullanır. Ağları birbiri icinde ele alamazsınız. Eğer iki ayrı ağ varsa iki ayrı network numarası gereklidir. NetWare server, bir ağ uzerinde ikinci bir server bulunmasına tahammul edemez. Panikleyip boyuna yolbulma hatası verir. Eğer bir NetWare servere iki ve daha fazla ethernet kartı takarsanız, her birine ayrı IPX ağ numarası vermelisiniz. Tabii IPX yolbulucular kullanılarak bir ağdan diğerindeki makineye ulaşılması mumkundur. Fakat bir anda sadece bir tek ağın parcası olabilirsiniz. IP sistemlerinde ise ağların sınırları netmask ile belirlenir. Fakat ağ sınırları arasında gateway denilen ceşitli gumrukler (!) bulunur, ağlar birbirlerine eklenebilir, birbirlerini kapsayabilir. Sonucta IP sistemini kullanan tum cihazlar, en nihayetinde tek bir butun ağın parcaları durumuna gelir.
Nasıl mı ? Bilindiği gibi IPv4'te ağ adresleri 32 Bit uzunluktadır. 192.168.1.1 IP numarası icin 255.255.255.0 netmaskı cok kullanılır. Burada 192.168.1.1 .... 192.168.1.255 arası adresler bu ağa ait demektir. Netmask 255.255.255.0 gibi gosterilirken, bunun en nihayetinde bir ikili sayı olduğu duşunulup, en baştan itibaren kac tane ikili sayı olarak 1 varsa, bu da netmask olarak verilebilir. Şimdi 255(10 taban) = FF(16 tabanında) = 11111111(2 tabanında) değerlerine eşit duşer. Bu durumda yukardaki adres 192.168.1.1/24 olarak yazılabilir.
24 = 24 tane 1 geri kalan 0 = 11111111 11111111 11111111 00000000 = 255.255.255.0
Şimdi IP adresini netmask ile boolean and (ve) işlemine tabi tutarak verilen adresin ağ durumunu tespit edebiliriz. Bizim orneğimizde 192.168.1.1/24 icin:
11000000 10101000 00000001 00000001 =192.168.1.1
11111111 11111111 11111111 00000000 =255.255.255.0
---------------------------------------------------
11000000 10101000 00000001 00000000 = 192.168.1.0 olarak ağ adresi bulunur. Herhangi bir IP numarası, verilen netmask ile bu şekilde ağ adresini veriyorsa, bu IP adresi bu ağ icindedir.. Bilmem farkedebildiniz mi ? IP protokolu, IPX'ten farklı olarak, ağların birbirinin icinde yer almasına musaade eder. IPX icin bu sozkonusu değildir. Bir IP numarasına netmaskı uyguladığınızda yukarıdaki elde edilen şekilde ağ adresini buluyorsanız, Bu IP, belirtilen Ağ icindedir. Şimdi 3 ağ adresi duşunelim.
192.168.1.192/255.255.255.192 = A ağı
192.168.1.128/255.255.255.128 = B ağı
192.168.1.001/255.255.255.000 = C ağı
Şimdi yukarıdaki sisteme gore 192.168.1.192...192.168.1.255 arası adresler A ağı, 192.168.1.128...192.168.1.255 arası adresler B ağı ve 192.168.1.1...192.168.1.255 arası adresler C ağı olacaktır. Goruleceği uzere C, B va A ağlarını, B de A ağını kapsamaktadır. Hemen birde D ağı ilave edelim. Bunun adreside 192.168.1.0/255.255.255.128 olsun. Bu ağın aralığı 192.168.1.0...192.168.1.128 olacaktır ? Yanlış.. ...128, bu ağın kapsamı dışında kalır. Cunku 128 icin 4. Baytın, ilk biti 1 olup, ağ maskı ile uymamaktadır. Doğru aralık, 192.168.1.0...192.168.1.127 olmalıdır. Aynı zamanda ağların tamamını belirten ağ adresi, IP numarası olarak kullanılmaz. Cunku ağ adresleri, ağın tamamını belirtir. Yani 192.168.1.0/255.255.255.0 ağında, 192.168.1.0 adresine yollanan bir paket, ağın tamamına ulaşacaktır. Bir istisna netmaskın 255.255.255.255 olması durumudur. İşte bu şekilde bir ağ, birden fazla alt gruba ayrılabilir. Grupların herbirine alt ağ, subnet denir. Bu bilgiler ışığında IP kullanan Internetin tamamının aslında tekbir ağ olduğu, fakat farklı subnetler halinde gorulduğu soylenebilir. İşte browser başında oturan vatandaşın, istediği anda istediği yere girebilmesi, aslında tekbir ağ bulunması nedeniyle mumkundur. Şimdi bunun nasıl sağlandığına bakalım. Bunu anlamak icin uc tane ağ kuralım.
A ağı = 212.192.119.0/24
B ağı = 212.192.120.0/24
C ağı = 224.1.40.128/25
Şimdi bu uc ağa birden bağlı bir cihaz duşunelim. if (interface=arabirim) olarak ethernet, modem vs. olabilir. ifA, A ağına bağlı, ifB, B ağına bağlı ve ifC, C ağına bağlı olsun.
ifA = 212.192.119.5
ifB = 212.192.120.11
ifC = 224.1.40.150
IP adreslerine sahip olsun. Şimdi artık routing kavramını ele almanın zamanı geldi. ifA tanımlanırken, A ağına ait tum adreslerin bu arabirime yonlendirilmesi, B ağına ait tum adreslerin de ifB'ye yonlendirilmesi gerekir. Bu durumda arabirimler icin ağ adresleri aşağıdaki şekilde verilmelidir.
Arabirim IP Numarası Netmask Ağ adresi
ifA 212.192.119.5 255.255.255.0 212.192.119.0
ifB 212.192.120.11 255.255.255.0 212.192.120.0
ifC 224.1.40.150 255.255.255.128 224.1.40.128
Şimdi bu arabirimlere sahip makinede
ping 212.192.119.20
komutu verildiğinde, 212.192.119.20 IP icin, tarif edilmiş ağ adresi ifA'ya uymaktadır. Bu durumda ping paketleri ifA'dan ağa yollanacaktır. Peki "ping 212.192.130.40" gibi, hic bir ağ adresinde belirtilmemiş bir adrese gidilmesi gerekirse, o zaman ne olacaktır ? Bu durumda şu an icin sonuc "Destination Network unreachable" hata mesajı olacaktır. Yani makinemiz bu adrese ulaşamayacaktır. Varsayalım ki 212.192.130.40 makinesi aslında ifB'nin bağlı olduğu ağa bağlı. Yani 212.192.130.0/24 ağıda ifB'nin bağlı olduğu ağın icinde. Bu durumda ifB icin bu ağ adresine bir net (Ağ) tanımlamak gerekir. Linux icin
route add -net 212.192.130.0 netmask 255.255.255.0 "ifB"
komutu bu iş icin yeterli olacaktır. Bu ne yapıyor ? 212.192.130.0/24 ağını da ifB'ye bağlıyor. Artık ping komutunu kullanabiliriz. Daha enteresan bir durum ise bu ağa ulaşmak icin bir gateway/router/switch gibi bir aletin kullanılmasıdır. Bu durumda ne olur ?
Oncelikle kendi makinemizi bir router olarak kullandığımızı duşunelim. Ve ifA'dan gelip, 224.1.40.147 makinesine gitmek isteyen bir pakete ne olur bunu gorelim. Eğer, cihazımız IP ilerletme yapmak uzere ayarlanmışsa, yukarıdaki gibi bir paket, uygun olan arabirime, burada ifC, gonderilir. Goruleceği uzere IP ilerletme (IP FORWARDING), makinemize gelen paketlerin hedefi, bizim makinemiz değilse, paketin uygun arabirimin tespit edilerek asıl hedef ağına gonderilmesidir. Router ve gateway cihazlarının yaptıkları aslen bundan ibarettir. Eğer bizim cihazımızda ceşitli ağlar icin gateway veya router gibi yonlendirme bilgileri tanımlanacaksa, ağlar belirtilirken bu ağa gidecek paketlerin hangi gateway cihazına gideceği belirtilmelidir. Şimdi bir onceki ornekte 212.192.130.40 makinesinin bulunduğu 212.192.130.0/24 ağına gidecek paketlerin bir gateway aracılığı ile gonderileceğini duşunelim. Bu gatewayin ise 212.192.120.254 adresinde olduğunu farzedelim. Şimdi ağ tanımlamamız icin bir gateway belirlememiz gerekecektir.
route add -net 212.192.130.0 netmask 255.255.255.0 gateway 212.192.120.254
olarak bunu makinemize belirtmemiz gerekir. Boylece bu ağa gidecek paketler 212.192.120.254 adresine (ifB uzerinden) gonderilecektir. Şimdi bizim yol bulma tablomuz şu şekilde olacaktır.
IP Aralığı Ağ adresi Netmask Arabirim Gateway (Gecit)
212.192.119.1 ... 212.192.119.255 212.192.119.0 255.255.255.0 ifA Gerekmiyor.
212.192.120.1 ... 212.192.120.255 212.192.120.0 255.255.255.0 ifB Gerekmiyor
224.1.40.129 ... 224.1.40.255 224.1.40.128 255.255.255.128 ifC Gerekmiyor
212.192.130.1 ... 212.192.130.255 212.192.130.0 255.255.255.0 ifB 212.192.120.254
Belirtilen IP aralıkları uygun arabirim uzerinden hedefe yollanacaktır. Eğer 212.192.130.0/24 ağına bir paket yollanacaksa, bu paket ifB uzerinden 212.192.120.254 adresindeki gateway cihazına iletilecek, bu cihaz paketi gideceği adrese gonderecektir.
Bir başka sorunda hic bir gecit ve ağ tanımlanmamış olan adresler icin ne yapılacağıdır. Diyelim ki "ping 154.200.11.27" komutu ne yapacak ? Eğer bir paket, arabirimlerin hicbirinin ağ sahasına girmiyorsa, paketin gideceği yeri bildiği ve paketi oraya ulaştıracağı farzedilen bir gateway (gecit) cihazına gonderilir. Burada varsayılan gecit (Default gateway) kavramı onumuze gelir. Varsayılan ağgecidi, arabirimlerin hicbirinde tanımlanmamış olan IP adreslerinin hangi arabirim ve gateway kullanılarak hedefe ulaştırılacağını belirtir. Linux sistemimiz icin, bu tur adreslere ulaşmak icin kullanacağımız ağ arabirimini ve bu ağdaki gateway cihazının IP numarasını bilmemiz gerekir. Diyelim ki 212.192.119.254 adresinde internete (internet ? Yani tum ağ, 0.0.0.0/0.0.0.0 ağ adresi..) bir gateway bulunduğunu farzedelim. Bu durumda saydığımız adreslerden farklı bir adrese giden paketlerin tamamını bu gateway'a gondermek yeterli olacaktır. İşte bu gateway'e default gateway denir.
route add default gw 212.192.119.254>
Bu komut da, diğer ağlara giden tum paketleri alıp, 212.192.119.254 adresine verecektir ki, hedeflerine ulaşsınlar. Peki paketler geri gelirken ne olacaktır ? 212.192.119.254 adresindeki gateway'in de, makinemize gelen paketi bizim ağımıza yonlendirmesi gerekir. Eğer bu gateway'de, 212.192.120.0/24 ağı icin bizim cihazımız gateway olarak tanımlanmışsa, paket orneğin 212.192.120.45 IP'si icin cihazımıza gelecek, cihazımız bunun ifB'nin ağında olduğunu gorup, paketi ifB ile hedefe gonderecektir. Goruluyor ki, iki (veya daha fazla) arabirime sahip herhangi bir cihaz, uygun yazılım ve yonlendirme tablosuna sahip olmak şartıyla, gateway olarak kullanılabiliyor. Linux uygun bir yazılımdır. Eğer IP_FORWARDING acık ise, routing tablosu da ayarlanmış ise, kolayca gateway olarak Linux kutunuzu kullanabilirsiniz. Hemen şunu hatırlatalım. Gateway cihazları biraz daha kompleks yapılar taşır. Aslen bizim belirttiğimiz şekilde ağ arabirimlerinden uygun olanını secerek paketi o arabirime cıkarma işlemi router'lerin gorevidir. Gatewaylar genelde protokol cevirme vs. işlemler icin tercih edilir; genelde daha pahalıdırlar.
Sanırım bu can sıkıcı olsa da gerekli olan muhabbet, paketlerin ağ uzerinde nasıl taşındığını anlatmaya yardımcı olmuştur.
Ozetlemek gerekirse,
a. Arabirimler, kendilerine bağlı alt ağları (subnet) tanımalıdır. Ağlar, IP adresi ve netmask ile tarif edilmelidir. IP + netmask ile bulunan ağ adresi duzgun tanımlanmalıdır. Cihaz, bu alt ağa gidecek paketler icin bu arabirimi kullanacaktır.
b. Eğer bir paket arabirimlerin bağlı olduğu alt ağlardan birine değilde, farklı bir ağa gidecekse, erişilebilir durumdaki, arabirimlerden birine bağlı olan subnetlerden birinde, paketi hedef ağa taşıyacak bir router veya gateway bulunmalıdır.
c. Herhangi bir alt ağın kapsamına girmeyen paketlerin hedeflerine ulaşabilmesi icin, tum ağa (internet) ulaşabilen bir gateway/router bulunması gerekir. Bu gateway'e "default gateway" denir. Tariflere uymayan tum paketler, bu gateway'e gonderilir.
Gateway'ler aracılığıyla taşınacak paketler icin, geri donuş yolunda da hedefe ait bilgiler bilinmelidir. Bazen paketin gidiş yolu ile geliş yolu farklı olabilir. Bu arada hic bir cihaz arıza yapmaz diye bir kaide yoktur. Bazen yoldaki bir gecit arıza yapabilir. Veya o an cok fazla yuklu olabilir. Bu durumda paketlerin farklı bir gateway'e gonderilmesi gerekir. İşte bu noktada, birden fazla gateway tanımı yapmak gerekir. Karışık oldu biraz değil mi ? Hangi gateway'in o an icin gecerli olduğu vs. bilmek, koskoca internetteki yuzbinlerce ana omurga gateway'lerini takip etmek imkansızdır. Bu nedenle yol bulma icin ozel protokoller kullanılır. Router/gateway cihazları RIP gibi bu tur protokolleri kullanarak paketler icin yonlendirme tablolarını oluştururlar. Linux sistemlerinde GPL lisanslı routed, bu kabiliyete sahip bir yazılımdır. gated ise sistemi bir gateway'a cevirir, fakat lisansında "Eğer bir yazılım para kazandırıyorsa, bu yazılımı yazana da para vermelisiniz" yazmakta. Yani ticari kullanım icin lisans ucreti gerekmekte.
Şimdi browser'in bilgileri nasıl transfer ettiğine şoyle bir goz atabiliriz. Kullanıcı browser'in adres hanesine adresi yazıp enter tuşuna basınca neler olur ? Oncelikle yazılan adres (orneğin http://www.linux.org.tr/belgeler) icin protokol, makine adı ve dizin/dosya adı ayrılır. Alan adı, ilk "/" işaretinden onceki kısımdır. Alanın adının başındaki "//" işaretinden onceki http:, ftp:, https: gibi olan kısım da bir kenara ayrılarak, saf makine adı elde edilir. IP protokolu icin bu ad bir anlam ifade etmez.>
Bu adın IP adresine cevrilmesi gerekir. Browser'in bulunduğu cihazda onceden tanımlanmış olan DNS (Alan adı sunucusu) adresine bu ad gonderilir. Bu adı taşıyan paket, gerekli gateway'lerden gecerek DNS'e ulaşır. DNS bu bilgiyi alıp veritabanı ile karşılaştırarak bu isme ait IP adresini bulur, bilgiyi isteyen makineye geri gonderir. İstenen ada ait IP adresi bilgisini taşıyan paket, tekrar uygun gateway'lardan gecerek browser'a ulaşır. Browser, artık ulaşacağı makinenin hangisi olduğunu bilmektedir. Hemen biraz once ayırdığı http:, ftp:, gibi protokol bilgisine bakarak, ulaşacağı makinenin hangi hizmeti kullanacağını ve bu hizmeti temsil eden sayı olan port numarası bulur. Eğer proxy.cfo.net:3128 şeklinde port adresi verilmişse, http: vs. bilgisi, hangi protokolun kullanılacağını belirler. Protokol ozel bilgilerini taşıyan paket hazırlanıp, DNS'ten oğrenilen IP adresinin, belirlenen portuna gonderilir.
Bu arada gene gateway, router, firewall vs. pek cok ağ birimi devreye girerek paketi hedefe ulaştırır. Tabii olarak bazen istenmeyen durumlar oluşabilir. Bir gateway protokol şaşırtma ile paketleri alıp başka bir adrese gonderebilir. Bu adreste de bir hacker oturup, paketin icindeki bilgileri guzelce cozebilir. Sonra da paketi asıl hedefine gonderip kimsenin kuşkulanmamasını sağlayabilir. Veya paket hedefe ulaşmayabilir. Bu noktada paket geri gonderilir. Browser'da hedefe ulaşılamıyor diyerek işlemi keser. Eğer paket bu şekilde bir tokezlemeye uğramadan hedefe ulaşırsa, ki genelde boyle olur, paketin nihai hedefi, paket işlenmeden once, paketin alındığına dair bir cevabı derhal istemci makineye gonderir. Ardından paketi uygun surece (web server, ftp server vs.) aktarır. Bu işlem TCP paketlerinin işlenmesi prosedurunu anlatır. Sık kullanılan, fakat sadece belirli amaclar icin kullanılan UDP paketlerinde ise, paketin alındığına dair bilgi geri gonderilmez. Bu nedenle UDP bağlantısız (Connectionless) protokol olarak anılır. Paketlere cıkış noktasında ozel işaretler konabilir. Boylece bir tek IP adresinden farklı farklı hedeflere ulaşabilecek paketler oluşturulabilir. Bir anda 3-4 browser penceresi acıp, her birinden aynı siteye (Aynı IP) bağlanarak farklı veya aynı sayfaları gorebilirsiniz. Bu kolaylık, IP paketlerinin port bilgileri sayesinde yapılır. Aynı zamanda NAT ve masquerading'te bu metotlarla gercekleştirilir. Detaylar icin biraz daha okumaya devam etmelisiniz.
Bu bilgiler ışığında internete ulaşmak icin neler gerektiği şoyle sayılabilir.
a. Bizi internette belirleyecek, sadece bize ait olan bir IP adresi.
b. Gonderdiğimiz paketleri hedefe ulaştıracak, hedeften gelen bilgileri de bize getirecek bir gateway.
c. Web'te adresler yerine isimleri kullanmamızı sağlayacak olan DNS.
d. Mumkunse bizi internetten gelen saldırılardan koruyacak bir firewall.>
e. Gelen paketleri, gidecek paketleri alıp verecek bir veya daha fazla arabirim.
f. Opsiyonel olarak, Protokolleri işleyip bize sunacak, ftp client, web browser, news reader gibi bir program. Nasıl mı opsiyonel ? Artık siz ağın bir parcasısınız. Belki de sorf yerine kendi serverinizi koymak isteyebilirsiniz..
Eğer bu şartlar sağlanırsa, internette dilediğinizi yapabilirsiniz.>
İnternet erişimini derinlemesine incelemek gerektiğinde, OSI katmanlarının tamamını ele almak durumunda kalırsınız. OSI katmanları, ağ uzerinde bilgiyi taşımak uzere bir model sunar. Detaya girmeden en altta ethernet kartı gibi fiziksel cihazlar, ustunde belirleyici ve taşıyıcı protokoller, en ustte ise bu protokollerle gelen bilgiyi işleyecek olan uygulamalar olduğunu belirtelim. OSI'nin ust tarafında bulunan uygulamalar ile alt tarafında bulunan Ana taşıyıcı IP protokolunun arasında, ozel isteklere gore uyarlanmış iletim standartları gorursunuz. Bu standartlardan en iyi bilineni TCP'dir mutlaka. UDP ismide bazen kulağınıza gelir. TCP doğrudan IP protokolune bağlı olarak calışır. Oyleki IP protokolunun adı genelde TCP/IP olarak soylenir. TCP, UDP, ICMP, ICP vs. protokoller IP ile uygulama arasında bilginin uygun olarak sağlanması durumunu gercekleştirir. IP ile gelen bilgi, paketin sadece hangi adresten gelip, hangi adrese gittiği bilgisidir (Birtakım ek bilgilerle beraber, protokol kodu, paket parca parca mı geliyor gibi). Paketin IP altında kalan bilgisi olan protokol ise kendine ozel bir tanımlamaya sahiptir. Bizim ilgi alanımız olan TCP protokolu, bilginin ulaştığı IP adresinde hangi hizmete verileceği ve bu paketin gonderen makinede hangi hizmetten yola cıktığına dair bilgiler icerir. UDP gibi diğer protokollerde genelde benzer bir bilgi taşırlar. İşte paketin hangi hizmetten cıkıp, hangi hizmete gittiğine dair olan bilgiye port adı verilir. IP adresi ve hizmet (servis) bilgisi birlikte bir IP soket (socket) oluştururlar. Ağda haberleşen tum cihazlar paketleri kendi cıkış soketlerinden, hedefin uygun hizmeti sağlayan soketine gonderirler. TCP/IP paketlerinde, IP, 192.168.1.1 gibi gelen ve giden iki IP adresini, TCP ise hangi hizmete gittiğini (Destination) ve hangi hizmetten yola cıktığını (Source) belirten iki port bilgisini bunyesinde bulundurur. Şimdi bir browserin nasıl calıştığına dair birşeyler soyleyebiliriz.
Herhangi bir TCP/IP uygulaması, kullanacağı portu belirlemek durumundadır. Port secimi icin oncelikle istenilen servislerin hangi portta olduğunun bilinmesi gerekir. Eğer uygulama bir web server ise, kullanması gereken port 80. porttur. Hangi portun hangi servise ait olduğu standartlarla belirlenmiştir. Fakat siz dilerseniz bir web serveri 4000, 10000 veya 8080. gibi aklınıza esen herhangi porttan da calıştırabilirsiniz. On koşullar bu portun başka bir hizmet icin kullanımda olmaması, bu web serverden bilgi isteyecek ahalinin de, serverin bu portta olduğunu bilmesidir. Siz ne kadar standartlara uyarsanız, erişilebilirlik oranınız o kadar yuksek olur. Fakat web serverden bilgi istendiği zaman bunu hangi porta gondereceği mechuldur. Cunku standartlar, web serverler 80. portta bulunur der, fakat, serverler http bilgilerini istemci IP'nin şu portuna gondereceklerdir demez. Bu nedenle herhangi bir browser xyz portunu kullanmalıdır diyebilmek mumkun olmaz. Ayrıca ya aynı anda iki browser birden calışırsa ne olur ? Gelen bilginin hangi browser'e ait olduğu nasıl bilinir ? Şimdi şunu duşunebilirsiniz, browserler aynı program, merkezi bir yonlendirici bu sorunu cozer ! Yanılırsınız. TCP/IP ve soketler UNIX'in doğal iletişim metodudur. Bildiğiniz gibi bir UNIX sistemini her hangi bir anda pek cok terminalden, pek cok kişi kullanabilir: RPC. Bu tamamen UNIX sistemini kullanmak demektir. A terminali de, B terminali de aynı harddiski, aynı CPU'yu, aynı RAM'i, aynı ağ arabirimini dolayısıyla aynı IP'yi kullanırlar. A terminali Netscape kullanırken, B mozilla, C ise mutevazi Lynx'i browser olarak kullanabilir. İşte bu programlarda bir hizmet gibi davranırlar, kendilerine sistemden bir port edinirler. TCP/IP belirtimlerinde kullanılmayan herhangi bir portu kendilerine alarak bu portu bilgi almak icin kullanırlar. Bazen sorgulama, bazen rasgele sayı ureterek bir port numarası bulunur. Evet, her yeni browser kopyası, FTP client vs. belli bir portu kullanır, sistemdeki uygun durumda bulunan boş bir portu kapıp kendine ayırır. Portlar sayılarla belirtilir, 0 ile 65535 arasında olabilir. Demekki 1024 adet PIII-5533 CPU, 16TB RAMa sahip bir cihazınız dahi olsa en fazla 65535 browser kopyası calıştırabilirsiniz. Eğer bulunması gereken ceşitli servisleri vs. duşerseniz bu sayı dahada azalacaktır. Browser, IRC clienti, FTP clienti, hepsi sistemin kullanılmayan portlarından birini kapar, aynı programdan iki tane olsa bile ikisi aynı portu kullanmaz, herbiri yeni bir port acar kendisine.
Artık bilgilerin, IP adreslerini ve portları kullanarak nasıl gidip geldiklerini biliyoruz. Server (Hizmet veren), sabit bir portta bekliyor. Client (Hizmet isteyen) kendisine bir port sağlıyor, uygun bilgiyi taşıyan paketi server'e gonderiyor. Clientten servere giden pakette hedef soket ServerIP:ServerPort, yola cıkış soketi ClientIP:ClientPort olarak belirtiliyor. Server gelen bilgiyi cozup, clientin istediği bilgiyi taşıyacak paketi, bu defa hedef soket ClientIP:ClentPort ve yola cıkış soketi ServerIP:ServerPort olacak şekilde hazırlayıp, cliente yolluyor. ceşitli gateway'lerden gecen paket Cliente gelince bilgi isteme aşaması tamamlanmış oluyor. Tabii ki paketler genelde gateway cihazlarından geciyor. Bazı gateway'lar ise biraz daha enteresan şeyler ekliyorlar bu prosedure. İşte masquerading, NAT, firewall vs. bu aşamada onumuze geliyor. masquerading ve NAT temelde aynı prensiple calışıyor. ClientIP ve ClientPort bilgisini kendi IP adresi (NAT IP adresini istendiği şekilde değiştirebilir, masquerading ise sadece kendi gateway cihazı IP'sini verir) ve ozel bir port numarasıyla değiştirir. Ozel port numarası, Orijinal IP ve Port bilgisi bir tabloda saklanır. Paket geri gelince port numarasına tablodan bakıp bunun orijinal IP ve Portunu alarak, clientin gercek soketi elde edilir. Boylece Tek bir gercek IP ile bir cok makine internetteki hizmetlerden faydalanabilir. Dahası, yerel ağ dışarıdan tek bir makine (ağ arabirimi) olarak gorunur. Bunun guvenlik icin pek cok faydaları vardır. Mesela yerel ağınızdaki bir aletteki herhangi bir trojan icin, dışarıdan gelecek portscan sizin masq. (NAT) makinanıza takılacaktır. NAT, masquerading'ten daha fazla opsiyon sunar. Fakat kucuk ağlar icin masquerading yeterli olur. Orneğin NAT, protokole bağlı bir router olarak calışabilir. Makineye gelen web isteklerini yerel ağdaki bir makineye, ftp isteklerini başka bir makineye yonlendirebilir. Boylece dışarıdan bakınca tek bir IP olarak gorunen bir server sitesi oluşturabilirsiniz, bu da hem daha guvenli, hem daha yuksek performanslı bir sistem sağlar.
Şimdi 192.168.1.1 adresinde, 212.252.119.123 IP'si ile internete bağlı bulunan bir masq. kabiliyetli gateway bulunan bir yerel ağ duşunelim. 192.168.1.144 makinesinde bir browser calışsın. Kendine 50000 nolu portu alsın. Bu browserin 212.189.234.45 adresindeki web serverden, istediği web paketini masquerading kullanarak nasıl elde ettiğine bakalım.
Browser makine Kaynak (Paketin cıkış adresi) 192.168.1.1 IP nolu, Hedef (Paketin ulaşacağı adres) 212.189.234.45 IP nolu bir paket hazırlar. Paketin protokol belirtecini TCP olarak ayarlayıp, TCP bilgilerinde, kaynak portu 50000, hedef portu ise 80 olarak duzenler. TCP paketinin kalan kısmına web serverden istediği bilgileri yerleştirir. Paketi hedefe ulaştırılmak uzere gateway cihazına gonderir. Gateway cihazı bu paketi masquerading edecektir. Oncelikle masq. tablosunda sıradaki kullanılmayan port numarasını bulur. Orneğin 61000 nolu port. Şimdi bu port icin masq. tablosuna yeni bir satır eklenir. Bu satırda, 61000. port, 192.168.1.144 adresi ve 50000. porttan geldiği yazılır. Paketin kaynak IP adresini 212.252.119.123 olarak (internete bağlanma icin kullanılan reel IP), kaynak portu ise 61000 olarak duzenlenir. Paket ağa gonderilir. Paketi alan web server istenen bilgiyi taşıyan yeni paketi kaynak soket 212.252.119.45:80 ve hedef soket 212.189.234.45:60000 olarak duzenleyip gatewayimize geri gonderir. Gateway'imiz gelen bu paketin hedef port numarasına bakar. Port numarası 60000 olunca, bunun bir masq. paketi olduğuna karar vererek, masq. tablosunda 60000. port icin yazılı olan satıra bakar. Bu satırda paketin asıl varış adresi olarak 192.168.1.144:50000 gorulmektedir, cunku 61000. porttan yapılan istek bu makineden gelmiştir. Hemen hedef IP ve port bilgileri yerlerine yazılıp, paket yerel ağa bırakılır. Bu pakette gidip istekte bulunan browser'e ulaşır. Client ve server tarafları hic bir şekilde paketin masqerading'le gelip gelmediğini anlayamaz. Sonucta tamamen saydam bir işlev gercekleşir.
IP adreslerinin ağ arabirimlerine verildiğini gorduk Ağ arabirimi denince akla ilk gelen meşhur ethernet kartları. Ağ topolojilerini incelerken ethernet kartlarını anlatmamak olmaz. Uzatmadan kısaca bir kac cumle ile bunları anlatalım.
Ethernet kartları, CSMA/CD denilen protokolle calışır. Bu protokolde bir kart ağa bilgi yollamadan once ağı dinler. Başka kimse yoksa paketi ağa gonderir. Eğer o anda başka bir kart da ağa paket bırakırsa, bu durumda iki paket carpışır. Tıpkı kavşaktan fırlayan arabalar gibi. Ethernet kartları arabalardan farklı olarak carpışmayı hissedip geri cekilerek bir sure sonra tekrar aynı işlemi tekrarlarlar. Arabalar ise genelde hurdalığa gider




__________________