راجع به شبکه و اینکه الگوی آن به چه صورتی است صحبت کردیم. هدف اصلی شبکه اشتراکگذاری منابع است. اشتراک منابع به دو دسته کلی تقسیم میشود:
در سالهای ابتدایی، پلتفرمها بیشتر بر پایه سختافزار بودند. در آن زمان دستگاههایی (سرورها) وجود داشتند که فوقالعاده گرانقیمت بودند. برای اینکه افراد دیگر نیز بتوانند از این دیوایسها و قدرت پردازشی آنها استفاده کنند، از دیوایسهای میانجی به نام ورکاستیشن (Workstation) استفاده میکردند؛ به این شکل که افراد شبکه میساختند و از طریق ورکاستیشنها به آن سرور گرانقیمت متصل میشدند. نحوه و الگوی این اتصال در درس انتقال داده بهطور کامل بررسی میشود.
برای بحث اشتراکگذاری، از آنجا که پایههای اولیه این فناوری روی شرکت مخابراتی AT&T بنا شده بود و استانداردها را این شرکت تعریف میکرد، ساختارها بر اساس این قصه حرکت کردند.
الگویی که برای شبکهها استفاده شد، مبتنی بر شبکههای مخابراتی بود. در شبکههای مخابراتی، چیزی که به عنوان بستر انتقال اطلاعات مطرح میشد، استفاده از شبکههای تلفن (کابلهای مسی که بعدها به فیبر نوری تبدیل شدند) بود.
کامپیوتر همیشه ماهیتی دیجیتال داشته است، اما پلتفرمهای اولیه شبکه و مدیاهای انتقال داده، ماهیت آنالوگ داشتند (هرچند امروزه پلتفرمهای شبکه نیز دیجیتال شدهاند).
حتی در محیطهای دیجیتال نیز مشکلی وجود دارد: معمولاً جنس دیجیتال شبکه با جنس دیجیتال داخل کامپیوتر تفاوت دارد. به عنوان مثال، سطح ولتاژها (اینکه چه ولتاژی نشاندهنده سطح ۱ و چه ولتاژی نشاندهنده سطح ۰ باشد) در کامپیوتر ممکن است با شبکه متفاوت باشد. این موضوع حتی در شبکههای اپتیکال (نوری) نیز مطرح است.
این داستان باعث شد به صورت سنتی (Traditional) از یک دیوایس میانجی برای تبدیل این سیگنالها استفاده کنیم؛ دیوایسی برای کار ماژولار و دیماژولار کردن (Modulation/Demodulation). این ابزار همان مودم (Modem) یا کارت شبکه (NIC - Network Interface Card) است.
چه کسی این تبدیل را انجام دهد؟ سختافزار یا نرمافزار؟
سالها بر سر این موضوع بحث بود که ارتباط بین خودمان و پلتفرم شبکه بر عهده چه کسی باشد؟
مقایسه سختافزار و نرمافزار:
نرمافزار: کندتر از سختافزار کار میکند، اما انعطافپذیری (Flexibility) فوقالعاده بالایی دارد. در حالت نرمافزاری میتوانیم همزمان از چندین پروتکل و راهکار (Approach) مختلف استفاده کنیم.
سختافزار: سرعت بالاتری دارد و Dedicated (اختصاصی) است، اما انعطافپذیری پایینی دارد. اگر روی سختافزار پیاده شود، دغدغه جدی این است که سختافزار فقط از الگوریتمی پشتیبانی میکند که روی آن Hard code یا Embedded شده است.
مفهوم مارشال کردن (Marshalling): زمانی که پروتکل طوری باشد که هیچ تغییری در ذات دیتا ندهیم، بلکه فقط یک Wrapper (پوشش) دور دیتا بکشیم و آن را روی پلتفرم شبکه بفرستیم؛ شبکه هم در مقصد آن رپر را حذف کرده و دیتا را عیناً در اختیار سرور قرار دهد، به این کار اصطلاحاً «مارشال کردن» میگوییم.
مفاهیمی که در شبکه شکل گرفته، بسیار ریشهای هستند و باعث شده مفهومی به نام سازگاری (Compatibility) به وجود بیاید. شما نمیتوانید در شبکه یکدفعه ساختار را به گونهای به هم بزنید که دیوایسهای گذشته نتوانند از شبکه فعلی استفاده کنند.
در پروتکل اینترنت (IP) روشی برای آدرسدهی ماشینها وجود دارد. آرپانت نسخه اولیه ۱.۲ را داشت، سپس IPv4 مطرح شد (۴ عدد بین ۰ تا ۲۵۵). وقتی آدرسها رو به اتمام رفت، نسخه ۶ یا IPv6 (با استاندارد I-Kon) مطرح شد.
همه دنیا خوشحال شدند که دیگر درگیری کلاسهای A و B آدرسدهی تمام میشود.
اما چالش چه بود؟ ایده اولیه این بود که شروع میکنیم دیوایسهای IPv6 میسازیم و سیستم را بالا میآوریم. اما اکنون در اینترنت با ملغمهای از IPv4 و IPv6 مواجهیم! وقتی به ISP وصل میشویم و مشکل پیش میآید، پشتیبانی میگوید "IPv6 را غیرفعال کن!". دلیل آن این است که ما نمیتوانیم دیوایسهای بسیار زیادی که مبتنی بر شبکههای سنتی (Traditional Network) هستند و از نسل آرپانت یا قبل آن به جا ماندهاند را دور بیندازیم؛ این دیوایسها IPv6 را در Protocol Stack خود پشتیبانی نمیکنند و به همین دلیل مجبوریم با این ملغمه سر کنیم.
بیشتر مفاهیم شبکه (مسیریابی، انتقال، جریان داده) ریشه در دوران تلنت و آرپانت دارند. دورانهای شبکه به ترتیب عبارتند از:
این شبکهها را از منظر نوع اشتراکگذاری به صورت طیفی میتوان دید:
دوران تلنت، دورانی است که شبکهها با هدف اشتراکگذاری منابع سختافزاری (مانند CPUهای بسیار گرانقیمت) شکل گرفتند. در این روش (Remote Access) ما از یک ماشین از طریق مدیا به ماشین دیگری وصل میشویم تا از منابع سختافزاری یا پردازشی آن ماشین استفاده کنیم.
مفهوم تاینی کلاینت (Tiny Client / Tiny Machine):
ما کامپیوتری داریم که قدرت سختافزاری و محاسباتی آن نسبت به ماشینهای سرور فوقالعاده پایینتر است؛ به این ماشینها تاینی کلاینت میگوییم. این دستگاهها به ماشینی وصل میشوند که توانایی (Ability) مورد نیازشان را فراهم میکند.
چرا از تاینی کلاینتها استفاده میشد؟
گاهی بحث فقط گرانی سختافزار نیست، بلکه بحث یکپارچگی دادهها (Consistency) و اعمال قوانین (Rules) مشخص روی دادهها مطرح است.
پایه تلنت بسیار قدیمی است (حدود سال ۱۹۵۲ در ماشینهای IBM شکل گرفت). امروزه هیچ سیستمعاملی وجود ندارد که تلنت و مشتقات آن (مثل SSH) را پشتیبانی نکند.
در زمان عرضه Windows XP، مایکروسافت مانور تبلیغاتی زیادی روی این قضیه داد که کاربران میتوانند از راه دور مشکلات یکدیگر را حل کنند. آنها تلاش کردند ترکیبی از تلنت و آرپانت بسازند که کاملاً موفق نبود، اما بعدها اکستنشنها و برنامههای ثانویه نظیر AnyDesk و TeamViewer این رسالت را به شکل مدرن بر عهده گرفتند.
سازندگان آرپانت از روز اول به دنبال هدفی فراتر از انتقال صرف دیتا بودند. هدف اولیه افرادی مانند «باران» (Paul Baran) این بود که از شبکه برای اجرای دستورالعملها (Instructions) استفاده کنند.
اما از آنجا که پیادهسازی دستورالعملهای کاملاً اجرایی سخت بود، آن را کمی سبکتر (Light) کردند:
در آرپانت به مرور این ایده شکل گرفت که به جای اجرای دستورالعملها، روی Data Sharing (اشتراکگذاری دادهها) تمرکز کنند. هرچند امروزه در حال بازگشت به ایده اولیه هستیم و شبکههای ما ترکیبی از هر دو رویکرد را استفاده میکنند.
شبکهها از نظر دنیای آکادمیک و بازار (Industry) ترمینولوژی متفاوتی دارند. در کتابها شبکهها بر اساس ابعاد و جغرافیا دستهبندی میشدند:
در قدیم میگفتند ماشینها تعدادشان کم باشد و در جغرافیای محدود باشند.
مثال: سیستم خدمات انفورماتیک شهرداری تهران که فناوری اطلاعات مرکزی و ۲۲ ناحیه را شامل میشود. در گذشته از آنتنهای مایکروویو (همان قابلمههای سفید روی پشتبامها) برای اتصال این ساختمانها (مثلاً از تقاطع حافظ تا پارک شهر) استفاده میشد تا دادهها جابجا شوند.
اما دغدغه اصلی این است که مرز دقیق LAN کجاست؟
هیچ مرجع دقیقی برای این تعاریف تا به الان ارائه نشده است و هر کتابی معیار متفاوتی گفته است. با این حال کلمه LAN در مارکت بسیار پرکاربرد است.
اما در نقطه مقابل، کلمه WAN به تدریج جای خود را به کلمه Internet داده است. در کتابهای مدرن (از ۲۰۱۵ به بعد)، کلمات LAN و WAN کمتر به کار میروند و بیشتر به مفاهیمی که در میانه شبکه وجود دارند مانند سوییچینگ (Switching)، روتینگ (Routing) و آدرسینگ (Addressing) پرداخته میشود. (کتاب شبکه تننباوم مرجع اصلی این مباحث در نظر گرفته میشود).
شبکههای سنتی که شرکتهای مخابراتی استفاده میکردند، مبتنی بر سوییچینگ مدار (Circuit Switching) بودند.
نحوه کار: وقتی میخواستید با تلفن با «قلی» صحبت کنید، تماس شما به مراکز مخابراتی نزدیک (مراکز Dispatching) متصل میشد. این مراکز بر اساس توانایی (Ability) خودشان ارتباط را به مخابرات میانی و در نهایت به خانه قلی وصل میکردند. (این انتخابِ مسیر بر اساس Ability همان Routing است). در این حالت، یک مدار کاملاً اختصاصی (Dedicated) از خانه شما تا خانه قلی شکل میگرفت.
قانون ۵۹: در آمریکا قانونی در مخابرات بود که سر ۵۹ دقیقه و ۵۹ ثانیه مدار قفل میشد تا کسی نتواند به صورت مفتی مدار را برای همیشه اشغال کند و باید مجدداً درخواست مدار داده میشد (این قانون در اروپا وجود نداشت).
این ایرادات ثابت کرد که رویکرد مخابراتی برای شبکههای کامپیوتری جذاب نیست.
برای رفع ایرادات سوییچینگ مدار، در سیستمهای ریموت دسکتاپ و یونیکسی قبل از آرپانت تلاشهایی صورت گرفت؛ رویکردهایی تحت عنوان Just-in-time، Time Orientation یا Event Orientation یونیکسی تا این پروتکلها را بهبود بخشند، اما هیچکدام نتوانستند آن دو ایراد اساسی سریف و باران را رفع کنند.
با این حال، شبکههای Circuit Switching هنوز هم جایگاه خود را دارند. زمانی که کیفیت خدمات (Quality of Service - QoS) اولویت بسیار بالایی داشته باشد.
مثال: زمانی که در نتفلیکس (Netflix) فیلم تماشا میکنید، قرار نیست ۳ فریم را از دست بدهید. به همین دلیل نتفلیکس با ISPها قرارداد میبندد و یک مدل «شبه Circuit Switching» برقرار میکند. از لحظهای که فیلم را باز میکنید تا زمان اتمام آن، این نیمچه مدار اختصاصی برقرار است.
در نهایت، آرپانت نوع جدیدی از سوییچینگ را به عنوان پایه شبکه معرفی کرد که پکت سوییچینگ (Packet Switching) نام دارد (که بعداً در طول ترم بررسی میشود که چیست).