در این درس آزمایشگاهی، ما مدل OSI را در عمل خواهیم دید. با استفاده از Wireshark یک اتصال HTTP بین یک کلاینت و یک سرور را بررسی خواهیم کرد و مشاهده میکنیم که چگونه ترافیک شبکه با هدرها کپسولهسازی میشود.
در پایان درس، میتوانید فایل ضبط ترافیک (pcap) را دانلود کرده و آن را در Wireshark باز کنید تا بتوانید نگاه عمیقتری به هدرها داشته باشید.
لینک آموزش قسمت پنجم : https://vrgl.ir/CRVOZ
ما از تنظیمات نشان داده شده در نمودار زیر استفاده خواهیم کرد تا نشان دهیم چگونه ترافیک HTTP از طریق لایههای مدل OSI کپسولهسازی میشود. توجه داشته باشید که وبسایتی که ما استفاده میکنیم وجود خارجی ندارد؛ فقط به عنوان یک مثال ساختگی برای نمایش استفاده میشود. با این حال، در خانه میتوانید همین آزمایش را با هر وبسایت دیگری انجام دهید.

توجه داشته باشید که ابزار Wireshark، همانطور که در بالا نشان داده شده است، ترافیک را در کارت شبکه (NIC) کامپیوتر ضبط میکند. با این حال، دادههای شبکه را دقیقاً همانطور که در شبکه محلی (LAN) ظاهر میشود، نمایش میدهد.
ابتدا، برنامهای را معرفی میکنیم که برای ضبط و کاوش بستههای شبکه از آن استفاده میکنیم. Wireshark یک ابزار رایگان است که به شما امکان میدهد ترافیک شبکه را به صورت بلادرنگ (Real-time) ضبط و تحلیل کنید. این ابزار بستههایی را که از شبکه شما عبور میکنند، از جمله منبع، مقصد، پروتکل و محتویات آنها را به شما نشان میدهد. این یکی از پرکاربردترین ابزارهای شبکه در دنیای واقعی برای عیبیابی، نظارت، یادگیری نحوه کارکرد پروتکلها و یافتن مسائل امنیتی است. آن را به عنوان یک میکروسکوپ برای دادههای شبکه تصور کنید.
پس از نصب Wireshark بر روی کامپیوتر خود، به Capture > Options بروید، همانطور که در تصویر زیر نشان داده شده است.

در مرحله بعد، رابط شبکهای را که میخواهید ترافیک را در آن ضبط کنید، انتخاب کنید. این معمولاً همان رابطی است که کامپیوتر شما را به اینترنت متصل میکند. به یاد داشته باشید که یک کامپیوتر میتواند چندین رابط داشته باشد. برای شناسایی رابط صحیح، نمودار ترافیک را بررسی کنید و به دنبال نشانههای عبور دادههای زنده از آن باشید.
به عنوان مثال، کامپیوتر من دو رابط دارد، همانطور که در نمودار زیر نشان داده شده است. میتوانید ببینید که اولین رابط به شبکه متصل شده و ترافیک را عبور میدهد، در حالی که دیگری بیکار است (ترافیک یک خط مستقیم است).

در نهایت، روی دکمه شروع (Start) در پایین پنجره کلیک میکنید تا ضبط ترافیک آغاز شود. اکنون باید بستههای شبکه را به صورت بلادرنگ مشاهده کنید.
ابتدا، یک بسته تصادفی را انتخاب میکنیم و میبینیم که چگونه ابزار Wireshark تمام هدرها و اطلاعات درون هر یک را به تصویر میکشد.
تصویر زیر هدر بیرونی فریم – هدر اترنت لایه ۲ – را نشان میدهد. این یکی از سادهترین هدرها در بین همه است، که فقط چند فیلد دارد.

توجه داشته باشید که تنها اطلاعات مهم در این هدر، آدرسهای MAC منبع و مقصد هستند، که آدرسهای فیزیکی (سختافزاری) دستگاههای ارسال و دریافت کننده فریم اترنت در شبکه محلی را نشان میدهند.
MAC منبع — آدرس فیزیکی دستگاهی که فریم را ارسال کرده است (معمولاً کارت شبکه فرستنده).
MAC مقصد — آدرس فیزیکی دستگاهی که باید فریم را در مرحله بعد دریافت کند. اگر بسته در حال خروج از شبکه محلی باشد (که در این مورد اینطور است)، MAC مقصد، آدرس MAC مسیریاب دروازه (Gateway Router) است.
تصویر زیر محتوای هدر لایه ۳ یک بسته IP را نشان میدهد.

در اینجا یک توضیح سطح بالا از مهمترین فیلدهای موجود در هدر آورده شده است:
نسخه (Version): ۴ — این یک بسته IPv4 است.
طول هدر (Header Length): ۲۰ بایت — اندازه هدر IP.
خدمات متمایز (Differentiated Services - DSCP/ECN) — اطلاعات اولویت کیفیت سرویس (QoS) را نشان میدهد؛ در اینجا پیشفرض است و هیچ علامتگذاری QoS ندارد.
طول کلی (Total Length): ۵۱۹ — اندازه کامل بسته IP (هدر + داده) بر حسب بایت.
فلگها (Flags): Don't fragment و Fragment Offset — بسته قطعهقطعه نشده است و نباید به قطعات کوچکتر تقسیم شود.
زمان حیات (Time to Live - TTL): ۱۲۸ — حداکثر تعداد گامهایی که بسته میتواند قبل از دور انداخته شدن طی کند.
پروتکل (Protocol): TCP (۶) — بار مفید (Payload) یک سگمنت TCP است.
آدرس منبع (Source Address): 145.254.160.237 — مبدأ بسته.
آدرس مقصد (Destination Address): 65.208.228.223 — مقصد بسته.
نود و نه درصد مواقع، افراد به آدرسهای IP منبع و مقصد در هدر لایه ۳ بستهها نگاه میکنند.
حال، بیایید تمرکز خود را به لایههای بالاتر مدل OSI معطوف کنیم. به یاد بیاورید که هر اتصال HTTP/HTTPS کلاینت-سرور با دستدهی سه طرفه TCP آغاز میشود، همانطور که در نمودار زیر نشان داده شده است.

بیایید ببینیم این دستدهی TCP در داخل ابزار Wireshark چگونه به نظر میرسد. توجه داشته باشید که کلاینت و سرور سه بسته TCP (که صحیحتر سگمنت TCP نامیده میشوند) را مبادله میکنند که هیچ بار مفید دادهای را حمل نمیکنند. آنها فقط برای تأیید وجود اتصال شبکه بین کلاینت و سرور در لایه شبکه استفاده میشوند.

حال بیایید هدر TCP را باز کنیم و به محتوای آن نگاهی بیندازیم. این بسته شروع یک اتصال TCP است (بخشی از دستدهی سه طرفه).
به فلگ SYN در فیلد Flags توجه کنید. از آن برای آغاز اتصال TCP استفاده میشود. همچنین به سایر فلگهای موجود، مانند ACK و FIN، توجه کنید.

بیایید به توضیح سطح بالا از مهمترین فیلدهای موجود در هدر نگاه کنیم:
پورت منبع (Source Port): ۳۳۷۲، پورت مقصد (Destination Port): ۸۰ — کلاینت در حال تلاش برای اتصال به یک وب سرور است (HTTP).
فلگهای TCP (TCP Flags): SYN — این یک بسته SYN است که برای آغاز اتصال استفاده میشود.
شماره توالی (Sequence Number): ۰ — اولین بایت در اتصال.
طول سگمنت TCP (TCP Segment Length): ۰ — هنوز دادهای ارسال نمیشود؛ فقط نشاندهنده شروع اتصال است.
پنجره (Window): ۸۷۶۰ — کلاینت میتواند ۸۷۶۰ بایت را قبل از ارسال یک ACK دریافت کند.
طول هدر و گزینهها (Header Length & Options) — شامل گزینههایی مانند حداکثر اندازه سگمنت (Maximum Segment Size) و پشتیبانی از SACK (تأیید انتخابی).
شماره تأیید (Acknowledgment Number): ۰ — در اولین SYN استفاده نمیشود.
به طور خلاصه، این بسته به این معنی است که کلاینت میگوید: "من میخواهم یک اتصال TCP با تو برقرار کنم."
هنگامی که کلاینت یک اتصال TCP با سرور برقرار میکند، صفحه وبی را که کاربر میخواهد از طریق HTTP درخواست میکند، همانطور که در نمودار زیر نشان داده شده است.

بیایید ببینیم این درخواست HTTP GET در Wireshark چگونه به نظر میرسد.

بیایید محتوای درخواست HTTP از کلاینت (مانند یک مرورگر) به وب سرور را بررسی کنیم، همانطور که در تصویر زیر نشان داده شده است.

در اینجا یک توضیح سطح بالا از مهمترین فیلدهای موجود در هدر آورده شده است:
GET /download.html HTTP/1.1 — کلاینت از سرور درخواست صفحه download.html را با استفاده از HTTP/1.1 دارد.
میزبان (Host): www.ethereal.com — مشخص میکند درخواست برای کدام وبسایت است.
عامل کاربر (User-Agent): Mozilla/5.0… — مرورگر و سیستمعامل را شناسایی میکند.
پذیرش (Accept) / زبان پذیرش (Accept-Language) / رمزگذاری پذیرش (Accept-Encoding) / مجموعه کاراکتر پذیرش (Accept-Charset) — به سرور میگویند که کلاینت قادر به مدیریت چه نوع محتوا، زبانها، رمزگذاری و مجموعههای کاراکتری است.
اتصال (Connection): keep-alive — کلاینت میخواهد اتصال را برای درخواستهای بیشتر باز نگه دارد.
ارجاع دهنده (Referer): http://www.ethereal.com/development.html — صفحهای را نشان میدهد که به این درخواست پیوند داده است.
به طور خلاصه، کلاینت یک صفحه وب را درخواست میکند و جزئیاتی در مورد نحوه مدیریت پاسخ ارائه میدهد.
نکته اصلی این درس این است که Wireshark یک ابزار ضروری برای مهندسان شبکه در هر مرحله از حرفه آنها است. هر چه زودتر استفاده از آن را برای یادگیری و درک عمیق پروتکلها شروع کنید، مهندس بهتری خواهید شد.
مدل OSI به تجسم نحوه حرکت دادهها از طریق لایههای مختلف شبکه، از انتقال فیزیکی تا درخواستهای سطح برنامه، کمک میکند.
Wireshark ابزاری قدرتمند برای ضبط و تحلیل ترافیک در هر لایه OSI است.
درک هدرهای هر لایه به تشخیص مشکلات شبکه و یادگیری رفتار پروتکل کمک میکند.
حمید رضا اسفندیاری _ کارشناس شبکه و فناوری اطلاعات