INTERNET CONTROL MESSAGE PROTOCOL

Aziz Ünsal (aziz.unsal@students.comu.edu.tr)
Çanakkale Onsekiz Mart Üniversitesi,
Bilgisayar Mühendisliği Bölümü


10/05/2003 - Bu belgede ICMP ' nin  ne olduğu ,ICMP paketinin yapısı, ICMP mesajları ve ICMP'nin TCP içindeki yeri hakkında bilgi verilmektedir.


İçindekiler

 

1.TCP/IP  Bileşenleri ve ICMP'nin Yeri
       1.1.TCP Katmanı
       1.2.IP Katmanı
       1.3.Fİziksel Katman
       1.4.ICMP nin Gerekliliği
 
2.ICMP
       2.1.ICMP Niçin Kullanılır?
       2.2.ICMP Paketinin Yapısı ve Formatı
       2.3.ICMP Mesaj Tipleri ve Bunlara Göre Datagram İçeriği
 
3.PING NEDİR ?  PING Paketinin İncelenmesi
       3.1. Örnek PING Paketi
       3.2.ICMP Başlığı
       3.3.ICMP Başlığı Öğeleri
      3.4. IP Başlığı
       3.5.IP Başlığı Öğeleri
 
4.ICMP Echo Request Paketi
       4.1.CRC Hesaplanması
      4.2.CRC Hesaplam Yöntemi
 
5.Kısaltmalar
6.Kaynaklar
7.Yasal Açıklamalar

 

 


  1. TCP/IP Bileşenleri ve ICMP'nin Yeri


    TCP/IP katmanlardan olusan bir protokoller kumesidir. Her katman degisik gorevlere sahip olup altindaki ve ustundeki katmanlar ile gerekli bilgi alisverisini saglamakla yukumludur. Asagidaki sekilde bu katmanlar bir blok sema halinde gosterilmektedir.

                                           Çizim- TCP/IP katmanlari

TCP/IP katmanlarinin tam olarak ne oldugu, nasil calistigi konusunda bir fikir sahibi olabilmek icin bir ornek uzerinde inceleyelim:

TCP/IP nin kullanildigi en onemli servislerden birisi elektronik postadir (e-posta). E- posta servisi icin bir uygulama protokolu belirlenmistir (SMTP). Bu protokol e- posta’nin bir bilgisayardan bir baska bilgisayara nasil iletilecegini belirler. Yani e- postayi gonderen ve alan kisinin adreslerinin belirlenmesi, mektup iceriginin hazirlanmasi vs. gibi. Ancak e-posta servisi bu mektubun bilgisayarlar arasinda nasil iletilecegi ile ilgilenmez, iki bilgisayar arasinda bir iletisimin oldugunu varsayarak mektubun yollanmasi gorevini TCP ve IP katmanlarina birakir. TCP katmani komutlarin karsi tarafa ulastirilmasindan sorumludur. Karsi tarafa ne yollandigi ve hatali yollanan mesajlarin tekrar yollanmasinin kayitlarini tutarak gerekli kontrolleri yapar. Eger gonderilecek mesaj bir kerede gonderilemeyecek kadar buyuk ise (Ornegin uzunca bir e-posta gonderiliyorsa) TCP onu uygun boydaki segment’lere (TCP katmanlarinin iletisim icin kullandiklari birim bilgi miktari) böler ve bu segment’lerin karsi tarafa dogru sirada, hatasiz olarak ulasmalarini saglar. Internet uzerindeki tek servis e-posta olmadigi icin ve segment’lerin karsi tarafa hatasiz ulastirilmasini saglayan iletisim yontemine tüm diger servisler de ihtiyac duydugu icin TCP ayri bir katman olarak calismakta ve tüm diger servisler onun uzerinde yer almaktadir. Boylece yeni bir takim uygulamalar da daha kolay gelistirilebilmektedir. Üst seviye uygulama protokollerinin TCP katmanini cagirmalari gibi benzer sekilde TCP de IP katmanini cagirmaktadir. Ayrica bazi servisler TCP katmanina ihtiyac duymamakta ve bunlar direk olarak IP katmani ile gorusmektedirler. Boyle belirli gorevler icin belirli hazir yordamlar olusturulmasi ve protokol seviyeleri insa edilmesi stratejisine ‘katmanlasma’ adi verilir. Yukarida verilen ornekteki e- posta servisi (SMTP), TCP ve IP ayri katmanlardir ve her katman altindaki diger katman ile konusmakta diger bir deyisle onu cagirmakta ya da onun sundugu sevisleri kullanmaktadir. En genel haliyle TCP/IP uygulamalari 4 ayri katman kullanir.

Bunlar:

- Bir uygulama protokolu, mesela e-posta

- Ust seviye uygulama protokollerinin gereksinim duydugu TCP gibi bir protokol katmani

- IP katmani. Gonderilen bilginin istenilen adrese yollanmasini saglar.

- Belirli bir fiziksel ortami saglayan protokol katmani. Örneğin Ethernet, seri hat, X.25 vs.

Internet birbirine gecis yollari (gateway) ile baglanmis cok sayidaki bagimsiz bilgisayar aglarindan olusur ve buna ‘catenet model’ adi verilir. Kullanici bu aglar uzerinde yer alan herhangi bir bilgisayara ulasmak isteyebilir. Bu islem esnasinda kullanici farkina varmadan bilgiler, duzinelerce ag uzerinden gecis yapip varis yerine ulasirlar. Bu kadar islem esnasinda kullanicinin bilmesi gereken tek sey ulasmak istedigi noktadaki bilgisayarin ‘Internet adresi’ dir. Bu adres toplam 32 bit uzunlugunda bir sayidir. Fakat bu sayi 8 bitlik 4 ayri ondalik sayi seklinde kullanilir (144.122.199.20 gibi). Bu 8 bitlik gruplara ‘octet’ ismi de verilir. Bu adres yapisi genelde karsidaki sistem hakkinda bilgi de verir. Mesela 144.122 ODTU icin verilmis bir numaradir. ODTU ucuncu octet’i kampus icindeki birimlere dagitmistir. Ornegin, 144.122.199 bilgisayar merkezinde bulunan bir Ethernet agda kullanilan bir adrestir. Son octet ise bu Ethernete 254 tane bilgisayar baglanmasina izin verir (0 ve 255 bilgisayar adreslemesinde kullanilmayan ozel amacli adresler oldugu icin 254 bilgisayar adreslenebilir).

IP baglantisiz “connectionless” ag teknolojisini kullanmaktadir ve bilgi “datagramlar” (TCP/IP temel bilgi birim miktari) dizisi halinde bir noktadan digerine iletilir. Buyuk bir bilgi grubunun (buyuk bir dosya veya e-posta gibi) parcalari olan “datagram” ag uzerinde tek basina yol alir. Mesela 15000 octet’lik bir kütük pek cok ağ tarafindan bir kere de iletilemeyecek kadar buyuk oldugu icin protokoller bunu 30 adet 500 octetlik datagramlara boler. Her datagram ag uzerinden tek tek yollanir ve bunlar karsi tarafta yine 15000 octet lik bir kutuk olarak birlestirilir. Dogal olarak once yola cikan bir datagram kendisinden sonra yola cikan bir datagramdan sonra karsiya varabilir veya ag uzerinde olusan bir hatadan dolayi bazi datagramlar yolda kaybolabilir. Kaybolan veya yanlis sirada ulasan datagramlarin siralanmasi veya hatali gelenlerin yeniden alinmasi hep ust seviye protokollerce yapilir. Bu arada “paket” ve “datagram” kavramlarina bir aciklama getirmek yararli olabilir. TCP/IP ile ilgili kavramlarda “datagram” daha dogru bir terminolojidir. Zira datagram TCP/IP de iletisim icin kullanilan birim bilgi miktaridir. Paket ise fiziksel ortamdan (Ethernet, X.25 vs.) ortama degisen bir buyukluktur. Mesela X.25 ortaminda datagramlar 128 byte lik paketlere donusturulup fiziksel ortamda boyle tasinirlar ve bu islemle IP seviyesi hic ilgilenmez. Dolayisiyla bir IP datagrami X.25 ortaminda birden cok paketler halinde tasinmis olur.

 

1.1.TCP katmani

TCP ’nin (“transmission control protocol-iletisim kontrol protokolu”) temel islevi, ust katmandan (uygulama katmani) gelen bilginin segment ler haline donusturulmesi, iletisim ortaminda kaybolan bilginin tekrar yollanmasi ve ayri siralar halinde gelebilen bilginin dogru sirada siralanmasidir. IP (“internet protocol”) ise tek tek datagramlarin yonlendirilmesinden sorumludur. Bu acidan bakildiginda TCP katmaninin hemen hemen tum isi ustlendigi gorulmekle beraber (kucuk aglar icin bu dogrudur) buyuk ve karmasik aglarda IP katmani en onemli gorevi ustlenmektedir. Bu gibi durumlarda degisik fiziksel katmanlardan gecmek, dogru yolu bulmak cok karmasik bir is halini almaktadir.

Su ana kadar sadece Internet adresleri ile bir noktadan diger noktaya ulasilmasi konusundan bahsettik ancak birden fazla kisinin ayni sisteme ulasmak istemesi durumunda neler olacagi konusuna henuz bir aciklik getirmedik. Dogal olarak bir segment’i dogru varis noktasina ulastirmak tek basina yeterli degildir. TCP bu segment’in kime ait oldugunu da bilmek zorundadir. “Demultiplexing” bu soruna care bulan yontemdir. TCP/IP ‘de degisik seviyelerde “demultiplexing” yapilir. Bu islem icin gerekli bilgi bir seri “baslik” (header) icinde bulunmaktadir. Baslik, datagram’a eklenen basit bir kac octet’den olusan bir bilgiden ibarettir. Yollanmak istenen mesaji bir mektuba benzetecek olursak baslik o mektubun zarfi ve zarf uzerindeki adres bilgisidir. Her katman kendi zarfini ve adres bilgisini yazip bir alt katmana iletmekte ve o alt katmanda onu daha buyuk bir zarfin icine koyup uzerine adres yazip diger katmana iletmektedir. Benzer islem varis noktasinda bu sefer ters sirada takip edilmektedir.

Bir ornek vererek aciklamaya calisirsak: Asagidaki noktalar ile gosterilen satir bir noktadan diger bir noktaya gidecek olan bir dosyayi temsil etsin,

...............

TCP katmani bu dosyayi tasinabilecek buyuklukteki parcalara ayirir:

... ... ... ... ...

Her segment’in basina TCP bir baslik koyar. Bu baslik bilgisinin en onemlileri ‘port numarasi’ ve ‘sira numarasi’ dir. Port numarasi, ornegin birden fazla kisinin ayni anda dosya yollamasi veya karsidaki bilgisayara baglanmasi durumunda TCP’nin herkese verdigi farkli bir numaradir. Uc kisi ayni anda dosya transferine baslamissa TCP, 1000, 1001 ve 1002 “kaynak” port numaralarini bu uc kisiye verir boylece herkesin paketi birbirinden ayrilmis olur. Ayni zamanda varis noktasindaki TCP de ayrica bir “varis” port numarasi verir. Kaynak noktasindaki TCP nin varis port numarasini bilmesi gereklidir ve bunu iletisim kuruldugu anda TCP karsi taraftan ogrenir. Bu bilgiler basliktaki “kaynak” ve “varis” port numaralari olarak belirlenmis olur. Ayrica her segment bir “sira” numarasina sahiptir. Bu numara ile karsi taraf dogru sayidaki segmenti eksiksiz alip almadigini anlayabilir. Aslinda TCP segmentleri degil octet leri numaralar. Diyelim ki her datagram icinde 500 octet bilgi varsa ilk datagram numarasi 0, ikinci datagram numarasi 500, ucuncusu 1000 seklinde verilir. Baslik icinde bulunan ucuncu onemli bilgi ise “kontrol toplami” (Checksum) sayisidir. Bu sayi segment icindeki tum octet ler toplanarak hesaplanir ve sonuc basligin icine konur. Karsi noktadaki TCP kontrol toplami hesabini tekrar yapar. Eger bilgi yolda bozulmamissa kaynak noktasindaki hesaplanan sayi ile varis noktasindaki hesaplanan sayi ayni cikar. Aksi takdirde segment yolda bozulmustur bu durumda bu datagram kaynak noktasindan tekrar istenir. Asagida bir TCP segmenti ornegi verilmektedir.

                   

                               Çizim-TCP Segmenti

Eger TCP basligini “T” ile gosterecek olursak yukarda noktalarla gosterdigimiz dosya asagidaki duruma gelir:

T... T... T... T... T...

Baslik icinde bulunan diger bilgiler genelde iki bilgisayar arasinda kurulan baglantinin kontrolune yoneliktir. Segment’in varisinda alici gonderici noktaya bir “onay” (acknowledgement) yollar. Ornegin kaynak noktasina yollanan “onay numarasi” (Acknowledgement number) 1500 ise octet numarasi 1500 e kadar tum bilginin alindigini gosterir. Eger kaynak noktasi belli bir zaman icinde bu bilgiyi varis noktasindan alamazsa o bilgiyi tekrar yollar. “Pencere” bilgisi bir anda ne kadar bilginin gonderilecegini kontrol etmek icin kullanilir. Burada amac her segment’in gonderilmesinden sonra karsiya ulasip ulasmadigi ile ilgili onay (ack) beklenmesi yerine segment’leri onay beklemeksizin pencere bilgisine gore yollamaktir. Zira yavas hatlar kullanilarak yapilan iletisimde onay beklenmesi iletisimi cok daha yavaslatir. Diger taraftan cok hizli bir sekilde surekli segment yollanmasi karsi tarafin bir anda alabileceginden fazla bir trafik yaratacagindan yine problemler ortaya cikabilir. Dolayisiyla her iki taraf o anda ne kadar bilgiyi alabilecegini “pencere” bilgisi icinde belirtir. Bilgisayar bilgiyi aldikca pencere alanindaki bos yer azalir ve sifir oldugunda yollayici bilgi yollamayi durdurur. Alici nokta bilgiyi isledikce pencere artar ve bu da yeni bilgiyi karsidan kabul edebilecegini gosterir. “Acil isareti” ise bir kontrol karakteri veya diger bir komut ile transferi kesmek vs. amaclarla kullanilan bir alandir. Bunlar disinda ki alanlar TCP protokolunun detaylari ile ilgili oldugu icin burada anlatilmayacaktir.

 

1.3.IP katmani

TCP katmanina gelen bilgi segmentlere ayrildiktan sonra IP katmanina yollanir. IP katmani, kendisine gelen TCP segmenti icinde ne oldugu ile ilgilenmez. Sadece kendisine verilen bu bilgiyi ilgili IP adresine yollamak amacindadir. IP katmaninin gorevi bu segment icin ulasilmak istenen noktaya gidecek bir “yol” (route) bulmaktir. Arada gecilecek sistemler ve gecis yollarinin bu paketi dogru yere gecirmesi icin kendi baslik bilgisini TCP katmanindan gelen segment’e ekler. TCP katmanindan gelen segmentlere IP basliginin eklenmesi ile olusturulan IP paket birimlerine datagram adi verilir. IP basligi eklenmis bir datagram asagidaki cizimde gosterilmektedir:

                   

                                                                                Çizim -IP Datagram

Bu basliktaki temel bilgi kaynak ve varis Internet adresi (32-bitlik adres, 144.122.199.20 gibi), protokol numarasi ve kontrol toplamidir. Kaynak Internet adresi tabiiki sizin bilgisayarinizin Internet adresidir. Bu sayede varis noktasindaki bilgisayar bu paketin nereden geldigini anlar. Varis Internet adresi ulasmak istediginiz bilgisayarin adresidir. Bu bilgi sayesinde aradaki yonlendiriciler veya gecis yollari (gateway) bu datagram’i nereye yollayabileceklerini bilirler. Protokol numarasi IP’ye karsi tarafta bu datagram’i TCP’ye vermesi gerektigini soyler. Her ne kadar IP trafiginin cogunu TCP kullansa da TCP disinda bazi protokollerde kullanilmaktadir dolayisiyla protokoller arasi bu ayrim protokol numarasi ile belirlenir. Son olarak kontrol toplami IP basliginin yolda bozulup bozulmadigini kontrol etmek icin kullanilir. Dikkat edilirse TCP ve IP ayri ayri kontrol toplamlari kullanmaktalar. IP kontrol toplami baslik bilgisinin bozulup bozulmadigi veya mesajin yanlis yere gidip gitmedigini kontrol icin kullanilir. Bu protokollerin tasarimi sirasinda TCP’nin ayrica bir kontrol toplami hesaplamasi ve kullanmasi daha verimli ve guvenli bulundugu icin iki ayri kontrol toplami alinmasi yoluna gidilmistir.

IP basligini “I” ile gosterecek olursak IP katmanindan cikan ve TCP verisi tasiyan bir datagram su hale gelir:

IT...IT...IT...IT...IT...

Basliktaki “Yasam suresi” (Time to Live) alani IP paketinin yolculugu esnasinda gecilen her sistemde bir azaltilir ve sifir oldugunda bu paket yok edilir. Bu sayede olusmasi muhtemel sonsuz donguler ortadan kaldirilmis olur. IP katmaninda artik baska baslik eklenmez ve iletilecek bilgi fiziksel iletisim ortami uzerinden yollanmak uzere alt katmana (bu Ethernet, X.25, telefon hatti vs. olabilir) yollanir.

 

1.4.Fiziksel katman

Fiziksel katman gercekte Data Link Connection (DLC) ve Fiziksel ortami icermektedir. Ancak biz burada bu ara katmanlari genlleyip tumune Fiziksel katman adini verecegiz. Gunumuzde pek cok bilgisayar aginin Etherneti temel iletisim ortami olarak kullanmasindan dolayi da Ethernet teknolojisini ornek olarak anlatacagiz. Dolayisiyla burada Ethernet ortaminin TCP/IP ile olan iletisimini aciklayacagiz. Ethernet kendine has bir adresleme kullanir. Ethernet tasarlanirken dunya uzerinde herhangi bir yerde kullanilan bir Ethernet kartinin tum diger kartlardan ayrilmasini saglayan bir mantik izlenmistir. Ayrica, kullanicinin Ethernet adresinin ne oldugunu dusunmemesi icin her Ethernet karti fabrika cikisinda kendisine has bir adresle piyasaya verilmektedir. Her Ethernet kartinin kendine has numarasi olmasini saglayan tasarim 48 bitlik fiziksel adres yapisidir. Ethernet kart ureticisi firmalar merkezi bir otoriteden uretecekleri kartlar icin belirli buyuklukte numara bloklari alir ve uretimlerinde bu numaralari kullanirlar. Boylece baska bir ureticinin karti ile bir cakisma meydana gelmez. Ethernet teknoloji olarak yayın teknolojisini (broadcast medium) kullanir. Yani bir istasyondan Ethernet ortamina yollanan bir paketi o Ethernet agindaki tum istasyonlar görur. Ancak dogru varıs noktasinin kim oldugunu, o aga bagli makinalar Ethernet basligindan anlarlar. Her Ethernet paketi 14 octet’lik bir basliga sahiptir. Bu baslikta kaynak ve varis Ethernet adresi ve bir tip kodu vardir. Dolayisiyla ag uzerindeki her makina bir paketin kendine ait olup olmadigini bu basliktaki varis noktasi bilgisine bakarak anlar (Bu Ethernet teknolojisindeki en onemli guvenlik bosluklarindan birisidir). Bu noktada Ethernet adresleri ile Internet adresleri arasinda bir baglanti olmadigini belirtmekte yarar var. Her makina hangi Ethernet adresinin hangi Internet adresine karsilik geldigini tutan bir tablo tutmak durumundadir (Bu tablonun nasil yaratildigi ilerde aciklanacaktir). Tip kodu alani ayni ag uzerinde farkli protokollerin kullanilmasini saglar. Dolayisiyla ayni anda TCP/IP, DECnet, IPX/SPX gibi protokoller ayni ağ üzerinde çalisabilir. Her protokol basliktaki tip alanina kendine has numarasini koyar. Kontrol toplami (Checksum) alanindaki deger ile komple paket kontrol edilir. Alici ve vericinin hesapladigi degerler birbirine uymuyorsa paket yok edilir. Ancak burada kontrol toplami basligin icine degilde paketin sonuna konulur. Ethernet katmaninda işlenip gönderilen mesaj ya da bilginin (Bu bilgi paketlerine frame adi verilir) son hali asagidaki duruma gelir:

       Çizim-Ethernet Paketi

Ethernet basligini “E” ile ve Kontrol toplamini “C” ile gosterirsek yolladigimiz dosya su sekli alir:

EIT...C EIT...C EIT...C EIT...C EIT...C

Bu paketler (frame) varis noktasinda alindiginda butun basliklar uygun katmanlarca atilir. Ethernet arayuzu Ethernet baslik ve kontrol toplamini atar. Tip koduna bakarak protokol tipini belirler ve Ethernet cihaz surucusu (device driver) bu datagram’i IP katmanina gecirir. IP katmani kendisi ile ilgili katmani atar ve protokol alanina bakar, protokol alaninda TCP oldugu icin segmenti TCP katmanina gecirir. TCP sira numarasina bakar, bu bilgiyi ve diger bilgileri iletilen dosyayiyi orijinal durumuna getirmek icin kullanir. Sonucta bir bilgisayar diger bir bilgisayar ile iletisimi tamamlar.

 

Ethernet encapsulation: ARP

Yukarida Ethernet uzerinde IP datagramlarin nasil yer aldigindan bahsettik. Fakat aciklanmadan kalan bir nokta bir Internet adresi ile iletisime gecmek icin hangi Ethernet adresine ulasmamiz gerektigi idi. Bu amacla kullanilan protokol ARP’dir (“Address Resolution Protocol”). ARP aslinda bir IP protokolu degildir ve dolayisiyla ARP datagramlari IP basligina sahip degildir. Varsayalimki bilgisayariniz 128.6.4.194 IP adresine sahip ve siz de 128.6.4.7 ile iletisime gecmek istiyorsunuz. Sizin sisteminizin ilk kontrol edecegi nokta 128.6.4.7 ile ayni ag uzerinde olup olmadiginizdir. Ayni ag uzerinde yer aliyorsaniz, bu Ethernet uzerinden direk olarak haberlesebileceksiniz anlamina gelir. Ardindan 128.6.4.7 adresinin ARP tablosunda olup olmadigi ve Ethernet adresini bilip bilmedigi kontrol edilir. Eger tabloda bu adresler varsa Ethernet basligina eklenir ve paket yollanir. Fakat tabloda adres yoksa paketi yollamak icin bir yol yoktur. Dolayisiyla burada ARP devreye girer. Bir ARP istek paketi ag uzerine yollanir ve bu paket icinde “128.6.4.7” adresinin Ethernet adresi nedir sorgusu vardir. Ag uzerindeki tum sistemler ARP istegini dinlerler bu istegi cevaplandirmasi gereken istasyona bu istek ulastiginda cevap ag uzerine yollanir. 128.6.4.7 istegi gorur ve bir ARP cevabi ile “128.6.4.7 nin Ethernet adresi 8:0:20:1:56:34” bilgisini istek yapan istasyona yollar. Bu bilgi, alici noktada ARP tablosuna islenir ve daha sonra benzer sorgulama yapilmaksizin iletisim mumkun kilinir. Ag uzerindeki bazi istasyonlar surekli agi dinleyerek ARP sorgularini alip kendi tablolarini da guncelleyebilirler.

 

TCP disindaki diger protokoller: UDP ve ICMP

Yukarida sadece TCP katmanini kullanan bir iletisim turunu acikladik. TCP gordugumuz gibi mesaji segment’lere bolen ve bunlari birlestiren bir katmandi. Fakat bazi uygulamalarda yollanan mesajlar tek bir datagram’in icine girebilecek buyukluktedirler. Bu cins mesajlara en guzel ornek adres kontroludur (name lookup). Internet uzerindeki bir bilgisayara ulasmak icin kullanicilar Internet adresi yerine o bilgisayarin adini kullanirlar. Bilgisayar sistemi baglanti kurmak icin calismaya baslamadan once bu ismi Internet adresine cevirmek durumundadir. Internet adreslerinin isimlerle karsilik tablolari belirli bilgisayarlar uzerinde tutuldugu icin kullanicinin sistemi bu bilgisayardan bu adresi sorgulayip ogrenmek durumundadir. Bu sorgulama cok kisa bir islemdir ve tek bir segment icine sigar. Dolayisiyla bu is icin TCP katmaninin kullanilmasi gereksizdir. Cevap paketinin yolda kaybolmasi durumunda en kotu ihtimalle bu sorgulama tekrar yapilir. Bu cins kullanimlar icin TCP nin alternatifi protokoller vardir. Boyle amaclar icin en cok kullanilan protokol ise UDP’dir(User Datagram Protocol).

 UDP datagramlarin belirli siralara konmasinin gerekli olmadigi uygulamalarda kullanilmak uzere dizayn edilmistir. TCP’de oldugu gibi UDP’de de bir baslik vardir. Ag yazilimi bu UDP basligini iletilecek bilginin basina koyar. Ardindan UDP bu bilgiyi IP katmanina yollar. IP katmani kendi baslik bilgisini ve protokol numarasini yerlestirir (bu sefer protokol numarasi alanina UDP’ye ait deger yazilir). Fakat UDP TCP’nin yaptiklarinin hepsini yapmaz. Bilgi burada datagramlara bolunmez ve yollanan paketlerin kayidi tutulmaz. UDP’nin tek sagladigi port numarasidir. Boylece pek cok program UDP’yi kullanabilir. Daha az bilgi icerdigi icin dogal olarak UDP basligi TCP basligina gore daha kisadir. Baslik, kaynak ve varis port numaralari ile kontrol toplamini iceren tum bilgidir.

 Diger bir protokol ise ICMP’dir (“Internet Control Message Protocol”).

                                                          Çizim- Katmanlar arasi bilgi akis

2.ICMP Nedir?


    ICMP, hata mesajlari ve TCP/IP yaziliminin bir takim kendi mesaj trafigi amaclari icin kullanilir. Mesela bir bilgisayara baglanmak istediginizde sisteminiz size “host unreachable” ICMP mesaji ile geri donebilir. ICMP ağ hakkinda bazi bilgileri toplamak amaci ile de kullanilir. ICMP yapi olarak UDP’ye benzer bir protokoldur. ICMP de mesajlarini sadece bir datagram icine koyar. Bununla beraber UDP’ye gore daha basit bir yapidadir. Baslik bilgisinde port numarasi bulundurmaz. Butun ICMP mesajlari ag yaziliminin kendisince yorumlanir, ICMP mesajinin nereye gidecegi ile ilgili bir port numarasina gerek yoktur. ICMP ‘yi kullanan en populer Internet uygulamasi PING komutudur. Bu komut yardimi ile Internet kullanicilari ulasmak istedikleri herhangi bir bilgisayarin acik olup olmadigini, hatlardaki sorunlari aninda test etmek imkanina sahiptirler Su ana kadar gordugumuz katmanlari ve bilgi akisinin nasil oldugunu asagidaki sekilde daha acik izleyebiliriz.  

   ICMP  TCP/IP' nin işlemesine yardımcı olan bir protokoldür. Her hostta mutlaka ICMP protokolü çalışır. Hata durumunda host tarafından geri bilgilendirmeyi sağlar.

    Alıcı makineye mesajların gönderilmesi esnasında çoğu zaman problemlerle karşılaşılınabilir. Örneğin; TTL'nin zamanının geçmesi, fragmented datagramların toplanmasında karışıklık olaması, rota yolunun kaybolması. Burada, olası problemi gönderen makineye bildiren ve rota işlemlerindeki hataları kontrol eden protokol devreye girer. Hata mesajları gönderen makineye gider. Böylece o hata tipi belirlenerek, düzeltilir ve tekrar gönderilir. Ip'nin tamamlayıcı bir parçası gibidir.

    ICMP'de iki tane encapsulation olur: Ip datagrama ekleme ve network frame ekleme;

                                             

                                                   Mesaj türüne göre datagram parçası değişse de, header yapısı aynıdır;                                          

 

                                                               

                                                                           OSI Başvuru Modelinde ICMP nin Yeri

Internet protokolü (IP) hata-raporlama veya hata-düzeltme mekanizmalarına sahip değildir; bu işler ICMP denilen bir modüle kalır. ICMP bir host bilgisayarı veya bir gateway’de IP’nin yanında yer alır.

ICMP paketleri ortamda bir
geri besleme sağlarlar. Bu yolla ciddi sorunları, haberleşen birimlere bildirerek bir hata bildirim mekanizması oluştururlar. Ancak buradan ICMP’nin IP’yi güvenilir bir protokol haline dönüştürme amacı ile geliştirildiği yargısı çıkarılmamalıdır.

ICMP mesajı, IP paketinin veri bölümünde taşınır. Bu yüzden ICMP paketlerinin dağıtım güvenilirliği, IP paketlerinin dağıtım güvenilirliği ile sınırlı kalmaktadır. Buradan ICMP paketlerinin güvenilir iletilemeyeceği ve hedefe vardığının garanti edilemeyeceği sonuçları çıkarılabilir.


ICMP kullanan komutlara örnek olarak ping ve traceroute verilebilir. Bu komutları kullanmak için bir dos penceresi açmanız gerekmektedir.

 

2.1.ICMP Niçin Kullanılır?

    ICMP  şu amaçlarla kullanılır.

 

Ping komutu söz konusu test işlevini yerine getirir.

Source Quench akış kontrol işlevini yerine getirir.

Yönlendirme sayesinde ağ üzerindeki hosta seçilebilecek en iyi yol bilisi verilir.

Yaşam süresi içerisinde hedefe ulaşmamış paketler son router üzerinde yok edilir. Time exceed paketi ile paket sahibi bilgilendirilir.

Parametre sorunu paket başlık parametrelerinde oluşan hataları  parameter problem mesajı ile geri bildirir.

Zaman damgası, alıcı kendisine gelen paketin alım için geçen süresini hesaplayıp Time Stamp Reply paketi ile süreyi kaynak hosta bildirir.

Bilgi isteği, hostun bağlı olduğu ağ adresini öğrenebilmek için ağa gönderdiği keşif  paketidir. ( İnformation Request )

Adres maskeleme isteği, bağlı bulunulan ağın maskı öğrenilmek istendiğinde gönderilir. Address Mask Replly paketi  ile geri gönderilir.  

ICMP paketi IP paketinin içine gömülerek taşınır.

Artık Bildiğimiz Gibi:

     Internet Control Message Protocol, veya kontrol mesajları protokolu IP paketleri üzerinden taşınan ağ bakım ve hata mesajlarıdır. ICMP yardımı ile ağ üzerindeki sorunlar kolayca tespit edilebilir.FAKAT;

    ICMP protokolu kötüye kullanıldığında, karşı taraf bilgisayarı ağ üzerinde sorunlar olduğunu düşünerek normalden farklı davrabilir. IP adresi Chat sırasında kolayca bulunduğundan ICMP Nuke diye tabir edilen saldırı biçimi en çok IRC kullnıcıları tarafından kötüye kullanılır. Son zamanlarada meraklısın artması ile birlikte IP taram yöntemi ile Chat'e uğramayanlar bile saldırılardan nasibini alabilir.

 

2.2.ICMP Paketinin Yapısı Ve Formatı

ICMP mesaj formatı Şekil 8-1’de görülmektedir. ICMP mesajları IP datagramının kullanıcı verisi alanında taşınır. IP başlığındaki protokol alanı 1’e set edilerek ICMP’nin kullanıldığı gösterilir. Tüm ICMP mesajları üç alandan oluşur:

· Tip alanı: mesajın tipini tanımlar.
· Kod alanı: hata veya durum bilgisi tipini tanımlar.
· Toplamsal-hata (checksum) alanı: ICMP mesajının 16-bitlik 1’e tümleyenini hesaplar.

ICMP hata raporlama mesajları aynı zamanda internet başlığı ve kullanıcı veri alanının ilk 64 bitini taşırlar. Bu bitler problem giderme ve problem analizi için faydalıdır.

Şekil - ICMP Mesajının Formatı

 

2.3.ICMP Hata- ve Durum-Raporlama Prosedürleri

 

Mesaj tipinin alabileceği değerler;

   0 -Eko yanıt (Echo Reply)-ping yanıtı
   3 - Hedefe Erişilemedi(Destnation Not Reachable) 
   4 - Kaynak Kapatmak(Source Quench)
   5 - Yeniden Yönlendirme(Redirection Required)
   8 - Eko yanıt (Echo Request)-(ping isteği)
   9 - Yönlendirici tanıtımı
10-  Yönlendirici istemi
 11 -  Zaman aşımı (Time to Live Exceeded)-traceroute kullanır
12 -  Parametre Problemi(Parameter Problem)
13 -  Timestamp İstemi(Timestamp Request)
14 -  Timestamp Yanıtı(Timestamp Reply)
15 -  Bilgi İstemi(Information Request)
16 -  Bilgi Yanıtı(Information Reply)
17 - Addres Maskesi istemi(Address Mask Request)
18 - Addres Maskesi yanıtı(Address Mask Reply)

             Code field:Alıcı makine için daha çok bilgi içerir.

   Checksum:Ip headerdaki gibidir.

  Yukarıdaki mesaj tiplerine göre değişen mesaj örnekleri;

Echo: Echo mesajları, bir yönlendirici veya host tarafından diğer bir yönlendirici veya hosta gönderilen mesajlardır. Echo mesajı kaynaktan hedefe yönelen bir mesaj olup, tepki mesaj olarak hedeften kaynağa Echo Reply (Echo Cevabı) mesajı döner. Echo mesajı ile hedef hostun çalışıp çalışmadığı ve iletişim kurmak için gerekli yolun sağlanıp sağlanamayacağının testi yapılır. TCP / IP protokol grubu yüklü olan hostlar üzerinde çalıştırılan PING komutu bu işlevi yerine getirir.

destination unreachableFragment gerektiğinde DF'nin değeri 1 ise bu mesaj oluşur.

source quench: datagramların geçiş oranını kontrol eder. Bu mesaj alınınca gönderim hızı azaltılmalıdır.

redirect: Daha iyi bir rota mevcut olduğu durumlarda gatewaye gönderilir. Bu mesaj gönderilince code fieldde oluşan oluşan numara routing durumlarını belirler.

parameter problem: semantic veya synatatic hata oluştuğunda açığa çıkar. Genelde optionslarda kullanılan hatalıargümanlar buna sebep olur.

echo request veya reply: Debugging için kullanılır.

timestamp request ve reply : networkten geçen mesajın süresinin gözlenmesini sağlar.

information request ve reply, address mask request ve reply: Özel network veya subnetworkün denenmesi için.

 


3.PING NEDİR?


     Ping, ağ üzerinde bulunan bilgisayarların ulaşılabilirliğini test etmek için ICMP (Internet Control Message Protocol) protokolünü kullanan bir uygulamadır. İki bilgisayar arası ulaşılabilirlik şu şekilde tanımlanabilir. Eğer A bilgisayarından gönderilen paketler B bilgisayarı tarafından alınıp işlenebiliyor ise; B bilgisayarı, A bilgisayarından ulaşılabiliyor demektir.

   Ping uygulaması ICMP mesajını içeren IP paketlerini ağ üzerinden gönderir. Ping uygulamasının kullandığı iki tür ICMP paketi vardır. Bunlar,

 

     1. ICMP echo request paketi

    2. ICMP echo reply paketidir.

  Ping uygulaması test işlemi i çin ICMP echo request  paketini içeren bir IP paketini gönderir. Aşağıda bu paketin onaltılık sayı sisteminde bir örneği verilmiştir. Paketin daha kolay takip edilebilmesi için tüm veri satır ve sütunlar sayesinde erişilebilecek şekilde belirtilmiştir. Her hücre 8 bitlik veriyi temsil etmektedir.

 

3.1.Örnek PING PAKETİ

   

 

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

1

45

00

00

3C

95

65

00

00

FF

01

CA

0C

C1

8C

EC

9B

2

C1

8C

EC

99

00

00

C7

5B

03

00

8B

00

61

62

63

64

3

65

66

67

68

69

6A

6B

6C

6D

6E

6F

70

71

72

73

74

4

75

76

77

61

62

63

64

65

66

67

68

69

       

 

 3.2.ICMP Başlığı

 

typedef struct

{

    unsigned char icmp_type;

    unsigned char icmp_code;

    unsigned short icmp_crc;

    unsigned short icmp_identifier;

    unsigned short icmp_seqnumber;

    char *icmp_data;

} icmp_Header;

 

 

Ping uygulamasının kullandığı ICMP paketlerinin genel şekli şu şekildedir.

 

 

 

3.3. ICMP Başlık Öğeleri:

 

icmp_type - ICMP paket türü (ICMP Packet type) : ICMP protokolü değişik işlemlerde kullanılabilen birçok paket türü içerir. Bundan dolayı ICMP paketinin türünü belirtmek için ICMP paketi içinde bulunan icmp_type alanı kullanılır. Ping uygulamasında ICMP echo request paketleri için “8” değeri, ICMP echo reply paketleri için “0” değeri kullanılır. Örnek pakette icmp_type değeri E2’de bulunmaktadır. icmp_type alanının paket türlerine göre değerleri aşağıda belirtilmiştir.

 

#define ICMP_ECHORP 0 // Echo reply

#define ICMP_DESTUR 3 // Destination unreachable

#define ICMP_SRCQ 4 // Source quench

#define ICMP_REDIRECT 5 // Redirect message type

#define ICMP_ECHORQ 8 // Echo request

#define ICMP_TIMEX 11 // Time exceeded

#define ICMP_PARAMP 12 // Parameter Problem

#define ICMP_TIMERQ 13 // Timestamp request

#define ICMP_TIMERP 14 // Timestamp reply

#define ICMP_INFORQ 15 // Information request

#define ICMP_INFORP 16 // Information reply

#define ICMP_MASKRQ 17 // Mask request

#define ICMP_MASKRP 18 // Mask reply

 

icmp_code - ICMP paket kodu (ICMP Packet code) : ICMP echo request ve ICMP echo reply paketlerinde icmp_code alanının özel bir işlevi yoktur ve bu paketler için her zaman “0” değerinde olmalıdır. icmp_code alanı ICMP protokolünde yer alan diğer paket türlerinde kullanılmaktadır.Genelde hata mesajı özelliği taşıyan paketlerin hangi türde hata mesajı anlamı içerdiğini belirtir. Örnek pakette icmp_code değeri F2’de bulunmaktadır. icmp_code alanının alabileceği değerlerden bazıları aşağıda belirtilmiştir.

 

#define ICC_NETUR 0 // dest unreachable, net unreachable

#define ICC_HOSTUR 1 // dest unreachable, host unreachable

#define ICC_PROTOUR 2 // dest unreachable, proto unreachable

#define ICC_PORTUR 3 // dest unreachable, port unreachable

#define ICC_FNADF 4 // dest unr, frag needed & don't frag

#define ICC_SRCRT 5 // dest unreachable, src route failed

 

icmp_crc - ICMP paketinin sağlama toplamı (ICMP Packet Checksum) : Bu değer ICMP paketinin (başlık + veri) sağlama toplamıdır. CRC değerinin hesaplanması ayrı bir bölümde belirtilmiştir. Örnek pakette icmp_crc değeri G2-H2 ikilisinde bulunmaktadır.

icmp_identifier – ICMP paketini belirleyen değer (ICMP Packet Identifier) : Bu değer ICMP echo request paketlerini gönderen taraf tarafından belirlenen bir değerdir. Kullanılış nedeni, ICMP echo request paketlerine cevap olarak gönderilecek ICMP echo reply paketlerinin kaydını tutmak içindir. Bu değer TCP veya UDP protokollerindeki her oturumla ilişkilendirilen port değerine de benzetilebilir. Örnek pakette icmp_identifier değeri I2-J2 ikilisinde bulunmaktadır.

icmp_seqnumber – ICMP Paketi sıra numarası (ICMP Sequence Number) : icmp_identifier değeri ile paketler belirlenir fakat ping uygulaması ile yapılan ulaşılabilirlik testinde sadece bir ICMP echo request paketi gönderilmez. Birden çok ICMP echo request paketi gönderildiğinden ve hepsi de aynı icmp_identifier değerine sahip olduğundan bu paketlerinde birbirinden ayrılması gerekmektedir. Bu da ICMP paketlerine sıra numarası verilerek sağlanabilir. Arka arkaya her paket gönderildiğinde bu değer “1” arttırılır. Örnek pakette icmp_seqnumber değeri K2-L2 ikilisinde bulunmaktadır.

icmp_data - ICMP paket verisi (ICMP Packet Data) : ICMP echo request ve ICMP echo reply paketlerindeki veri genelde ASCII karakter tablosundan arka arkaya gelen (ASCII değeri olarak) belli bir kısım veriden oluşur. Verinin asıl amacı iki bilgisayar arası iletişimin veri kaybı olmadan gerçekleşebildiğini göstermektir. Örnek pakette kullanılan 32 byte’lık veri, M2 ile L4 arasında yer almaktadır

 

3.3.IP Başlığı

 

typedef unsigned char ipAddr[4];

 

 

 

typedef struct

{

    unsigned char ip_vhl;

    unsigned char ip_tos;

    unsigned short ip_total_length;

    unsigned short ip_id;

    unsigned short ip_frag_flag;

    unsigned char ip_ttl;

    unsigned char ip_protocol;

    unsigned short ip_crc;

    ipAddr ip_source;

    ipAddr ip_destination;

} ip_Header;

 

IP paketinin genel şekli ise şu şekildedir.

 

 

3.4.IP Başlık Öğeleri

ip_vhl – Versiyon ve Başlık uzunluğu (IP Version and Header Length) : Bu değer iki tane 4 bitlik değerin birleşmesinden oluşmaktadır. En soldaki 4 bit IP paketinin versiyonunu belirtir. En sağdaki 4 bit ise, IP başlığının uzunluğunu ile ilgilidir. Örnek pakette ip_vhl değeri A1’de bulunmaktadır.

IP paketinin versiyonunu belirten değer aynı zamanda biçimini belirtmektedir. Şu anda IPv4 paketleri kullanıldığından bu değer daima ‘4’ olacaktır. IPv4’ten daha yeni bir versiyon olarak ‘IP versiyon 6’ bulunmaktadır.

IP başlığının uzunluğu kaç tane 4-bytle’lık veriden oluştuğu şeklinde belirtilir. IP paketinde ‘IP seçenekleri’ kullanılmadıysa bu değer genelde ‘5’ olur. O zaman başlığın uzunluğu 5 * 4 byte = 20 byte olarak bulunur.

ip_tos – Servis türü (IP Type of Service) : Paketin servis türü internet ortamında iletilen paketin nasıl ele alınacağını belirler. 8 bitlik ip_tos alanının bitlerinin kullanışı şu şekildedir. Örnek pakette ip_tos değeri B1’de bulunmaktadır.

 

 

Bit 0-2 : Precedence (Öncelik) Bitleri

111 – Network Control

110 – Internet Control

101 – Critical

100 – Flash over-ride

011 – Flash

010 – Immediate

001 – Priority

000 – Routine

 

 

Bit 3: low-delay biti

0 = Normal Delay, 1 = Low Delay.

 

 

Bit 4: high-throughput biti

0 = Normal Throughput, 1 = High Throughput.

 

 

 

Bit 5: high-reliability biti

0 = Normal Reliability, 1 = High Reliability.

 

    IP paketlerinin bu özelliği ile gerçek zamanlı veri içeren bir iletişimin, örneğin bir video konferans bağlantısı, ele alınma şekli gerçek zamanlı veri içermeyen bir iletişime göre daha farklı olacaktır.

 

ip_total_length – IP paketinin toplam uzunluğu (Total Length of IP Packet) : Bu değer IP paketinin toplam uzunluğunu byte cinsinden belirtir. Bu değer IP başlığının uzunluğu ve IP paketinin içinde bulunan diğer paketin (ICMP, TCP ve UDP paketleri gibi) toplam uzunluğunun toplamından oluşmaktadır. 16-bitlik bir alan olduğundan maksimum 65536 byte’lık paket uzunluğu olabilir. IP başlığının boyu her zaman sabit olmayabileceğinden dolayı (kullanılabilecek IP seçeneklerinden dolayı) bu alana gereksinim vardır. Örnek pakette ip_length değeri C1-D1 ikilisinde bulunmaktadır.

 

ip_id – IP kimlik numarası (IP Identification Number) : IP paketinin kimlik numarası paketi gönderen tarafından üretilen rasgele bir numaradır. Eğer gönderilecek veri paketi birkaç IP paketinden oluşacak ise, kimlik numarası kullanımı önemlidir. Böylece alıcı veriyi oluştururken bu kimlik numaralarından yararlanır. Paketin parçalı olup olmadığı ise ip_frag_flag’in değerinden anlaşılır. Örnek pakette ip_id değeri E1-F1 ikilisinde bulunmaktadır.

 

ip_frag_flag – IP Parçalanma ve Bayrak Verisi (IP Fragmentation Flag) : Bu 16-bitlik değer IP paketi ile ilgili iki ayrı bilgi belirtir. En soldaki 3 biti IP paketinin parçalı olup olmadığını, geri kalan 13 bit ise gönderilecek olan tüm verinin içinde bu IP paketinin nerde bulunduğunu belirtir. Örnek pakette ip_frag_flag değeri G1-H1 ikilisinde bulunmaktadır.

 

En soldaki 3 bitin kullanımı şu şekildedir.

 

 

    En soldaki ilk bit rezerve edilmiştir ve her zaman ‘0’ değerinde olmalıdır. DF biti 0 durumunda ise datagramın birden çok IP paketinden oluştuğunu, 1 durumunda ise datagramın tek IP paketinden oluştuğunu belirtir. MF biti ise 0 durumunda IP paketinin datagramın en son parçası olduğu, 1 durumunda IP paketinin datagramın en son parçası olmadığı belirtilir. Dikkat edilirse MF bitinin kullanılması için ilk önce DF bitinin 0 durumunda olması gerekmektedir.

 

    IP paketinin datagramdaki göreli konumunu belirten 13 bitin kullanımı da DF bitine bağlıdır. Bu ofset değeri, 64-bitlik (8-octet) birimler şeklinde oluşur. İlk parçanın değeri 0’dır.

 

ip_ttl – IP paketinin yaşam süresi (Time to Live of IP Packet) : İlgili IP paketinin internet sisteminde kalmasına izin verilecek maksimum süredir. Değer genelde saniye biriminde ölçülür. IP paketini alan her bilgisayar bu değeri en azından bir azaltmalıdır (Paketi alma ve gönderme işlemleri bir saniyeden az sürse bile). Bu bölümde 0 değerini taşıyan paket yok edilmelidir. Bu işlemdeki amaç, varış adresine iletilemeyen paketlerin atılmasını sağlamaktır. Yoksa paketlerin varolmaları engellenemez. Örnek pakette ip_ttl değeri I1’de bulunmaktadır.

 

ip_protocol – IP Protokol değeri : Bu değer, IP paketi içinde bulunan diğer paketin hangi protokolden olduğunu (ICMP, UDP, TCP gibi) belirtir. Örnek pakette ip_protocol değeri J1’de bulunmaktadır. ip_protocol alanının alabileceği değerlerden bazıları aşağıda belirtilmiştir.

 

#define IP_ICMP 1 // ICMP paketleri için protokol türü

#define IP_IGMP 2 // IGMP paketleri için protokol türü

#define IP_TCP 6 // TCP paketleri için protokol türü

#define IP_EGP 8 // EGP paketleri için protokol türü

#define IP_UDP 17 // UDP paketleri için protokol türü

#define IP_OSPF 89 // OSPF paketleri için protokol türü

 

ip_crc – IP başlığının sağlama toplamı ( IP Header Checksum) : Bu değer IP başlığı nın sağlama toplamıdır. CRC değerinin hesaplanması ayrı bir bölümde belirtilmiştir. Örnek pakette ip_crc değeri K1-L1 ikilisinde bulunmaktadır.

ip_source – IP kaynak adresi (IP Source Address) : IP paketini gönderen bilgisayarın 32-bitlik IP adresidir. Örnek pakette ip_source değeri M1-N1-O1-P1 dörtlüsünde bulunmaktadır.

ip_destination – IP varış adresi (IP Destination Address) : IP paketini alacak olan bilgisayarın 32-bitlik IP adresidir. Örnek pakette ip_destination değeri A2-B2-C2-D2 dörtlüsünde bulunmaktadır.

    IP kaynak ve varış adresleri 32 bitten oluşmaktadır. Bu 32 bitlik alan 4 ayrı, 8 bitlik alandan meydana gelmektedir. Bu alan IP adresinin noktalı gösterim şekline getirileceği zaman 0 ile 255 arasında değer alabilecek; 4 ayrı, 8 bitlik alan göz önüne alınmalıdır.

 


4.ICMP Echo Request paketine cevap verilmesi


    Linux üzerinde yapılan işlemler sonucunda seri kablo ile ağa bağlı olan bilgisayara gönderilen ICMP echo request mesajlarına cevap verilmesi için ICMP echo reply mesajlarının gönderilmesi gerekmektedir.

    İlk önce cevap olarak yollanacak olan ICMP paketi oluşturulmalıdır. Gönderilecek olan paketin gelen ICMP paketinden farkı type değerinin “8” yerine, “0” olmasıdır. ICMP paketinin geri kalan bölümleri, CRC bölümü hariç, aynı değerleri taşımalıdır. Gelen veri de aynen geri gönderilecek pakete eklenmelidir. ICMP paketi oluşturulduktan sonra CRC değeri hesaplanmalıdır.

    Daha sonra, gönderilecek ICMP paketini içerecek olan IP paketi hazırlanmalıdır. IP paketinde yapılması gereken değişiklik ise, IP kaynak adresi ile varış adresinin yerlerini değiştirmek olacaktır.

    En son olarak ICMP ve IP paketlerinden oluşturulacak olan datagram seri iletişim ile Linux makineye gönderilmesi gerçekleştirilmelidir.

4.1.CRC Hesaplanması

Gelen pakete cevap verilebilmesi için ilk önce paketin doğruluğu kontrol edilmelidir. Bunun için ilk önce alınan paketin CRC değeri hesaplanır. Daha sonra paket ile birlikte gelen CRC değeri ile hesaplanan değer karşılaştırılır. İki değer birbirine eşit ise alınan paket geçerlidir. Eğer iki değer birbirine eşit değilse alınan paket atılmalıdır.

 

4.2.CRC Hesaplama Yöntemi

Gelen paketin ilk önce IP başlığının CRC değeri kontrol edilir. Aşağıda 16’lık tabanda IP başlığı örneği verilmiştir.

45 00 00 3C 95 65 00 00 FF 01 CA 0C C1 8C EC 9B C1 8C EC 99

Yukarıdaki IP başlığı için CRC değerinin hesaplanması için ilk önce veriler 16 bitlik bölümler halinde toplanır.

4500 003C 9565 0000 FF01 CA0C C18C EC9B C18C EC99 = 5FFFA

Sonuç genelde FFFF değerini geçecek şekilde olur. Bundan dolayı 5FFFA değerinin FFFF değerini geçen basamakları kendisine eklenir.

FFFA + 5 = FFFF

    Sonuç olarak FFFF değeri elde ediliyor ise alınan paketin IP başlığı geçerlidir. Aynı işlem ping paketi içinde bulunan ICMP başlığı içinde yapılmalıdır. ICMP başlığı için yapılacak olan CRC hesaplamasında ICMP verisi de hesaplama işlemine katılmalıdır.

    Ping paketine cevap olarak bir paketin oluşturulması aşamasında da CRC hesaplama işlemi bulunmaktadır. İlk önce ICMP paketi içinde bulunan CRC değerine “0000” değeri aktarılır. Aynı şekilde ICMP başlığı ve ICMP verisi 16 bitlik bölümler halinde toplanır. Mesela bu işlemlerden sonra sonuç olarak elde edilen değer 24327 değeri olsun.

24327 değeri FFFF değerini aştığı için, FFFF değerini aşan basamakları kendisine eklenir.

4327 + 2 = 4329

Bulunan değer FFFF’den çıkarılır.

FFFF – 4329 = BCD6

    En son olarak elde edilen BCD6 değeri ICMP paketi için elde edilen CRC değeridir. Aynı işlemler IP başlığı için tekrarlanarak IP başlığının CRC değeri de elde edilmiş olunur. Böylece ping paketi için oluşturulan cevap paketi gönderilmeye hazırdır.

 


5.Bazı Kısaltmalar


 

             TCP         Transmission Protocol

             IP            Internet Protocol

           ICMP     Internet Control Message Protocol

            CRC        Cyclic Redundancy Check

           OSI        Open System Interconnection

           PING     Packet Internet Groper

           ARP      Address Resolution Protocol

           UDP      User Datagram Protocol

           TTL      Time To Live

 


6.Yararlanılan Kaynaklar


 

        1 .www.be.itu.edu.tr

        2. www.hacettepe.edu.tr

        3. www.gizlivadi.com

        4. www.btgrup.com

        5. www.geocities.com

        6. www.selcuk.edu.tr

        7. www.fortunecity.com

 


7.Yasal Açıklamalar


  

7.1.Telif Hakları

      Bu belgenin telif hakkı © 2003 Aziz Ünsal 'a aittir. Bu belgeyi, Free Software Foundation         tarafından yayınlanmış bulunan GNU Özgür Belgeleme Lisansının 1.1 ya da daha sonraki sürümünün koşullarına bağlı kalarak kopyalayabilir, dağıtabilir ve/veya değiştirebilirsiniz. Bu Lisansın bir kopyasını http://www.gnu.org/copyleft/fdl.html adresinde bulabilirsiniz.

7.2.Feragatname

    Bu belgedeki bilgilerin kullanımından doğacak sorumluluklar, ve olası zararlardan belge yazarı sorumlu tutulamaz. Bu belgedeki bilgileri uygulama sorumluluğu uygulayana aittir.

      Tüm telif hakları aksi özellikle belirtilmediği sürece sahibine aittir. Belge içinde geçen herhangi bir terim bir ticarî isim ya da kuruma itibar kazandırma olarak algılanmamalıdır. Bir ürün ya da markanın kullanılmış olması ona onay verildiği anlamında görülmemelidir.