IPv4
Paket yapısı > Başlık

IPv4 paket başlığı 14 alandan oluşur. Bunlardan 13 tanesinin doldurulması zorunludur, (tabloda kırmızı arka plan ile gösterilen) 14. alan ise isteğe bağlıdır seçenekler alanı olarak adlandırılır. Başlıktaki alanlar yüksek basamaklı bayt başta olacak şekilde sıralanır ve diyagram ve tartışmalarda da yüksek basamaklı bitler önce yazılır. En yüksek basamaklı bit 0 numaralı olandır. Dolayısıyla sürüm alanı ilk baytın dört en yüksek basamaklı bitinde bulunur demek daha doğru bir tanımdır.
IP paket başlıklarındaki ilk alan dört bit uzunluğundaki sürüm alanıdır. IPv4 için bu alana konacak değer 4'tür. (IPv4 adındaki v4 versiyon 4'ü temsil eder)
4 bit uzunluğundaki bu ikinci alan başlıkta bulunan 32 bitlik (word) sayısıdır. Yani bu alandaki değer başlığın kaç adet 32 bitten oluşabileceğini göstermektedir. Başlıkta uzunluğu değişebilen tek alan seçenekler alanı olduğundan başlığın uzunluğunu bu alana belirler. Uzunluğun 32 bitin katı olmaması durumunda en yakın katına yuvarlanacak şekilde doldurma bitleri eklenir. Bu alanın alabileceği en düşük değer 5'tir (RFC 791). Bu da 5×32 = 160 bit = 20 bayta karşılık gelir. Bu alan 4 bitlik uzunlukta olduğundan gelebilecek en büyük değer 15'tir (yani 15×32 bit = 480 bits = 60 bayt).
Aslında ilk olarak Hizmet Türü (ToS veya Type of Service) alanı olarak tanımlanmıştır. Ancak RFC 2474'ten itibaren Sınıflandırılmış Hizmetler (DiffServ veya Differentiated Services) alanı olarak tanımlanmıştır. Gitgide gerçek zamanlı veri akışı gerektiren ve dolayısıyla DSCP alanını kullanan yeni teknolojiler kullanıma girmektedir. Etkileşimli ses verisi takasını sağlayan Voice over IP (VoIP) buna bir örnek olarak gösterilebilir.
RFC 3168 ile tanımlanan bu alan, paketleri düşürmeden uçtan uca ağ tıkanıklığı bildiriminin yapılmasını sağlar. İsteğe bağlı olarak kullanılan ECN yalnızca iki üç noktanın da bu özelliği desteklemesi ve kullanmak istemesi durumunda uygulanabilir. Yalnızca üzerinde olunan ağ tarafından desteklenmesi durumunda etkilidir.
Paketteki başlık ve verinin birlikte toplam uzunluğunu belirten bu 16 bitlik alanın alabileceği en küçük değer 20 (20 bayt başlık + 0 bayt veri), en büyük değer ise 65.535 bayttır (16 bitlik bir sayının alabileceği en büyük değer). IP paketlerinin mümkün olan en büyük uzunluğu 65.535 olsa da bu paketleri çerçeve adı verilen iletim birimlerine sarmalayıp taşıyan alt katman protokollerinin taşıyabileceği maksimum çerçeve uzunluğu değişkenlik göstermektedir. Standartlara göre tüm hostlar 576 bayta kadar olan tüm veri bloklarını kabul edebilmelidir. Günümüzde birçok host çok daha büyük paketleri taşıyabilmektedir. Ancak bazen bazı alt ağlar maksimum paket büyüklüğü üzerine kısıtlama koymaktadır. Bu durumda bu sınırı aşan veri bloklarının parçalara ayrılarak taşınması gerekmektedir. Bu işleme parçalandırma (fragmentation) denmektedir. Desteklenen maksimum paket büyüklüğünün 576 bayttan az olamayacağı standartla sabitlendiği için 576 bayta kadar olan tüm paketlerin parçalandırılmaya gerek kalmadan taşınabileceği kesindir. IPv4 protokolünde parçalandırma işlemi hostlarda veya yönlendiricilerde gerçekleştirilebilir.
Tanımlama alanı olarak adlandırılan bu alan parçalandırılmış paketlerin hangi IP paketine ait olduğunu anlamak için her pakete eklenen ve aynı paketin parçaları olan paketlerde aynı olan sayının bulunduğu alandır. Bazı deneysel çalışmalar tanımlama alanının başka amaçlar için de kullanılmasını önermiştir. Örneğin bu alanın kaynak adresi alanında sahte bilgi içeren veri bloklarının takip edilmesini kolaylaştırma amacıyla kullanılabileceği önerisi yapılmış, ancak RFC 6864 tarafından bu tür kullanımlar yasaklanmıştır.
Üç bitlik bu alan paket parçalarının kontrol edilmesi ve tanımlanabilmesi amacıyla kullanılmaktadır. Yüksek basamaktan düşüğe doğru sıralı olmak üzere bayrak bitleri su şekildedir:
bit 0: Ayrılmış; sıfır olmalıdır.
bit 1: Parçalandırmama işareti (DF, Don't Fragment)
bit 2: Daha Parça Var işareti (MF, More Fragments)
Eğer DF bayrağı ayarlanmışsa ama paketin aktarımı esnasında yönlendirilebilmesi için parçalandırılması gerekiyorsa, paket düşürülür ve hata iletisi gönderilir. Bu ayar parçalandırma işlemleriyle ilgilenecek miktarda kaynağı bulunmayan bir hosta paket gönderirken kullanılabilir. Bir diğer kullanım alanı da paketin aktarım yolunun desteklediği maksimum paket boyutunu ölçmektir. Bu ölçme IP yazılımı tarafından kendiliğinden veya ping veya traceroute gibi bazı ağ tanılama araçlarıyla kullanıcı tarafından gerçekleştirilebilir. 
MF biti, kendisinden sonra gelecek başka parçaların olduğu paketlerde 1 olarak, son paketlerde ise 0 olarak işaretlidir. Parçalandırılmamış paketler de kendilerinin ilk ve son parçası olarak düşünülebileceğinden bu paketlerde MF biti 0'dır. Parçalandırılmış paketlerin de son parçaları hariç tüm parçalarında bu bit 1 olarak ayarlıdır. MF biti 0 olan bir paketin tek başına bir paket mi yoksa bir paketin parçası mı olduğu Parçanın Başlangıç Konumu alanından anlaşılır. Zira o alan tek parçadan oluşan paketlerde 0 olacaktır.
Orijinal paketin başlangıcına göre parçanın bağıl konumunu belirten bu alandaki 13 bit uzunluğunda olan sayının birimi sekiz bayttır (64 bit). Yani parçanın, orijinal paketin kaçıncı 64 bitlik kısmından itibaren olan kısmını içerdiğini belirtir. Bu alanla en fazla (213 – 1) × 8 = 65.528 bayt uzunluğunda konum belirtilebilir ancak bu başlık da dahil edildiğinde maksimum IP paket boyutunu (65.535) aşmaktadır (65.528 + 20 = 65.548 bayt).
Sekiz bitten oluşan yaşam süresi paketlerin internet üzerinde döngülere takılarak sonsuza kadar kalmasını engeller. Teorik olarak bu alan paketin kalan ömrünü saniye türünden belirtir ve yol üzerinde paketin üzerinden geçtiği her düğüm yaşam süresi alanından paketin işlenmesi sırasında geçen süreyi düşer. 1 saniyeden kısa geçen süreler 1 saniyeye yuvarlanır. Günümüzde paketler yönlendiriciler üzerinden 1 saniyeden çok daha küçük sürelerde aktarıldığından uygulamada bu alan atlama sayısının ölçüsü olarak kullanılır. Yönlendiriciler paketi teslim aldığında TTL alanını bir azaltır. Sayı sıfır olduğunda paket düşer ve göndericiye ICMP Zaman Aşımı (ICMP Time Exceeded) iletisi gönderilir.
Traceroute yazılımı da paketin kaynaktan hedefe giderken üzerinden geçtiği yönlendiricilerin listesini oluştururken yönlendiricilerden gelen ICMP Zaman Aşımı iletilerini kullanır.
Bu alan IP paketlerinin veri kısmında hangi protokolün kullanıldığını tanımlar. İnternet Tahsisli Sayılar ve İsimler Kurumuna bağlı çalışan İnternet Tahsisli Sayılar Otoritesi, RFC 790 ile belirenmiş IP protokol numaralarının bir listesini tutmakktadır.
16 bit uzunluğundaki sağlama toplamı alanı başlıkta hata denetimi yapmak amacıyla kullanılır. Yönlendiriciye bir paket vardığında, yönlendirici paket başlığının sağlama toplamını hesaplar ve başlıkta yazan sağlamayla karşılaştırır. Eğer değerler bağdaşmıyorsa yönlendirici paketi yok sayar. Veri kısmındaki hatalarla veriyi sarmalayan protokol ilgilenmelidir. Hem UDP'nin hem TCP'nin sağlama toplamı vardır. 
Yönlendiriciye bir paket vardığında yönlendirici paketin TTL alanını bir azaltır. Sonra da yeni sağlama toplamını hesaplar. RFC 1071 sağlama toplamının hesaplanmasını şöyle tarif etmektedir:
Örneğin on altılık gösterimi şu şekilde olan başlık verisini ele alalım: 4500003044224000800600008c7c19acae241e2b. Bu veri toplamda 20 bayt uzunluğundaki bir IP paketi başlığıdır. Standart ikinin tümleyeni artimetiğini uygulayan bir makinede:
Başlığın sağlama toplamını doğrulamak için aynı algoritma kullanılabilir – doğru bir sağlama toplamı bulunduran bir başlığın sağlama toplamı hesaplandığında tamamen 0'dan oluşan bir sözcük elde edilir:
Bu alan paketi gönderenin IPv4 adresidir. Ulaştırma esnasında bu adresin ağ adresi çözümleme aygıtı tarafından değiştirilebileceğine dikkat edin.
Bu alan paketin alıcısının IPv4 adresidir. Kaynak adresi gibi bu adres de bir ağ adresi çözümleme aygıtı tarafından ulaştırma esnasında değiştirilebilir.
Seçenekler alanı çok sık kullanılmaz. IHL başlğında bulunan 32 bitlik sözcüklerin uzunluğunun tüm seçenekleri kapsayacak kadar büyük olması gerektiğine dikkat ediniz, toplam uzunluğun 32 bitin katı olmaması durumunda başlık gereken miktarda dolgu verisiyle doldurulmalıdır. Seçenekler listesi EOL (Seçenekler Listesi Bitimi, 0x00) seçeneği ile bitirilebilir ancak bu yalnızca seçeneklerin sonu başka türlü başlığın sonuyla denk gelmiyorsa gereklidir. Başlığa konulabilecek seçeneklerin listesi şöyledir:
| Alan | Boyut (bit) | Açıklama |
| --- | --- | --- |
| Kopyalandı (Copied) | 1 | Eğer seçeneklerin parçalandırılan paketlerin tüm parçalarına kopyalanması gerekiyorsa 1 olarak ayarlanır. |
| Seçenek Sınıfı (Option Class) | 2 | Genel seçenek kategorisi. "kontrol" seçenekleri için 0, "hata ayıklama ve ölçümleme" için 2 kullanılır. 1 ve 3 işlevi daha sonra belirlenmek üzere ayrılmıştır. |
| Seçenek Numarası (Option Number) | 5 | Seçeneğin ne olduğunu belirtir. |
| Seçenek Uzunluğu (Option Length) | 8 | Tüm seçeneğin boyutunu belirtir (bu alan da dahil). Basit seçenekler için bu alan kullanılamayabilir. |
| Seçenek Verisi (Option Data) | Variable | Seçeneğe özgü veriler için kullanılır. Basit seçeneklerde bu alan bulunmayabilir. |
Not: Eğer başlık uzunluğu 5'ten büyükse, yani 6'dan 15'e kadarsa seçenekler alanı kullanılmış demektir dolayısıyla dikkate alınır.
Not: Kopyalandı, Seçenek Sınıfı ve Seçenek Numarasından bazen "Seçenek Türü" adlı sekiz bitlik tek bir alan olarak söz edilir.
Loose Source and Record Route (LSRR) ve Strict Source and Record Route (SSRR) seçeneklerinin kullanılması güvelik kaygıları nedeniyle önerilmemektedir. Bu seçenekleri barındıran paketleri birçok yönlendirici engellemektedir.