Published on

IPv4 Fragmentation in Network Layer Konusu

Authors
  • avatar
    Name
    Alperen Önal
    Twitter

MTU(Maximum Transmission Unit) Nedir ?

MTU, bir ağ paketinin taşıyabileceği maksimum veri miktarını bayt cinsinden ifade eder. MTU’nun büyük olması, daha fazla verinin tek bir pakette iletilebileceği anlamına gelmektedir. Her ağda MTU değeri birçok faktöre bağlı olarak değişkenlik gösterebilir.

Eğer bir ağda ağın MTU değerinden daha büyük bir paket yollamaya kalkarsak bu paketin doğrudan iletilmesi mümkün olmayacağından paketin, MTU değerine uygun ufak parçalara bölünmesi yani “fragmentation” edilmesi zorunludur.

Aşağıda bazı ağ tiplerinin sahip oldukları MTU değerleri verilmiştir.

Fragmentation(Parçalanma) Nedir ?

Bir ağda iletilmek istenen paket boyutunun, iletilecek ağın MTU değerinden fazla olması durumunda ilgili paketin, ağdaki MTU değerine uygun olacak şekilde ufak fragment’lere(parçalara) ayrılması işlemine Fragmentation(parçalanma) diyoruz. Bu işlem, az önce anlattığım gibi paket boyutunun MTU değerinden fazla olması durumunda kullanılması zaruridir. Aksi taktirde paket iletilemeyeceği için drop edilecektir.

Fragmentation ile IP Header İlişkisi

  • IPv4 Header’ında Total Length(sizeof(header + data)) alanı, 16-bitlik bir alandır. Bu da (2^16 – 1) işleminden anlaşılacağı gibi bir IPv4 paketinin maksimum 65,535 byte olabileceği anlamına gelmektedir.
  • Fragmentation(parçalanma) işlemi genellikle hedef tarafta, router’larda gerçekleşmektedir.
  • IPv4 Header’ındaki ID alanı, bir paketin kimliğini tanımlamaktaydı. Bu yüzden her bir fragment(parça) aynı ID’a sahip olacaktır. Bu da karşı tarafta paketlerin geri birleştirilmesini sağlayacaktır.
  • IPv4 Header’ındaki OffSet alanı, bir fragment’in fragmentation işlemi öncesindeki orijinal paket içerisindeki konumunu belirtmektedir.

Fragmentation Neden Gereklidir ?

Genellikle bir ağda iletilmek istenen paket boyutunun, iletilecek ağın MTU değerinden fazla olması durumunda kullanırız ancak başka senaryolarda da kullanılmaktadır.

Bant genişliği : Büyük paketlerin iletilmesi, yoğun bant genişliği kullanımına neden olacaktır. Fragmentation işlemi ile paketlerin fragment’lere bölünmesi işlemi, bant genişliğinin daha verimli kullanılması sağlanabilir.

Ağ Performansı : Büyük paketlerin iletilmesi, ağ performansı sorunlarına neden olabilir. Bu sorun, fragmentation işlemi ile iyileştirilebilir.

Fragmentation İşleminde Kullanılan IP Header Alanları

Identification Field (16 bits): Bir paketin tüm fragment’leri aynı ID’a sahiptir. Bu da fragmentlerin hangi pakete ait olduğunu tanımlar.

Fragment offset field (13 bits): Bu alan, her bir fragment’in fragmentation işlemi öncesinde paketin hangi konumunda olduğunu belirtmek için kullanılır. 2^13’den 8192-byte değerine ulaşırız. Bu da bir fragmentin maksimum offset değerini ifade eder.

More Fragment Field (MF): Bu alan, Header’daki flags’ın içindeki bir flag’dır. 1-bitlik alandır. MF değeri 1’se bu fragment’in(parça) sonrasında bir veya daha fazla fragment olduğu anlamına gelmektedir. 0’sa bu parça, ilgili paketin son fragmenti’dir.

Don’t Fragment Field (DF): Bu alan da flags içerisinde bulunan 1-bitlik bir alandır. Bu flag’ın 1 olması durumunda ilgili paketin parçalanamayacağı anlamına gelmektedir.

Fragment’lerin Yeniden Birleştirilmesi

Fragment’lerin yeniden birleştirilmesi işlemi yalnızca hedefte gerçekleşir. Çünkü her bir fragment özünde bir pakettir ve her internet paketi, paket anahtarlama’dan dolayı farklı rotasyonlardan hedefe ulaşabilir bu yüzden router’da vs. tekrar birleştirilmesi mümkün değildir.

MFFragment OffsetState
101.paket
1!=0Ara paket
0!=0Son Paket
00Geçersiz

Sırasıyla Yeniden Birleştirme Algoritması :

  • Hedef, datagramın MF, Fragment offset alanından parçalandığını tanımlar.
  • Hedef, aynı pakete ait tüm fragmentleri ID alanından tanımlar.
  • 1. fragment tanımlanır. (offset = 0)
  • Header uzunluğu ve fragment offset kullanılarak fragmentler ardaşık olarak birleştirilir.
  • MF = 0 olana kadar tekrarlanır.

Örnek : Aşağıdaki paketi Ethernet’de iletmek isteyelim. Ethernet’de MTU = 1500 olduğu için ve bizim paketimizin boyutu 5140 olduğu için fragmentation işlemi yapmak zorundayız. DF = 0 olduğu için bu paketi parçalayabiliriz.

1.Adım parçalanacak paketin fragment’lerinin MTU’ya uyum sağlayacak şekilde maksimum total length’ini bul.

Öncelikle Total Length(IP header + data) değerinin 5140’a eşit olduğunu görüyoruz.Total Length’de header’ın da boyutu olduğu için 20 byte ondan düşüyoruz. Yani 5140byte – 20byte = 5120byte parçalanması gereken data uzunluğumuz var. MCU değerimiz 1500. Bu yüzden 1500, 1500 ayırarak maksimum uzunlukta ayırmaya çalışıyoruz. Ve Bu fragmentlerin de her birinde 20byte’lık header olacak bu yüzden her birinin taşıyacağı data = total length-20.

Mesela ilk fragment 1500byte(total length) – 20byte(header) = 1480byte’lık data taşıyabilecektir. Çıkartma işleminden sonra kalan data uzunluğunu 8’e bölüyoruz eğer bölünmezse total length değerini değişiyoruz. Bu örnekte bölünüyor ve 1480 / 8 = 185 oluyor. Buradaki 185byte değerimiz bizim offset değerimiz olacak.

1480 + 1480 + 1480 = 4440 byte edecektir. 5120 byte’a tamamlamak için 5120 – 4440 = 680 byte data taşıyan bir fragment’e daha ihtiyacımız var. Son fragment’in total length(data + header) değeri, 680 + 20 = 700 olacaktır.

Fragment’lerimizin Total Length alanlarını bulduk.

ID alanları, hepsinde aynı olacaktır. Çünkü aynı pakete aitler.

2.adım Flagların değerlerini bul

Tüm fragment’lerde DF Flag’ı 0 olacaktır.

ilk 3 fragment’de MF Flag’ları 1 olacaktır. Çünkü her birinden sonra 1 fragment geliyor. Ancak sonuncu fragment yani 4. fragment’den sonra başka bir fragment gelmiyor bu yüzden 4. fragment için MF flag’ı 0 olacaktır.

3. adım fragment offset’leri hesapla

ilk adımda yaptığımız işlemi hatırlayacak olursak. 1480/8 = 185 değerini bulmuştuk. Buradaki 185 değerimiz offset değerimiz oluyor.

İlk fragmentin’in offset değeri 0 olacaktır.

İkinci fragmentin offset değeri 0 + 185 = 185 olacaktır.

Üçüncü fragmentin offset değeri 185 + 185 = 370 olacaktır.

Dördüncü fragmentin offset değeri 185 + 185 + 185 = 555 olacaktır.

Windows’da ağınızın MTU değerini öğrenmek için :

netsh interface ipv4 show subinterfaces

Wireshark Denemesi

ping www.example.com -l 7000 -n 1

Bu komutu yazarak bir ip adresine 7000byte uzunluğunda 1 tane ICMP paketi gönderiyoruz.

Evet yukarıda gördüğümüz gibi 7000byte’lık ICMP paketimi 5 farklı fragment’e bölmüş ve 5.satırda bunları birleştirmiş.

Son fregment yapısını ve birleştirilmiş hallerini inceleyelim :

KAYNAKÇA :

Kurose, James F., & Ross, Keith W. (2017). “Computer Networking: A Top-Down Approach” (7th ed.). Boston: Pearson Education.

https://info.support.huawei.com/info-finder/encyclopedia/en/MTU.html

www.researchgate.net/figure/Example-of-IP-fragmentation\_fig3\_45860059

www.geeksforgeeks.org/fragmentation-network-layer/

www.prepbytes.com/blog/computer-network/fragmentation-in-computer-networks/