16 Temmuz 2017 Pazar

Ping

ICMP Nedir ?
Her IP Stack'inde ICMP protokolü bulunur. Açıklaması şöyle
ICMP, uses the basic support of IP as if it were a higher level protocol, however, ICMP is actually an integral part of IP, and must be implemented by every IP module.
ICMPv4 Header
ICMPv4 mesajının yapısı şöyle.
/* ICMP Header */
struct icmpheader {
  unsigned char icmp_type; //ICMP message type
  unsigned char icmp_code; //Error code
  unsigned short int icmp_chksum; //Checksum for ICMP Header and data
  unsigned short int icmp_id; //Used in echo request/reply to identify request
  unsigned short int icmp_seq;//Identifies the sequence of echo messages, 
                    //if more than one is sent.
};
ICMPv6 Header
Linux'ta şu satırı dahil ederiz.
#include <netinet/icmp6.h>
ICMPv6 8 byte büyüklüğündedir. ICMPv6 mesajının yapısı şöyle
struct icmpv6header {
  unsigned char type;
  unsigned char code;
  unsigned short int chk_sum;
  unsigned int body; 
};
Ping Nedir?
Not : Ping'in 1983 yılında nasıl geliştirildiği hikayesi okuyama değer.

Ping, ICMP protokolü kullanarak hedef bilgisayara veri gönderip cevap vermesini bekleyen uygulamadır.
ICMP , TCP ve UDP kardeş protokollerdir. Ancak TCP ve UDP'nin aksine ICMP protokolünde port numarası kavramı yoktur. Dolayısıyla Ping bir port numarasına gönderilmez.

tracert gibi programlar ICMP protokolünü kullanrak bir adresin hangi yolu izleyerek erişildiğini gösterirler.

Linux'ta traceroute uygulaması aynı işlemi sadece TCP kullanarak ta yapabilir.
traceroute mail.yourserver.com -p25 -T
-p25 : port numarası -T ise TCP kullanılmasını belirtir.


Komut Seçenekleri
ping komut en yalın haliyle şöyledir.
$ ping hostname
Eğer hostname yerine
ping http://www.example.com/
komut çalışmaz. Çünkü http bir URL'dir makine ismi değildir.

-l Paket Büyüklüğü
Normal ping paket 32 byte uzunluğundadır. Ping ile büyük paketler göndererek ağın paketi bölmeden geçirebildiği sınanabilir. Bunun için

ping -f -l 1024 <IP Adddress>
komutu kullanılır.
-f : Do not fragment. Bu seçeneğe Flood ping de denilmiş.
-l : packet size
anlamına gelir. Eğer paket bölünmeden gönderilemiyorsa "Packet needs to be fragmented but DF set" hata mesajı alınır.

Gidiş Geliş Gecikmesi - Round Trip Time
Ping paketinin hedefe gidip geri gelmesi için geçen süredir. Gidiş Geliş Gecikmesi genellikle 2 x Network Delay olarak karşımıza çıkar. RTT değerinin yüksek olması ağdaki gecikmeye işaret eder.
RTT hesaplanırken tek bir paketin tüm rakamları değiştirmemesi için bir çeşit Movign Average hesaplaması kullanılıyor.

Paket Kaybı
Paket kaybının yüksek olması ağdaki bir sıkıntıya işaret eder.

Programlama Dillerinde Ping
Java
Java'da Ping yapabilmek için kolay bir yöntem yok. InetAddress.isReachable () metodu eğer çalıştıran program root ise ping gönderir, değilse ping göndermez bunun yerine port 7'ye TCP Echo gönderir.

C#
Ping Sınıfı yazısına taşıdım.

Hiç yorum yok:

Yorum Gönder