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

شبکه های کامپیوتری چیه؟
برای درک بهتر شبکه های کامپیوتری، لازمه در ابتدا با خود <شبکه> آشنا بشیم.
شبکه یعنی یه مجموعه از چیزهای مختلف که به هم وصل شدن و با هم در ارتباطن. این چیزها میتونن افراد، دستگاهها، سیستمها یا حتی مفاهیم باشن. برای مثال، توی اخبار میشنویم که شبکه قاچاق مواد مخدر منحل شد. وقتی صحبت از شبکه میشه، یعنی حداقل 2 نفر وجود داشتن که کارای مختلف رو انجام بدن.
مفهوم شبکه های کامپیوتری چیه؟
شبکه های کامپیوتری به ارتباط بین حداقل دو تا دستگاه گفته میشه. این دو دستگاه میتونه کامپیوتر باشه، میتونه تلفن باشه و... درکل زمانی که من بیام دوتا کامپیوتر رو بهم متصل کنم، یک شبکه کامپیوتری ایجاد کردم.
تو شبکه های کامپیوتری، موضوع Media یا بستر ارتباطی وجود داره. بزار با این مثال توضیح بدم. من که اصفهان هستم اگه بخوام برم تهران، کلا دوتا راه یا بستر ارتباطی برام وجود داره؟! یا زمینی برم، یا هوایی. هرکدوم هم حالت های مختلفی داره، مثلا تو حالت زمینی میتونم با ماشین شخصی برم، با اتوبوس برم و...
کامپیوترها باید از طریق یک بستر ارتباطی بهم متصل بشن. این بستر ارتباطی یا بصورت سیمی وجود داره یا بصورت بیسیم (مثل Wifi و Bluetooth)
یه سوال! هدف از ایجاد شبکه چیه؟ چرا باید کامپیوترها بهم متصل بشن؟
به این دلایل:
به اشتراک گذاشتن منابع: یکی از هدفهای اصلی شبکه اینه که دستگاهها بتونن چیزایی که دارن رو با هم شریک بشن. مثلا اگه یه پرینتر به شبکه وصل باشه، همهی دستگاهها میتونن ازش استفاده کنن، بدون اینکه هر کدوم جداگانه پرینتر داشته باشن.
تبادل اطلاعات: هدف دیگه شبکه اینه که دستگاهها بتونن با هم حرف بزنن و اطلاعات جابهجا کنن. مثلا وقتی برا دوستت تو واتساپ پیام میفرستی، گوشیت از طریق شبکه اطلاعات رو میفرسته به سرور واتساپ و بعد به گوشی دوستت میرسه. یا وقتی فیلمی رو از یه کامپیوتر به کامپیوتر دیگه انتقال میدی، این تبادل اطلاعاته.
و...
میرسیم به موضوع Network Components یا اجزای تشکیل دهنده شبکه.
هر شبکه یکسری چیزهایی رو داره که اون شبکه رو ایجاد کردن.
برای مثال، همون شبکه مواد مخدر رو تصور کن. تو اون شبکه یه نفر بود که جنس رو تحویل بگیره، یه نفر بود که جنس رو تحویل بده، حتی ماشینها یا ابزارهایی هم که استفاده میکردن، هرکدوم یه جزء از اون شبکه بودن.
اجزای تشکیل دهنده شبکه مثل قطعات یه پازل هستن که وقتی کنار هم قرار میگیرن میتونن یک شبکه رو ایجاد کنن.
با چندتا از اجزای تشکیل دهنده شبکه آشنا بشیم...
Host: به تمام اجزای شبکه که میشه روشون IP و تنظیمات مربوط به TCP/IP رو اعمال کرد Host گفته میشه.
Node: به هر دستگاهی که داخل شبکه قرار داره و به هر شکلی بخشی از مسیر عبور دادههاست میگیم Node. اینا ممکنه خودشون اطلاعات تولید نکنن، ولی باعث میشن اطلاعات از یه نقطه به نقطه دیگه برسه. مثال ها: سوئیچ، روتر، هاب، مودم، حتی Hostها. هر Host میتونه یک Node باشه ولی هر Nodeیی نمیتونه Host باشه (چون مثلا سوئیچ داده تولید نمیکنه، فقط انتقال میده).
End Device: دستگاهیه که دادهها رو یا تولید میکنه یا مصرف میکنه. یعنی نقطه شروع یا پایان یه ارتباط توی شبکست. اینا معمولا چیزایی هستن که ما مستقیم باهاشون کار میکنیم و دستگاه هایی مثل سوئیچ که فقط داده رو انتقال میدن، به عنوان End Device شناخته نمیشن.
End User: کاربر نهایی همون شخصیه که پشت دستگاه نشسته و از شبکه استفاده میکنه. برای مثال تو که داری با لپتاپ کار میکنی، کاربر نهایی هستی. یا کسی که با گوشیش وارد یه وبسایت میشه کاربر نهایی به حساب میاد.
Workstation: معمولا به کامپیوترهایی که توان سختافزاری بالایی دارن و برای کار خاصی داخل شبکه قرار گرفتن، Workstation گفته میشه. اما گاها میبیند که به هر کامپیوتری که کاربر باهاش تعامل داره هم از این عبارت استفاده میکنن (زیاد سخت نگیرید).
Client و Server: برای تعریف این دو مفهوم با یک مثال شروع میکنم. یه سوپرمارکت تو محل شما وجود داره. وقتی شما وارد سوپرمارکت میشی، درخواست یه چیزی رو میکنی! مثلا میگی من فلان محصول رو میخوام ازت. تو این مثال، شما نقش Client رو بازی میکنی. کلاینت به درخواست کننده گفته میشه. در طرف مقابل، یه کسی وجود داره داخل سوپرمارکت و کارش اینه که درخواست هارو بگیره، پردازش کنه و بهشون پاسخ بده. به اون شخص Server گفته میشه.
درنتیجه، Client به دستگاه یا برنامهایی گفته میشه که درخواست یه چیزی رو داخل شبکه ارسال میکنه. در طرف مقابل، Server وجود داره. Server به کامپیوتر همیشه روشن و قدرتمندی گفته میشه که مدام منتظره کسی بهش درخواست بزنه و به اون درخواست پاسخ بده. کلا بر مبنای خدمت رسانی ساخته و مدیریت شده.
این نکته رو هم بدونید، Client همیشه شروع کنندهی ارتباطه.
توی شبکه یکسری منابعی وجود داره. منابع شبکه (Network Resources) یعنی هر چیزی که داخل یه شبکه قابل استفاده، اشتراکگذاری یا دسترسی باشه. برای مثال فایلها، فولدرها، پرینترها، دستگاههای ذخیرهسازی، نرمافزارها، دیتابیسها، خدمات شبکهایی (مثل DHCP) و... به عنوان منبع در شبکه شناخته میشن.
توی شبکه این منابع به دو روش بین کامپیوترها تقسیم و مدیریت میشه. کسی که شبکه رو میسازه، باید تصمیم بگیره کدوم مدل رو انتخاب کنه.
1 - Peer-to-Peer (P2P)
2 - Client Server
Peer to Peer: وقتی یه شبکه طبق مدل Peer to Peer ساخته میشه، به این معنیه که همهی کامپیوترها تو یک سطح قرار دارن و کامپیوتر یا سروری وجود نداره که بخواد روی بقیه نظارت داشته باشه و اونارو کنترل کنه. تمام دستگاهها تو این مدل میتونن هم نقش سرور رو بازی کنن و یه سرویسی رو ارائه بدن، هم نقش کلاینت رو بازی کنن. شبکه های گیمنت یه نمونه از این مدل شبکه ها هستن.
Client Server: وقتی یه شبکه طبق مدل Client Server ساخته میشه، به این معنیه که کامپیوتر یا کامپیوترهایی وجود دارن تحت عنوان Server که میتونن روی دیگر سیستم ها نظارت داشته باشن، کنترلشون کنن. تو این مدل حداقل یک کامپیوتر به عنوان Server باید تعیین بشه، مابقی کامپیوترها نقش Client رو میگیرن و اگه به منبع یا دسترسی خاصی احتیاج داشته باشن، باید به این سرور متصل بشن و ازش درخواست کنن.
سوالی که ممکنه برای شما به وجود بیاد اینه: از کدوم مدل استفاده کنم؟
جوابش کلا به هدف شما از ساخت شبکه برمیگرده، اما یه توضیحات کوچیکی میدم تا سریع تر به این جواب برسید :)
شبکه های Peer to Peer خیلی ساده راهاندازی میشن، چون به سرور و مدیریت های عجیب و غریب احتیاج ندارن، ارزونتر میشه کار رو جمع کرد. برای شبکه های کوچیک خیلی خوبه. از طرفی، اگه تعداد دستگاه ها بالا بره، مدیریت و امنیت خیلی افت پیدا میکنه.
شبکه های Client Server برای سازمان ها و جاهایی که امنیت و مدیریت شبکه براشون مهمه خیلی میتونه مفید باشه. اما از نظر هزینه طبیعتا گرونتر درمیاد از P2P.
(تو اکثر سازمانها مدل Client Server کار میکنه)
ممکنه اسم Workgroup و Domain هم به گوشتون خورده باشه. Workgroup همون شبکه های P2P هستن اما داخل ویندوز و Domain هم تقریبا همون شبکه های Client Server هست اما داخل ساختار و تعاریف ویندوز.
شما یه انسان رو در نظر بگیر. این انسان از جهت های مختلفی میتونه به دسته های مختلفی تقسیم بشه.
برای مثال یه انسان داریم به اسم A. این آدم از نظر جنسیت به دو دسته تقسیم میشه. از نظر رنگ مو به دسته های مختلفی تقسیم میشه، از نظر رنگ پوست، از نظر ملیت و...
اون آدم تغییری نکرده! فقط از بُعد های مختلف اگه بهش نگاه کنیم، به دستهبندی های مختلفی تعلق میگیره.
یک شبکه کامپیوتری هم میتونه از بُعد های مختلف، به دسته های مختلف تعلق بگیره.
مثلا یک شبکه از نظر مدل مدیریت منابعش به دو دسته تقسیم میشه، یا Peer to Peer هست یا Client Server.
یکی دیگه از دستهبندی های شبکه، تقسیم بندی از نظر وسعت جغرافیایی اون شبکست. یعنی اینکه یک شبکه چقدر وسعت داره (Network Geography). با کوچیک ترین شبکه شروع کنیم...

کوچیک ترین شبکه (از نظر وسعت جفرافیایی) PAN یا Personal Area Networkعه. این شبکه، شخصی و خیلی کوچیکه، محدودش حدود 10 متره. فقط برای ارتباط بین وسایل شخصی خودت کاربرد داره.
نکته. اگه قبل از اسم شبکهها کلمهی W قرار گرفت، یعنی اون شبکه بصورت کامل بدون سیم ساخته شده (Wireless هست) فرضا نقطه اتصال تلفنم رو روشن میکنم و لپتاپم بهش وصل میشه، اینجا من یه WPAN دارم.
LAN یا Local Area Network: شبکه LAN به شبکههای محلی اشاره داره. شبکههایی که تا چند صد متر میتونن وسعت داشته باشن. شما اگه تو خونت مودم داشته باشی و دستگاه های مختلفی رو بهش وصل کرده باشی، یه LAN تشکیل دادی. همچنین، WLAN هم داریم.
CAN یا Campus Area Network: این مدل یه چیزی بین LAN و MAN عه. یه دانشگاه بزرگ یا یه شهرک صنعتی رو در نظر بگیر که چند تا ساختمون مختلف داره. شبکهایی که تمام این ساختمونها و شبکههای LAN داخلشون رو به هم وصل میکنه، میشه یه CAN. این شبکه برا یه سازمان واحده و مدیریتش هم با همون سازمانه.
MAN یا Metropolitan Area Network: این شبکه شهریه و یه شهر رو پوشش میده، محدودش تا چند کیلومتره.
فرضا یه شرکت بزرگ که چند تا ساختمون تو یه شهر داره و همشون رو با شبکه به هم وصل کرده.
WAN یا Wide Area Network: بزرگترین نوع شبکه از نظر جغرافیایه و کارش اینه که شبکههای کوچیکتر (مثل LANها و MANها) رو که در فاصلههای خیلی دور از هم قرار دارن، به همدیگه وصل کنه. این فاصله میتونه بین دو تا شهر مختلف، دو تا کشور یا حتی دو تا قاره باشه.
شبکه اینترنت یه نمونه از شبکه های WAN هست. وقتی من وارد سایت گوگل میشم، دارم به سروری متصل میشم که تو یه کشور دیگه قرار داره. پس اینجا اینترنت اومده شبکه من رو به یک شبکه دیگه، داخل یک کشور دیگه متصل کرده. سوالی که به وجود میاد اینه که این ارتباط ها چطوری کار میکنه؟ این شبکه چطور ساخته شده؟
یکسری شرکت هایی وجود دارن که کف اقیانوس ها کابل کشی کردن، ارتباطات ماهوارهایی ساختن و مدیریت تمام اینها با اون شرکت ها هست. وقتی من یک بسته اینترنت میخرم، درواقع دارم یک IP میخرم و این IP مثل بلیط ورود من به این شبکه عمل میکنه.
آیا به جز اینترنت، شبکه های دیگهایی در سطح WAN میتونن وجود داشته باشن؟ بله.
من فرضا یه شرکت دارم که تو کشورهای مختلف شعبه داره و میخوام اینارو بهم متصل کنم. کاری که انجام میدم اینه که میام خطوط ارتباطی که از قبل وجود داره رو اجاره میکنم، یعنی خودم نمیام بین این همه کشور کابل کشی کنم یا هرکار دیگه، بلکه یه مسیر رو اجاره میکنه تا ترافیک من بین شعبه ها جا به جا بشه بدون اینکه با اینترنت سروکار داشته باشن (این بحث ها برای الان لازم نیست بررسی بشه)
توی شبکه شکل چیدمان دستگاه ها، تعیین کنندهی توپولوژی (Topology) اون شبکه هستن. به زبان ساده تر توپولوژی نشون دهنده اینه که دستگاه ها طبق چه نقشه و توسط چه تجهیزاتی بهم متصل شدن.
Topology به دو حالت فیزیکی و منطقی وجود داره. توپولوژی فیزیکی یعنی دستگاهها بصورت فیزیکی (سختافزاری) چطور و به چه شکل متصل شدن، توپولوژی منطقی یعنی از دید نرمافزاری و نحوهی ارتباط گیری، طبق چه نقشهایی کار میکنن.
فعلا تمرکزمون روی Physical Topologyعه و بعدها راجب Logical Topology هم صحبت میشه.
بریم با انواع Topology ها آشنا بشیم...
BUS Topology: توی این مدل یه کابل اصلی قرار میگیره و کامپیوترها یکی یکی به این کابل اصلی متصل میشن.

یکی از قدیمی ترین توپولوژی های شبکست. وقتی یه کامپیوتر دادهایی رو ارسال کنه، اون داده روی کابل اصلی جریان پیدا میکنه و به تک تک سیستمها ارسال میشه، تنها سیستمی که داده براش ارسال شده، اون بسته رو قبول میکنه. توپولوژی BUS منسوخ شده و لازم نیست وقت بیشتری براش بزاریم.
STAR Topology: توی این مدل یک دستگاهی به عنوان دستگاه مرکزی قرار داره و تمام دیگر تجهیزات به این دستگاه متصل میشن.

توی توپولوژی STAR کامپیوترها ارتباط مستقیم باهم ندارن و هرکی، هر دادهایی قراره ارسال کنه، باید از این دستگاه مرکزی عبورش بده. سال ها قبل یک دستگاهی وجود داشت به اسم HUB که از اون برای دستگاه مرکزی این توپولوژی استفاده میکردن، امروزه یک دستگاه هوشمندتری اومده به اسم Switch و سوئیچ تو شبکه های STAR امروزه استفاده میشه.
RING Topology: توی این مدل کامپیوترها به دوتا کامپیوتر کناریشون متصل هستن و یک حلقهایی رو ایجاد کردن.

این توپولوژی هم منسوخ شده.
MESH Topology: تو این مدل کامپیوترها ارتباط مستقیم با دیگر کامپیوترها دارن. یعنی خبری از دستگاه مرکزی یا کابل اصلی (مثال BUS) وجود نداره. توپولوژی MESH به دو نوع Full و Half تقسیم میشه.

توی مدل Full Mesh هر کامپیوتر به تکتک کامپیوترهای دیگه مستقیم وصله. یه شبکه تار عنکبوتی کامل و پیچیده درست میشه که نهایت مقاوم بودن رو داره.
توی مدل Half Mesh فقط کامپیوترها و Nodeهای مهم و حیاتی به چندتا دستگاه دیگه وصل میشن. لازم نیست همه به هم بصورت مستقیم اتصال داشته باشن.
وقتی کامپیوتر A میخواد به کامپیوتر Z دیتا بفرسته، دهها مسیر مختلف ممکنه وجود داشته باشه. شبکه میتونه بهترین مسیر (مثلا کوتاهترین یا خلوتترین) رو برای ارسال دیتا انتخاب کنه. جذابترین ویژگیش اینه که اگه یه کابل یا حتی یه کامپیوتر در یک مسیر خراب بشه، هیچ اتفاقی نمیافته! داده به صورت خودکار از یه مسیر دیگه فرستاده میشه.
Hybrid Topology: من یه شرکت دارم با بخش های مختلف. هربخش یک شبکه داره با توپولوژی متفاوت. برای مثال بخش مالی شرکتم توپولوژی STAR داره و بخش مدیریت شرکتم توپولوژی MESH. اگه من این شبکهها رو بهم متصل کنم، به شبکه یا توپولوژی که درنهایت ساخته میشه، Hybrid یا ترکیبی میگیم. یعنی یک شبکه که از چندین توپولوژی مختلف تشکیل شده.

تقریبا تمام شبکههای بزرگ (مثل دانشگاهها، بیمارستانها و شرکتهای بزرگ) از نوع Hybrid هستن، چون نیازهای بخشهای مختلفشون با هم فرق داره و یک مدل ساده، جوابگوی کارشون نیست.
Point to Point Topology یا P2P: توی این مدل دوتا دستگاه بصورت مستقیم و بدون هیچ چیز واسطی بهم متصل شدن. حالا این دو دستگاه میتونه دوتا کامپیوتر باشه، یه موبایل و کامپیوتر باشه، دوتا آنتن باشه یا...

داستان OSI یا Open Systems Interconnection چیه؟
هرارتباطی که قراره ایجاد بشه، باید طبق یک اصول و استاندارد جلو بره. تو سال های قبل هر شرکت که کامپیوتر و دستگاههای مربوط به شبکه هارو ایجاد میکرد، یک مدل خاص از ارتباط گرفتن رو داخل اون دستگاهها اعمال میکرد. یعنی شرکت IBM کامپیوترهایی میساخت که فقط قادر بودن با کامپیوترهای ساخت همون شرکت ارتباط بگیرن.
یا شرکت Apple کامپیوترهایی میساخت که فقط با کامپیوترهای خود شرکت Apple میتونستن ارتباط بگیرن.
متخصصان اون زمان گفتن این چه وضعیه! باید یه مدل یا قانونی ساخته بشه تا همه ازش استفاده کنن و محدودیتی تو اتصال دستگاههای مختلف نداشته باشیم.
یه سازمان وجود داره به اسم ISO که کارش استاندارد سازی موضوعات مختلف در سطح بیناللملیه. سازمان ISO دست به کار شد تا یه مدل واحد ایجاد کنه و همه طبق اون مدل رفتار کنن که در نتیجه هر دستگاهی فارغ از برند، سختافزار و شرکت سازنده، بتونه با دیگر دستگاهها ارتباط بگیره.
سازمان ISO مدل ارتباطی رو ساخت و اسمش رو گذاشت OSI که مخفف Open Systems Interconnection هست.
مدل OSI ارتباط بین کامپیوترهارو توی 7 لایه مشخص و تعریف کرده. چرا سازمان ISO این ارتباط رو لایهبندی کرد؟
یادگیری راحت تر: به جای درگیر شدن با یک غول بزرگ، اون رو به 7 تا بخش کوچیکتر تقسیم میکنیم.
توسعه راحت تر میشه: شرکتها میتونن برای یک لایه خاص یک تکنولوژی جدید بسازن، بدون اینکه نگران بقیه لایهها باشن.
عیبیابی راحتتر میشه: اگه ارتباط قطع بشه، متخصص شبکه به ترتیب لایهها رو چک میکنه تا ببینه مشکل از کجاست.

بریم با 7 لایهی مدل OSI آشنا بشیم.
لایه Application: زمانی که من کاربر دادهایی رو ایجاد میکنم تا توی شبکه ارسال بشه، این داده در اولین قدم تحویل لایه Application داده میشه. لایه Application تنها لایهایی هست که با کاربر تعامل داره و به نسبت چیزی که کاربر میخواد ارسال کنه، داده رو ایجاد میکنه و به حالتی تبدیلش میکنه که توی لایه پایینتر درک بشه.
برای مثال، وارد مرورگر میشم و سایت google رو باز میکنم، تا الان من به عنوان کاربر درخواستم رو تعریف کردم، این درخواست تحویل لایه Application داده میشه و این لایه بررسی میکنه و میفهمه که میخوام به یک وب سرویس درخواست بزنم، پس میاد پروتکل HTTP رو که تو همون لایه هست صدا میزنه و میگه HTTP یه پاکت نامه رو آماده کن با فلان مشخصات فرستنده و گیرنده که قراره بدمش به لایه پایینتر و اون هم دیگر تغییرات رو روی اون اعمال کنه تا در نهایت بسته برسه به سرور گوگل.
حالا اگه بجای وب سرویس، میخواستم با FTP و فایل ها کار کنم، لایه Application پروتکل FTP رو صدا میزد تا بسته یا درخواست من رو سرهم و آماده کنه.
تا الان بسته یا درخواست ساخته شده، توسط لایه Application مرتب و سرهم شده و اون بسته میرسه به لایه 6.
لایه Presentation: این لایه بستههای داده رو فشردهسازی میکنه. در کنار اون، قالب بندی هم انجام میده و کاری میکنه که اطلاعات، تو مقصد به درستی خونده بشن. برای مثال، وقتی من از ویندوز خودم یک دادهایی رو ارسال میکنم به سمت موبایلم، یکی از وظایف لایه Presentation اینه که داده رو به شکلی قالب بندی کنه که تو موبایل من درک بشه. درکنار فشرده سازی و قالب بندی، عمل رمزنگاری هم تو این لایه انجام میشه.
لایه Session: این لایه مسئول اینه که با کامپیوتر مقصد ارتباطی رو ایجاد کنه و این ارتباط رو مدیریت کنه تا دادهها ارسال/دریافت بشن. وقتی ارسال دادهها تموم شد این لایه باید ارتباط رو با کامپیوتر مقصد قطع کنه.
وقتی شما همزمان به چندین مقصد متصل میشید و درخواست های مختلفی رو ارسال/دریافت میکنید، وظیفه این لایه هست که ارتباطات مختلف رو مدیریت کنه.
توی شبکه به سه حالت دادهها میتونن ارسال و دریافت بشن.
Simplex: تو این حالت فقط یک طرف از ارتباط میتونه ارسال داشته باشه و طرف دیگه فقط دریافت. به عنوان مثال تلوزیون ها دارن دادهایی رو از صدا و سیما دریافت میکنن ولی دادهایی نمیتونن بفرستن.
Half-Duplex: تو این حالت دوتا دستگاه میتونن اطلاعات رو بفرستن و دریافت کنن، ولی نه همزمان! بصورت نوبتی. مثل بیسیم پلیس.
Full-Duplex: تو این حالت هر دو طرف بصورت همزمان هم میتونن ارسال انجام بدن و هم دریافت.
تعیین اینکه کدوم روش برای ارتباط بین دو کامپیوتر انتخاب بشه، توسط لایه Session انجام میشه.
لایه Transport: وقتی داده به این لایه میرسه، بررسی میکنه که آیا لازم هست به قطعات کوچیکتری تقسیمش کنه تا بهتر و سریعتر منتقل بشن یا نه؟! درنتیجه، تقسیم کردن و قطعهقطعه کردن داده یکی از وظایف این لایه هست. به قطعههای کوچیک شده تو این لایه segment گفته میشه.
همچنین، تو این لایه دوتا پروتکل وجود داره که باید از یکی از اینها برای ارسال اطلاعات استفاده کنیم. هرکدوم به یک روش اطلاعات رو ارسال/دریافت میکنن که الان خلاصه توضیح میدم و بعدا بیشتر بررسی میشه.
TCP: مسئولیتپذیر. مطمئن میشه همه سگمنتها سالم و به ترتیب به مقصد برسن. اگه یکی نرسه، دوباره میفرستتش.
UDP: سریع و بیخیال. فقط دیتا رو میفرسته و براش مهم نیست حتما برسه یا نه.
جمعبندی: این لایه دادهها رو در صورت لزوم قطعه قطعه میکنه و به هر قطعه Segment گفته میشه. دوتا پروتکل TCP و UDP تو این لایه وجود دارن و هر ارتباطی، باید از یکی از این دو پروتکل استفاده کنه.
لایه Network: مهم ترین کاری که این لایه انجام میده، کار با IP برای مسیریابی بستهها و پیدا کردن کامپیوترهای مقصده. IP چیه؟ بعدا راجبش توضیح میدم ولی فعلا در این حد بدونید که IP یکی از دو آدرسی هست که به کامپیوترها تعلق میگیره تا بتونن داخل شبکهها فعالیت داشته باشن. وقتی بستهایی قراره ارسال بشه، این لایه آدرس IP فرستنده و آدرس IP گیرنده رو داخل اطلاعات بسته قرار میده، با اینکار اطلاعات میتونن مسیریابی بشن و به مقصد برسن.
لایه Data Link: در کنار IP یک آدرس دیگه وجود داره به اسم MAC که هر کامپیوتر با این آدرس، میتونه تو شبکههای LAN فعالیت داشته باشه. در مورد MAC بعدا صحبت میشه. وقتی بستهایی قراره ارسال بشه، هم به اطلاعات IP نیاز داره (فرستنده و گیرنده) و هم به اطلاعات MAC. یکی از وظایف این لایه مدیریت آدرس MAC و قرار دادن اونها داخل بسته هست.
لایه Physical: به اون چیزی که کامپیوترهارو به هم متصل میکنه، Media یا بستر ارتباطی گفته میشه. این لایه ارتباط مستقیم با Media داره و کلا با Bit کار میکنه. این لایه دادهها رو به شکلی درمیاره که روی اون Media قابل ارسال/دریافت باشه. مثلا اگه کامپیوترها به واسطه کابل به هم متصل شده باشن، Bit ها تبدیل به سیگنال های الکتریکی میشن ولی اگه کامپیوترها به واسطه Wifi بهم متصل شده باشن، Bit ها تو یه حالت دیگه ارسال میشن.

جمعبندی: مدل OSI توسط سازمان ISO معرفی شد تا همه طبق یک پروتکل واحد ارتباط برقرار کنن. سازمان ISO مدل OSI رو تو 7 لایه معرفی کرد. زمانی که شما دادهایی رو ایجاد میکنی، اون داده از لایه 7 شروع میشه میاد پایین و به این فرآیند Encapsulation گفته میشه. وقتی داده به مقصد میرسه، از لایه 1 وارد میشه و تا لایه 7 بالا میاد تا درنهایت شکل اصلی داده به کامپیوتر مقصد برسه و به این فرآیند Decapsulation گفته میشه.
داخل شبکه، وقتی بستهایی قراره ارسال بشه، سه حالت وجود داره.

Unicast: اگه یک کامپیوتر بستهایی رو فقط برای یک کامپیوتر دیگه ارسال کنه، اصطلاحا Unicast کرده.
Multicast: اگه یکسری کامپیوتر عضو یک گروه باشن و من بسته رو فقط برای این کامپیوترها ارسال کنم، عمل Multicast رو انجام دادم.
Broadcast: زمانی که من بستهایی رو داخل شبکه پخش میکنم و برای همه ارسال میکنم، Broadcast انجام دادم.
پروتکل TCP/IP چیه؟
برای توضیح این پروتکل، لازم هست یسری موارد رو که داخل بخش OSI توضیح دادم مجدد بازگو کنم.
OSI توسط سازمان ISO معرفی شد تا همه بتونن طبق یک مدل واحد ارتباط بگیرن. تو زمانی که OSI مطرح شد و بحث روی پروتکلهای ارتباطی داغ بود، چندین ارگان یا سازمان دیگه هم نظرات خودشون رو داشتن.
بیا کاری به این نداشته باشیم که توی چه سالی و توسط چه سازمانهایی چه اتفاقاتی افتاد، بیا به این کار داشته باشیم که تفاوت TCP/IP با OSI چیه و منطق کار رو درک کنیم :)
همینطور که میدونید تا قبل از OSI شبکهها وجود داشتن و کامپیوترها به هم متصل میشدن، منتهی پروتکل واحدی بین شبکهها وجود نداشت. از یه طرف یسری ها داشتن کاری میکردن که این پروتکل ساخته بشه تا همه متصل بمونن و فعالیت های مختلفی هم انجام میدادن، از یه طرف سازمان ISO اومد و OSI رو معرفی کرد. تو یه بازهی زمانی متخصصها گفتن که چندین پروتکل الان وجود داره و کار میکنه، OSI هم که اومده، ما میایم فلان پروتکل رو که خیلی وقته داریم روش کار میکنیم و شبیه OSI هست رو یکم تغییر میدیم و بهترش میکنیم، و همون رو میزاریم به عنوان پروتکل اصلی ارتباطات. اسم اون پروتکل شد TCP/IP که خیلی شبیه به OSIعه.
درواقع TCP/IP نسخه عملی و واقعی OSIعه، چون OSI روی کاغذ همه چیز رو با جزئیات و دقیق عنوان کرده بود اما TCP/IP گفت که توی عمل فلان چیزها استفاده میشه و من همون هارو نگه میدارم، دیگه به اون ریزه کاریها احتیاجی نیست.
فکر کنم متوجه شدید که چرا تو درس های شبکه، ابتدا OSI رو تدریس میکنن و بعدش TCP/IP رو، چون OSI رو اگه شما درک کنی، انگار TCP/IP رو درک کردی با این تفاوت که TCP/IP چندین کار OSI رو باهم ادغام کرده. چرا؟ چون گفت من میخوام تو عمل استفاده بشم، اون همه جزئیات باعث میشه مثلا سرعت ارتباطات کاهش پیدا کنه.

مدل OSI ارتباط هارو به 7 لایه تقسیم کرده بود اما TCP/IP گفت من توی عمل میخوام یجور دیگه رفتار کنم و اومد 3 تا لایهی بالای OSI رو داخل یک لایه قرار داد به اسم Application.
پروتکل TCP/IP بیشتر بصورت 4 لایه معرفی میشه که داخل عکس مشخصه اما گاها ممکنه 5 لایه هم ببینیم که تفاوت خاصی با 4 لایه نداره، فقط دوتا لایه پایینی رو از هم جدا کردن. یجورایی مدل 5 لایه نسخهی جدیدتر TCP/IPعه.
PDU یا Protocol Data Unit چیه؟ PDU همون بسته یا چیزیه که توی هر لایه دست به دست میشه. شبکه مثل یه خط تولیده، داده از Application شروع میشه و میره پایین، لایه به لایه بهش چیز اضافه میشه. درنتیجه PDU اسمیه که به دادهها در هر لایه گفته میشه.
Ethernet چیه؟ برای توضیح اترنت دوباره باید برگردیم به گذشته، همون مواقعی که ارتباطات کامپیوتری تو در و دیوار بود و هنوز به پروتکل واحد و استاندارد نرسیده بودن.
اون زمان کامپیوترها فقط بصورت Point to Point میتونستن ارتباط بگیرن، یعنی یه کامپیوتر فقط به یه کامپیوتر دیگه. تو این حالت یکی از سیستمها دادهایی رو ارسال میکرد، اون یکی دریافت میکرد.
بعد یه مدت گفتن این مدلی فایده نداره. باید کاری کنیم که کامپیوترهای بیشتری بتونن بهم متصل بشن.
بعد کلی فکر کردن به این نتیجه رسیدن که هرکامپیوتر باید یه شناسه یا آدرس یکتا داشته باشه. اومدنMAC Address رو ساختن که تو بخش بعدی خیلی کامل بررسیش میکنیم.
مک آدرس یکی از آدرسهایی هست که کامپیوترها برای ارتباطات شبکهایی بهش احتیاج دارن و این آدرس، بصورت سختافزاری (فیزیکی) روی هر کارت شبکه تنظیم میشه.
حالا که هر کامپیوتر شناسهی خاص خودشو داره، پس میتونیم چندین سیستم رو بهم متصل کنیم و هر سیستم، میتونه دیگر سیستمهارو به واسطهی آدرس مکشون، متمایز کنه.
حالا اومدن گفتن که وقتی یک کامپیوتر میخواد بستهایی رو ارسال کنه، اون بسته باید چه مواردی داخلش قرار بگیره و کلا به چه شکلی باید سرهم بشه تا بتونه بصورت صحیح به مقصد درستش برسه.
اومدن بحث frame رو مطرح کردن. وقتی یک بسته میخواد از کامپیوتر مثلا A ارسال بشه، یک frame براش ایجاد میکنن و داخل اون frame نوشته میشه که این بسته از کامپیوتری با MAC فلان میخواد ارسال بشه به کامپیوتری با MAC فلان.
این کل داستان اترنت بود.
اترنت یک فناوری یا تکنیکیه که بستههارو سرهم میکنه تا درنهایت ارسال بشه (فقط به همین مورد ختم نمیشه).
درکنار اترنت موارد دیگهایی هم داریم که اوناهم به شکل خاص خودشون بستههارو سرهم میکنن و ارسال میکنن! مثل WiFi.
پس اترنت، یکی از روشها یا تکنیکهایی هست که کمک میکنه بستهها داخل شبکه ارسال/دریافت بشن.
همه چیز راجب MAC Address.
MAC مخفف Media Access Controlعه. یه آدرس 48 بیتی (یعنی 6 بایت) که به هر کارت شبکه داده میشه.
مک بصورت سخت افزاری روی کارت های شبکه حک میشه و تو حالت معمول قابل تغییر نیست.
MAC Address به شکل 12 رقم هگزادسیمال نمایش داده میشه. مثلا: 00:1A:2B:3C:4D:5E
هر قسمت شامل 2 کاراکتر Hexa هست و با : از هم جدا شده و همچنین هر قسمت 1 بایته (هر کاراکتر هگزا 4 بیته)
مک آدرس به دو بخش تقسیم میشه.
بخش اول (3 بایت یا 24 بیت اول): مربوط به شرکت سازنده کارت شبکست. به بخش اول میگن OUI یا Organizationally Unique Identifier.
بخش دوم (3 بایت یا 24 بیت دوم): شمارهی سریال یکتای اون کارت شبکه، که توسط همون شرکت انتخاب میشه.
اگه ویندوز دارید، cmd رو باز کنید و دستور ipconfig /all رو بنویسید، تو خروجی، آدرس MAC کارت شبکه رو نوشته.
مک آدرس تو لایه دوم مدل OSI یعنی Data Link وجود داره.
Hub چیه؟ به توپولوژی Star دقت کن:

دستگاه Hub برای این ساخته شد که کامپیوترها متصل بشن به یک دستگاه مرکزی و بتونن تبادل داده داشته باشن.
Hub تو لایه اول OSI کار میکنه که یعنی فقط بیت هارو میفهمه و باهاشون کار میکنه. درکی از MAC که تو لایه دوم هست نداره. زمانی که کامپیوتر A میخواست به کامپیوتر B داده ایی رو ارسال کنه، اون داده میرسید به HUB و HUB میومد اون frame هارو به تمام دیگر دستگاه ها ارسال میکرد، تمام کامپیوتر ها بسته رو دریافت میکردن ولی فقط اون کامپیوتری بسته رو برای خودش نگه میداشت که آدرس مک خودش تو اطلاعات گیرنده بسته وجود داشت.
وقتی کامپیوترها رشد کردن و تعداد دستگاه ها بیشتر شد یواش یواش ضعف های Hub خودشو نشون داد و به همین دلیل رفتن برای ساخت یه دستگاه پیشرفته تر که درنهایت ساختن و اسمش شد Switch.
(یه نکته. شما زمانی که از توپولوژی Star استفاده میکنی و دستگاه Hub رو قرار میدی، بصورت فیزیکی داری از همون توپولوژی Star کمک میگیری اما بصورت منطقی توپولوژی BUS رو داری)
Switch چیه؟
Switch علاوه بر لایه اول OSI، لایه دومش هم داره و درکش میکنه، به این معنی که دستگاه Switch میتونه مک آدرس هارو بفهمه. سوئیچ یه داخل حافظش یه جدول داره به اسم MAC Table یا CAM Table.
وقتی سوئیچ برای اولین بار داخل شبکه قرار میگیره و روشن میشه، اون جدول خالیه. به مرور که کامپیوتر ها باهم اطلاعات رد و بدل میکنن، سوئیچ میفهمه که به کدوم پورتش، چه مک آدرسی وصله. مثلا کامپیوتر A که به پورت 1 وصله، بسته ایی رو ارسال میکنه، سوئیچ بسته رو میگیره، بازش میکنه و به مک آدرس فرستنده نگاه میکنه، میاد تو جدولش مینویسه که پورت 1 من مک آدرسش برابره با فلان مورد.
همین روند تکرار میشه تا تمام مک آدرس هارو بفهمه و یادداشت کنه.
همه چیز راجب IP یا Internet Protocol.
همینطور که قبلا گفته شد، MAC Address به این دلیل به وجود اومد که داخل یک شبکه LAN کامپیوترها بتونن هم دیگه رو بشناسن و داده ارسال/دریافت کنن.
وقتی شبکه ها بزرگ شدن و خواستن LAN های مختلف رو بهم متصل کنن، یسری مشکلات به وجود اومد. اصلی ترین مشکل این بود که MAC آدرسی نبود برای مسیریابی بسته ها بین LAN های مختلف. MAC به این دلیل به وجود اومد که داخل یک LAN عمل مسیریابی انجام بشه، خب الان که میخوایم عمل مسیریابی رو بین شبکه های مختلف انجام بدیم، نیاز هست که یه آدرس دیگه داشته باشیم و طبق همین دلایل IP به وجود اومد.
IP و MAC باهم کار میکنن. طبق قوانین و استانداردهایی که داخل هردوی اینها وجود داره، نمیتونیم بصورت جدا از هرکدومشون استفاده کنیم.
نتیجه گیری:
MAC Address برای مسیریابی در بیرون از شبکه های LAN مناسب نیست. MAC Addressها بر اساس سازنده مرتب شدن، نه موقعیت جغرافیایی. دستگاههای یه شرکت میتونن در سراسر جهان پخش باشن.
اگه روترهای اینترنت بخوان بر اساس MAC Address مسیریابی کنن، باید جدولی از میلیاردها MAC Address داشته باشن که عملا غیرممکنه. پس نیاز به یک آدرسدهی جدید بود. یک آدرس منطقی (نه فیزیکی). یک آدرس سلسلهمراتبی (مثل سیستم کدپستی) تا بتونه مسیریابی رو ساده کنه. یک آدرس که قابل تغییر باشه (برخلاف MAC Address). این نیاز، منجر به ایجاد Internet Protocol (IP) شد.
از پروتکل IP دو نسخه وجود داره. اول IPv4 ساخته شد که از 32 بیت تشکیل شده. برای نمایشش از decimal استفاده میشه. این 32 بیت رو به 4 بخش 8 بیتی تقسیم کردن و به هر بخش Octet گفته میشه و همچنین، هر Octet با . از Octet کناری جدا میشه. یک نمونه مثال: 192.168.1.1 (هر Octet میتونه بین 0 تا 255 باشه)
به مرور که تعداد دستگاه های متصل به اینترنت زیاد شدن، برای اینکه آدرس IP کم نیاد یسری حرکت هایی زدن مثل اینکه IP های Public و Private رو مطرح کردن! اما این هم نتونست خیلی مقاومت کنه در برابر تعداد دستگاه ها که هر روز بیشتر میشد. در آخر اومدن IPv6 رو ساختن که این نسخه از 128 بیت تشکیل شده. تعداد آدرس هایی که با این نسخه میتونیم داشته باشیم تقریبا بینهایته و حالا حالا کم نمیاد. یک نمونه مثال:
2001:0db8:85a3:0000:0000:8a2e:0370:7334
(تو این آموزش تمرکز روی IPv4 هست)
IP طبق معیار های مختلف، به دسته های مختلف تقسیم میشه. برای مثال، IP های Private و Public رو داریم.
همینطور که بالاتر گفته شد، وقتی دیدن آدرس های IP داره کم میاد، اولین کاری که کردن تقسیم IP ها به دو دسته Public و Private بود. شما وقتی وارد یه کوچه میشی، پلاک خونه ها از 1 شروع میشه تااا آخر. اگه وارد کوچه بعدی بشید، بازم پلاک کوچه ها از 1 شروع میشه تااا آخر. اون دوتا خونه که پلاکشون 1 هست هیچ ربطی بهم ندارن چون داخل کوچه یا محدوده خاص خودشون قرار دارن.
IP های Public آدرسی هستن که تو کل اینترنت منحصر بفردن و دستگاه های دیگه میتونن با این آدرس با کامپیوتر هدف ارتباط برقرار کنن. برای مثال، ایران هیچ استانیش با استان دیگش اسم یکسانی نداره، مثلا استان اصفهان رو داریم، یا مازندران یا... اما، تو هر استان ممکنه محله هایی باشه با اسم یکسان. مثل محله همت خان تو اصفهان و محله همت خان تو مازندران. Public IP مثل اسم استانه که همیشه منحصر بفرده و اسم محله ها Private IP میشن، یعنی آدرس هایی که بعد از یک آدرس عمومی قرار دارن.
IP های Public توسط IANA (یه سازمان جهانی که مدیریت آدرسهای IP رو بر عهده داره) و از طریق ارائه دهنده های اینترنت مثل ایرانسل یا مخابرات به دستگاهها یا شبکهها اختصاص داده میشه.
IPv4 حدود 4 میلیارد آدرس منحصربهفرد داره. حالا تصور کن یه شرکت بزرگ با 1000 کارمند، اگه بخواد به هر کامپیوتر یه آدرس IP عمومی اختصاص بده، باید 1000 آدرس IP از ISP بگیره. این کار هم بسیار گرون تموم میشه، هم غیر عملی بود.
Public IP ها تو سطح اینترنت یکتا هستن. مثلا سرور گوگل یه آدرس Public داره که هرکسی میتونه بهش درخواست بزنه، حالا تصور کن یه سرور دیگه هم همین آدرس IP رو داشته باشه، اینجا به خطا میخوریم.
Private IPها آدرس هایی هستن که تو سطح شبکه های محلی وجود دارن و تو سطح اینترنت شناخته شده نیستن.
چطور تشخیص بدیم یک IP از نوع Public هست یا Private؟
IPv4 حدود 4 میلیارد آدرس منحصر به فرد داره. از دل این 4 میلیارد، اومدن چندتا رنج رو جدا کردن و اون چندتا رنج رو گفتن تو شبکه های LAN به عنوان Private IP استفاده کنید. به اون رنج ها کلاس گفته میشه.
کلاس های IP:
10.0.0.0 تا 10.255.255.255 (کلاس A) ( با این کلاس/رنج یک شبکهی خیلی بزرگ دارم با 16 میلیون آدرس)
172.16.0.0 تا 172.31.255.255 (کلاس B) (با این کلاس 16 تا شبکه متوسط میتونم بسازم)
192.168.0.0 تا 192.168.255.255 (کلاس C) (با این کلاس میتونم 256 شبکه کوچیک بسازم)
جمع بندی: تا الان با IP و نسخه های IP آشنا شدیم. فهمیدیم که IP و MAC در کنار هم کار میکنن و دلیل وجود IP چیه. همینطور با IP های Public و Private هم آشنا شدیم و بریم سراغ ادامه ماجرا...
فرض کن 3 تا دستگاه مثل لپتاپ، موبایل و تلوزیون دارم که همشون وصلن به مودم اینترنتم. وقتی تو شرکت مخابرات ثبت نام میکنم و اینترنت میخرم، اونها یک IP Public رو دراختیارم قرار میدن تا از طریقش بتونم وارد شبکه اینترنت بشم. تا اینجا من یک عدد IP Public دارم و 3 تا دستگاه داخل LAN خودم. مودم میاد IP Public رو از مخابرات تحویل میگیره و پیش خودش نگه میداره. از طرفی میاد به 3 تا دستگاهی که بهش وصلن، IP Private میده. حالا هر موقع، هر کدوم از دستگاهها بخوان به اینترنت متصل بشن و چیزی رو ارسال/دریافت کنن، مودم میاد IP خصوصی رو از دستگاه میگیره، موقتا بهش IP عمومی میده تا بره تو اینترنت و برگرده و در آخر دوباره IP عمومی رو ازش میگیره.
با این ترفند میشه یک IP Public رو در اختیار چندین دستگاه قرار بدیم که نخوایم هزینه کنیم و بریم برای هرکدوم یک Public IP تهیه کنیم.
NAT چیه؟
با تعاریف بالا یکم باهاش آشنا شدیم ولی بریم اصولی تر یادش بگیریم...
NAT مخفف Network Address Translationـه، یعنی ترجمه کردن آدرس شبکه. کارش اینه که آدرسهای Private داخل شبکه LAN رو به یه آدرس Public تبدیل کنه تا بتونن تو اینترنت دیده بشن.
چطوری کار میکنه؟ فرضا یه شبکه دارم با مشخصات زیر:
کامپیوتر اول: 192.168.1.10 (آدرس خصوصی)
کامپیوتر دوم: 192.168.1.20 (آدرس خصوصی)
مودم/روتر: 203.0.113.5 (آدرس عمومی که روی اینترنت دیده میشه)
سرور گوگل: 142.250.190.78 (آدرس عمومی)
مرحله 1: ایجاد درخواست از کامپیوتر اول
کامپیوتر اول میخواد صفحه گوگل رو باز کنه. یعنی یه درخواست TCP به سمت 142.250.190.78:443 (پورت HTTPS) میفرسته. این درخواست با مشخصات زیر ساخته میشه:
Source IP: 192.168.1.10 Source Port: 50000 (یه پورت موقتی که سیستم ساخته) Destination IP: 142.250.190.78 Destination Port: 443
مرحله 2: رسیدن بسته/درخواست به مودم
وقتی این بسته به مودم میرسه، مودم میگه صبر کن. آدرس 192.168.1.10 خصوصیه، روی اینترنت شناخته شده نیست. من باید NAT کنم. مودم میاد Source IP رو تغییر میده و آدرس Public خودش (203.0.113.5) رو جایگزین میکنه. ولی یه مشکل داریم! اگه کامپیوتر دوم هم همزمان درخواست بده، از کجا بفهمه کدوم جواب برای کیه؟
اینجاست که مودم از Port Address Translation (PAT) استفاده میکنه. یعنی پورت مبدا رو هم تغییر میده.
مثال بعد از تغییر:
Source IP: 203.0.113.5 Source Port: 40001 (مودم ساخته) Destination IP: 142.250.190.78 Destination Port: 443
مودم میاد تو جدول NAT خودش تمام این تغییرات رو ذخیره میکنه.
192.168.1.10:50000 <-> 203.0.113.5:40001
تو جدول NAT گفته شده که تو شبکه LAN یک درخواست ساخته شده از مبدا 192.168.1.10 روی پورت 50000. من همین درخواست رو به 203.0.113.5 روی پورت 40001 تغییر دادم. یعنی هرموقع سمت من، بسته ایی اومد که مقصدش 203.0.113.5:40001 بود باید به 192.168.1.10:50000 تحویلش بدم.
مرحله 3: رسیدن بسته به گوگل
بستهایی که ساختم میرسه به گوگل. گوگل بسته رو باز میکنه و محتوای زیر داخلش قرار داره:
درخواست از 203.0.113.5:40001 به 142.250.190.78:443
گوگل هیچ خبری از IP خصوصی (192.168.1.10) نداره. برای گوگل فقط Public IP وجود داره.
مرحله 4: پاسخ گوگل
گوگل جواب رو به همون آدرسی که درخواست رو فرستاده برمیگردونه.
Source IP: 142.250.190.78 Source Port: 443 Destination IP: 203.0.113.5 Destination Port: 40001
مرحله 5: رسیدن بسته به مودم
مودم جواب رو میگیره و یه نگاه به جدول NAT خودش میندازه.
203.0.113.5:40001 == 192.168.1.10:50000
میفهمه که بستهی دریافتی برای یک سیستم محلی با آدرس 192.168.1.10 هست که روی پورت 50000 منتظره که پاسخ دریافت بشه. پس میاد اطلاعات مقصد بسته رو به حالت زیر تغییر میده و ارسال میکنه برای کامپیوتر اول:
Source IP: 142.250.190.78 Source Port: 443 Destination IP: 192.168.1.10 Destination Port: 50000
درنتیجه، زمانی که Public IP و Private IP مطرح شد، استاندارد NAT هم بکار گرفته شد تا عمل ترجمه آدرس Private به Public رو انجام بده.
Network ID و Host ID چیه؟
تمام آدرس های IP از دو بخش Network ID و Host ID تشکیل شدن. Network ID نشون میده این دستگاه تو کدوم شبکست و Host ID نشون میده کدوم دستگاهِ داخلِ اون شبکست.
تلفن های اصفهان همیشه با 0313 شروع میشن. برای مثال شماره تلفن خونه من 0313456789 هست، شماره تلفن خونه دوستم 0313555555 هست. تو این شماره تلفن ها 0313 مثل همون Net ID تو IP هاست و مابقی شماره مربوط میشه به شماره اختصاصی من که تو مخابرات ثبت شده و مثل Host ID تو IP هاست.
پس تا زمانی که Net ID ها مثل هم باشه، ما داخل یک LAN قرار داریم.
به این آدرس دقت کن:
اصفهان. فلکه احمدآباد. خیابان احمدآباد. کوچه شهید محمودی. پلاک 8.
این آدرس رو میتونیم به 2 بخش تقسیم کنیم. بخش اول مشخص میکنه که من دارم به کدوم شبکه/محله اشاره میکنم. بخش اول میشه: اصفهان. فلکه احمدآباد. خیابان احمدآباد. کوچه شهید محمودی.
بخش اول مثل Network IDعه، یعنی مشخص میکنه دارم به کدوم شبکه اشاره میکنم (شناسه شبکه رو نشون میده)
بخش دوم مشخص میکنه تو اون شبکه که Network ID مشخص کرده، میخوام به کدوم دستگاهش اشاره کنم. بخش دوم میشه: پلاک 8.
به این IP دقت کن: 192.168.1.1
چطوری میشه تشخیص داد که چندتا Octet از این IP برای Net IDعه و چندتاش برای Host ID؟
تو پروتکل IP یه چیز دیگه داریم به اسم Subnet Mask که همیشه و همه جا همراه با IP وجود داره. یعنی امکان نداره جایی صحبت از IP بشه و Subnet Mask حضور نداشته باشه.
Subnet Mask مثل یک خط کش تعیین میکنه که تا کجای IP مال شبکست و از کجا به بعدش مال Host.
ساختار Subnet Mask دقیقا مثل IPعه. یعنی از 4 Octet تشکیل شده که هرکدوم میتونه مقداری بین 0 تا 255 داشته باشه. مثال: 255.255.255.0
255 یعنی این بخش ثابت و مربوط به شبکست.
0 یعنی این بخش متغیر و مربوط به میزبان هاست.
فرضا روی کامپیوتر من، IP و Subnet Mask زیر تنظیم شده:
192.168.1.10 255.255.255.0
هر Octet از IP با Octet مجاورش در Subnet Mask بررسی میشه. Octet اول Subnet Mask عدد 255 هست که یعنی Octet اول IP مربوط به Network ID میشه. از آیپی 192.168.1.10 بخش 192.168.1 مربوط به Network IDعه و مابقی آدرس، یعنی 10 اشاره میکنه به یک دستگاه داخل شبکه (Host ID).
اگه من قراره چندتا کامپیوتر رو بهم متصل کنم و یک LAN تشکیل بدم، باید Net ID همشون مثل هم باشه و اینکارو با کمک Subnet Mask انجام میدم. یه مثال دیگه، فرضا روی کامپیوترم IP و Subnet Mask زیر تنظیم شده:
IP: 10.0.5.25 Subnet Mask: 255.255.0.0
قسمت 10.0 مربوط میشه به Network ID و قسمت 5.25 مربوط میشه به Host ID. تو این حالت دستگاه های بیشتری رو میتونم داخل شبکم آدرس دهی کنم.
هرکلاس آیپی، Subnet Mask مختص به خودش رو داره:
Class A: 255.0.0.0 Class B: 255.255.0.0 Class C: 255.255.255.0
همچنین، گاهی به جای نوشتن کامل Subnet Mask، به شکل خلاصه میگن:
192.168.1.10/24
اون 24/ یعنی 24 بیت اول مال شبکست. هر 255 در Subnet Mask یعنی 8 بیت.
درنتیجه 24/ یعنی 24 بیت اول که میشه 255.255.255.0.
جمع بندی: IP ها به دو بخش Network ID و Host ID تقسیم میشن. Network ID تعیین میکنه که این IP متعلق به کدوم شبکست و Host ID تعیین میکنه که به کدوم دستگاه داخل شبکه ایی که مشخص شده اشاره میشه. حالا این تفکیک و تقسیم بندی IP توسط Subnet Mask انجام میشه که همیشه و همه جا همراه IP وجود داره.
مودم هایی که تو خونه استفاده میشه چون از کلاس C بصورت پیشفرض استفاده میکنه، Subnet Mask پیشفرضش هم 255.255.255.0 هست. یعنی میگه فقط آخرین octet برای میزبانهاست. پس توی خونه میتونی از IPهای زیر استفاده کنی:
192.168.1.1 192.168.1.2 192.168.1.3 ... 192.168.1.254
چرا نمیتونم از 192.168.1.0 و 192.168.1.255 استفاده کنم؟ تو هر شبکه دوتا آدرس هست که نمیشه به دستگاه ها اختصاص داد و اون دوتا آدرس رزرو شدن. اولین آدرس IP داخل یک شبکه اختصاص داده میشه به خود شبکه. یعنی اون آدرس فقط و فقط به کلیت شبکه اشاره میکنه و از اون آدرس به بعد، میشه دستگاه هارو آدرس دهی کرد. درنتیجه: 192.168.1.0 متعلق به خود شکبست.
درکنار اولین آدرس شبکه که رزرو شده، آخرین آدرس شبکه هم به همین شکله و نمیتونیم به دستگاهی اختصاصش بدیم. به آخرین آدرس شبکه که رزرو شده Broadcast Address گفته میشه. تو مثال بالا آیپی 192.168.1.255 آدرس Broadcast شبکست.
وقتی یه بسته میخواد تو شبکه جا به جا بشه، سیستم در ابتدا نگاه میکنه ببینه مقصدش تو همون Network ID هست یا نه. اگه Network ID یکی باشه یعنی مقصد تو همون شبکه محلیه، مستقیم میره براش. اگه Network ID فرق داشته باشه یعنی مقصد تو یه شبکه دیگست، باید بسته رو بده به روتر/مودم تا مسیرش رو پیدا کنه.
بحث Subnet Mask خیلی گسترده تر از این حرفاست و ادمین های شبکه برای اینکه بتونن مدیریت بهتری داشته باشن، Subnet Mask پیشفرض رو تغییر میدن تا بتونن شبکه هارو کوچیک تر یا بزرگ تر کنن. تا همین حد که الان درک کردید کافیه.
Default Gateway چیه؟
همینطور که بالاتر گفته شد، وقتی بسته ایی میخواد ارسال بشه، کامپیوتر مبدا به IP و Subnet Mask طرف گیرنده نگاه میکنه، میاد Net ID خودش و گیرنده رو مقایسه میکنه و اگه یکی بودن، یعنی با کامپیوتر هدف داخل یک LAN قرار دارن و خیلی راحت IP و MAC اون کامپیوتر رو تو اطلاعات گیرنده قرار میده و بسته رو میفرسته.
اگه Net ID ها متفاوت بود چه اتفاقی میوفته؟
تو تمام کامپیوترها و دستگاه ها میتونیم آدرس Default Gateway رو تنظیم کنیم. وقتی بسته ایی قرار باشه از LAN خارج بشه، اون بسته رو باید تحویل Default Gateway بدیم تا بیاد عمل مسیریابی بین شبکه های مختلف رو انجام بده و بسته رو به شبکه هدف برسونه. Default Gateway یه مفهومه و دستگاهی که تو نقش Default Gateway قرار میگیره Router هست. Router مثل هر دستگاه دیگه ایی وصل میشه مثلا به Switch و یک IP و MAC رو برای خودش داره. من میام IP روتر رو داخل تمام کامپیوترهای شبکم به عنوان Default Gateway تنظیم میکنم، حالا کامپیوترها وقتی بخوان بسته ایی به بیرون از LAN ارسال کنن، باید اون بسته رو تحویل Router بدن که نقش Default Gateway رو بازی میکنه. این کار چطوری انجام میشه؟
من میخوام به سایت گوگل وصل بشم و طبیعتا IP گوگل با IP من Net ID مشابهی نداره که در نتیجه کامپیوتر میفهمه باید این بسته به بیرون از LAN هدایت بشه. کامپیوتر من که نقش فرستنده رو داره میاد IP گوگل رو داخل اطلاعات گیرنده در بسته قرار میده، از طرفی برای آدرس مک گیرنده، میاد MAC Address روتر رو مینویسه.
وقتی بسته به سوئیچ میرسه، اون میاد بسته رو به واسطه MAC Address به روتر میرسونه و حالا روتر بسته رو باز میکنه، به IP مقصد نگاه میکنه و طبق قوانین و استاندارد های خودش بسته رو به روتر بعدی (که مثلا مخابرات باشه) و... ارسال میکنه تا برسه به سرور گوگل.
پروتکل ARP چیه؟
ARP مخفف Address Resolution Protocolعه به معنی پروتکل پیدا کردن آدرس.
وقتی دستگاهی IP یه دستگاه دیگه رو داره اما نمیدونه MAC اون دستگاه چیه، از ARP استفاده میکنه و با کمکش MAC دستگاه هدف رو پیدا میکنه. ARP چطوری کار میکنه؟
شبکه فرضی ما:
PC1: 192.168.1.10, MAC 00:11:22:33:44:55 PC2: 192.168.1.20, MAC 00:11:22:33:44:66 Gateway: 192.168.1.1, MAC AA:BB:CC:DD:EE:FF
PC1 میخواد به PC2 پینگ بزنه. PC1 یه نگاه به جدول ARP cashe خودش میندازه تا ببینه MAC Address مربوط به 192.168.1.20 رو داره یا نه. اگه MAC Address مقصد وجود داشت که بسته ارسال میشه. اگه وجود نداشت PC1 یه ARP Request رو بصورت Broadcast توی شبکه ارسال میکنه. ARP Request برای همه ارسال میشه و داخلش نوشته شده که ایا آیپی شما برابر با فلان هست یا نه؟! اگه برابر بود، MAC Address خودتون رو به کسی که این بسته رو فرستاده، ارسال کنید. یه سوال! ARP Request چطوری برای همه ارسال میشه؟
اگه توی بسته، مک آدرس گیرنده رو برابر کنیم با FF:FF:FF:FF:FF:FF سوئیچ میاد بسته رو برای تمام پورت هاش ارسال میکنه. ARP Request میرسه به PC2 و میبینه که بسته برای خودش ارسال شده (چون آیپی مقصد با آیپی خودش یکیه) تو قدم بعد میاد یک بستهی ARP Reply ایجاد میکنه و آدرس مک خودش رو داخلش قرار میده.
بستهی ARP Reply بصورت Unicast به PC1 فرستاده میشه و وقتی جواب رو دریافت کرد، ARP Cashe خودش رو آپدیت میکنه تا هربار نخواد این درخواست رو ارسال کنه. وقتی مقصد بیرون LAN باشه (مثلا گوگل)، PC1 همین کارو برای Default Gateway انجام میده تا مک آدرس Gateway رو بگیره و بسته رو بهش بده.
اگه ویندوز دارید توی cmd دستور arp -a رو وارد کنید تا جدول ARP رو ببینید.
بررسی بیشتر پروتکل UDP و TCP.
اون اوایل که داشتن روی ارتباطات کامپیوتری کار میکردن، پروتکل TCP رو ساختن تا یه روش مطمئن برای انتقال داده باشه. پروتکل TCP داده هارو به شکل درست و با دقت بالا به سمت مقصد ارسال میکرد و تضمین میده که تمام داده ها به درست ترین روش ممکن ارسال بشن. TCP به واسطه بررسی هایی که انجام میده حین انتقال داده، یکم سنگین و کند عمل میکنه و برای سرویس هایی مثل پخش زنده که سرعت خیلی مهه تر از دقته مناسب نبود. به همین دلیل پروتکل UDP معرفی شد که مثل TCP یه نوع از انتقال دادست اما تضمین کمتری میده، از طرفی سرعت بالاتری داره. درنتیجه UDP برای کارایی که سرعت مهم تر از دقت بود مثل پخش زنده یا بازی های آنلاین خیلی بهتره ولی اگه دقت برای ما ملاک باشه قطعا باید از TCP استفاده کنیم.
این دو پروتکل داخل لایه Transport قرار دارن.
TCP مخفف Transmission Control Protocolعه یعنی پروتکل کنترل انتقال. ویژگی هاش:
Reliability (قابل اعتماد بودن): هر segment شمارهگذاری میشه. گیرنده وقتی دریافت کرد، پیام تایید (ACK) میفرسته. اگه تایید نرسید، دوباره از سمت فرستننده ارسال میشه.
Error checking (کنترل خطا): اگه بسته خراب شد، TCP میفهمه و دوباره از فرستنده درخواست میکنه.
Flow Control (کنترل جریان): اگه گیرنده سرعت کمتری داشته باشه، TCP خودش سرعت رو تنظیم میکنه تا گیرنده هنگ نکنه.
پروتکل TCP قبل از اینکه بخواد داده هارو به سمت مقصد ارسال کنه، یک ارتباطی رو با مقصد برقرار میکنه و باهاش صحبت میکنه که بفهمه آماده دریافت داده هست یا نه. به این ویژگی پروتکل TCP میگن Connection Oriented و بریم بیشتر باهاش آشنا بشیم...
Connection-Oriented تو 3 مرحله انجام میشه. چرا سه مرحله؟
فرض کن میخوای به دوستت زنگ بزنی و باهاش حرف بزنی. قبل از اینکه شروع کنی، یه سری مقدمات لازمه!
گوشی رو برمیداری و شمارش رو میگیری (یعنی میگی من میخوام وصل بشم).
اون گوشی رو جواب میده و میگه: الو! صدات میاد، منم آمادهام. (یعنی هم جواب تو رو میده هم خودش اعلام میکنه آمادست).
تو میگی: صدای تو هم بهم رسید. حالا میتونیم حرف بزنیم. (یعنی تایید نهایی)
بعدش تازه مکالمه شروع میشه.
تصور کن این ارتباط سه مرحلهایی نبود. اگه فقط یه طرف میگفت آمادم (مثلا تو فقط بگی الو من هستم) ولی طرف مقابل هیچوقت جواب نده، عملا هیچ ارتباطی شکل نمیگیره. اگه دو مرحله ایی باشه (تو بگی الو، اون بگه منم هستم) ولی تو هیچوقت تایید نکنی، طرف مقابل مطمئن نیست که واقعا صدای اون بهت رسیده یا نه.
سه مرحله باعث میشه هر دو طرف 100٪ مطمئن بشن که:
طرف مقابل واقعا زنده و در دسترسه،
شماره ها و اطلاعات اولیه رد و بدل شده،
میشه شروع به فرستادن داده کرد.
اگه بخوام دقیق تر بگم، ارتباط 3 مرحله رو Three-Way Handshake مینامیم.
قبل از بررسی Three-Way Handshake لازمه با این اصطلاحات آشنا باشیم...
SYN: یعنی میخوام اتصال رو شروع کنم.
ACK: یعنی گرفتم و تایید میکنم.
ISN (Initial Sequence Number): شماره شروعی که هر طرف برای شمارش بایت ها انتخاب میکنه.
ISN در واقع یک عدد بزرگ و ظاهرا تصادفیه. ما مثال های ساده میزنیم تا فهمش آسون باشه، ولی در عمل، عددها بزرگ و تصادفین برای جلوگیری از تداخل با اتصال های قدیمی.
فرض کنیم:
کلاینت ISN عدد 1000 رو انتخاب کرده.
سرور ISN عدد 5000 رو انتخاب کرده.
قدم اول از Three-Way Handshake: کلاینت یک بسته SYN با Sequence Number عدد 1000 میفرسته. تو میگی میخوام وصل شم، شماره شروع من 1000عه. این بسته فقط پرچم SYN داره و Sequence = 1000.
قدم دوم: سرور یک بسته SYN+ACK با Sequence Number عدد 5000 و Ack عدد 1001 ارسال میکنه.
سرور میگه من دریافت کردم SYN تو رو، این شماره شروع منه (5000)، و من ACK میکنم (جواب میدم) SYN تو رو با مقدار 1001. چرا 1001 انتخاب کرد؟ سرور میگه من شماره 1000 رو دیدم و من یک واحد جلوتر رو باید تایید کنم. اینطوری ACK برابر میشه با مقدار عدد Sequence Number از سمت کلاینت + 1.
قدم سوم: کلایت بسته SYN+ACK رو دریافت و تایید میکنه.
کلاینت میگه: هی سرور، ISN تو رو دریافت کردم، الان ACK با عدد 5001 میزنم برات. بعد از ارسال این بسته به سمت سرور، هردو وارد یک حالت پایدار میشن و میتونن داده جا به جا کنن.

این بود از TCP و Three-Way Handshake که باعث میشه TCP یک پروتکل Connection Oriented باشه.
بریم با UDP بیشتر آشنا بشیم...
UDP مخفف User Datagram Protocol یعنی پروتکل دیتاگرام کاربره. UDP میگه من فقط بسته رو میفرستم، دیگه به من ربطی نداره رسید یا نه. ویژگی هاش:
Connectionless (بدون ارتباط): هیچ Handshake و مقدمه ایی در کار نیست. همون اول انتقال داده ها انجام میشه.
No reliability (غیر قابل اطمینان): نه شماره گذاری داره، نه ACK.
No ordering (بدون ترتیب): بستهها ممکنه به ترتیب اشتباه برسن. UDP اهمیتی نمیده.
خیلی سریع: چون به اندازه TCP چک و بررسی انجام نمیده.
هرکدوم کجا استفاده میشن؟
TCP:
وبگردی (HTTP/HTTPS): نمیخوای نصف صفحه بیاد.
ایمیل (SMTP, IMAP, POP3): باید کامل برسه.
انتقال فایل (FTP, SFTP): نباید فایل خراب بشه و دقیقا همون چیزی که روی سرور هست، روی کلاینت هم بیاد.
ریموت دسکتاپ (SSH, RDP): باید قابل اعتماد باشه.
UDP:
پخش آنلاین ویدیو/موزیک (Streaming): اگه یک فریم جا بیفته مهم نیست، مهم سرعته.
بازیهای آنلاین: نمیخوای حرکتت با تاخیر برسه، حتی اگه یک بسته گم بشه.
تماس صوتی و تصویری (VoIP): کیفیت زنده مهم تر از رسیدن 100% بسته هاست.
پورت (Port) چیه؟
یه شرکت وجود داره به اسم مثلا X و این شرکت یه شماره تماس هم داره. من با این شماره تماس میگیرم.
تماس رو یک سیستم خودکار پاسخ میده و شروع میکنه قسمت های مختلف شرکت رو معرفی میکنه. برای مثال میگه جهت ارتباط با واحد فروش عدد 1 رو وارد کنید، برای ارتباط با واحد فنی عدد 2 رو وارد کنید و...
هر قسمت از شرکت، به شکل خاصی مدیریت شده و برای یک هدف خاص فعالیت میکنه. اپراتوری که برای قسمت فروش در نظر گرفته شده، نمیتونه پاسخ دهنده سوالات فنی باشه چراکه اون اپراتور، فقط برای معرفی محصولات شرکت و فروش اونها مدیریت شده، اطلاعاتش تا حد محصولات شرکته. اگه درخواست فنی بهش بدم، پاسخ درستی دریافت نمیکنم.
در نتیجه شرکت ها میان قسمت یا سرویسهای مختلف رو ایجاد میکنن، تا هر قسمت، پاسخ گوی یک نیاز خاص از سمت مشتری ها (سرویس گیرندهها) باشه.
تو دنیای شبکه هم سمت کلاینت port هارو داریم و هم سمت سرور.
مدیران شبکه اومدن به هر سرویس یک شماره یا Port اختصاص دادن، به این صورت که من باید به سرور متصل بشم و همزمان با این اتصال بگم که از کدوم سرویس روی سرور میخوام استفاده کنم. اینکارو با شماره port تعیین میکنم.
همینطور که میدونید، شبکه و اینترنت تشکیل شده از یک عالمه قانون، پروتکل و استاندارد. این قوانین و پروتکلها، تو تک تک دستگاه ها وجود دارن.
اگه یه نفر بخواد روی سرور، وبسایت بالا بیاره، باید یه Web Server نصب کنه، کدهای مربوط به سایت رو داخلش قرار بده تا هرکس که بهش درخواست زد، اون کد هارو براش بفرسته و مرورگر کاربر هم کد هارو بهش نمایش بده.
حالا کسایی که قوانین اینترنت و شبکه هارو ساختن، گفتن که وب سرورها باید روی پورت 80 کار کنن. یعنی شمایی که میخوای روی سرورت سایت بالا بیاری، باید این سایت روی پورت 80 سرورت فعال باشه. یعنی سرور همیشه باید درحال گوش دادن باشه که اگه، یه نفر بهش درخواست زد و توی درخواستش گفته بود که میخوام به پورت 80 وصل بشم، بیاد وصلش کنه به Web Server و مابقی کارهارو انجام بده. حالا همین قانون تو سمت Client هم وجود داره، یعنی برای مرورگر من تعیین شده که اگه بخواد وصل بشه به یک سایت، باید درخواستش رو به پورت 80 اون سرور ارسال کنه. درنتیجه این قوانین به هر دو طرف ارتباط کمک میکنن تا بتونن درخواست هارو به سرویس های درست ارسال/دریافت کنن.
شماره پورت ها از 0 شروع میشه تا 65535.
صد در صد مثل هرچیز دیگه داخل شبکه، برای Port ها هم قانون وجود داره.
پورت شماره 0 تا 1023 به عنوان پورت های معروف و رزرو شده شناخته میشن. اکثر سرویس های معروف روی یکی از این پورتها وجود دارن. برای مثال پروتکل HTTP با پورت 80 کار میکنه. یا پروتکل HTTPS با پورت 443.
پورت شماره 1024 تا 49151 به عنوان پورت های ثبت شده شناخته میشه. فرضا یه شرکت میاد نرم افزاری رو ایجاد میکنه و میره به شرکت IANA میگه من میخوام نرم افزارم روی پورت 3306 شناخته بشه. وقتی یه شرکت میاد پورتش رو ثبت میکنه، به این معنیه که من روی سرورم، با این پورت فلان سرویس رو ارائه میدم! حالا این ثبت کردنه به این معنی نیست که اون پورت کلا مسدود میشه و کس دیگه ایی نتونه استفادش کنه.
پورت شماره 49152 تا 65535 به عنوان پورت های موقتی کلاینت شناخته میشن. بزار بیشتر توضیح بدم...
کالینت وقتی میخواد به یه کامپیوتری متصل بشه، میاد یک Port تصادفی ایجاد میکنه و ارتباطش رو به این پورت گره میزنه. چرا اینکارو میکنه؟
شما در آن واحد با چندین سرور و کامپیوتر دیگه ارتباط دارید. برای مثال داخل مرورگر کروم تب های مختلفی بازه که هرکدوم سایت خاصی رو بالا اوردن، از طرفی ممکنه نرم افزارهایی مثل تلگرام هم روی سیستمتون باز باشه که اون هم اتصالات خاص خودشو داره. کامپیوترها این Port های تصادفی رو ایجاد میکنن که وقتی بسته ایی رو ارسال میکنن به مقصد و جوابش برمیگرده، بدونن این جوابی که اومده مربوط به کدوم سرویس یا نرم افزار میشه.
سیستم عامل از رنج شماره 49151 تا 65553 یک عددی رو انتخاب میکنه و اختصاص میده به یک سرویس موقت.
توی cmd با دستور netstat -n میتونید درخواست هایی که ارسال و دریافت شدن رو به همراه پورت هاشون ببینید.
یکم بالاتر گفتم پورت های 0 تا 1023 برای سرویس های معروف درنظر گرفته شده. چندتا از این پورتها و سرویس ها رو معرفی کنم...

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