IP parçalama

İnternet Protokolü  (IP), ağlar arası paket transferinde eğer paketin boyutu gönderilecek ağın taşıyabileceği maksimum taşıma birimi 'nden (MTU) daha
büyük olması durumunda datagram parçalamasını uygularlar. Böylece daha büyük boyuttaki paketleri kabul edecek olan ağın MTU'na uygun şekilde küçük
parçalara böler. Parçalama bir IP datagramının ağlar arasında dolaşırken MTU(Maksimum Transfer Unit) değeri daha düşük kapasitede bir ağa geldiginde yaşadıgı durumdur. Yani parçalama, bölünmedir. Örneğin; Ethernet ağlarının MTU değeri 1500 byte'dır. Bizim IP datagramımızın değeri 2400 byte olsun. Bu paket ethernet ağının girişindeki yönlendiriciye geldiğinde yönlendirici diğer tarafında ethernet ağı ve bunun MTU değerinin 1500 byte olduğunu bilir ve 2400 byte’lık gelen paketi Ethernet ağına parçalayarak gönderir. Paketimiz artık hedefine ilk parça 1500 byte, ikinci parçası 900 byte olmak üzere iki parça olarak ulaşır ve birleştirilir.

RFC 791 belgesi IP parçalama, taşıma ve datagramların yeniden birleştirme prosedürünü tanımlar. RFC 815 ise birleştirmenin kolaylaştırılmış 
algoritmasını tanımlar.

IP protokol başlığında bulunan Identification, Fragment offset alanları, ayrıca Don't Fragment (DF) (Parçalamaya tabi tutma) ve More Fragment (daha fazla parçalar var) bayrakları IP datagramının parçalanmasında ve yeniden birleştirilmesinde kullanılırlar.

Bir yönlendiricinin (router) aldığı protokol veri biriminin (PDU) bir sonraki hop'un MTU'sundan daha büyük olduğunu düşünelim: Bu durumda yönlendiricinin iki seçeneği vardır, birincisi eğer taşıma IPv4 ile gerçekleştiriliyorsa, PDU'yu düşür ve italik- Paket çok Büyük durumunu belirten Internet Kontrol Mesaj İletişim Kuralı (ICMP) mesajını gönder, ya da IP paketini parçala ve küçük MTU'ya sahip bağlantıdan gönder. IPv6'da ise paketler gönderilmeden önce optimum Path MTU 'nun belirlenmesini gerektirir. Ancak, boyutu 1280 byte'tan küçük veya eşit olan IPv6 paketlerinin IPv6 parçalamayı gerektirmeksizin iletilebilir olmasını garantiler.

Eğer paketi kabul eden taraf parçalamaya (fragmentation) tabi tutulan IP paketi alırsa, kabul ettiği datagramı yeniden birleştirip daha üst katman protokolüne geçirmesi gerekir. Parçaları yeniden birleştirme işi kabul eden tarafta birleştirilmesi niyetlenmişti ama pratikte bu iş ara yönlendiriciler tarafından da yapılabilir. Örneğin, veri akışını çevirmek için ağ adresi dönüştürme (NAT) parçaların yeniden birleştirilmesine ihtiyaç duyabilir, RFC 2993 tanımlanan FTP kontrol protokolünde olduğu gibi.

IP parçalama, parçaların farklı ağlarda dolaşırken kaybolması (paket kaybı ) durumlarında aşırı derecede yeniden taşımaya neden olabilir ve TCP gibi güvenilir protokoller kaybolan parçaları karşıya ulaştırabilmek için kaybolan parçadan başlayarak yeniden taşırlar. Bu nedenle gönderen taraflar ağda gönderecekleri IP datagramlarının boyutunu belirlemek için iki yaklaşımı kullanırlar. Birinci yaklaşım gönderen taraf ilk hop'taki yani kaynak hedef çiftinin MTU'su kadar IP datagramı göndermek. İkincisi ise path MTU bulma  algoritmasını çalıştırmak. RFC 1191'de tanımlanan iki IP konakları arasında path MTU'nun belirlenmesi ve böylece IP parçalamadan kaçınılabilmesidir.

Paketlerin Birleştirilmesi 
Parçalanmış paketlerin hedefe ulaştığında doğru sırada birleştirilmesi gerekir. Paketler hedefe
ulaştığında tekrar birleştirilip orijinalinin elde edilmesi için her pakette bulunması gereken bazı
alanlar vardır. Bunlar; Kimlik(identification)  , diğer bir isimle IP ID. Bir IP datagramına ait parçalanmış tüm paketlerde
bu değer aynı olmalıdır. Bayrak (Flag)  alanında ise, DF (Don't Fragment) biti 1 ise ağ geçitlerine paketin ulaştığı yerde birleştirilemeyeceği için parçalanmaması gerektiğini anlatır. MF (More Fragment) biti gelen fragmentin arkasında başka fragment olup olmadığını belirtir. Bu nedenle son fragment hariç tüm parçalar bu biti içermelidir.
Parçalanmış her paket taşıdıgı veri boyutunu ve hangi byte’dan itibaren taşıdığını bilmelidir.
Ne kadarlık bir veri taşıdıgı Toplam Uzunluk (Total Length)  ile belirtilir. Hangi byte’dan itibaren bu verinin ekleneceği de Fragment Offset  değeri ile belirtilir.

Ağ yönlendirmede parçalamanın etkisi 

Bir Internet yönlendiricisi birden fazla paralel yollara sahipse, LAG  ve CEF  gibi teknolojiler hash algoritmalarına göre trafiği bağlantılar üzerinde bölerler. Algoritmanın amacı, gereksiz yere paketin yeniden düzenlemelerini  en aza indirgemek için aynı akışın  bütün parçalarının aynı yoldan gönderilmesini sağlamaktır. Eğer hash algoritması TCP/UDP port numaralarını kullanıyorsa paketin parçaları farklı yollardan yönlendirilmiş olabilir çünkü sadece ilk parça 4-katman bilgisine sahiptir. Bu da başlarda olması gereken parçaların sonlarda olan parçalardan karşıya daha geç ulaşmasına sebep olabilir, böyle durumlarda bazı makineler yani kabul eden taraflar ya da güvenlik aygıtları hata durumu olarak değerlendirirler ve paketi düşürürler.

Parçalamada IPv4 ve IPv6 farkları 

Parçalama mekanizmasının ayrıntıları yanı sıra, ilk resmi Internet Protokolü olan IPv4 ile yeni model IPv6'da parçalanma için genel mimari yaklaşımı da farklıdır. IPv4'te yönlendiriciler parçalama işini yaparken, IPv6'da yönlendiriciler parçalama (fragmentation) yapmaz ama MTU'dan daha büyük boyuta sahip paketleri düşürürler. Başlık biçimleri IPv4 ve IPv6 için farklı olmasına rağmen, benzer alanları parçalanma için kullanılır, böylece algoritma parçalanma ve birleştirme çalışmaları için yeniden kullanılabilir.

IPv4'te minimum MTU 576 byte'dır, parçalamaya uğramış IP datagramlarını karşı taraf yeniden birleştirmek için en iyi performansı sergilemelidir IPv4'te. Ayrıca, karşı taraf (hosts) boyutu 576 byte'tan daha büyük parçalamaya uğramış datagramları birleştirme girişiminde bulunabilirler, ya da bu tarz büyük datagramları düşürebilirler. IPv6'da ise bu minimum kapasite 1280 byte çıkarılmıştır - IPv4'ün minimum MTU'dan daha büyük.

Ayrıca bakınız 
 IPv4 parçalama ve yeniden birleştirme 
 IPv6 parçalama 
 IP parçalama atakları

Kaynakça

Dış bağlantılar 
 IP Parçalama
 Paket parçalama nedir? 
 The Never-Ending Story of IP Fragmentation 

İnternet mimarisi