موضوع ارائه فهیمی و طایفه: پروتکل TCP و فراتر از آن
این پروتکل، پروتکلی شد که پایهی اینترنت قرار گرفت. این موضوع هم خوب است و هم بد، و یک عالمه درگیری بر سر آن داریم.
پروتکلی بود که در قدیم در وزارت دفاع آمریکا داستانش شکل گرفت و توسعه یافت. این پروتکل جزو مواردی است که در اینترنت میتوانیم تا پیادهسازیهای بسیار ریز آن را نیز با یک جستجوی ساده پیدا کنیم. ریز و بمها و پیادهسازیهای مختلف آن، چه در وزارت دفاع آمریکا و چه در جاهای دیگر (حتی حوزههای دانشگاهی)، به راحتی قابل یافتن است. حتی پیادهسازیهای مینیمال (Minimal) از آن موجود است که اکثراً هم با زبان C نوشته شدهاند.
این پروتکل از پروتکل پایه دیگری به اسم DARPA گرفته شده است که پروتکل اولیهای بود که در وزارت دفاع استفاده میشد. بعدها توسعه پیدا کرد و زمانی که آرپانت (ARPANET) داشت بالا میآمد، به همراه آن شکل گرفت. ورژنهای قدیمی آن مثل ۰.۲۵، ۲ و ۴ بودند و الآن هم ورژن ۶ آن را داریم.
در ارائهی آقای فهیمی، ما الان فقط ورژنهای ۴ و ۶ را داریم و انگار بقیه ورژنها اصلاً وجود ندارند! چرا؟ چون ورژنهای ۱، ۲ و ۳ قبل از شکلگیری اینترنت بودند و ورژن ۵ در دورانی شکل گرفت که اینترنت داشت به سمت "نسخهپذیر بودن" خودش تبدیل میشد و عملیاتی شد. بنابراین ما از کل چرخه زندگی TCP/IP، فقط دو نسخه (۴ و ۶) را بیشتر نمیبینیم و چهار نسخه دیگر عملاً فقط پیادهسازیهای درونسازمانی بودند و در اختیار دیگران قرار داده نشدند.
TCP/IP یکسری ویژگی منحصربهفرد دارد که ناشی از همان پروتکل پایه DARPA است. تمرکز عمده این پروتکل بر مسیریابی (Routing) بوده است. در DARPA و بعداً در TCP/IP تمرکز بر این قرار گرفت که: «من هیچ الزامی ندارم که به سمت مدیریت شبکه و امثال آن بروم، بلکه تمرکزم باید فقط روی مسیریابی باشد».
روز اولی که TCP/IP نوشته شد، تفکرات دفاعی در آن دخیل بود:
اینکه شبکه لارج (بزرگ) باشد، دو حالت را پشتیبانی کند (Reliable و Unreliable) و باید بتواند در ساختار ماژولار خودش کار کند. عملاً TCP/IP نقطه تلاقیِ تمام مفاهیمی شد که تا دهه ۱۹۷۰ در زمینه ایجاد و مدیریت شبکههای کامپیوتری در وزارت دفاع آمریکا شکل گرفته بود.
TCP/IP بعدها تبدیل به پروتکل متعارف شد و بسیار خاص است. جایگزین یک مجموعه عظیمی از پروتکلهایی شد که تا آن زمان وجود داشتند؛ همه آنها را حذف کرد و تبدیل به پروتکل پایهای شد که در همه دیوایسها وجود دارد. در اکثر دیوایسهایی که برای وصل شدن به شبکههای کامپیوتری استفاده میشوند، TCP/IP به طور متعارف در نظر گرفته میشود.
محوریت و طبیعت اصلی TCP/IP روی روتینگ است و بر خلاف بقیه پروتکلهای شبکه، از یک سیستم آدرسدهی (Addressing) بسیار نرمال استفاده میکند.
TCP/IP یک «پروتکل کمحرف» است. میزان ترنسفر دیتا (انتقال داده اضافهی سیستمی) در TCP/IP نسبت به بقیه پروتکلها فوقالعاده کمتر است. در پروتکلهای دیگر (مثل پروتکل شرکت ناول Novell IPX/SPX) برای اینکه ماشینها از وضعیت هم خبردار شوند، شروع میکنند به حرف زدنهای طولانی با هم و از لحظه شروع کار، بخش عظیمی از پهنای باند را به خودشان اختصاص میدهند؛ اما TCP/IP اینطور نیست.
نکته دیگر اینکه چون از همان روز اول ساختار مرجع اجرایی TCP/IP مشخص نبوده (قرار نبوده مشخص باشد که روی چه سختافزاری اجرا میشود)، زیاد وارد لایه سختافزار نشده است و به همین دلیل تطابق بسیار خوبی با آرپانت داشته است.
نکته مهم: چون دو لایهی Addressing و Routing در این سیستم بسیار مشهور هستند (یعنی TCP و IP)، ما معمولاً بقیه لایهها را در این پروتکل زیاد در نظر نمیگیریم و کل پروتکل را به اسم همین دو لایه صدا میزنیم: TCP/IP.
محبوبیت بیش از حد TCP/IP دو جنبه دارد:
بکبون (Backbone) اینترنت کجاست؟
اینترنت در وزارت دفاع آمریکا (در نوادا) شکل گرفت. زمانی که جدا شد، نسخه ۱۲ (یعنی ۱۲ گره اصلی) وجود داشتند. این ۱۲ گره شکستند و شدند اینترنت، که به آنها «ستون فقرات اینترنت» میگوییم.
اینترنت در دنیا از شرق به غرب حرکت میکند:
مثلاً اگر از ژاپن بخواهیم به آمریکا پیام بدهیم (با اینکه بینشان فقط یک اقیانوس آرام است)، پیام از ژاپن میرود روی اروپا، از آنجا میرود روی ۳ سوییچ اصلی (مانند بروکسل، پاریس و هامبورگ)، سپس میرود روی Backbone اصلی تا پردازش انجام شود و برگردد.
ستون فقرات اصلی اینترنت تماماً در خاک ایالات متحده آمریکا قرار دارد.
قرار داشتنِ بکبونِ اصلی اینترنت در خاک آمریکا، برای خیلی از کشورها و حوزههای نظامی (Military) دردسر و دغدغههای جدی ایجاد کرده است.
در کتابهای سنتی شبکه، لایه به لایه پروتکلها (OSI و TCP/IP) را توضیح میدهند. این جزئیاتِ دقیق باعث شده تا نهادهای نظامی، امنیتی و دولتی (Governmental) به فکر فرار از TCP/IP بیفتند! آنها گفتند طبیعت TCP/IP باید عوض شود.
اتفاقی که در ۵ سال اخیر رخ داد (و داستان ۷ اکتبر آن را شارپتر و جدیتر کرد) این بود که دنیا از این موضوع ترسید. درست است که استاندارد بودن TCP/IP جذاب است، اما این همه مشهور بودن باعث میشود که اگر کسی در مسیر ارتباطی باشد، دقیقاً بداند ساختار شبکه شما چگونه کار میکند و بر سیستم شما سوار شود.
ما الان در دورانی هستیم که کلمهای به نام "پروتکلهای نامتعارف" شکل گرفته است که به توسعه TCP/IP فکر میکنند. البته توسعه (Extend) با تغییر طبیعت فرق دارد:
- در Extend طبیعت عوض نمیشود (مثل رفتن از IPv4 به IPv6 که فقط ویژگی اضافه کردیم).
- اما در Beyond TCP/IP قصد این است که طبیعت و ذاتِ پروتکل تغییر کند.
درحال حاضر وزارت دفاع فرانسه و چین، پروژههای مختلفی در این حوزه دارند.
چه شد که شبکهها به مدل نیاز پیدا کردند؟
در دهههای ۱۹۶۰ تا ۷۰ که آرپانت تازه شکل گرفته بود و هنوز گسترش نیافته بود، لزوم اینکه سیستمهای کامپیوتری از برندهای مختلف و با پروتکلهای متفاوت بتوانند با هم ارتباط برقرار کنند، احساس شد. این موضوع باعث شد تا مدلی مطرح شود که جلوی ناسازگاریها را بگیرد.
مدلی که یک چارچوب استاندارد است و توسط سازمان بینالمللی استاندارد جهانی (ISO) در سال ۱۹۸۴ تعریف شد. نکته مهم این است که OSI جنبه عملیاتی ندارد و کاملاً نظری (Theoretical) است؛ جنبه عملیاتی آن همان TCP/IP است.
(اول پروتکلها در دنیای واقعی شکل گرفتند و بعد دانشمندان آمدند مدلها را روی آنها تعریف کردند).
اصول طراحی لایههای OSI:
وقتی میخواهیم یک لایه تعریف یا اضافه کنیم، باید یک انتزاعِ متفاوت شکل بگیرد و کارکرد مشخصِ کاملاً مجزایی داشته باشد. پروتکلها باید استاندارد باشند و حداقلِ اطلاعات بین واسطها (Interfaceها) جابهجا شود تا بار پردازشی کم شده و کارکردشان متمایز گردد.
فرض کنید میخواهیم با کامپیوتر سمت چپ پیامی بفرستیم:
وقتی سیگنال به کامپیوتر مقصد برسد، داده شروع میکند به باز شدن و لایه به لایه بالا میآید تا پیام اصلی در لایه اپلیکیشنِ مقصد تولید شود.
نکته مهم: بارِ لایههای پرزنتیشن و سشن به «شبکه» محول شده است. یعنی این یک انتزاع برای خود شبکه است که کارِ فشردهسازی و فرمتبندی را انجام دهد و اینها مستقیماً روی سیستمِ کاربر انجام نمیشود.
هر لایه n از سرویس قبلیاش سرویس میگیرد و به لایه بعدیاش سرویس میدهد. اما به صورت افقی (کنار هم) میتواند مستقیماً با پروتکلهای لایهی همنامِ خودش در مقصد ارتباط برقرار کند.
توضیحات استاد برای سوال تقیلو (راجع به جابهجایی بیتها):
پروتکل OSI/ISO نظیر به نظیر (Peer-to-Peer) است. یعنی لایه اپلیکیشن فرض میکند که بقیه لایهها وجود ندارند و مستقیماً دارد با لایه متناظرِ خودش در ماشین مقابل صحبت میکند. (مثلاً سشن فکر میکند در خلأ قرار دارد و فقط با سشنِ مقابل حرف میزند).
اما در واقعیت، همهچیز در پایینترین سطح به بیت (Bit) تبدیل میشود. مثلاً:
لایه فیزیکال دقیقاً همین را میفهمد و بیت جابهجا میکند.
لایه فیزیکال از کجا میفهمد که ۸ بیت نشاندهنده یک بایت است؟ آیا بیتِ چِک (Check bit) اضافه میکند؟
یک زمانی در دنیای کامپیوتر بایت را حتی تا ۱۰ بیت هم رسانده بودیم! در حالت عادی میگوییم هر ۸ بیت یک بایت است. اما یک زمانی ۹ بیت را میکردیم یک بایت که بیت آخر برای چک کردن (Error Checking) بود. بعداً ۱۰ بیت شد که یک بیت اولویت هم به آن اضافه کردیم.
اما دیدیم هرچقدر تعداد بیتها را زیاد کنیم تا بایت بسازیم، اوضاعِ گیرندهی بدبخت خراب میشود! لایه فیزیکالِ گیرنده باید مدام محاسبه میکرد که این ۸ بیتِ اصلی کدام است؟ بیتِ اولویت کدام است؟ در سیستمهای IBM (مثل AIX3) طول بایت تا ۱۲ بیت هم رسیده بود و این سربارِ محاسباتی لایه فیزیکال را بسیار بالا میبرد.
الآن در خیلی موارد ۸ بیت و در برخی موارد ۹ بیت میفرستیم (بستگی به استکِ طراحیشده دارد) اما بالاتر نمیرویم. پس لایه فیزیکال دقیقاً میداند که مدیا چیست (فیبر، وایرلس، ماهواره) و فقط بیت منتقل میکند. در حالی که اگر از لایه ترنسپورت بپرسید، میگوید من «پکت» منتقل میکنم.
همانطور که داده لایه به لایه پایین میآید، در هر لایه یکسری اطلاعات به ابتدا یا انتهای آن اضافه میشود:
Header به ابتدای دیتا و Trailer به انتهای دیتا اضافه میشود.
این اطلاعات برای این اضافه میشوند که لایه متناظر در ماشین مقصد بتواند آنها را بخواند و بررسی کند. وقتی دیتا در مقصد از پایین به بالا میرود، هر لایه دیتای مربوط به خودش (هدر و تریلر) را برمیدارد و پردازش میکند.
به این فرآیندِ اضافه کردن و برداشتن دادهها، در مستندات OSI کلمهی مارشال کردن (Marshalling) میگویند. اما در TCP/IP به آن Add/Remove Data گفته میشود و اصلاً اصطلاح Encapsulation (کپسولهسازی) را به کار نمیبریم.
اول که آرپانت شکل گرفت، نمیشد شبکه بدون پروتکل کار کند. پس پروتکل NPC (Network Control Protocol) به عنوان اولین پروتکل در این شبکه به کار گرفته شد. کار این پروتکل سوییچینگ و مسیریابی بود، تا زمانی که TCP/IP در ۱ ژانویه ۱۹۸۳ رسماً جایگزین آن شد.
پروتکل NPC کارهای انتقال داده را انجام میداد اما یکسری چالش داشت؛ شبکهها به مدلی نیاز داشتند که قابلیت مدیریت خطا، کنترل جریان داده و از همه مهمتر Scalability (مقیاسپذیری) داشته باشد تا بتوانند شبکههای بزرگ را بخشبخش کرده و به شبکههای کوچکتر گسترش دهند.
در دهه ۱۹۷۰ مدل TCP/IP توسط وزارت دفاع آمریکا مطرح شد و در حال توسعه بود تا اینکه در ۱۹۸۳ مدل رسمی شد. اصلیترین پروتکلهای آن در لایه اینترنت و ترنسپورت (همان پروتکلهای IP و TCP) هستند که مقیاسپذیری، انعطافپذیریِ لایهای و کارایی بالایی دارند.
همانطور که در تصویر میبینید، مدل TCP/IP به صورت کلی ۴ لایه دارد و ۳ لایهی آن نسبت به مدل OSI ادغام شده است:
ادامه مباحث در جلسه بعد...