Ana sayfa » IP Parçalama İşlemi Nasıl Olur?
Çeşitli Network Konuları

IP Parçalama İşlemi Nasıl Olur?

ip parçalama

IP Parçalama İşlemi

IP parçalama bir başka değişle IP fragmentation işlemi, günümüz datagram networklerinde IPv4 protokolü kapsamında geliştirilmiş bir özelliktir aslında. RFC 791 kapsamında tanımlanmıştır. İsminden de anlaşılacağı üzere inceleyeceğimiz işlem, bir IP datagramının parçalanma süreci ve bir araya getirilme süreci olacak. Peki neden bu işlem yapılıyor ve nerelerde yapılıyor? Konuya başlamadan önce ön bilgi olması açısından IPv4 yapısını incelemenizi tavsiye ederim. Bunun için daha önceden yazmış olduğum IPv4 ve IPv6 arasındaki farklar IPv4 ve IPv6 arasındaki farklar adlı yazımı okuyabilirsiniz. Fakat ben yinede giriş seviyesinde IPv4 headerı üzerinden işimize yarayacak olan kısımlara değineceğim. Aşağıdaki görseli inceleyelim.ip başlık kısmıYukarıda görmüş olduğunuz görsel, IPv4 protokolünün başlık kısmını göstermektedir. Bu başlık içindeki her bir bölümün ne işe yaradığını anlatmayacağım. Bunun için yukarıda linkini vermiş olduğum yazımı inceleyebilirsiniz. Burada bizim konumuz olan IP parçalama işlemini yakından ilgilendiren 3 adet kısım var. Bunlar sırası ile;

  • Identification
  • IP Flags
  • 13 bit IP fragmentation Offset

IPv4 başlığındaki bu 3 kısım, IP parçalama ve parçalama sonucu oluşan parçaları birleştirmek için kullanılacak kısımlardır. Şimdilik bu bilgileri cebe atalım. Daha sonra uygulama üzerinden bu kısımların kullanımını detaylı bir şekilde inceleyeceğiz. Şimdi ise neden bu parçalama işleminin yapıldığını veya yapılması gerektiğine bir değinelim.

IP Parçalama İşlemi Neden Yapılır?

Aslında bu sorunun cevabını anlayabilmek için Link-Layer katmanında kullanılan protokollerinin yapısına ufaktan bir göz atmak gerekecektir. Bağlantı katmanında her bir frame için tanımlı bir MTU değeri vardır. Bu değerin açılımı Maksimum Transfer Unit‘tir. Yani bir frame’in data kısmında(payload) taşıyabileceği en yüksek değer(byte cinsinden) olarak bunu çevirebiliriz. Aşağıda günümüzde kullanılan protokollerin MTU değerleri verilmiştir.

HYPERchannel  65,535
 Token Ring(16Mbps)  17,914
 Token Ring(4Mbps)  4,464
 FDDI  4,352
 Ethernet  1,500
 X.25;  5,76
 PPP  296

Bizi burada şimdilik ilgilendiren Ethernet Frame’dir. Çünkü günümüz datagram networklerinde bir hayli kullanılmaktadır. Ethernet frame’nin MTU değeri yani Maksimum Transfer Unit miktarı 1500 byte ile sınırlandırılmıştır. Yani Ethernet protokolü kullanılan bir networkte iletilecek olan payload’ın büyüklüğü 1500 byte değerini aşamaz. Eğer network layer’dan yani bir üst katmandan 1500 byte değerinden fazla bir datagram geldiyse bu datagram en fazla 1500 byte olacak şekilde parçalara ayrılır. İşte bu işleme de IP parçalama diğer bir değişle IP fragmentation adı verilir. Şimdi bu olayı bir örnek üzerinden inceleyelim. Daha sonra wireshark programından da uygulamalı olarak bu işlemin nasıl olduğunu görelim.

Mesela elimizde 15000(15 bin) byte’lık bir datagram paketi olsun. Bu 15000 byte’lık datagram bir alt katman olan bağlantı katmanında ethernet protokolü tarafından işleme alınacak olsun. Bu durumda 15000 byte’lık veri her biri en fazla 1500 byte olacak şekilde 10 adet parçaya ayrılacaktır. Bu parçalara ayırma işlemi genelde datagramı oluşturan PC’de veya routerlarda meydana gelir.

ip parçalama

Şimdi ise daha önceden cebe attığınız bilgileri kullanma vakti. Yani IPv4 başlık kısmındaki Identification, IP flags ve IP fragmentation Offset bölümlerinden bahsediyorum. Datagramlar parçalara ayrılırken bu kısımların doldurulması gerekiyor. Peki ama nasıl?

IP Parçalama İşlemi Nasıl Yapılır?

İlk olarak identification kısmından başlayalım. Bu kısım bir üst katman olan network layer’da belirlenir ve her bir datagram için unique bir değerdir. Yani benzeri yoktur. İki farklı datagram aynı identification değerine sahip olamaz. Yukarıdaki örneğimizde 15000 byte’lık datagramın identification numarası “5060” olsun. O halde 1500 byte’lık parça halde bulunun tüm datagramların identification numarası da “5060” olacaktır. Buradaki maksat parçalara ortak bir kimlik numarası vermektir ki; parçaların ancak bir bütün haline geldiğinde anlam ifade edeceği ortaya çıksın.

Şimdi diğer bir kısım olan IP flags kısmına geçelim. Bu kısımlar TCP headerındaki ACK, SYN, FIN, PSH… bayraklarına benzetilebilir. Burada 3 adet bayrak vardır. Bunlar sırası ile;

  • Reversed bit
  • Don’t fragment
  • More fragments

Burada bizim ilgilenmemiz gerekenler Don’t fragment(DF) ile More fragment(MF) kısımlarıdır. Bu bayraklardan da DF biti 1 olduğunda, IP datagramının, MTU değerinden yüksek olduğu durumlarda dahi parçalanmaması gerektiğini belirtiyoruz. Yani bu örnekte diyelim ki 15000 byte’lık datagramımız A numaralı router’a geldi ve DF biti 1 olarak işaretli. Router bu durumda datagrama fragmentation işlemi uygulamayacak ve o paketi düşürecektir. Daha sonra paketi gönderen hosta, router tarafından “Fragmentation Needed” şeklinde bir ICMP mesajı gönderilir.

dont-fragment-bit

Şimdi de More fragment bitini inceleyelim. Aslında parçalama ve birleştirme işlemi için bir hayli önem arz eder bu bayrağımız. Eğer 1 olarak işaretli ise, o datagram için herhangi bir bütüne ait parça olduğu yorumu yapılır. Eğer 0 olarak işaretli ise o datagram için ya bir bütündür yada bir bütünün son parçasıdır denilebilir. Mesela bu örneğimizde 15000 byte’lık datagramımızın 9 adet 1500 byte’lık parçasının More fragment biti 1 olacak şekilde işaretlenecektir. Son 1500 byte’lık parçasının ise More fragment biti 0 olacak şekilde işaretlenecektir. Buradan MF biti 0 olarak işaretlenen son datagram için, identification numaraları aynı olan(bu örnekte 5060) parçaların en sonuncusu olduğu yorumu çok rahat bir şekilde yapılabilir. Diğer 9 adet datagram ise bu bütünün diğer parçalarıdır.

En son olarakta fragmentation offset kısmına değinelim. Bu 13 bitlik kısım da, parçaların sıraları bir şekilde yerleştirilmesi için önemlidir. Yine yukarıdaki örnekten devam edecek olursak. İlk parçanın fragmentation offset kısmı 0 olacaktır. İkinci parçanın 1480, üçüncü parçanın 2960 olacak ve bu şekilde 1480 byte eklene eklene devam edecektir. Buradaki mantık parçaları birleştirecek olan hosta “n. byte’tan itibaren aldığın bu datagramın payload kısmını ekle” şeklinde bilgilendirme yapmaktır. Buradaki n, fragmentation offset kısmına tekabül etmektedir. İlk parçanın fragmentation offset kısmı 0’dır. Yani aslında o parça ulaştığı hosta “0. byte’tan itibaren 1480 byte’lık data kısmımı ekle” demektedir. İkinci parça ise “1480. byte’tan itibaren 1480 byte’lık data kısmımı ekle” demektedir. Üçüncüsü ise “2960. byte’tan itibaren 1480 byte’lık data kısmımı ekle” demektedir.

Hedef host fragmentation offset kısmındaki değerleri yukarıdaki tasvir etmeye çalıştığım örnek ile okuyup anlayacak ve paketleri sıralı bir şekilde birleştirecektir. Bu işlem more fragment biti 0 olana kadar devam edecektir. Şimdi ping komutu ile 15000 byte’lık bir veriyi google’a gönderelim ve bunu wireshark programından inceleyelim.

ping -s 15000 google.com

Yukarıdaki komuttan sonra wireshark’ta bizi ilgilendirecek olan trafiğin görüntüsü ise aşağıdaki gibidir.

ip-fragmentation

Burada off ile belirtilen kısım fragmentation offset, ID ile belirtilen kısım ise identification bölümlerini temsil etmektedir. Gördüğünüz gibi en son paketin off kısmı 13320’dir. Buradan şu hesaplamayı rahatlıkla yapabiliriz. 13320 + 1480 = 14800 yapar. Dikkat ettiyseniz daha 15000 byte’lık kısımda 200 byte eksiğimiz var. Yukarıda toplam 10 adet parça var ve bu her parça da bir datagram olduğuna göre 20 byte’lık bir header kısmı olacaktır. 20*10 = 200 yapar. 14800+200 = 15000 olacaktır. İşte şimdi eksiği tamamlamış olduk. Şimdi de bayrak kısımlarını görmek için aşağıdaki görseli inceyelim.

Bu alıntı, off kısmı 0 olan ilk datagramımıza ait bir görseldir. Yukarıdan da göreceğiniz gibi More fragments kısmı 1 olarak ve daha sonra Fragmen offset kısmı 0 olarak olarak girilmiş. Artık bu değerleri okumayı biliyorsunuz. Görselin devamını incelemeyi size bırakıyorum.

IP parçalama diğer bir değişle IP fragmentation işlemini elimden geldiğince anlatmaya çalıştım. Bir sonraki yazımda görüşmek üzere.

Yazar Hakkında

Hakan İlbiz

Siber güvenlik, linux, programlama ve network gibi bilgisayar bilimlerini kapsayan alanlarda yaptığı çalışmalardan edindiği tecrübeleri, kurucusu olduğu kodputer.com adlı web sitesinde okurlarına sunan ve bundan büyük bir haz duyan Sakarya Üniversitesi Bilgisayar Mühendisliği öğrencisi.

Yorum Ekle

Yorum Yazmak İçin Tıkla