IPv4 Başlık Bilgisi ve Detaylı İncelemesi
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.
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 5×32 = 160 bits yani 20 byte’dır.
- Maximum değeri 15’tir. Maximum header uzunluğu (15×32 = 480 bits ) 60 byte olabilir.
Type of Service (TOS): Differentiated Services Code Point (DSCP) olarak da bilinmektedir. QoS bilgilerini taşır.
- bit reserve edilmiştir ve her zaman sıfır olarak ayarlanır.
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.
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)
- routerda MTU değeri 1080 olduğu için datagram 2’ye parçalanır.
- İlk paketin boyutu 1080 (1060 data + 20 header)
DF -> 0 MF-> 1
- İ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
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.
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
-> 5×32=160 bits=20 Byte uzunluğunda olduğunu gösterir.00
-> TOS değerleridir.0000 00
-> DSCP default değerlerinde00
-> ECN default değerlerde yani TOS normal operasyon değerleriyle çalışıyor.0028
->0000 0000 0010 1000
Total Length = 40 byte354a
->0011 0101 0100 1010
Identification = 136424000
->0100 0000 0000 0000
flags ve fragment offset0 …. …. …. …. 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 5306
->0000 0110
-> Protocol TCPf4 1b
-> header checksum, hesaplamadan sonra bulmamız gereken değer burası5d 5e fd 48
-> source ipc0 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 000000 28
-> 0000 0000 0010 1000
0100 0101 0010 1000 -> ilk toplam35 4a
-> 0011 0101 0100 1010
0111 1010 0111 0010 -> ikinci toplam40 00
-> 0100 0000 0000 0000
1011 1010 0111 0010 -> üçüncü toplam35 06
-> 0011 0101 0000 0000
1110 1111 0111 1000 -> dördüncü toplam5d 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ırfd 48
-> 1111 1101 0100 1000
10100 1010 0001 1111 -> 6. toplam (artık değer var)
1
0100 1010 0010 0000 -> 6. toplamc0a8
-> 1100 0000 1010 1000
10000 1010 1100 1000 -> 7. toplam (artık değer var)
1
0000 1010 1100 1001 -> 7. Toplam011b
-> 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.