من می خواهم برنامه نویس شوم - قسمت سوم

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

شبکه چیست؟

زمانی که چند وسیله الکترونیکی بمنظور هدفی بهم وصل میشوند(به هر شکلی) تشکیل یک شبکه می دهند. عموما شبکه شامل تجهیزاتی که امکان پردازش دارند مانند گجت های هوشمند (موبایل و تبلت و ...) و کامپیوتر و همچنین وسایلی که این امکان را فراهم می کنند و نهایتا وسایلی مانند پرینتر که خدماتی را ارائه می دهند است و این شبکه ها را شبکه های کامپیوتری می گویند.

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

یک مثال دیگر در مورد شبکه: در اکثر خانه ها مودم های بیسیم وجود دارد که کامپیوتر و موبایل شما برای اتصال به شبکه بزرگتر اینترنت به آن وصل هستند. بنابراین شما یک شبکه متشکل از مودم، موبایل و کامپیوتر شخصی خود و هر وسیله دیگر متصل به آن تشکیل داده اید. و در نتیجه بصورت زیرساختی امکان ارتباط موبایل و کامپیوتر شخصی شما در این شبکه وجود دارد.

اینجا در این مقاله همه چیز ساده می شوند بنابراین با خلاصه کردن برخی مفاهیم دوست داریم پایه ای ترین مفاهیم را منتقل کنیم. در کتب درسی و علمی از انواع شبکه و تاریخچه آن صحبت می شود و همچنین موارد سخت افزاری و نرم افزاری.

مطلب جالب، لایه های شبکه:

همانطور که گفته شد شبکه از تجهیزات محاسباتی و دیگر سخت افزارها تشکیل شده، تجیزاتی مثل سیم یا کابل شبکه و محل اتصال آن ها را لایه فیزیکی شبکه می گوییم البته این لایه ها صرفا نام گذاری نیست و شامل استاندارد های تعریف شده است که باید در تولیدات مختص هر لایه رعایت شوند.

این الکترودها که صفر و یک ها و داده های ما هستند در این کابل ها گذر می کنند و از ارسال کننده ای به دریافت کننده ای میرسند، چطور مسیر خود را پیدا می کنند؟ چطور ارسال می شوند؟ چطور دوباره به هم متصل می شوند و تشکیل یک عکس یا متن را می دهند؟ اگر برق قطع شود چه؟ اگر دو کامپیوتر همزمان از یک کابل استفاده کنند چه می شود؟

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

علت این استاندارد و نگاه لایه ای به شبکه این است که اگر قرار است مودمی که در خانه دارید عوض شود مجبور نباشید کابل و درگاه کامپیوتر خود را تعویض کنید چون این دو در دو لایه مجزا دیده شده اند و همچنان طبق استاندارد قبلی با هم ارتباط دارند آنچه عوض شده درون مودم شماست.

کامپیوتر ها یا تجهیزات چگونه یکدیگر را در شبکه های کوچک و بزرگ پیدا می کنند؟

برای ردیابی نیاز به آدرس است و چه نوع آدرس دهی بهتر از عدد؟ (البته به دلیل افزایش تجهیزات امروزه از ترکیب اعداد و حروف استفاده می شود که توضیح داده خواهد شد) اما اوایل و تا سالها تنها از چهار عدد بین ۰ تا ۲۵۵ که با نقطه از هم جدا می شوند استفاده شده است عددی مثل ۲۲۵.۳۴۰.۵۶.۳۵ به این آدرس IP می گویند و لایه مربوط به آن را Network یا لایه ی شبکه می نامند.

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

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

کامپیوتر زمانی که روشن می شود پیامی را بدون گیرنده مشخص ارسال میکند و خود را معرفی می کند. که به این کار broadcast می گویند (برای IP گیرنده بصورت قراردادی از 255.255.255.255 استفاده می کند) و فرض کنید کار تخصیص IP را کامپیوتری (یا یک وسیله الکترونیکی دیگری) در شبکه انجام می دهد. سوییچ وظیفه دارد پیام فوق را به دستگاهی که این کار را انجام دهد برساند و آن دستگاه نیز در پاسخ IP دستگاه درخواست دهنده را به وی ابلاغ می کند که طبعا تمام ارتباطات از طریق سوییچ است. برادکست فقط برای گرفتن IP نیست. زمانی که یک پیام برادکست می شود تمام کامپیوتر ها و تجهیزاتی که در شبکه هستند آن را دریافت خواهند کرد. و با توجه به بسته دریافتی یا آن را رد می کنند و یا پاسخ می دهند (مثلا اگر بسته مربوط به درخواست گرفتن IP باشد مسلما یک وسیله در شبکه باید این کار را انجام دهد و وجود بیشتر باعث اختلال در شبکه است و به این دلیل این گونه تنظیمات در شبکه های مهم مانند ادارات از دسترسی کاربران عادی خارج است). نکته دیگر اینکه ip میتواند بصورت دستی نیز تنظیم شود که در این صورت اولا برادکست اتفاق نمی افتد. دوما کامپیوتر همواره ip ثابتی خواهد داشت (معمولا در ادارات به این شیوه است) و نهایتا برای تنظیم دستی از یک بازه ip استفاده می شود از فلان ip تا فلان ip که با مقادیری که توسط برادکست تخصیص داده می شود تداخلی نداشته باشد و تنظیمات آن در کامپیوتر یا تجهیزاتی که وظیفه اختصاص ip را دارند انجام می شود)

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

در صورتی که درخواست برای کامپیوترهای داخل شبکه باشد پیام توسط سوییچ به آن کامپیوتر هدایت می شود اما زمانی که پیام برای کامپیوتری خارج از شبکه باشد سوییچ آن را به دستگاه دیگری می فرستد. دستگاه دیگری به نام روتر router در شبکه ها وجود دارد که از نظر ظاهری شبیه سوییچ ها هستند اما وظیفه دیگری دارند. روتر ها شبکه ها را از یکدیگر جدا می کنند

در تصویر زیر نمای شماتیک تفاوت یک سوئیچ و روتر را نشان می دهد

حال چطور سوییچ تشخیص می دهد که IP برای شبکه ای است که در آن قرار دارد یا نه؟

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

و درگاه خروج از این شبکه و ورود به شبکه بالاتر روتر شماست که همان مودم شما است. و همه این شبکه ها توسط روتر به هم وصل هستند.

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

اما برای فهم کارکرد دقیق شبکه فرض کنید بین روتر شما و لپ تاپ شما یک سوییچ هم قرار دارد مانند ادارات.

ابتدا فرض کنید شما با استفاده از آدرس ip می خواهید با گوگل صحبت کنید. در ادامه نحوه کار مرورگر شما را نیز خواهیم گفت.

بسته (داده ارسالی / packet) چطور مسیر خود را می پیماید (روتر چگونه کار میکند) ؟

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

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

سوییچ و یا در خانه که سوییچ وجود ندارد دستگاه ها چطور روتر را می شناسند؟

چون در خانه مودم شما نقش روتر را دارد این آی پی هنگام ابلاغ آی پی دستگاه شما به وسیله مودم با عنوان Default gateway برای دستگاه شما ارسال می شود و در ادارات نیز آی پی روتر از قبل مشخص است و بر روی دستگاه به صورت دستی تنظیم می شود، و در نتیجه دستگاه های شما در شبکه داخلی یا سوییچ ها در شبکه اداری می دانند آدرس روتر کدام است.

آدرس سایت چطور به IP تبدیل می شود؟

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

عموما بعد از ارسال این درخواست و گرفتن پاسخ از روترهایی که شبکه های بزرگ را به هم متصل کرده اند کامپیوتر شما تا مدتی این آدرس را در خود ذخیره میکند و دفعه بعد زمانی که شما آدرس سایت گوگل را وارد می کنید از آی پی که دفعه قبل گرفته است به عنوان آی پی مقصد برای فرستادن بسته ها استفاده می کند.

برنامه های کلاینت سروری چگونه کار می کنند؟

قبل از اینکه بخواهیم مفهوم برنامه های تحت وب را توضیح دهیم. بهتر است برنامه های کلاینت سروری را توضیح دهیم:

سوکت و پورت چیست؟

به مجموع آدرس آی پی شما همراه یک عدد دیگر در انتهای آن سوکت گفته می شود. مثلا

192.168.1.100:80

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

پس وقتی برنامه کلاینت سروری می نویسید یکی از پورت های که برنامه دیگری از آن استفاده نمیکند انتخاب می کنید و در برنامه سمت سرور برای دریافت درخواست ها از آن استفاده خواهید کرد. و برنامه کلاینت هم باید درخواست را به همان سوکت (آی پی سرور و پورتی که انتخاب کرده اید) بفرستد. و منتظر پاسخ بماند و آن را بگیرد.

سایت ها کجا قرار دارند؟ درخواست ما برای دیدن سایت به کجا می رود و چه می شود؟

فرض کنید شما کدی را نوشته اید از نوع برنامه های تحت وب و می خواهید بدانید هر کدام چطور عمل می کند. سایت ها بر روی کامپوترهایی معمولا با منابع بیشتر از آنچه لپ تاپ شما دارد قرار می گیرند و یا گاهی مشابه. البته معمولا بسیار بیشتر است و با نرم افزارهایی تصور کنید داخل یک سیستم عامل چندین سیستم عامل به صورت مجازی اجرا میکنند و اینها تشکیل یک شبکه مجازی می دهند (یعنی منابع تقسیم می شود و مثلا به هر سیستم عامل 4 گیگ رم و 2 هسته cpu و 100 گیگ فضای هارد می رسد و تمامی عملیات مروبط به تجهیزات فیزیکی مانند سوئیچ و روتر به صورت مجازی توسط سیستم عامل اصلی انجام می شود) و آنچه گفته شد توضیح ساده شده ای است مطمئنا برای اینکار از ویندوز استفاده نمی کنند و سیستم عامل خاصی برای اینکار وجود دارد.

نکته دیگر اینکه شاید نخواهید یک سرور (مجازی یا فیزیکی) تنها به یک سایت اختصاص دهید (مثلا سه سایت بر روی یک سرور مجازی (VPS) اجرا کنید (چون بازدید کمی دارند).

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

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

خوب در مرورگر خودتان که زبان HTML می فهمد یک آدرس را وارد می کنید و کامپیوتر شما آی پی را دارد یا خواهد گرفت. این درخواست به کامپیوتر مقصد می رسد. چون تمام درخواست های مربوط با باز کردن یک سایت روی دو پورت پیش فرض هستند و نیاز نیست شما آن را مشخص کنید اگر وارد کنید هم اتفاقی نمی افتد و سایت باز می شود.

برای سایت های معمولی عدد پورت برابر ۸۰ است و سایت هایی مانند ایمیل که همه چیز رمزنگاری میشود معمولا ۴۴۳ برای مثلا اگر آدرس http://virgool.io:80 را باز کنید سایت مانند قبل باز می شود. اگر ابتدای سایت https باشد به جای http پورت ۴۴۳ خواهد بود (معمولا سایت هایی که این پورت را پشتیبانی میکنند تمامی درخواست ها را از پورت 80 هم به 443 ریدایرکت (redirect) می کنند. یعنی به مرورگر شما می گویند پورت 80 را بی خیال درخواست کاربر را بفرست به پورت 443 (آدرس جدید) تا کاربر امن باشد.)

خوب برگردیم به مطلب، این درخواست به کامپیوتر مقصد می رسد و یک برنامه بر روی کامپیوتر مقصد که دارای آن آدرس آی پی است در حال گوش کردن به پورت ۸۰ یا ۴۴۳ است. در آن کامپیوتر بر روی چند فولدر چند سایت قرار دارد چون شما درخواست ویرگول را داده اید آن برنامه فولدر مربوط به ویرگول را باز می کند و برنامه کامپایل شده را اجرا یا اگر مفسری است آن را خط به خط تفسیر می کند و پاسخ آن را باز می گرداند.

حال اگر پاسخ متنی با استاندار HTML باشد مرورگر آن را نمایش می دهد اگر متنی ساده باشد مرور گر آن را نیز در یک صفحه سفید نمایش خواهد داد اگر پیغام خطای استاندارد باشد مرور گر صفحه پیش فرض خود برای آن صفحه را نمایش خواهد داد.

برنامه ای که روی کامپیوتر سرور (یا مقصد) سایت (برنامه تحت وب شما) را اجرا می کند چیست؟

این برنامه بسته به زبانی که سایت را با آن نوشته اید متفاوت است مثلا Apache httpd برای زبان php یا Apache Tomcat برای زبان Java و ... این وظیفه را بر عهده دارند و بسیار نرم افزارهای دیگر که هرکدام مزایا و معایبی دارند و باید بدانید همزمان دو برنامه نمی تواند به یک پورت گوش کند اما هر برنامه ای می تواند بر روی آن درخواست بفرستد.

یعنی در سرور شما نمی توانید هم سایتی به زبان جاوا و هم php را کنار هم با یک پورت استفاده کنید مگر از پورت های جداگانه ای استفاده کنید و برنامه ای که پورت 80 را گوش می دهد باید اصطلاحا درخواست شما را به آن پورت ها (و برنامه هایی که آن پورت ها را گوش می کنند) پراکسی کند

نکاتی راجع به برنامه های کلاینت سروری

  • شما باید علاوه بر برنامه ای که مانند تحت وب در سرور قرار می دهید برنامه کلاینت را نیز توسعه دهید و بر روی آن نصب کنید چون دیگر کلاینت مرورگر نیست
  • بعد از هر بروز رسانی لازم است هردو برنامه سرور و کلاینت را بروز کنید (در مورد موبایل به خاطر سرویس خود گوگل یا اپل برای فرستادن بروزرسانی ها مشکلی نیست) اما تصور کنید در یک شرکت یک برنامه مدیریتی نوشته اید و بر روی ۵۰ کامپوتر نصب است (همه را باید دوباره نصب کنید)
  • نیازی به HTML نیست. چون هم سرور و هم کلاینت را شما نوشته اید شما هستید که مشخص می کنید چه چیز ارسال و چه چیز دریافت شود (اما بهتر است از یک استاندارد استفاده شود)
  • درخواست ها می تواند روی پورتی غیر از ۸۰ باشند بدون اینکه کلاینت متوجه شود

نکته آخر اینکه زمان زیادی است که برنامه های کلاینت سروری شکل دیگری بخود گرفته اکنون نمونه آن برنامه های موبایلی است که برای کارکرد حتما باید به اینترنت متصل باشد یا بازیهای رایانه ای تحت شبکه.

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

https://virgool.io/CodeLovers/%D9%85%D9%86-%D9%85%DB%8C-%D8%AE%D9%88%D8%A7%D9%87%D9%85-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3-%D8%B4%D9%88%D9%85-%D9%82%D8%B3%D9%85%D8%AA-%DA%86%D9%87%D8%A7%D8%B1%D9%85-yyupjvnn7adw