(IP Programlamanın Temelleri - Bölüm 1, Makale 2)
Bir önceki başlık olan 1. dökümanda (http://www.nxyazilim.com/lookme.php?No=8) IP kavramı üzerinde biraz durduktan sonra her network programcısı için elzem olan "network paketlerini analiz etmek" konusuna giriş yapmış, gerekli olan programları (WinPcap, Windump ve Analyzer) temin edip kurma konularına değinmiştim. Daha sonra sabrımızı sınamak için pek de yakışıklı olmayan Windump ile paket analizini anlatmıştım. Bu dersin başında iyi bir network programcısı olmak için sabırlı olmanız gerektiğini tekrar hatırlatıyorum. Bundan sonraki başlıklarda temel konuları işlemeye devam edeceğim. Paket analizinden sonra C# ile ilgili temel bilgilere ve C# ile network programlama konusunda bilmeniz gerekenlere değindikten sonra uygulamaya başlayacağım ki yazdığınız kodların arkaplanda tam olarak neler yaptıklarını bilesiniz.
Network yapılandırılması, çeşitleri, kablolama standartları ve diğer network donanımı, network nasıl çalışır ile ilgili bilgileri internette fazlasıyla bulabilirsiniz. Konuyu dağıtmamak için bunlara kısaca bir değinip geçelim.
1960 'lı yılların sonlarında Hawaii Üniversitesi ALOHA adını verdiği bir geniş ağ kurdu. Üniversitenin amacı kampüsün değişik noktalarına yayılmış olan bilgisayarları birbirine bağlamaktı. Bu network modelinin günümüze kadar gelen en önemli özelliği CSMA/CD olarak adlandırılan tekniktir. CSMA/CD nin açılmış hali carrier detect,multiple access with collusion detect (taşıyıcı sinyalin algılanması, çoklu erişimce çarpışmanın tespiti). Taşıyıcı sinyalin algılanması -carrier sence- ağ kartının kablodan bilgi transfer etmeden önce belirli bir süre hattı dinlediği anlamına da gelir. Çoklu erişim, aynı kabloya birden fazla bilgisayarın bağlanabileceğini belirtir. Çarpışmanın tespiti ise hattaki verilerin çarpışmasını engellemek için alınmış bir güvenlik önlemidir. Bu eski ağ tasarımı bu günkü ethernet in temelidir.1972 yılında XEROX firması deneysel amaçlı ilk ethernet kartını üretti ve 1975 yılında ilk ethernet ürününü piyasaya sürdü. Bu ürünün orijinal versiyonu 2.95 Mbps hızında 1km kablo ile 100 den fazla bilgisayarı birbirine bağlamak üzere tasarlanmıştı. XEROX ethernet kartı çok başarılı oldu. Intel, Xerox ve Digital 10 Mbps ethernet konusunda yeni bir standart getirdiler. Oluşturulan bu standart bugün kabul gören IEEE 802.3 standartı ile büyük benzerlikler göstermektedir. Ethernet networkler değişik kablolar ile bağlanabilir. Ethernet yerel iletişim ağı altında sistemleri birbirine bağlayan bir tür kablolama ve sinyalleşme biçimidir. Bilgisayar haberleşmesinin temelinde OSI modeli geçerlidir. OSI modellemesinde ilk iki katmanda (1. katman -fiziksel- ve 2.inci katman -data link-) belirlenen Ethernet, ilk kez, 1970'lerin sonlarında, Xerox tarafından geliştirilmiştir. 1980'lerde Xerox firmasının DEC ve Intel firmalarıyla ortaklaşa yaptığı çalışmalar sonucunda, Ethernet Versiyon I. için `Blue Book Standard' (Standart Mavi Kitap) adı altında, bu versiyonun kullandığı standartları açıklayan bir kitap ortaya çıkarılmıştır.
www.nexyazilim.com/blog
Networkta verilerin nasıl iletildiği ve paket dediğimiz şeyin ne olduğu ile ilgili kısa bir bilgi verdikten sonra Analyzer ı kullanmaya başlayacağız. Paket, network (veya INTERnational NETwork olan internet:) üzerinde iletilen verilerin üzerine adres vs bilgilerin yazıldıktıktan sonra ağa çıkmak için hazır hale gelmesini ifade eder. Network üzerinde iletilen tüm veriler (bytelar) işletim sistemi (Windows, Linux vs) nin kullandığı veri iletim standardı (IP, ICMP, IPX vs) ve kullandığı protokol (TCP, UDP SNMP vs.) yazılımı tarafından paketlenerek yola çıkmak üzere ethernet kartına gönderilir. Ethernet kartı da kendi yazılımı ile paketleri ağa (kabloya) iletir. Paket ağa iletildikten sonra ya ağdaki router (yönlendirici - switch hub vs.) paketleri gitmesi gereken cihaza yönlendirir veya ağdaki cihazlar sürekli tüm paketleri kontrol ederek kendi adreslerine yönlendirilmiş paketleri alırlar. Her network paketi bilginin iletimine yardımcı olacak çeşitli verileri içeren katmanlar (sıralanmış byte lar) içerir.
IP paketlerinin katman hiyerarşisini aşağıdaki şekilde şematize edebiliriz:

Katmanları Analyzer yardımıyla inceleyelim:
Analyzer programı yardımıyla ağdaki tüm trafiği izleyebilirsiniz. Hangi ip numaralı makine nereye bilgi yollamış ne zaman almış, iletilen bilgi hangi protokol tarafından paketlernmiş, ileten cihazların MAC (Media Access Card) adresleri (üretilen her ağ aygıtının kendi MAC adresi olduğunu biliyorsunuz) nelerdir vs.. Programı kurup çalıştırdıktan sonra aşağıdaki gibi bir ekran göreceksiniz :

En baştaki 'start capture' butonu ile yeni bir ağ trafiği izleme oturumu başlatmak istediğinizde ise aşağıdaki seçenek ekranı gelir:

Burada 'Change Source' ile ağ trafiğini izlemek istediğiniz network arayüzünü (ethernet kartınızı vs) seçebilirsiniz. Ya da birazdan anlatacağım yöntemlerle izlemek istediğiniz paketleri filtreleyebilirsiniz.
www.nexyazilim.com/blog
ETHERNET KATMANI
Network paketindeki ilk katmandır. Ağınızda üç çeşit ethernet protokolü paketi görebilirsiniz. Ethernet 802.2, Ethernet 802.3 ve Ethernet 2.0. Bunlardan 802.2 ve 802.3, IEEE (The Institute of Electrical and Electronics Engineers - LAN standartlarını belirleyen kurum) tarafından ethernet katmanı ağ trafiği için tanımlanmış standart protokoller (frame type - çerçeve tipi) dir. Ethernet sürüm 2.0 ise standart bir protokol olmamakla birlikte ethernet kullanılan protokollerden biridir. Bugün en yaygın paket standardı 802.3 tür.
Analyzer de seçenekleri gördüğünüz ekranda Finish butonunu tıklayarak bir ağ trafiği izleme oturumu başlatın. Trafik izlenirken bir browser yardımıyla www.google.com.tr adresine girin, aşağıdakine benzer bir ekran göreceksiniz. Bu aşamada stop butonu ile yakalamayı durdurun. Şimdi yakalanmış paketlerin listesini görüyorsunuz. Bunları biraz kurcalayın, inceleyin.
Aşağıda kendi bilgisayarımda aynı işlemi yaptığımda aldığım sonucu görüyorsunuz. Ethernet 802.3 başlığı altında ethernet katmanı ile ilgili bilgiler mevcut.

Her network paketi aşağıdaki bilgileri (sırasıyla) içerir.
- 6 byte lık bir alıcı cihaz MAC adresi bilgisi
- 6 byte lık bir gönderici cihaz MAC adresi bilgisi
- 2 byte lık bir protokol bilgisi
- 46 byte tan 1500 byte a kadar uzun olabilecek iletilen veri bilgisi
- 4 byte lık bir doğrulama kodu
Bu durumda içinde hiç iletilecek veri olmayan bir paket 6 + 6 + 2 + 4 = 18 byte lık bir paket olarak karşımıza çıkmaktadır. IP protokolünde networkta iletebileceğiniz minimum paket büyüklüğü ise 64 byte tır. Bu sınırlama (64 byte tan düşük uzunluktaki paketlerin paket olarak kabul edilmemesi) verilerin kaybolmasını engelleyen bir standarttır. Eğer gönderilecek veri 64 byte tan küçükse protokol tarafından pakete dolgu karakterleri eklenmektedir. 'Checksum' denilen doğrulama kodunu da bir formül olarak düşünebilirsiniz. Gönderici tarafta gönderilen veriler baz alınarak uygulanan belli bir formülle bulunan checksum değeri alıcı tarafta da yine aynı verilere aynı formül uygulandığında aynı çıkmalıdır, aksi taktirde paket iletilirken dış etkenler (elektrik, manyetik vs) kaynaklı bir hata oluştuğu varsayılır. Bu durumda kullandığınız protokol/yazılım ile veriler tekrar istenir (veya kötü bir yazılımda istenmez :)
www.nexyazilim.com/blog
Şimdi ethernet başlığının içerdiği Ethernet (MAC) adresi ve protokol bilgilerine yakından bir bakalım.
Ethernet (MAC) Adresi Bilgisi
Ağ cihazlarının MAC adresleri üreticiler tarafından atanır (cihaz üzerindeki çiplere kaydedilir) ve değiştirilemez. (Yazılım yoluyla sahte MAC adresi iletilebiliyordur :) Ethernet ağındaki her cihazın kendine özel bir MAC adresi olmak zorundadır. Bir MAC adresi 2 parçadan oluşur:
- Üreticiyi gösteren ilk 3 byte
- Cihaz seri numarasını gösteren son 3 byte
Her 3 byte, 2 üssü 24 = 16.777.215 değişik rakam alabileceğinden MAC adres atamada üreticiler açısından bir problem yaşanmayacaktır. The Internet Assigned Numbers Authority (IANA) adlı kuruluş MAC adreslerini organize ederek çakışmaların oluşmasını engellemektedir. www.iana.org sitesinde 'Internet Request For Comments (RFC)' dökümanlarında bu numaraların firmalara göre listesini bulabilirsiniz.
Aşağıda en çok kullanılan üreticilerin ilk 3 byte larını hex olarak görmektesiniz. (Network trafiği izleme araçları MAC adreslerini hex olarak verirler.)
MAC İlk 3 Byte Üretici
00000C Cisco
00005E IANA
0000AA Xerox machines
0000C0 Western Digital
0000E2 Acer Counterpoint
0020AF 3COM
008064 Wyse Technology / Link Technologies
0080C2 IEEE 802.1 Committee
00AA00 Intel
02608C 3Com IBM PC; Imagen; Valid; Cisco
080002 3Com (formerly Bridge)
080009 Hewlett-Packard
08000B Unisys
080011 Tektronix, Inc.
080020 Sun machines
080046 Sony
08005A IBM
080069 Silicon Graphics
3 byte lık bir üretici tanımından sonra gelen 3 byte lık ürün seri numarasıyla birlikte 6 byte lık Ethernet (MAC) adresini elde etmiş oluyoruz. MAC adresleri aşağıdaki şekillerde gösterilir:
- Tek bir değer gibi : 0020AFFCCEC3
- İki nokta üstüstteler kullanılarak : 00:20:AF:FC:CE:C3
- Tireler kullanılarak : 00-20-AF-FC-CE-C3
- 3 Bytlık parçalara bölünerek : 0020AF-FCCEC3
Her cihazın özel adresine ilave olarak ethernet adresleme sistemi broadcast (yayınlama) ve multicast (çoklu hedefe gönderim) adreslerini de destekler. Broadcast adreslerde hedef adresin tüm bitleri SET edilir (1 olur). Bu durumda FFFFFFFFFFFF hex adresi elde edilir. Bu durumda ağda bulunan cihazlar Ethernet Broadcast adresine yönlendirilmiş tüm paketlere bakarlar. Bu adresleme ağdaki tüm paketleri sorgulayan protokoller için kullanışlıdır, ARP (Address Resolution Protocol, yani Adres Çözümleme Protokolü)gibi örneğin ağdaki bir terminalin belli bir IP adresini araması durumunda. (detaylara ileride gireceğiz) Multicast adresler ise ethernet adreslerin özel bir çeşididir. Sadece belli cihazlar paketleri sorgularken bu adresleri ararlar. Cihaz üzerindeki yazılım multicast adresleri algılayacak şekilde hazırlanmış olmalıdır.
www.nexyazilim.com/blog
Ethernet Protokol Tipi Bilgisi
Protokol bilgisi IP paketimizdeki ethernet başlığı altında bulunan bir diğer önemli bilgidir. Ethernet 2.0 paketi ile Ethernet 802.2 - 802.3 paketleri arasındaki fark protokol tipi bilgisinde ortaya çıkar. 802.2 ve 802.3 paketleri paketin aynı yerinde 2 byte lık paket büyüklüğünü gösteren bilgiyi tutarlar. Ethernet 2.0 da ise aynı yerdeki bu 2 byte lık bilgi bize paketin çözümlemesinde kullanılacak protokolün ne olduğunu verir.
Ethernet üretici numaralarını atayan IANA protokol bilgisi numaralarını da atamıştır. Aşağıda en çok kullanılanların listesini görebilirsiniz.
Değer (Hex) Protokol
0800 IP
0806 ARP
0BAD Banyan VINES
8005 HP Probe
8035 Reverse ARP
809B AppleTalk
80D5 IBM SNA
8137 Novell
8138 Novell
814C Raw SNMP
86DD IPv6
876B TCP/IP sıkıştırma
IP programlama konulu bu dökümanımızın ilerleyen kısımlarında yapacağımız IP paket analizlerinde 0800 hex değerini sıklıkla göreceksiniz.
Network standartları ve Ethernet katmanı ile ilgili bunca bilgiden sonra IP Katmanı na bir sonraki dökümanda değineceğim
www.nexyazilim.com/blog