با رشد روز افزون اپلیکیشن ها و زبان ها و ابزارهای مختلف برنامه نویسی، دونستن اینکه اینترنت چیست و چطور کار میکنه برای هر شخصی به خصوص برنامه نویس ها میتونه خیلی مفید باشه. از اینرو تصمیم گرفتیم تا این مقاله را در کنار ویدئویی با همین موضوع که در دوره آموزش فرانت اند ما وجود داره منتشر کنیم.
تو این مقاله قصد داریم تا شمارو با صفر تا صد اینترنت آشنا کنیم، از مفاهیم پایه گرفته تا مباحث پیشرفته تری مثل نحوه کار کردن اینترنت و پروتکل ها و غیره. بطور کل شما بعد از خواندن این مقاله به درک عمیقی از مباحث زیر خواهید رسید:
- اینترنت چیست ؟
- اطلاعات چطور در بستر اینترنت منتقل میشن ؟
- شبکه های مختلف چطور باهم ارتباط برقرار میکنند ؟
- ارتباط بین packets, routers و reliability چیه ؟
- HTTP و HTML - چطور صفحات وب برای ما نمایش داده میشن ؟
- امنیت اطلاعات ارسالی در اینترنت چطور تامین میشه ؟
- امنیت سایبری و برخی از جرم های رایج در اینترنت چیه ؟
اینترنت چیست ؟
سال ها پیش در اوایل دهه 70 میلادی Vint Cerf و Bob Kahn شروع به کار برروی پروژه ای کردن که امروزه به عنوان اینترنت میشناسیمش و اینترنت امروزی ما حاصل پروژه ای به نام ARPANET به معنای Advanced Research Project Agency Network هستش.
این پروژه مربوط به وزارت دفاع ایالات متحده بود و شخصی به نام Paul Baran سعی داشت سیستم ارتباطی بسازه که بتونه از یک حمله اتمی هم حتی جون سالم بدر ببره. اون با این تفکر سعی داشت پیام هارو به چندین بلوک تقسیم کنه و در سریعترین زمان ممکن از هر مسیری که ممکن بود به مقصد برسونه.
در نهایت این پروژه وزارت دفاع امریکا منجر به یک شبکه بسته در داخل خاک خود امریکا شد، اما کم کم و با گذشت زمان این شبکه بسته در سراسر دنیا گسترده شد و امروزه ما اونرو با نام اینترنت میشناسیم، اینترنتی که حاصل اتصال تعداد زیادی دستگاه در گوشه و کنار این کره خاکی میباشد. اما سوالی مهم، دستگاه های مختلف در سرتاسر دنیا چطور بهم متصل میشن ؟
دستگاه های مختلف چطور بهم وصل میشن و اطلاعات در اینترنت چطور جابجا میشه ؟
اطلاعات و داده های موجود در اینترنت از کامپیوتری به کامپیوتر دیگه و در قالب اطلاعات Binary ارسال میشن و این اطلاعات Binary هم از Bit ها ساخته شدن. Bit هارو میشه به عنوان جفت های متضادی مثل روشن یا خاموش و بله یا خیر در نظر گرفت. توصیف تخصصی ترش هم که برای ما برنامه نویس ها همون 0
و 1
ها میشه.
ما معمولا از 1 به عنوان بله و از 0 به عنوان خیر استفاده میکنیم. یک Bit صرفا 2 حالت ممکن داره و به همین خاطر بهشون کد Binary میگیم.
- 8 Bit در کنار هم 1 Byte را تشکیل میدن.
- هر 1024 Byte هم 1 Kilobyte را تشکیل میدن
- و هر 1024 Kilobyte هم 1 Megabyte را تشکیل میده
به عنوان مثال یک آهنگ با حدود 5 الی 6 مگابایت کدگذاری میشه و اصلا هم تفاوتی نداره که پیام متنی باشه یا عکس یا ویدئو یا آهنگ، همه چیز توی اینترنت بصورت Bit ارسال و دریافت میشن.
حالا به این سوال میرسیم که این اطلاعات چطور از جایی به جای دیگه منتقل میشن ؟
تا اینجا متوجه شدیم که اینترنت حاصل اتصال تعداد زیادی کامپیوتر در سرتاسر دنیا هست و اطلاعات هم فارق از عکس یا متن یا آهنگ بودنشون در قالب Binary یا همون 0 و 1 ها بین این دستگاه ها ارسال و دریافت میشن.
تا اینجاشو فهمیدیم، اما مهمتر از همه اینکه این داده ها چطوری منتقل میشن ؟ به چه شکل اطلاعات از کامپیوتری در قاره آسیا به یک کامپیوتر دیگه درقاره آمریکا ارسال میشه ؟
پاسخ کوتاه و سریع این سوال میشه سیم ها، کابل ها و امواج رادیویی، اما چطور ؟ بیایید تا بهتون بگم
امروزه ما این Bit ها و اطلاعات Binary را از طریق برقی که در سیم ها جریان داره، پرتوی نوری که در کابل های فیبر نوری بازتاب میشن و امواج رادیویی که ارسال میشن جابجا میکنیم
از کابل های فیبر نوری برای متصل کردن مسیرهای طولانی مانند اتصال یک قاره به قاره دیگه استفاده میکنیم و دلیلش هم اینه که دارای سرعت بیشتری هستش نسبت به سیم های معمولی که برق توشون جریان داره. این کابل های فیبر نوری دارای رشته هایی از جنس شیشه هستن که پرتوهای نور را بازتاب میکنند.
اما همچنان برای فواصل کوتاه در خیلی از جاها بدلیل گران قیمت بودن کابل های فیبر نوری از همان سیم های معمولی استفاده میکنیم. مثل سیم ethernet که در اکثر منازل پیدا میشه و کاربردش هم اتصال به دستگاه wifi شما هستش.
روند کلیه ارسال و جابجایی اطلاعات در اینترنت هم به شکل زیر هستش:
- اطلاعات باینری از لبتاب یا موبایل پس از ترجمه 0 و 1 ها به فرکانس های رادیویی، بصورت امواج رادیویی ارسال و توسط wifi که شما بهش متصل هستید دریافت میشه.
- پس از دریافت، این اطلاعات Binary از طریق سیم متصل به wifi به isp یا همان مرکز ارائه دهنده خدمات اینترنتی که سرویس اینترنت را ازش خریداری کرده ایید منقل میشه
- و در نهایت هم این اطلاعات از طریق کابل های فیبر نوری به مقصد مدنظر شما منتقل میشه
در انتهای این بخش هم یک نگاهی به برخی مفاهیمی که تا اینجا درموردشون شنیدیم بندازیم:
- پهنای باند: به حداکثر ظرفیت دستگاه و بیشترین میزان اطلاعاتی که در یک زمان مشخص میتوانند منتقل شوند پهنای باند گفته میشه.
- Bit Rate: تعداد Bit هایی که میتوان در یک بازه زمانی مشخص منتقل شوند. مثلا 1 میلیون Bit بر ثانیه
- Latency: مدت زمانیکه طول میکشه یک Bit از جایی به جای دیگه منتقل بشه.
IP و DNS
در اوایل دهه 70 میلادی هیچ روش استانداردی برای انتقال و جابجایی داده ها در اینترنت وجود نداشت و از اینرو Vint Cerf و Bob Kahn پروتکلی را اختراع و اینکار را ممکن کردند. اما پروتکل چی هست اصلا ؟ پروتکل مجموعه ای از استانداردها و قوانین هست که تعیین میکنه اطلاعات چطور بین دستگاه ها جابجا بشن.
بریم باهم با 2 تا از این پروتکل ها یعنی ip و dns آشنا بشیم.
IP چیست ؟
تمام دستگاه های مختلف در اینترنت دارای آدرسی منحصر به فرد هستند. یک آدرس اینترنتی فقط یکسری عدد هست ولی این اعداد دقیقا مثل کدپستی یک محل، بیانگر یکسری مشخصات هستند.
درست مثل زمانیکه برای ارسال یک نامه یا یک بسته پستی باید کدپستی مقصد را بدرستی بدونید تا نامه شما به مقصد درست خودش ارسال بشه، در انتقال اطلاعات در اینترنت هم باید به همین شکل عمل کرد.
یکی از مهمترین پروتکل های اینترنت به نام IP یا Internet Protocol هم وظیفش دقیقا همین است و مثل کدپستی عمل میکنه اما اینبار بیانگر آدرس یک کامپیوتر هست.
به عنوان مثال موقعی که دارید از یک وبسایت دیدن میکنید، در واقع کامپیوتر شما داره از یک کامپیوتر دیگه درخواست اطلاعات میکنه. کامپیوتر شما پیام و آدرس ip خودش را به آدرس ip کامپیوتر دیگه میفرسته و در نهایت هم کامپیوتر دوم جوابی ( که در واقع صفحه وبسایت مدنظر شما باشه ) را به کامپیوتر اول ارسال میکنه، در نتیجه صفحه وبسایتی که بدنبالش هستید برای شما نمایش داده میشه.
بیایید یکم این آدرس ip را بشکافیم و وارد جزئیاتش بشیم،آدرس ip های نسخه 4 یا همان ipv4 هایی مثل 192.168.1.10 یک آدرس 32 بیتی هستند و هر قسمت از آدرس 8 بیت هست.
این نسخه از ip در سال 1973 طراحی شد و بیش از 4 میلیارد آدرس منحصر به فرد برای دستگاه های متصل به اینترنت فراهم میکرد. اما اینترنت حتی از چیزی که اون اوایل تصور میشد هم فراتر رفت و دیگه این 4 میلیارد آدرس برای ما کافی نبود! بنابر این تصمیم به یک انتقال بزرگ گرفته شد، انتقال به یک فرمت طولانی تر آدرس ip به نام ipv6 که 128 بیتی هست و قادره به اندازه تک تک دانه های شن روی زمین آدرس منحصر به فرد ارائه کنه!
DNS چیست ؟
اکثر کاربران هیچوقت آدرس IP هارو نمیبینند و جدای از دیدن یا ندیدن این آدرس ها، امکان حفظ کردن و کار کردن باهاشون هم برای ما انسان ها نشدنیه. فرض کنید برای بخاطر سپردن یک وبسایت باید آدرسی مثل 104.25.83.192 را حفظ کنید! اینکار عملا نشدنیه و تجربه بدی را از کار با اینترنت برای ما میسازه.
برای حل این مشکل سیستمی به نام DNS یا همان Domain Name System طراحی شد تا وبسایت ها بتونن یک نام منحصر به فرد که به راحتی توسط انسان ها به خاطر سپرده میشه را برای خود انتخاب کنند و با آن شناخته بشن. این سیستم نام انتخابی مثل google.com را به آدرس ip اون وبسایت متصل میکنه و دیگه نیازی نیست برای وارد شدن به یک وبسایت آدرس ip اون وبسایت را وارد کنید.
برای هر دامین هم یک DNS انحصاری وجود داره، یعنی یک DNS مسئول دامنه های COM هست، یک DNS دیگه مسئول دامنه های ORG و ......
یکی از نفوذ های رایجی که در سطح وب میتونه اتفاق بیوفته DNS Spoofing نام داره و به این معناست که شخص نفوذگر میاد آدرس ip متصل به نام دامنه را با یک آدرس ip جعلی جابجا میکنه و در نتیجه وقتی کاربری آدرس یک سایت مثل www.example.com را وارد میکنه بجای وارد شدن به سایت اصلی، وارد یک سایت دیگه ای میشه که حتی ممکن شخص هکر ظاهر اون سایت اصلی راهم بازسازی کرده باشه و تله ای بزرگ برای فریب شما آماده کرده باشه!
برسی Packets, Routing و قابل اطمینان بودن شبکه برای انتقال داده ها
تا اینجا درباره تاریخچه و نحوه شکل گیری اینترنت بعلاوه نحوه انتقال داده ها و اطلاعات رو باهم دیگه یاد گرفتیم. حالا بیایید کمی این انتقال اطلاعات از یک دستگاه به دستگاه دیگه رو بشکافیم و ببریم زیر ذره بین و با مفاهیمی چون Packets, Routing و Reliability بیشتر آشنا بشیم.
ما گفتیم که تمامی اطلاعات در اینترنت اعم از متن، ایمیل، تصویر یا آهنگ در قالب اطلاعات باینری و 0 و 1 ها ارسال میشن، حالا سوالی که پیش میاد اینه که آیا به عنوان مثال وقتی به سرور یک موزیک پلیری چون اسپاتیفای درخواست میزنیم و ازش میخواهیم یک آهنگ را برای ما ارسال کنه، آیا اون آهنگ و میلیاردها 0 و 1 ش بطور مستقیم برای ما ارسال میشه ؟
جواب این سوال خیر هست! اگه اینترنت از اتصالات اختصاصی و مستقیم ساخته شده بود، غیرممکن بود که میلیون ها کاربر بتونن بهش وصل بشن و کار کنن. از اینرو داده ها در اینترنت بیشتر به شکل غیر مستقیم منتقل میشن
نحوه انتقال اطلاعات از یک کامپیوتر به یک کامپیوتر دیگه خیلی جالبه و این اطلاعات برای انتقال نیازی ندارند تا مسیری مستقیم را دنبال کنن. وقتی شما یک عکس را میخواهید به جایی بفرستید یا برعکس، یک عکس را از جای دیگه ای بخواهید دریافت کنید، این عکس به صدها بخش کوچکتر به نام Packets تقسیم میشه و این Packet ها ممکنه از مسیرهای مختلفی حرکت کنند تا به مقصد برسند
دقیقا مثل جاده و ماشین ها هست، ممکنه صدها شهروندی که تقریبا در یک مبدا یکسان قرار دارن، قصد رفتن به سینما را داشته باشند، خیلی از این شهروند ها نزدیک ترین، مستقیم ترین و سریع ترین مسیر را انتخاب میکنند، اما ممکنه اون مسیر مستقیم بعد از یک مدتی شلوغ یا مسدود بشه و در نتیجه ما بقیه شهروند ها باید راه های دیگه ای رو برای رسیدن به مقصد خودشون انتخاب کنند.
بنابر این Packets چیست ؟
اجازه بدید با یک مثال ملموس تر packets را برایتان تعریف کنم. فرض کنید یک شاتل فضایی باید از کارخانه ای که اونرو تولید کرده منتقل بشه به محلی که قراره به فضا ارسالش کنند. آیا این شاتل فضایی با اون ابعاد و سایزی که داره رو میشه یکجا و بصورت مستقیم توسط یک خودرو یا قطار حمل کرد ؟ قطعا نمیشه!
بنابر این کاری انجام میشه تقسیم این شاتل فضایی به بخش های کوچکتر هست و بعد از اینکه این شاتل به بخش های کوچک تر تقسیم شد توسط خودرو یا کشتی یا قطار ارسال خواهد شد و وقتیم که این شاتل به مقصد خودش برسه مجدد قطعات کوچک کنار هم قرار میگیرند و شاتل فضایی ما آماده به کار میشود.
packet ها هم در واقع همین قطعه های کوچک شاتل فضایی ما هستند. وقتی میخواهیم یک عکس را به یک کامپیوتر دیگه ارسال کنیم، این عکس به صدها بخش کوچکتر که packet نام دارند تقسیم و ارسال میشن و در نهایت در مقصد این بخش های کوچکتر و این packet ها کنار هم قرار میگیرند و عکس مدنظر مارو تشکیل میدن.
Router چیست ؟
ما packet هارو به ماشین هایی تشبیه کردیم که دارند قطعات کوچک شده یک شاتل فضایی را به یک مقصد ارسال میکنند. این ماشین ها راننده دارن و این راننده ها میتونن مقصد رو تشخیص بدن و میدونن که باید از چه جاده و خیابانی عبور کنند. اما packet ها چی ؟ packet ها چطور مسیر خودشون به مقصد را پیدا میکنن ؟
برای حل این مشکل router وارد کار میشه، این router مثل پلیس های راهنمایی و رانندگی عمل میکنندو کمک میکنن تا این بسته های کوچک شده و packet ها هم مسیر خودشون را گم نکنند و هم اینکه بطور روان و سریع در شبکه حرکت کنند و هرچه تعداد این router ها بیشتر باشه، اطلاعات مطمئن تر و سریعتر جابجا میشن.
Reliability یا قابل اطمینان بودن شبکه چیست ؟
کمی قبل تر گفتیم که به عنوان مثال یک عکس ممکنه به هزاران بخش کوچک تر به نام packet تقسیم بشه و هر کدوم از این packet ها هم ممکنه یک مسیر متفاوتی را برای رسیدن به مقصد انتخاب کنند. اینجا یک سوال خیلی مهم پیش میاد و اونهم اینه که اگر یکسری از packet ها به مقصد نرسن چی ؟ اونوقت چه اتفاقی میوفته ؟ فرض کنید یکسری از packet ها دارن از یک مسیری حرکت میکنن و اون مسیر دچار یک مشکلی میشه! در اینجور مواقع چطور میتونیم به شبکه اطمینان کنیم ؟
برای حل این مشکل یک پروتکلی به نام TCP یا همان Transmission Controll Protocol ایجاد شده. وظیفه این پروتکل برسی packet هایی هست که از مسیری به مسیر دیگه منتقل میشن و وقتی packet ها به مقصد میرسند این پروتکل TCP میاد تک تک Packet هارو برسی میکنه تا مطمئن بشه که هیچ packet ی جا نمونده باشه و وقتی که مطمئن بشه همه بسته ها و packet ها به درستی به مقصد رسیدن، یک تائیدیه ای را صادر میکنه.
به عنوان مثال وقتی یک آهنگ را میخواهید از اسپاتیفای بگیرید، این آهنگ به هزاران packet تقسیم میشه و packet ها در مسیری متفاوت شروع به حرکت میکنند. وقتی packet ها به مقصد رسیدن TCP اونهارو برسی میکنه و اگه همه چیز اوکی بود مجوز پخش این اهنگ رو به ما میده. اما اگر اینطور نبود و تعدادی Packet جا مونده بود، TCP برمیگرده به مبدا Packet ها و اون packet هایی که جا موندن و ارسال نشدن را مجدد دریافت میکنه.
HTTP و HTML چیه و مرورگرها چطور صفحات را به ما نمایش میدهند ؟
چه اتفاقی توی پشت صحنه میوفته وقتی یک وبسایت را باز میکنیم ؟ صفحات وب چطور برای ما به نمایش در میان و امنیت ارتباطات ما با وبسایت های مختلف چطور تامین میشه ؟
وقتی مرورگر را باز میکنید و URL وبسایت مدنظر که در واقع آدرس اون سایت هست را وارد میکنید، کامپیوتر شما شروع به حرف زدن با یک کامپیوتر دیگه که سرور نام داره میکنه. به عنوان مثال وقتی شما آدرس وبسایت وسپار یعنی https://vaspar.io را وارد میکنید، کامپیوتر شما با زبان HTTP شروع به صحبت کردن با سروری که وبسایت وسپار برروش میزبانی میشه میکنه و با یک درخواست HTTP GET از سرور درخواست میکنه تا صفحه اصلی وبسایت وسپار را بهش بده.
بنابر این کامپیوتر شما یک درخواست HTTP GET به سروری که وبسایت مدنظر شما روی اون میزبانی شده میزنه و ازش میخواهد صفحه مدنظر شمارو براتون بفرسته و در نهایت هم سرور صفحه موردنیاز شمارو در قالب HTML که مخفف Hyper Text Markup Language برای شما ارسال میکنه.
اما HTML چیه ؟
HTML هم به زبانی ساده حاوی یکسری tag هست و این tag ها تعیین میکنن که ظاهر یک صفحه چطور نمایش داده بشه، به عنوان مثال این متن پررنگ و درشتی که میبینید توسط تگی به نام strong
به این شکل درومده و ما از طریق این تگ به مرورگر گفتیم که این تکه متن را درشت تر و برجسته تر به کاربران نمایش بده.
البته یک نکته ای هم وجود داره و اونهم اینه که برخی از بخش ها مثل تصاویر و ویدیو ها، فایل های جداگانه ای هستند که آدرس اینترنتی خاص خودشون را دارند و برای اونها باید درخواست های HTTP GET جداگانه ای را ارسال کرد. همین عکس هایی که در این صفحه میبینید هم به همین شکل هستند، در بخش جداگانه ای در همان سرور وبسایت مدنظر ذخیره میشن و با درخواست های HTTP GET جداگانه برای شما ارسال میشن.
اما همه درخواست ها GET نیستند و درخواست های متفاوتی مانند HTTP POST هم وجود داره. صفحه ورود به حساب کاربری یک وبسایت را تصور کنید، وارد چنین صفحه ای شدید، نام کاربری و رمز عبور خودرا وارد میکنید و در نهایت برروی دکمه ورود کلیک میکنید، اطلاعات ورود شما مانند نام کاربری و رمز عبور در قالب یک درخواست HTTP POST به سرور وبسایت مدنظر شما ارسال میشه، سرور این اطلاعات را برسی میکنه و درصورت درست بودن، سرور یک پیغام موفقیت آمیز به مرورگر شما میفرسته و در نتیجه شما وارد حساب کاربری خود میشید.
در کنار این پیغام موفقیت آمیز یکسری cookie هم به مرورگر شما ارسال میشه تا مرورگر و وبسایت مدنظر شمارو به خاطر بسپره تا دفعات بعدی دیگه نیازی به وارد کردن نام کاربری و رمز عبور نداشته باشید و به محض ورودتان به اون وبسایت، این اطلاعات cookie بصورت خودکار به سرور ارسال میشه و در نتیجه سرور شمارو شناسایی خواهد کرد.
امنیت این تعاملات ما با وبسایت ها و سرور ها چطور تامین میشه ؟
اینترنت کاملا باز هست و تمامی این اتصالات و درخواست ها بصورت متن هایی ساده ارسال میشوند و این باعث میشه تا هکر ها بتونن اطلاعات شمارو به راحتی ردیابی کنند.
برای حل این مشکل، وبسایت های امن از مرورگر شما درخواست میکنند تا این ارتباط شما با سرور برروی یک کانال امن ارتباطی با نام SSL یا همان Secure Sockets Layer و TLS که مخفف Transport Layer Security هستش برقرار بشه.
برای فهمیدن اینکه آیا ارتباط شما با وبسایت مدنظر ایمن هست یا خیر باید به اون قفل سبزرنگی که در کنار آدرس وبسایت مدنظرتون هست توجه کنید، اگر این قفل سبز رنگ وجود داشت یعنی ارتباط شما امن هست و اگر خیر یعنی چنین امنیتی برقرار نمیباشد. هرچند که درصورت ایمن نبودن اتصالتون به یک وبسایت، خود مرورگر اخطاری رو به شما خواهد داد.
این ارتباط امن درواقع بوسیله یک گواهی دیجیتالی معتبر که توسط نهادهای مورد اعتمادی که هویت وبسایت هارا تائید میکنندصادر میشه و این گواهی ها در واقع کارت های شناسایی هستند که ثابت میکنند این وبسایت دقیقا همان وبسایتی هست که باید باشد.
Encryption (رمزگذاری) و تامین امنیت بیشتر داده ها
امنیت داده ها و پیغام ها حتی زمان رومی ها هم از اهمیت زیادی برخوردار بود، طوری که ژولیوس سزار رومی یک شیوه رمزگذاری نامه ها ایجاد کرد با نام cesar cipher و در این رمزگذاری محتویات نامه ها طبق الگوریتمی که فقط نویسنده و دریافت کننده میدونن با کلماتی مختلف جابجا میشن. به عنوان مثال send میشده wirh و تنها دریافت کننده که کلید رمزگشایی را در اختیار داشته میتونسته این wirh را به send رمزگشایی کنه.
این سیستم برای سال های خیلی دور هست و همان زمان ها هم میشد با امتحان کردن چندین حالت مختلف به کلید رمزگشایی پیام ها دست پیدا کرد. در دنیای امروز که دنیای کامپیوتر هایی هست که میتونن میلیاردها حالت مختلف را در زمان کوتاهی امتحان کنند، ما نیاز به روش رمزگذاری داریم که به این سادگی ها تمامی حالت های ممکنش امتحان نشن.
بنابر این ارتباطات امن امروزی با استفاده از کلیدهای 256 بیتی رمزگذاری میشوند و برای شکستن این کلیدها حتی اگر هزاران کامپیوتر پرقدرت داشته باشیم هم صدها سال طول میکشه تا تمام حالات مختلف را امتحان کنیم.