هفت خان رستم
بررسی مدل های OSI و TCP/IP و چیزهایی دیگر راجع به اینترنت

فرض کن که ارژنگ میخواد یک دانه ایمیل ارسال کنه برای جمشید، این ایمیل لیترالی باید از هفت خان رستم عبور کنه تا برسه به دست جمشید و تو این رایت آپ من قراره این هفت خان رو برات بررسی کنم.
مقدمه
من اعتقاد دارم که نباید زارت وارد مسائل تکنیکال شد و ابتدا باید یک زمینه برای خواننده فراهم کرد، پس اول بیا فرآیند ارسال ایمیل که از لپتاپ ارژنگ ( فرستنده ) شروع میشه و در نهایت در لپتاپ جمشید ( گیرنده ) تموم میشه رو یه بررسی بکنیم.
خب اول ارژنگ لپتاپشو باز میکنه و وارد جیمیلش میشه و اونجا یه ایمیل جدید درست میکنه، یه چیزی داخلش مینویسه و رو دکمه send کلیک میکنه.
اون ایمیل اول از همه وارد خان هفتم میشه ( انتظار داشتی از خان اول شروع کنم؟ نخیر اینجا داستان از خان هفتم شروع میشه ).
خان هفتم همون application layer هست که پروتکل ارسال ایمیل رو تعیین میکنه ( SMTP ) و بعد دیتا رو میفرسته به خان بعدی که presentation layer هست.
اینجا presentation layer میاد دیتارو encrypt و compress میکنه و پاسش میده به خان بعدی که session layer هست و اینجا تازه کانکشن بین ارژنگ و جمشید initialize میشه.
بعدش دیتا وارد خان چهارم یا همون transportation layer میشه، وظیفه transportation layer اینه که دیتا رو به تیکه های کوچیک تر تقسیم کنه و اون تیکه های کوچیک تر وارد خان بعدی ( network layer ) میشن و اونجاس که این تیکه های کوچیک، تازه تبدیل به packet میشن.
بعد این پکت ها وارد خان دوم ( data link layer ) میشن و اینجا باز هم به قطعات کوچک تر ( frames ) تبدیل میشن، و بعد این فریم ها وارد خان نهایی که physical layer هست میشن و اینجا دیگه این فریم ها کلا تبدیل به bitstream ( همون صفرو یک ) میشن.
در نهایت این صفرو یک از طریق تجهیزات فیزیکی مثل کابل ها و این داستانا در شبکه منتقل میشن و اینجوریه که ارژنگ میتونه برای جمشید ایمیل بفرسته.
ازونور هم سمت جمشید ( گیرنده )، این فرآیند به صورت reversed تکرار میشه و دیتا از physical layer همینطور میره بالا و reconstruct میشه تا برسه به لایه اپلیکیشن گیرنده و اونجاش که جمشید میتونه ایمیل رو بخونه.
این هفت خان رستم همون مدل OSI هست.
برای اینکه دو تا کامپیوتر بتونن باهمدیگه حرف بزنن، این مدل OSI میاد به ما یک چهارچوب مشخصی میده که از بالاترین لایه که نرم افزار هست شروع میشه و تا پایین ترین لایه که سخت افزار هست رو پوشش میده.
حالا بریم هر لایه رو به صورت دقیق تر یه بررسی بکنیم ببینیم دنیا دست کیه.
لایه هفتم: Application Layer
اینجا تنها لایه ای هست که مستقیم با کاربر سروکار داره. مثلا مرورگر ها و email client ها در این لایه کار میکنن، دقت کن که این نرم افزار ها، خودشون عضو application layer نیستن، بلکه application layer این وظیفه رو داره که پروتکل های مورد نیاز رو برای این نرم افزار ها فراهم کنه تا اونها بتونن دیتا رو به کاربر نشون بدن.
پروتکل هایی مثل HTTP که شما روزانه باهاشون سروکله میزنید در همین لایه اپلیکیشن قرار دارن.
لایه ششم: Presentation Layer
وظیفه اصلی این لایه، آماده کردن دیتا برای لایه اپلیکیشنه. مثلا encryption یا compression تو این لایه اتفاق میفته، یا مثلا شاید دو تا دیوایسی که دارن با هم حرف میزنن، بیان و از متود های encoding متفاوتی استفاده کنن و خب presentation layer میاد و اون encoding رو برای گیرنده ترجمه میکنه.
بعد حالا اگر این دو تا دیوایس بیان و از یه کانکشن encrypted استفاده کنن، همین لایه presentation مسئولیت انکریپت کردن و دیکریپت کردن مسج رو به عهده داره، یعنی TLS دقیقا تو همین لایه شروع میشه و تا لایه ۴ هم ادامه پیدا میکنه.
لایه پنجم: Session Layer
این لایه مسئول باز کردن و بستن راه ارتباطی ( communication ) بین دوتا دیوایسه. ما به اون بازه زمانی که یک ارتباط فعال بین دو تا دیوایس داریم، میگیم session.
شما برای اینکه دیتا رو بین دو تا دیوایس جا به جا کنی، نیاز به یک session داری و اون سشن مقداری منابع مصرف میکنه، پس وقتی دیتارو کامل انتقال دادی باید سشن هم بعدش ببندی که منابع بیخود مصرف نشه.
این session layer وظیفه اش دقیقا همینه و میاد اینارو برات هندل میکنه.
بعد این session layer قابلیت های باحال دیگه ای هم داره، مثلا شاید بیاد برای هر ۵ مگابایت دیتایی که انتقال میده، یدونه چک پوینت بذاره.
مثلا فرض کن شما داری یه فایل ۱۰۰ مگی دانلود میکنی و بعد دانلود ۵۰ مگابایت حالا یا اینترنتت قطع میشه یا مرورگرت کرش میکنه، این session layer احتمالا سر ۵۰ مگابایت یدونه چک پوینت گذاشته و زمانی که شما اتصالت مجددا برقرار شه، دانلود از همون چک پوینت ۵۰ مگ ادامه پیدا میکنه.
اگر این چک پوینت نبود شما باید کل فایل رو از اول دانلود میکردی.
لایه چهارم: Transport Layer
این لایه مسئولیت ارتباط end-to-end بین دو تا دیوایسه، یعنی لایه ترنسپرت میاد دیتا رو از لایه سشن میگیره و به chunk های کوچیک تر ( segments ) تقسیمشون میکنه و بعد پاسشون میده به لایه بعدی.
اینجا شما باید بدونی که این هفت لایه OSI ، در هر دو سمت فرستنده و گیرنده وجود داره، و داستان از لایه اپلیکیشن فرستنده شروع میشه و در لایه اپلیکیشن گیرنده تموم میشه.
یعنی مثلا لایه ترنسپرت اون کسی که گیرنده هست، وظیفه reassemble کردن این segment ها رو به عهده داره.
به عبارت دیگه لایه ترنسپرتِ فرستنده میاد و دیتا رو از لایه سشن میگیره و به segments تقسیم میکنه، بعدا لایه ترنسپرتِ سمت گیرنده این segments رو تحویل میگیره و reassemble میکنه و میده بالا به لایه سشن گیرنده.
پروتکل های TCP و UDP داخل همین transport layer کار میکنن.
لایه سوم: Network Layer
این لایه وظیفه انتقال دیتا بین دو تا network متفاوت رو به عهده داره.
لایه نتوورکِ فرستنده میاد و اون segment ها رو از لایه ترنسپرت میگیره و باهاشون یک سری یونیت کوچیک تری به اسم packet ایجاد میکنه.
بعدا لایه نتوورکِ گیرنده این پکت ها رو دوباره reassemble میکنه و ازشون segments میسازه.
حالا routing هم داخل همین لایه اتفاق میفته و لایه نتوورک میاد و بهترین مسیر رو برای انتقال دیتا پیدا میکنه.
پس پروتکل هایی مثل ICMP و IPsec هم داخل همین لایه نتوورک کار میکنن.
لایه دوم: Data Link
این لایه میاد و packet هارو از لایه نتوورک میگیره و به قطعات کوچیک تری به اسم frame تقسیمشون میکنه و میدتشون به آخرین لایه که physical layer هست.
سمت گیرنده هم که برعکس عمل میکنه و میاد فریم هارو تبدیل به پکت میکنه و میدتشون به لایه بالاترش که نتوورک هست.
لایه اول: Physical Layer
اینجا هم که دیگه جای تجهیزات فیزیکی مثل کابل و switch و این داستاناس و دیتا اینجا تبدیل به صفرو یک میشه که بهش bitstream میگن.
خب الان شما باید یه تصویری از مدل OSI تو ذهنت شکل گرفته باشه، بیا این عکسم که از اینترنت دزدیدم یه نگاه بنداز تا flow قشنگ برات جا بیفته.

اینجا شما میبینی که دیتا از لایه اپلیکیشن فرستنده ارسال میشه و همینجور میره پایین تا میرسه به لایه فیزیکال فرستنده، بعد ازونور دیتا میرسه به سمت گیرنده و از لایه فیزیکال شروع میکنه همینجور میره بالا تا برسه به لایه اپلیکیشن و در نهایت end-user اونور میتونه دیتا رو ببینه.
خب ساعت ۴ صبح شد و حالا که کارو زخمی کردم بیا TCP/IP هم برات توضیح بعد برم بخابم.
مدل TCP/IP
در کنار این مدل OSI ، ما یک مدل چهارلایه ی TCP/IP هم داریم که در واقع این دوتا مکمل همدیگه هستن.
همونجور که احتمالا میدانید IP یک سیستم addressing در اینترنت هست و کار اصلیش رسوندن پکت ها از یک دیوایس مبدا به یک دیوایس مقصده.
ولی خب خود IP اُسکله و قابلیت error checking و packet ordering و اینا نداره و یه پروتکل دیگه ای هست به اسم TCP که این کارا رو انجام میده.
خود IP ، یه پروتکل connectionless هست و هر نوع داده ای که شما با IP میفرستی به صورت مستقل route میشه به مقصد، و اینکه خود مقصد خود به خود نمیاد acknowledgement بفرسته که آره من دیتارو گرفتم، اینجاس که یه پروتکل هایی مثل TCP به کار میان و ترکیب TCP/IP باعث میشه که ما بتونیم دیتارو بین دو تا شبکه جا به جا کنیم و مطمئن بشیم که همه پکت ها صحیح و سالم به مقصد رسیدن.
به عبارت دیگه، TCP میاد پکت هارو ایجاد میکنه و به هر کدوم یک sequence number میده، بعد IP این پکت هارو میفرسته سمت مقصد.
حالا سمت مقصد، TCP میاد و این پکت هارو بر اساس sequence number مرتب میکنه و اگر پکتی هم اون وسط گم شده باشه، خود TCP دوباره برای اون پکت درخواست میزنه و خب در نهایت بر اساس اون پکت ها، دیتارو reconstruct میکنه.
مثلا وقتی شما میخوای یک ایمیلی با TCP بفرستی، اول یک three way handshake شکل میگیره، یعنی مبدا یه پکت SYN میفرسته به مقصد که حاجی بیا حرف بزنیم، بعد مقصد یه پکت SYN-ACK میفرسته که اوکیه بیا بحرفیم، در نهایت مبدا هم یه پکت ACK میفرسته و اونجا دیگه ارتباط شکل میگیره و مثلا شما میتونی ایمیل رو بفرستی.
این ایمیلم اول تبدیل به پکت های کوچیک تر میشه و از چند تا gateway عبور میکنه تا به مقصد برسه، و TCP سمت مقصد منتظره که این پکت هارو بگیره و اون ایمیل اولیه رو از روی پکت ها reassemble کنه.
این عکسم از کلادفلر برداشتم، یه نگاه بنداز که قشنگ جا بیفته واست:

آره خلاصه که هنوز که هنوزه اینترنت داره با IP ورژن چهار میچرخه ولی خب چون تعداد IPv4 ها محدوده، یه پروتکل دیگه ای ایجاد شد به اسم IPv6 که حالا قطعا چشمتون به جفتش خورده و من اینجا دیگه خابم میاد و واردشون نمیشم.
سوالی چیزی هم داشتی تلگرام بپرس من دیگه میرم بخابم خدافظ.