IPv4 Başlık Bilgisi ve Detaylı İncelemesi

IPv4 Başlık Bilgisi ve Detaylı İncelemesi

Ağ & SistemBüşra ÜNAL • 👁 466 Okunma • Favorilerinize Ekleyin

IPv4 paketi; IP paket özelliklerini tanımlayan bir başlık bilgisi ve IP verisinden oluşur. IPv4 paketinin hangi içeriklerle oluşturulduğunu, bu içeriklerin bize neler anlattığını bu yazımızda detaylıca ve örnekleriyle birlikte inceleyeceğiz. Header checksum değeri nasıl hesaplanır, MTU değerine göre paketler nasıl parçalara ayrılır sorularının cevaplarını da örneklerle inceleyeceğiz.

764x208

Yukarıdaki görselde IPv4 paketinin başlık bilgisinde hangi bilgilerin yer aldığı resmedilmiştir. Bu tablo üzerinden tüm özellikleri aşağıda başlık başlık incelemeye başlıyoruz.

Version: Ip versiyonu bilgisini verir.

  • 0100 -> IPv4 ,
  • 0110 -> IPv6 olarak gösterilir.

Header Length: Headerda bulunan 32 bit kelimelerin sayısının belirtir.

  • Minimum değeri 5’tir ve minimum uzunluk 5x32 = 160 bits yani 20 byte’dır.
  • Maximum değeri 15’tir. Maximum header uzunluğu (15x32 = 480 bits ) 60 byte olabilir.

Type of Service (TOS): Differentiated Services Code Point (DSCP) olarak da bilinmektedir. QoS bilgilerini taşır.

    1. bit reserve edilmiştir ve her zaman sıfır olarak ayarlanır.
  • Delay, Throughput, Reliability ve Monarity cost 1 olarak ayarlanırsa maximum güvenlik sağlanmış olur.

634x184

ECN (Expilicit congestion notification): Paketleri düşürmeden uçtan uca networkte tıkanıklık olup olmadığını bildirir. İsteğe bağlı çalışan bir özelliktir. Yalnızca temel ağ tarafından desteklendiğinde etkilidir.

Total Length: Datagram boyutunu (header + data) olarak tanımlar. Minimum değer 20 byte (20 byte header + 0 byte data ) , maximum değeri 65,535 byte’dır. Buradaki değer 8’in katı ve MTU’ya eşit ya da altında bir değer olmalıdır.

Identification: Orijinal datagram parçalarını benzersiz şekilde tanımlayan değer.

Flags: Fragmentleri kontrol etmek ve ya tanımlamak için kullanılır.

  • Bit 0 -> reserved, 0 olmak zorunda
  • Bit 1 -> Don’t Fragment (DF) genelde ayarlanmaz default değer 0’dır
  • Bit 2 -> More Fragment (MF)

Don’t Fragment (DF): Datagramın iletim sırasında ara cihazlar tarafından MTU değerlerine göre bölünüp bölünemeyeceğini belirtir.

  • DF -> 0 ise datagram parçalara ayırılabilir
  • DF -> 1 ise datagram parçalara ayrılmaz

Datagram için DF 1 olarak ayarlanmışsa ve MTU değerinden daha büyük bir veri miktarıyla aktarma yapılmaya çalışılırsa iletim gerçekleşmez. ICMP destination unreachable mesajı oluşturulur ve gönderene bu mesaj iletilir.

More Fragment (MF): Alıcıya gelen datagramın tek parça ya da daha büyük bir datagramın parçası olduğunu belirtir.

  • MF -> 0 datagram kümedeki son parçadır ya da tek parçadır.
  • MF -> 1 datagramın devam parçalarının geleceğini belirtir.

MF ve DF değerlerini daha iyi anlamak amacıyla aşağıdaki gibi bir topolojide Sunucudan PC’ye 1500 byte’lik bir datagramın ağdaki davranışını inceleyelim.

581x121

Sunucu ve ilk router arasında MTU değerleri 9000 ‘dir. Datagramımız bu değerin altında olduğu için bölünmez ve DF -> 0 MF -> 0 değerlerini alır. (1500 = 1480 Data + 20 Header)

  1. routerda MTU değeri 1080 olduğu için datagram 2’ye parçalanır.

  2. İlk paketin boyutu 1080 (1060 data + 20 header)

      DF -> 0        MF-> 1
    
  3. İkinci paketin boyutu 440 (420 data + 20 header)
      DF - > 0        MF -> 0
    

netsh interface ipv4 show subinterfaces komutu ile kendi bilgisayarınızın arayüzlerindeki MTU boyutunu öğrenebilirsiniz.

Atılan paketin parçalanmadan iletilmesini istersek DF değerini 1 olarak ayarlamamız gerektiğini söylemiştik. Komut satırından aşağıdaki gibi ping attığımızda datagramın parçalanmadan karşıya gitmesini istediğimiz için paket iletimi gerçekleşmeyecektir.

ping 8.8.8.8 -f -l 5000

554x384

Fragment Offset: Ip datagramının parçalarını numaralandırır. Bu sayede hedef bilgisayar parçalanmış datagramı doğru sırayla birleştirebilir. İlk parçanın offset değeri her zaman 0’dır. Bir datagramın alabileceği max offset değeri (213-1)x8 = 65.528'dir

Örnek üzerinde inceleyecek olursak: 1440 byte’lık bir paketin MTU boyutu 576 olan bir router üzerinden geçerkenki parçalanma işlemi şu şekilde gerçekleşir.

Paket -> 1440 = 1420 Data + 20 Header

Total Length alanı için 576 8’e tam bölünemediğinden 576’dan küçük 8’e bölünebilen en büyük değer olan 572 kullanılır.

MTU -> 572 = 552 Data + 20 Header
1420 = 552 + 552 + 316 olarak 3’e bölünür.

1.Parça:

  • Identification alanı bir id ile doldurulur.
  • Reserved bit ve DF değeri set edilmez (0) , MF değeri verinin devamı geleceği için 1 olarak atanır. (001)
  • İlk parça olduğu için Fragment offset değeri : 0 0000 0000 00000 olarak atanır.
  • Total Length alanı için 572 kullanılır. 0000 0010 0011 1100
  • 552 byte veri gönderilir, geriye 868 byte veri kalır.

2.Parça:

  • Identification alanı aynı id ile doldurulur
  • Reserved bit ve DF değeri set edilmez (0) , MF değeri verinin devamı geleceği için 1 olarak atanır. (001)
  • Fragment offset ilk paketteki gönderilen boyuta göre hesaplanır.
  • 552/8 = 69 olduğundan 69 olarak tanımlanır: 0 0000 0100 0101
  • Total Length alanı için 572 kullanılır. 0000 0010 0011 1100
  • 552 byte veri gönderilir geriye 316 byte veri kalır.

3.Parça:

  • Identification alanı aynı id ile doldurulur
  • Reserved bit ve DF değeri set edilmez (0) , MF değeri verinin devamı gelmeyeceği için 0 olarak atanır. (000)
  • Fragment offset önceki paketlerdeki gönderilen boyuta göre hesaplanır.
  • 1104/8 = 138 olduğundan 138 olarak tanımlanır: 0 0000 1000 1010
  • Total Length alanı için 336 kullanılır. 0000 0001 0101 0000
  • 316 byte data da gönderilerek işlem tamamlanır.
Parça Identification Flags Fragment Offset Total Length
1 1234 001 0 572
2 1234 001 69 572
3 1234 000 138 336

Time to Live (TTL): Datagramın internet sisteminde kalmasına izin verilen max süredir.0 – 255 arasında değerler alabilir. 0 değerini aldığında paket imha edilir. Zaman, saniye cinsinden ölçülür. Ancak bir datagram geçtiği modüller üzerinde bir saniyeden daha kısa bir sürede işlense bile TTL değeri en az 1 düşürülür.

Protocol: Kullanılan protokol burada belirtilir. Bazı protokoller aşağıdaki gibidir.

0x01 1 ICMP
0x02 2 IGMP
0x06 6 TCP
0x08 8 EGP
0x09 9 IGP
0x11 17 UDP
0x1B 27 RDP
0x29 41 IPv6
0X58 88 EIGRP
0X59 89 OSPF
0X67 103 PIM

Header Checksum: Hata kontrolü için ayrılmış 16 bitlik alandır. Paket iletimi yapılan her modülde bu değer hesaplanıp karşılaştırılır. Hata varsa paket yok edilir.

Bir IPv4 bilgisini ele alalım ve header checksum değerini hesaplayalım. Bunun için wireshark üzerinden herhangi bir paketi inceleyebiliriz.

604x449

Paket: 45 00 00 28 35 4a 40 00 35 06 f4 1b 5d 5e fd 48 c0 a8 01 1b

  • 4 -> version değeridir. 0010 -> yani IPv4 paketi olduğunu belirtir.
  • 5 -> Header length . 0101 -> 5x32=160 bits=20 Byte uzunluğunda olduğunu gösterir.
  • 00 -> TOS değerleridir. 0000 00 -> DSCP default değerlerinde
  • 00 -> ECN default değerlerde yani TOS normal operasyon değerleriyle çalışıyor.
  • 0028 -> 0000 0000 0010 1000 Total Length = 40 byte
  • 354a -> 0011 0101 0100 1010 Identification = 13642
  • 4000 -> 0100 0000 0000 0000 flags ve fragment offset
    0 …. …. …. ….         Reserved bit = 0 (unset)
      .1.. …. …. ….         DF = 1 (set) 
      ..0. …. …. ….         MF = 0 
      ...0 0000 0000 0000      Fragment offset = 0
    
    Veri parçalara ayrılamaz ve bu veriden sonra veri gelmeyecek.
  • 35 -> 0011 0101 -> TTL değeri 53
  • 06 -> 0000 0110 -> Protocol TCP
  • f4 1b -> header checksum, hesaplamadan sonra bulmamız gereken değer burası
  • 5d 5e fd 48 -> source ip
  • c0 a8 01 1b -> destination ip

NOT: Header chucksum değeri hesaplarken tüm 16 bitlik değerler sırasıyla toplanır.

45 00 -> 0100 0101 0000 0000
00 28 -> 0000 0000 0010 1000
0100 0101 0010 1000 -> ilk toplam
35 4a -> 0011 0101 0100 1010
0111 1010 0111 0010 -> ikinci toplam
40 00 -> 0100 0000 0000 0000
1011 1010 0111 0010 -> üçüncü toplam
35 06 -> 0011 0101 0000 0000
1110 1111 0111 1000 -> dördüncü toplam
5d 5e -> 0101 1101 0101 1110
10100 1100 1101 0110 -> 5. toplam soldaki artık değer taşınıp toplanır
1
0100 1100 1101 0111 -> 5. toplam değeri olarak burası kullanılır
fd 48 -> 1111 1101 0100 1000
10100 1010 0001 1111 -> 6. toplam (artık değer var)
1
0100 1010 0010 0000 -> 6. toplam
c0a8 -> 1100 0000 1010 1000
10000 1010 1100 1000 -> 7. toplam (artık değer var)
1
0000 1010 1100 1001 -> 7. Toplam
011b -> 0000 0001 0001 1011
0000 1011 1110 0100 -> tüm değerlerin toplamı. 1’s complement değeri alınır.
1111 0100 0001 1011 -> f41b bu değer checksum değeri ile karşılaştırılarak doğrulama yapılır.

Bunlar da ilginizi çekebilir!

Rastgele bir yazıya git
Lütfen en az 3 harf yazınız 5 adet sonuç bulundu: