یک بسته ی IP از دو قسمت سرآیند ( Header ) و بار مفید ( Payload ) تشکیل شده است. اطلاعات موجود در سرآیند توسط هر مسیریاب حاضر در مسیر بسته مورد استفاده قرار می گیرد.
قالب بسته ip
شکل زیر نمایش دهنده ی قالب یک بسته ی IP است. در ادامه، بخشهای مختلف یک بسته ی IP و کاربرد آنها معرفی می شوند.
در ادامه به شرح مختصر هر کدام از فیلدهای بسته ip می پردازیم.
فیلد Version
یک فیلد چهار بیتی است که نسخه ی پروتکل IP را مشخص می کند. به طور مثال، پروتکل IP نسخه ی چهار با عدد 0100 و پروتکل IP نسخه ی شش با عدد 0110 مشخص می شوند.
فیلد Header Length
این فیلد هم چهار بیتی است و طول کل سرآیند بسته را بر مبنای کلمات 32 بیتی مشخص می نماید. به طور مثال، در صورتی که عدد 10 در این فیلد قرار گرفته باشد، نشان دهنده ی 320 بیت است که یک سرآیند 40بایتی را مشخص می نماید. لازم به ذکر است که طول قسمت اجباری سرآیند (بدون فیلد Options ) برابر با 20 بایت است. در نتیجه، حداقل مقداری که در این فیلد قرار می گیرد برابر با 5 است. همچنین، با توجه به اینکه طول این فیلد برابر با ۴ بیت است، حداکثر میتواند (شامل عدد 15 1111 ) باشد که در این صورت حداکثر طول کل قسمت سرآیند برابر با 60 بایت خواهد بود که 20 بایت آن اجباری و 40بایت آن اختیاری است.
فیلد Type of Service
این فیلد 8 بیتی است و توسط ماشین مبدأ بسته و به منظور درخواست یک خدمت ویژه از مسیریاب های حاضر در مسیر تا مقصد مورد استفاده قرار می گیرد. جدول زیر نمایش دهنده ی معنی و کاربرد مقادیر بکاررفته برای هر کدام از این 8 بیت میباشد. همانطور که مشاهده میشود، 3 بیت سمت چپ تقدم و اولویت بسته را مشخص می کنند. هر چه این 3 بیت مقدار بزرگتری را شامل شود، بسته از اولویت بالاتری برخوردار خواهد بود و مسیریاب آنرا پیش از سایر بسته ها ارسال می نماید. بیت D بدین معنی است که بسته ی مورد نظر تحمل پایینی نسبت به تأخیر دارد و مسیریاب بهتر است آنرا از مسیرهای دارای تأخیر کمتر ارسال کند. بیت T نیاز بسته به گذردهی بالا را مشخص میکند و بیت R نیز، باعث میشود که مسیریاب از دور انداختن بسته ها اجتناب نماید. برای دو بیت آخر نیز هیچ کاربردی تعریف نشده است (ممکن است برای موارد خاص استفاده قرار گیرند؛ مثلاً بیت هفتم مربوط به هزینه است).
قالب فیلد 8 بیتی Type of Service
فیلد Datagram Length
این فیلد 16 بیتی طول کل بسته شامل بخش سرآیند و بار مفید را مشخص می نماید. مبنای طول بر حسب بایت است و در نتیجه، طول کل دیتاگرام حداکثر برابر با 6۴ کیلوبایت خواهد بود (در واقع برابر با 1-(64^2) خواهد بود که کمی کمتر از 6۴ کیلوبایت است).
فیلد 16-bit Identifier
ممکن است شرایطی پیش بیاید که یک مسیریاب مجبور شود که یک بسته را به تکه های کوچکتر بشکند. به طور مثال، ممکن است که پروتکل بکاررفته در لایه ی دوم اجازه ی ارسال بسته های بیشتر از 1500 بیت را ندهد. به هر کدام از تکه های ایجاد شده یک fragment گفته میشود و تمام این fragment ها دارای یک شناسه ی یکسان هستند که در این فیلد قرار داده می شود. در نتیجه، مقصد بسته ها میتواند تکه های مربوط به یک دیتاگرام واحد را تشخیص دهد و آنها را مجددا به هم پیوند بزند. وظیفه ی بازسازی قطعات همیشه بر عهده ی مقصد است. در ادامه تکه تکه کردن بسته ها با جزئیات بیشتری مورد بررسی قرار می گیرد.
فیلد Flags
از سه بیت تشکیل شده است که بیت اول برای اهداف خاص رزرو شده است و استفاده نمی شود. دو بیت دیگر DF و MF نامیده می شوند. در صورتی که بیت DF در یک بسته برابر با 1 باشد، مسیریابها حق شکستن آن به تکه های کوچکتر را ندارند زیرا، مقصد توانایی بازسازی آنها را ندارد. در صورتی که یک مسیریاب به دلیل اندازه ی بزرگ بسته قادر به ارسال آن نباشد و این بیت نیز شامل مقدار 1 باشد، مسیریاب مجبور است که آنرا دور بیاندازد. بیت MF نیز برای تمام تکه های یک دیتاگرام واحد به جز آخرین تکه برابر با 1 است.
فیلد 13-bit Fragmentation Offset
این فیلد 13 بیتی شماره ی ترتیب هر تکه در دیتاگرام شکسته شده را مشخص می نماید. اندازه ی هر تکه به استثنای تکه ی آخر باید مضربی از 8 باشد.
فیلد Time to Live یا TTL
این فیلد 8 بیتی یک شمارنده است که طول عمر بسته را در مسیر آن به سمت مقصد مشخص می نماید. با توجه به اینکه این فیل شامل 8 بیت است، حداکثر طور عمر بسته برابر با 255 است که ممکن است به پیمودن 255 گام (Hop) در یک شبکه اشاره نماید. در واقع، به ازای عبور از هر مسیریاب در مسیر، یکی از مقدار مشخص شده در این فیلد کاسته میشود. همچنین، در صورتی که یک بسته در بافر یک مسیریاب برای خروج منتظر بماند، به ازای هر واحد زمان یکی از مقدار TTL آن کاسته خواهد شد. در نتیجه، زمانی که مقدار این بیت برابر با صفر شود، مسیریاب آنرا دور می اندازد. در واقع، علت استفاده از این فیلد این است که گاهاً ممکن است شرایطی در شبکه (در جداول پیشرانی مسیریابها) پیش بیاید که بسته ها در یک مسیر تکراری (دور) قرار بگیرند. در صورتی که از مقدار TTL استفاده نشود، ممکن است شبکه با بسته های بدردنخور اشباع گردد.
فیلد Upper Layer Protocol
این فیلد در سیستم انتهایی مبدأ بسته و با مقدار متناظر با پروتکل لایه ی بالاتر (لایه ی انتقال) که بسته را به لایه ی شبکه تحویل داده پیکربندی می شود. در نتیجه، لایه ی شبکه در سیستم انتهایی مقصد با بررسی این فیلد، پروتکل لایه ی بالاتر را تشخیص میدهد و بسته را به آن تحویل میدهد. به طور مثال ممکن است بخش بار مفید بسته شامل یک بسته ی پروتکل TCP باشد که لایه ی شبکه در مقصد باید آنرا به به پروتکل TCP در مقصد تحویل دهد. این فیلد 8 بیتی است و پروتکلهای لایه ی بالاتر نیز دارای یک شناسه ی 8 بیتی منحصر به فرد هستند.
فیلد Header Checksum
این فیلد 16 بیتی به منظور کشف خطاهای موجود در سرآیند هر بسته ی IP مورد استفاده قرار میگیرد. عمل محاسبه ی مقدار این فیلد بدین صورت انجام میشود که هر دو بایت در” مکمل یک ” سرآیند به عنوان یک عدد در نظر گرفته میشود و جمع تمام این اعداد بر اساس محاسبات ( one’s complement ) انجام می گردد. هر مسیریاب مقدار checksum را برای سرآیند هر دیتاگرام ورودی محاسبه میکند و وجود خطا را در صورت مغایرت مقدار محاسبه شده با مقدار موجود در فیلد Header Checksum تشخیص میدهد و دیتاگرام دارای خطا را دور میاندازد. به علت تغییر فیلد TTL در هر گره از مسیر یک دیتاگرام و تغییر احتمالی فیلد Options ، هر مسیریاب حاضر در مسیر باید مقدار checksum را مجددا محاسبه کند و در فیلد مربوطه قرار دهد. نحوه ی محاسبه ی مقدار checksum بعداً مورد بررسی قرار خواهد گرفت.
فیلد 32-bit Source IP Address
آدرس IP میزبان مبدأ بسته در این فیلد قرار داده میشود.
فیلد 32-bit Destination IP Address
آدرس IP میزبان مقصد بسته در این فیلد قرار داده میشود.
فیلد Options
با توجه به اینکه بخش اجباری سرآیند بسته ی IP برابر با 20 بایت است، در این فیلد میتوان حداکثر 40بایت اطلاعات قرار داد. ممکن است این اطلاعات به مسیریابها در یافتن مسیر بهینه کمک کنند و یا اینکه، به منظور اشکال زدایی از شبکه پیکربندی شوند. در این فیلد چند گزینه ی مختلف قابل استفاده هستند که هر کدام اطلاعات خاصی را مشخص می کنند و هر گزینه نیز با یک بایت خاص که معرفی کننده ی آن است آغاز می گردد. 1 بیت سمت چپ از این بایت ( Copy Flag ) مشخص می کند که اگر مسیریابی مقدار آنرا برابر با 1 مشاهده کرد، این گزینه باید در تمام تکه های ایجاد شده از یک دیتاگرام واحد (در صورتی که مسیریاب مجبور به تکه تکه کردن دیتاگرام باشد) تکرار شود و اگر مقدار آنرا برابر با 0 مشاهده کرد، این گزینه فقط در تکه ی اول درج شود. دو بیت بعد ( Option Class ) نوع عملکرد (اطلاع رسانی یا تقاضا، اشکال زدایی و مدیریت شبکه) گزینه ی مورد نظر را مشخص میکنند. 5 بیت بعد ( Option Number ) نیز نوع و معنای گزینه ی مورد نظر را با یک شماره ی خاص مشخص می کنند. جدول زیر نمایش دهنده ی انواع گزینه های قابل کاربرد در یک بسته ی IP است. جدول زیر گزینه های قابل درج در فیلد Option از بسته ی IP است.
فیلد Data
این فیلد شامل بسته ی دریافت شده از لایه ی بالاتر میباشد. مثلاً segment دریافت شده از پروتکل TCP در این فیلد قرار داده میشود. در این قسمت به بررسی بیشتر عمل تکه تکه کردن دیتاگرامها یا IP Datagram Fragmentation پرداخته میشود.
قبلاً گفته شد که یک دیتاگرام تولید شده در لایه ی شبکه در یک فریم لایه ی پیوند بسته بندی میشود و به سمت مسیریاب بعدی در شبکه ارسال میگردد. پروتکل های مختلف بکاررفته در لایه ی پیوند، ممکن است در اندازه ی بسته هایی که بر روی شبکه ارسال می کنند با محدودیت مواجه باشند (به حداکثر مقدار دادهای که یک فریم لایه ی پیوند میتواند حمل کند حداکثر واحد انتقال یا Maximum Transmission Unit)MTU) گفته میشود).
بنابراین، به علت تفاوت بین پروتکل های بکاررفته بر روی لینکهای ورودی و خروجی متصل به مسیریاب، ممکن است لینک خروجی مشخص شده برای یک بسته، توانایی حمل بسته ی مورد نظر رابه خاطر اندازه ی بزرگ آن نداشته باشد ( MTU لینک خروجی کمتر از MTU لینک ورودی است).
راه حل این مشکل تکه تکه کردن داده ی موجود در دیتاگرام IP به دو یا چند دیتاگرام کوچکتر و سپس، بسته بندی هر کدام از این دیتاگرام های کوچکتر در یک فریم لایه ی پیوند مجزا و ارسال آنها بر روی لینک خروجی است. هر کدام از این دیتاگرام های کوچکتر به عنوان یک تکه یا fragment شناخته میشود. اما، یک دیتاگرام تکهتکه شده باید پیش از تحویل داده شدن به پروتکل لایه ی انتقال در مقصد مجدداً سرهم بندی شده و segment اولیه را تشکیل دهد (پروتکلهای لایه ی انتقال منتظر دریافت یک segment کامل هستند). بنابراین، سیستم انتهایی مقصد وظیفه ی سرهم بندی مجدد دیتاگرام را بر عهده دارد. در واقع، با هدف ساده تر کردن پیاده سازی هسته ی شبکه، این کار فقط در ماشین مقصد امکانپذیر است. استفاده از فیلدهای Identifier ، Flags و Fragmentation Offset در سرآیند IP به منظور تشخیص یک fragment ، تشخیص آخرین fragment و تعیین نحوه ی سرهمبندی مجدد تکه ها انجام میشود.
سیستم انتهایی مبدأ هر دیتاگرام تولید شده را با یک شماره ی شناسه ( Identifier ) و آدرس های مبدأ و مقصد نشانه گذاری می کند. با تقسیم یک دیتاگرام به چند تکه، هر کدام از این تکه ها نیز با آدرسهای مبدأ و مقصد و همچنین، شمارهی شناسه ی دیتاگرام اولیه نشانه گذاری میشوند. در نتیجه، با دریافت مجموعه ای از دیتاگرام ها از یک مبدأ یکسان توسط یک سیستم انتهایی، مقصد مورد نظر میتواند شماره ی شناسه ی بسته ها را به منظور تعیین تکه های مختلف یک دیتاگرام واحد بررسی نماید. با توجه به اینکه پروتکل IP هیچ تضمینی در رابطه با تحویل تکه ها به مقصد فراهم نمی کند، لازم است که در آخرین تکه ی دیتاگرام اصلی بیت MF از فیلد Flags دارای مقدار 0 و برای سایر تکه ها دارای مقدار 1 باشد.
همچنین، به منظور تعیین محل درست قرارگیری هر تکه در دیتاگرام اصلی و تشخیص تکه های مواجه شده با افت، از فیلد Fragmentation Offset استفاده میشود. در ادامه با یک مثال به بررسی بیشتر مسأله ی مورد نظر پرداخته میشود. فرض شود که یک دیتاگرام با طول ۴000 بایت ( 20 بایت سرآیند بعلاوه ی 3980 بایت بار مفید یا payload ) باید بر روی یک لینک خروجی با MTU برابر با 1500 بایت ارسال شود. در نتیجه بار مفید دیتاگرام باید به سه تکه ی مجزا (که هر کدام یک دیتاگرام جدید را تشکیل میدهد) تقسیم شود تا شرایط برای انتقال آن بر روی لینک خروجی فراهم گردد. نمایش دهنده ی مشخصات هر کدام از تکه های ایجاد شده است.
بحث بعدی در رابطه با تولید مقدار بکاررفته برای فیلد checksum در سرآیند دیتاگرام IP است. همانطور که قبلاً گفته شد، مقدار checksum از مکمل یک جمع تمام کلمات 16 بیتی در سرآیند حاصل میشود. هر مقدار سرریز شده نیز، با کم ارزشترین بیت نتیجه جمع میشود. به عنوان یک مثال برای انجام محاسبات مشابه، سه کلمه ی 16 بیتی 0110011001100000 و 0101010101010101 و 1000111100001100 در نظر گرفته میشود. جمع دو کلمه ی اول برابر با 1011101110110101 است و در نهایت حاصل جمع هر سه کلمه برابر با 0100101011000010 خواهد بود. توجه شود که در محاسبات انجام شده یک مقدار سرریز شده وجود داشت که با کم ارزشترین بیت جمع شد. مکمل یک با تبدیل تمام 0ها به 1 و تبدیل تمام 1ها به 0 بدست میآید. در مثال مطرح شده مقدار نهایی پس از محاسبه ی مکمل یک برابر با 1011010100111101 است. در هر مسیریاب و سیستم انتهایی مقصد، تمام کلمات 16 بیتی (شامل checksum ) سرآیند با هم جمع میشوند و در صورتی که تمام بیتهای حاصلجمع برابر با 1 باشند (به صورت 1111111111111111)، دیتاگرام بدون خطا وارد مقصد شده و در صورتی که حتی یکی از این 16 بیت برابر با 0 باشد، مشخص میشود که بسته به همراه خطا به گره مورد نظر رسیده است.