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

پورت تو شبکههای کامپیوتری مثل یه دروازه ست که دادهها ازش عبور میکنن تا به جای درست برسن. هر پورت یه عدد مخصوص داره که بهش "شماره پورت" میگن. این شماره پورت کمک میکنه که سیستم بفهمه داده هایی که داره میرسه یا باید فرستاده بشه، مربوط به کدوم برنامه یا سرویسه.
فرض کن کامپیوترت مثل یه هتل بزرگه و پورتها مثل شماره اتاقهای این هتل هستن. هر وقت یه بسته داده میرسه، این شماره پورت کمک میکنه که بفهمیم این بسته باید به کدوم اتاق (یا همون برنامه) بره. مثلا وقتی داری یه صفحه وب رو باز میکنی، داده هایی که مربوط به اون صفحه هستن از پورت ۸۰ عبور میکنن، چون این پورت مخصوص وب گردی (HTTP) هست.
پورتها با آدرس شبکه (مثل IP) و نوع پروتکل (مثل TCP یا UDP) ترکیب میشن تا سیستم بتونه دادهها رو به درستی هدایت کنه. TCP و UDP دو تا از مهمترین پروتکلها هستن که از این پورتها استفاده میکنن. پروتکلها قوانین و روش هایی هستن که کمک میکنن دادهها به درستی از یه نقطه به نقطه دیگه منتقل بشن.
بنابراین، پورتها نقش خیلی مهمی تو جهت دهی دادهها تو شبکه دارن و کمک میکنن که هر بسته داده دقیقا به همون جایی برسه که باید برسه، نه جای دیگه.
حالا بیا یه لحظه تصور کنیم که پورتها اصلاً وجود نداشتن. چه اتفاقی میافتاد؟ راستش بدون پورت ها، اوضاع خیلی قاطی پاتی میشد! فکر کن هر وقت یه پیامی میخوای بفرستی یا از اینترنت چیزی دریافت کنی، کامپیوتر نتونه بفهمه این پیام یا داده باید به کدوم برنامه بره یا از کدوم برنامه بیاد.
مثلاً، فرض کن داری تو کامپیوترت همزمان هم یه ویدیو از یوتیوب میبینی، هم ایمیلت رو چک میکنی، هم با دوستات چت میکنی. اگه پورتها نبودن، کامپیوترت نمیتونست تشخیص بده که دادههای مربوط به ویدیو باید به پخش کننده ویدیو برن، ایمیلها به برنامه ایمیل، و پیامهای چت به برنامه چت. همه چی قاطی میشد و ممکن بود پیامهای چت برن تو پخش کننده ویدیو، ویدیوها تو برنامه ایمیل باز بشن، یا ایمیل هات اصلاً به دستت نرسن!
یه مثال دیگه هم بزنم: تصور کن پستچی میاد و همه نامهها و بستهها رو بدون اینکه آدرس روی پاکتها رو نگاه کنه، همینطوری به هر خونه ای که رسید تحویل میده. خب معلومه که یه عالمه از اون بستهها و نامهها اصلاً به مقصد درست نمیرسن. حتی ممکنه اصلاً پیدا نشه که مال کی بودن. تو دنیای کامپیوتر هم اگه پورتها نباشن، دادهها همینجوری گم و گور میشن یا اشتباهی به یه برنامه دیگه میرن.
در واقع پورتها همون آدرس دقیق هر برنامه یا سرویس تو کامپیوتر هستن. اگه نبودن، کامپیوتر مثل یه شهر شلوغ و بی نظم میشد که هرکی هرجایی بخواد میره، بدون اینکه کسی بفهمه چی باید کجا بره. پس، پورتها کمک میکنن که همه چی درست و مرتب به دست اون برنامه یا سرویسی برسه که منتظرشه.
ماجرای شماره پورتها برمی گرده به دورانی که ARPANET تازه داشت پا میگرفت. اون موقع هنوز چیزی به اسم "شماره پورت" به وجود نیومده بود و به جاش از "شماره سوکت" استفاده میکردن. شماره سوکت یه عدد ۴۰ بیتی بود که بخش اولش خیلی شبیه به آدرسهای IP امروزی بود. ولی اون زمان، ۸ بیت اول برای شناسایی میزبان به کار میرفت و بخش آخرش، که فقط ۸ بیت بود، به اسم "Another Eightbit Number" یا همون AEN شناخته میشد.
با رشد ARPANET، نیاز به سازماندهی این شمارهها بیشتر حس شد. در ۲۶ مارس ۱۹۷۲، وینت سرف و جان پوستل تصمیم گرفتن که یک کاتالوگ برای این شمارهها ایجاد کنن. از مدیران شبکه خواسته شد تا اطلاعات برنامههای شبکه شون رو به همراه شماره سوکت هاشون بفرستن. نتیجه این شد که اولین لیست شماره پورتها و وظایفشون در دسامبر همون سال منتشر شد. اما خیلی زود مشخص شد که بعضی از میزبانها از همون شمارهها برای سرویسهای عمومی استفاده میکنن و این باعث تداخل میشه.
برای حل این مشکل، پوستل پیشنهاد کرد که شماره پورتها به صورت رسمی به خدمات شبکه اختصاص داده بشن و یک نفر مسئولیت مدیریت این شمارهها رو به عهده بگیره. در نهایت، AENها به ۴ دسته تقسیم شدن:
نکته جالب اینه که اولین شماره پورت رسمی، شماره ۱ بود که به سرویس Telnet اختصاص داده شد. این تخصیصها اولین بار در RFC 349 ثبت شدن. اون زمان، AEN رو به عنوان "نام سوکت" هم میشناختن و با پروتکل اتصال اولیه (ICP) که بخشی از پروتکل کنترل شبکه (NCP) بود، استفاده میکردن. این پروتکلها در واقع پایه و اساس پروتکلهای اینترنت امروزی بودن.
حتی امروز هم، شماره پورتها با "نام سرویس" که رشتههای متنی هستن، ارتباط نزدیکی دارن و از اونها برای نمایش شمارههای پورت در بعضی از عملکردهای شبکه استفاده میشه.
شماره پورت تو شبکههای کامپیوتری مثل یه شناسه منحصر به فرد برای هر برنامه یا سرویس عمل میکنه که کمک میکنه دادهها به مقصد درستشون برسن. حالا، این شناسه چطور کار میکنه؟ خب، وقتی یه دستگاه، مثل کامپیوتر یا گوشی، میخواد با یه دستگاه دیگه تو شبکه ارتباط برقرار کنه، این ارتباط نیاز داره تا مشخص بشه کدوم برنامه یا سرویس قراره دادهها رو بفرسته یا دریافت کنه. اینجاست که شماره پورت به کار میاد. شماره پورت همیشه همراه با یه آدرس شبکه مثل IP و نوع پروتکل ارتباطی که برای ارسال دادهها استفاده میشه، ترکیب میشه تا پیامها دقیقاً به همون جایی برسن که باید.
مجدد مثال نامه رو بزنیم، فرض کن یه نامه داری که باید به یه آدرس خاص بفرستی. آدرس روی نامه نشون میده که نامه به کدوم خونه باید بره، اما اگه توی اون خونه چند نفر باشن، باید بدونی نامه رو به دست کی برسونی. شماره پورت هم همون نقشه راه برای بستههای داده ست که نشون میده باید به دست کدوم برنامه یا سرویس برسن.
بعضی از این پورتها برای سرویسهای خاص رزرو شدن. یعنی وقتی داده ای از این پورتها عبور میکنه، سیستم میدونه باید اون دادهها رو به کدوم برنامه یا سرویس بده. مثلاً پورت هایی که شماره شون کمتر از ۱۰۲۴ هست، معمولاً برای سرویسهای معروف و پرکاربرد مثل وب گردی، ایمیل و انتقال فایل استفاده میشن. این پورتها به طور پیش فرض برای این سرویسها تنظیم شدن تا هر وقت نیاز باشه، دادهها بدون هیچ مشکلی به سرویس مربوطه برسن. پورتهای بالاتر هم برای استفاده عمومی توسط برنامهها در دسترس هستن و هر برنامه ای میتونه از این پورتها استفاده کنه، به شرطی که با سرویس دیگه ای تداخل نداشته باشه.
حالا که فهمیدیم شماره پورت چطور کار میکنه، بیایم یه نگاهی به دسته بندی این پورتها بندازیم. شماره پورتها توی پروتکلهای TCP و UDP به شکل یه عدد ۱۶ بیتی هستن. یعنی این عدد میتونه از ۰ تا ۶۵۵۳۵ تغییر کنه. اما همه این پورتها به یه شکل استفاده نمیشن. مثلاً تو پروتکل TCP، شماره پورت ۰ رزرو شده و نمیتونیم ازش استفاده کنیم. این یعنی هیچ برنامه ای حق نداره از این پورت استفاده کنه. دلیلش هم اینه که این پورت برای اهداف خاصی تو سیستمها کنار گذاشته شده که نباید دستکاری بشه.
برنامهها از چیزی به نام سوکت برای ارسال و دریافت دادهها از طریق شبکه استفاده میکنن. سوکت یه رابط یا دروازه هست که به برنامهها اجازه میده با شبکه در ارتباط باشن. تو سیستم عامل، وظیفه شبکه اینه که دادههای خروجی رو از همه پورتهای برنامهها بگیره و به شبکه بفرسته، و همین طور بستههای ورودی رو از شبکه بگیره و به برنامههای درست برسونه. حالا تصور کن چند برنامه بخوان از یه شماره پورت تو یه IP خاص استفاده کنن. اینجا ممکنه تداخل پیش بیاد. یعنی سیستم نمیدونه دادهها رو باید به کدوم برنامه بفرسته، چون همه دارن از یه شماره پورت استفاده میکنن. این مشکل به نام "تداخل پورت" شناخته میشه و باید ازش جلوگیری کرد تا ارتباطات درست و بدون اشکال برقرار بشه.
پورتها به طور کلی به سه دسته تقسیم میشن: پورتهای معروف (Well-Known Ports)، پورتهای ثبت شده (Registered Ports)، و پورتهای پویا یا خصوصی (Dynamic/Private Ports). هر کدوم از این دستهها کاربرد خاص خودشون رو دارن و برای اهداف متفاوتی طراحی شدن. در ادامه این سه دسته رو توضیح میدم.
پورتهای معروف همونایی هستن که بیشتر از همه استفاده میشن و معمولاً سرویسهای معروف و رایج مثل HTTP، FTP، و SMTP از این پورتها استفاده میکنن. این پورتها شماره هایی بین 0 تا 1023 دارن و توسط IANA (Internet Assigned Numbers Authority) مدیریت میشن. این سازمان مسئول اختصاص دادن این پورتها به سرویسهای مختلفه تا مطمئن بشه که هیچ تداخلی بین سرویسها پیش نمیاد. برای مثال، پورت 80 برای HTTP (وب گردی) استفاده میشه و پورت 443 برای HTTPS (وب گردی امن). این پورتها به طور پیش فرض برای سرویسهای خاصی رزرو شدن تا ارتباطات شبکه ای استاندارد و بدون مشکل برقرار بشن. برای اینکه بهتر متوجه بشی، بیا چندتا از این پورتهای معروف رو با هم بررسی کنیم:
شماره پورت | اختصاص |
|---|---|
20 | انتقال داده در پروتکل FTP |
21 | کنترل دستورات در پروتکل FTP |
22 | ورود امن از طریق SSH |
23 | سرویس تلنت برای ورود از راه دور |
25 | ارسال ایمیل با SMTP |
53 | سرویس DNS |
67, 68 | پروتکل DHCP برای اختصاص آدرس IP به دستگاه ها |
80 | پروتکل HTTP برای وب گردی |
110 | پروتکل POP3 برای دریافت ایمیل |
443 | پروتکل HTTPS برای ارتباطات امن وب |
پورت 80 شاید یکی از معروفترین پورتهای شبکه باشه و نقش خیلی مهمی تو ارتباطات وب داره. وقتی با مرورگر وبت به یه سایت سر میزنی، مرورگر از پورت 80 برای ارسال درخواستها به وب سایت و دریافت صفحات استفاده میکنه. پورت 80 مثل یه دروازه عمل میکنه که به مرورگر اجازه میده به سرور وب وصل بشه و اطلاعات و صفحات وب رو دریافت کنه. اگه این پورت وجود نداشت، وب گردی به شکلی که امروز میشناسیم امکان پذیر نبود و ارتباطات اینترنتی خیلی پیچیدهتر میشد.
حالا فرض کن داری برنامه نویسی وب (بک اند) رو یاد میگیری و برای تست و اجرای کدهات از برنامه هایی مثل XAMPP یا WAMP استفاده میکنی. این برنامهها بهت کمک میکنن که یه وب سرور محلی روی کامپیوترت راه بندازی و کدهات رو توی مرورگر تست کنی. یکی از اجزای اصلی این برنامه ها، وب سرور آپاچی هست که به طور پیش فرض روی پورت 80 کار میکنه. این یعنی هر وقت کدهات رو تو مرورگر باز میکنی، آپاچی درخواستها رو از طریق پورت 80 میگیره و صفحه وب رو بهت نشون میده.
اما گاهی ممکنه با یه مشکل روبرو بشی: مثلاً وقتی میخوای وب سرور رو اجرا کنی، پیغام خطایی میبینی که میگه پورت 80 مشغوله یا اشغال شده. این خطا به این معنیه که یه برنامه دیگه روی کامپیوترت داره از پورت 80 استفاده میکنه و اجازه نمیده آپاچی از این پورت استفاده کنه. ممکنه این برنامه یه نرم افزار دیگه باشه که به اینترنت متصله یا حتی یه سرور دیگه.
برای حل این مشکل، دو تا راه حل ساده وجود داره: اول، میتونی اون برنامه ای که پورت 80 رو اشغال کرده ببندی تا آپاچی بتونه از این پورت استفاده کنه. یا اینکه، پورت پیش فرض آپاچی رو تغییر بدی. مثلاً میتونی به جای پورت 80، از پورت 8080 استفاده کنی. اینجوری دیگه تداخلی پیش نمیاد و میتونی به راحتی وب سرورت رو راه بندازی و کدهات رو تست کنی.
این موضوع برای کسی که تازه برنامه نویسی وب رو شروع کرده، ممکنه گیج کننده باشه، اما با کمی تمرین و آشنایی بیشتر با مفهوم پورت ها، میتونی این مشکلات رو به راحتی حل کنی و روی پروژه هات تمرکز کنی. درک چگونگی کارکرد پورت 80 و اهمیتش توی دنیای وب، بهت کمک میکنه که بهتر بتونی وب سایتها و برنامههای تحت وب رو مدیریت و تست کنی.
پورت 443 یه نقش خیلی مهم تو امنیت اینترنت بازی میکنه. وقتی تو از سایتهای امن مثل بانکها یا فروشگاههای آنلاین استفاده میکنی، این پورت به کار میاد. این پورت مخصوص ارتباطات امن و رمزگذاری شده ست. یعنی وقتی تو اطلاعات حساسی مثل شماره کارت بانکی یا رمز عبورت رو وارد میکنی، این اطلاعات از طریق پورت 443 به سرور منتقل میشن و تو این مسیر رمزگذاری میشن تا کسی نتونه به راحتی بهشون دسترسی پیدا کنه. اگه این پورت نبود، امنیت ارتباطات اینترنتی به خطر میافتاد و اطلاعات حساسی که رد و بدل میکردیم، ممکن بود به دست افراد نادرست بیفته.

پورت 21 مخصوص پروتکل FTP (File Transfer Protocol) است. این پروتکل برای انتقال فایلها بین سرورها و کامپیوترها طراحی شده. وقتی میخوای فایلی رو از یه سرور دانلود کنی یا یه فایل رو آپلود کنی، از این پورت استفاده میکنی. این پورت به ما این امکان رو میده که به راحتی فایلها رو جابجا کنیم. بدون این پورت، انتقال فایلها به سرورها یا دریافت اونها از سرورها خیلی پیچیده و زمان بر میشد. مثلاً اگه بخوای یه فایل بزرگ رو روی یه وب سایت آپلود کنی، پروتکل FTP با کمک پورت 21 این کار رو به راحتی انجام میده.
پورت 25 یکی از قدیمیترین و مهمترین پورتها تو شبکههای کامپیوتره. این پورت مخصوص پروتکل SMTP (Simple Mail Transfer Protocol) هست که برای ارسال ایمیلها به کار میره. وقتی یه ایمیل رو ارسال میکنی، این ایمیل از طریق پورت 25 به سرور ایمیل منتقل میشه و از اونجا به مقصد نهایی خودش میرسه. پروتکل SMTP و پورت 25 با هم کار میکنن تا ایمیلهای ما به درستی به دست گیرنده برسن. اگه این پورت وجود نداشت، ارسال ایمیل به این سادگی نبود و ممکن بود که ایمیلها به درستی ارسال نشن یا اصلاً به مقصد نرسن.
پورتهای ثبت شده یه دسته خاص از پورتها هستن که شماره هایی بین 1024 تا 49151 رو پوشش میدن. این پورتها به برنامهها و سرویس هایی اختصاص داده میشن که به طور خاص نیاز دارن یه پورت مشخص و ثابت داشته باشن، ولی مثل پورتهای معروف خیلی عمومی و رایج نیستن. این پورتها توسط سازمانی به نام IANA (Internet Assigned Numbers Authority) ثبت و مدیریت میشن. IANA مسئول اینه که مطمئن بشه هر پورت برای یه سرویس خاص استفاده میشه تا تداخلی پیش نیاد.
به عنوان مثال، فرض کن یه برنامه خاص برای کنترل یه دستگاه هوشمند خونگی داری. این برنامه به یه پورت نیاز داره که همیشه براش در دسترس باشه، ولی این پورت لزوماً به اندازه پورت 80 (که برای وب گردی استفاده میشه) عمومی نیست. در اینجا، پورتهای ثبت شده وارد عمل میشن. برنامه نویسهای این برنامه میتونن از یکی از این پورتهای ثبت شده استفاده کنن تا مطمئن بشن که برنامه همیشه میتونه با دستگاه ارتباط برقرار کنه، بدون اینکه تداخلی با سرویسهای دیگه داشته باشه.
این پورتها باعث میشن که برنامه هایی که به طور گسترده استفاده نمیشن، ولی همچنان به یه پورت ثابت و مشخص نیاز دارن، بتونن به راحتی با شبکه ارتباط برقرار کنن. این دسته از پورتها انعطاف پذیری بیشتری دارن و برای برنامه هایی که نیاز به یه پورت اختصاصی دارن، ایده آلن.
پورتهای پویا یا خصوصی یه دسته دیگه از پورتها هستن که شماره هایی بین 49152 تا 65535 دارن. این پورتها برای ارتباطات موقت و کوتاه مدت طراحی شدن و به صورت داینامیک به برنامهها اختصاص داده میشن. یعنی هر وقت یه برنامه به یه پورت نیاز داشته باشه، سیستم به طور خودکار یکی از این پورتها رو بهش اختصاص میده. بعد از اینکه کار برنامه با پورت تموم شد، این پورت دوباره آزاد میشه و میتونه برای برنامههای دیگه استفاده بشه.
مثلاً فرض کن داری یه برنامه چت یا پیام رسان آنلاین رو اجرا میکنی. وقتی میخوای به سرور پیام رسان متصل بشی، این برنامه به یه پورت نیاز داره تا دادهها رو رد و بدل کنه. چون این ارتباط ممکنه خیلی کوتاه مدت باشه، سیستم از یکی از پورتهای پویا استفاده میکنه و بعد از اتمام ارتباط، اون پورت رو دوباره آزاد میکنه. این کار باعث میشه که منابع شبکه بهینهتر استفاده بشن و هیچ پورتی بی جهت مشغول نباشه.
این پورتها برای برنامهها و سرویس هایی که نیاز به ارتباطات موقتی دارن، مثل برنامههای پیام رسان، بازیهای آنلاین، یا حتی مرورگرهای وب وقتی دارن از چندین تب به طور همزمان استفاده میکنن، فوق العاده کاربردی هستن. انعطاف پذیری این پورتها به سیستم اجازه میده که به طور خودکار و هوشمندانه از منابع شبکه استفاده کنه، بدون اینکه کاربر یا برنامه نویس نیاز به مدیریت دستی اونها داشته باشه. این پورتها باعث میشن که سیستم بتونه ارتباطات پیچیده و چندگانه رو به صورت همزمان و بدون مشکل مدیریت کنه.
پورتها تو شبکههای کامپیوتری یه نقش خیلی مهم و اساسی دارن. پروتکلهای شبکه مثل TCP و UDP، که برای ارسال دادهها تو شبکه استفاده میشن، دادهها رو به شکل بستههای اطلاعاتی (پکت) ارسال میکنن. حالا هر کدوم از این بستههای اطلاعاتی شامل یه سری اطلاعات هستن که توی هدر بسته قرار میگیرن. شماره پورت یکی از این اطلاعاته که توی هدر بستهها نوشته میشه. این شماره پورت کمک میکنه که بستههای اطلاعاتی به درستی به مقصد برسن و توسط برنامه یا سرویس درست پردازش بشن.
تصور کن شماره پورت مثل یه آدرس دقیق تو یه مجتمع مسکونی بزرگه. وقتی یه نامه یا بسته به این مجتمع میرسه، باید دقیقاً به واحدی بره که مشخص شده. تو شبکه هم وقتی یه بسته اطلاعاتی میرسه، این شماره پورت کمک میکنه که بسته به برنامه یا سرویس درست برسه. اگه این شماره درست نباشه یا به اشتباه تنظیم شده باشه، بسته ممکنه به مقصد نرسه یا توسط برنامه دیگه ای دریافت بشه که نمیتونه با اون دادهها کاری بکنه.
یکی دیگه از کاربردهای مهم شماره پورت، تو فایروال هاست. فایروال ها دستگاه هایی هستن که وظیفه شون محافظت از شبکه و کنترل ترافیک ورودی و خروجی شبکه هست. فایروالها میتونن بستهها رو بر اساس شماره پورتها فیلتر کنن. مثلاً میتونن تنظیم بشن که فقط بسته هایی که از پورت ۸۰ میان، اجازه ورود به شبکه رو داشته باشن. اینجوری میتونن از ورود ترافیکهای غیرمجاز یا خطرناک جلوگیری کنن و امنیت شبکه رو تضمین کنن.
به طور خلاصه، پورتها نقش حیاتی ای تو مدیریت و کنترل ترافیک شبکه دارن و بدون اونا، ارتباطات شبکه ای به درستی کار نمیکرد.
پویش پورت یکی از تکنیک هاییه که تو دنیای شبکه خیلی بهش توجه میشه، هم از طرف هکرها و هم از طرف مدیران شبکه. وقتی میگیم "پویش پورت"، منظورمون اینه که یه نفر یا یه برنامه سعی میکنه به یه سری پورتهای مختلف توی یه سیستم متصل بشه تا ببینه کدوم پورتها بازن و کدوم بسته. این کار شبیه به این میمونه که کسی بره در خونههای مختلف یه محله رو بزنه تا ببینه کدوم خونه درش بازه و میتونه وارد بشه.
حالا چرا این کار انجام میشه؟ از یه طرف، هکرها از این تکنیک استفاده میکنن تا نقاط ضعف یه سیستم رو پیدا کنن. اگه یه پورت باز باشه و ازش به درستی محافظت نشده باشه، هکرها میتونن از اون به عنوان یه راه ورود به سیستم استفاده کنن. از طرف دیگه، مدیران شبکه هم از پویش پورت استفاده میکنن تا بررسی کنن که کدوم پورتها بازن و آیا این پورتها به درستی تنظیم شدن یا نه. اینجوری میتونن قبل از اینکه هکرها به سیستم دسترسی پیدا کنن، مشکلات رو شناسایی و برطرف کنن.
این تلاشها معمولاً توسط سیستمها ثبت میشن. یعنی هر وقت کسی سعی کنه به یه پورت متصل بشه، سیستم یه گزارش از این تلاشها ثبت میکنه. این گزارشها میتونن کمک کنن تا اگه یه نفر با نیت بد سعی کرد به سیستم دسترسی پیدا کنه، مدیران شبکه سریعاً متوجه بشن و اقدامات لازم رو انجام بدن.
فرض کن یه سرور ایمیل داری. این سرور مسئول ارسال و دریافت ایمیلهای توئه. اما برای اینکه این کار به درستی انجام بشه، این سرور به دو سرویس نیاز داره: یکی برای ارسال ایمیل به سرورهای دیگه، و یکی برای دریافت ایمیلها توسط کاربرها. اینجاست که دو پروتکل معروف به نامهای SMTP و POP3 وارد عمل میشن.
تو بخش قبلی اشاره شد که SMTP برای ارسال ایمیلها استفاده میشه و از پورت ۲۵ TCP بهره میبره. هر وقت یه ایمیل مینویسی و دکمه ارسال رو میزنی، ایمیلت از طریق این پورت به سرور ارسال میشه و از اونجا به مقصد نهایی خودش میرسه. بدون این پورت، ایمیلها نمیتونستن به درستی ارسال بشن و ممکن بود که به مقصد نرسن.
از طرف دیگه، پروتکل POP3 (Post Office Protocol 3) برای دریافت ایمیلها توسط کاربرها به کار میره و روی پورت ۱۱۰ TCP کار میکنه. وقتی میخوای ایمیلهای جدیدت رو دریافت کنی، برنامه ایمیل از این پورت استفاده میکنه تا به سرور متصل بشه و ایمیلها رو بگیره. اینجوری مطمئن میشی که هیچ ایمیلی رو از دست نمیدی.
این پورتها کمک میکنن تا مشخص بشه هر سرویس داره چه کاری انجام میده و دادهها دقیقاً به همون جایی برسن که باید. اگه هر دوی این سرویسها روی یه پورت بودن، سیستم نمیتونست تشخیص بده که کدوم دادهها مربوط به ارسال ایمیل و کدوم مربوط به دریافت ایمیله.

حالا که با پورتها آشنا شدی، بذار ببینیم چطور میتونی ازشون تو برنامه نویسی استفاده کنی. وقتی داری یه برنامه شبکه ای مینویسی، یکی از مهمترین چیزهایی که باید در نظر بگیری، اینه که برنامت چطور با سرویسهای دیگه یا برنامههای دیگه ارتباط برقرار میکنه. اینجا دقیقاً جاییه که پورتها وارد عمل میشن.
فرض کن داری یه برنامه چت مینویسی. برای اینکه این برنامه بتونه پیامها رو به سرور بفرسته و از سرور پیامهای جدید رو دریافت کنه، باید از پورتهای شبکه استفاده کنه. مثلاً میتونی از یه پورت پویا برای ارسال پیامها استفاده کنی و یه پورت دیگه برای دریافت پیام ها. این پورتها به برنامت اجازه میدن که با سرور در ارتباط باشه و پیامها رو به درستی ارسال و دریافت کنه.
پورتها تو برنامه نویسی به عنوان بخشی از پروتکلهای شبکه ای برای ارتباطات بین برنامهها و سرویسها استفاده میشن و اگه درست ازشون استفاده کنی، میتونی برنامههای قوی و کارآمدی بنویسی که بدون مشکل با بقیه قسمتهای شبکه ارتباط برقرار میکنن.
برای اینکه بهتر متوجه بشی چطور میتونی از پورتها استفاده کنی، یه مثال ساده تو زبان Python برات میزنم که نشون میده چطور میشه یه سرور ساده ساخت که از پورت مشخصی استفاده کنه. اینجا یه کد رو داریم که یه سرور ساده با استفاده از پورت 12345 راه اندازی میکنه و به درخواستهای دریافتی پاسخ میده و دادهها رو به کلاینت برمی گردونه.
import socket
# تعریف آدرس IP و پورت
HOST = 'localhost'
PORT = 12345
# ایجاد سوکت
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen()
print(f'Server listening on {HOST}:{PORT}')
conn, addr = s.accept()
with conn:
print(f'Connected by {addr}')
while True:
data = conn.recv(1024)
if not data:
break
conn.sendall(data)خب حالا بیایم این کد رو با جزئیات بررسی کنیم. اول از همه، ما یه سوکت ساختیم که نقش یه دروازه رو داره. این سوکت به سرورمون اجازه میده که دادهها رو از طریق شبکه دریافت و ارسال کنه. سوکت از ترکیب آدرس IP و شماره پورت استفاده میکنه. اینجا، آدرس IP رو "localhost" یا همون کامپیوتر خودمون تعریف کردیم و شماره پورت رو 12345 گذاشتیم.
وقتی سرور راه اندازی میشه، شروع به گوش دادن میکنه، یعنی منتظر میمونه تا کلاینتی بیاد و بهش وصل بشه. وقتی یه کلاینت به سرور وصل میشه، سرور ارتباط رو قبول میکنه و یه پیام تو کنسول چاپ میکنه که میگه کلاینت از کدوم آدرس وصل شده. بعد از اون، سرور هر داده ای که از کلاینت دریافت کنه رو به همون کلاینت برمی گردونه، درست مثل یه گفتگوی ساده.
حالا اگه با JavaScript کار میکنی، میتونی یه سرور وب ساده با استفاده از پورتها بسازی. اینجا یه مثال برات آوردم که نشون میده چطور میتونی از پورتها برای ایجاد یه سرور وب استفاده کنی:
const http = require('http');
const PORT = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World\n');
});
server.listen(PORT, () => {
console.log(`Server running at http://localhost:${PORT}/`);
});تو این مثال، ما یه سرور وب ساده رو با استفاده از ماژول http توی Node.js ساختیم. این سرور روی پورت 3000 گوش میده و منتظر میمونه تا درخواست هایی از کلاینتها دریافت کنه. هر وقت یه درخواست به سرور برسه، سرور با یه پیام "Hello World" بهش جواب میده.
برای اینکه این سرور کار کنه، فقط کافیه این کد رو اجرا کنی. بعد میتونی تو مرورگرت آدرس http://localhost:3000/ رو وارد کنی و جواب سرور رو ببینی. این مثالی ساده ست که نشون میده چطور میتونی با استفاده از پورتها یه سرور وب بسازی و به درخواستهای کاربرها پاسخ بدی.
اگه با PHP کار میکنی و میخوای یه سرور محلی بسازی، میتونی از کد زیر استفاده کنی:
$address = '127.0.0.1';
$port = 8080;
$socket = stream_socket_server("tcp://$address:$port", $errno, $errstr);
if (!$socket) {
echo "Error: $errstr ($errno)\n";
} else {
while ($conn = stream_socket_accept($socket)) {
fwrite($conn, "Hello World\n");
fclose($conn);
}
fclose($socket);
}اینجا یه سرور ساده TCP داریم که روی پورت 8080 کار میکنه. این سرور به هر کلاینتی که بهش وصل بشه یه پیام "Hello World" میده.
این کد چطور کار میکنه؟ اول، یه سوکت TCP ساخته میشه که به آدرس IP محلی (127.0.0.1) و پورت 8080 متصل میشه. اگه سوکت با موفقیت ساخته بشه، سرور منتظر میمونه تا یه کلاینت بهش وصل بشه. هر وقت یه کلاینت وصل شد، سرور به اون کلاینت پیام میده و بعد از اون ارتباط رو قطع میکنه.
این نوع سرور ساده بهت نشون میده که چطور میتونی با استفاده از PHP یه سرور بسازی و به درخواستهای کلاینتها جواب بدی.

پورتها تو شبکههای کامپیوتری برای مدیریت ارتباطات بین برنامهها و سرویسها استفاده میشن. هر پورت مثل یه دروازه عمل میکنه که به یه نوع خاص از دادهها اختصاص داده شده و کمک میکنه تا دادهها به درستی به مقصدشون برسن. این کار باعث میشه که هر برنامه ای دادههای مربوط به خودش رو دریافت کنه و از تداخل با برنامههای دیگه جلوگیری بشه.
استفاده از پورتهای مختلف به ما این امکان رو میده که ارتباطات مختلف رو جدا از هم مدیریت کنیم. با این کار، میتونیم مطمئن بشیم که دادههای مربوط به هر سرویس یا برنامه به درستی هدایت میشن و با دادههای سرویسهای دیگه قاطی نمیشن. اینجوری مدیریت ارتباطات شبکه ای هم سادهتر میشه و هم امنیت بیشتری داره.
پورتهای معروف (Well-Known Ports) شماره هایی بین 0 تا 1023 دارن و معمولاً برای سرویسهای رایج مثل وب گردی (HTTP)، ایمیل (SMTP) و FTP استفاده میشن. این پورتها به طور پیش فرض به سرویسهای خاصی اختصاص داده شدن. اما پورتهای پویا (Dynamic Ports) شماره هایی بین 49152 تا 65535 دارن و بیشتر برای ارتباطات موقتی یا سرویسهای خاص که نیاز به پورتهای اختصاصی ندارن، استفاده میشن. این پورتها به صورت موقت به برنامهها اختصاص داده میشن و بعد از پایان استفاده، آزاد میشن.
بله، در بیشتر برنامهها و سرویسها میتونی پورت پیش فرض رو تغییر بدی. اما باید حواست باشه که این تغییر ممکنه روی دسترسی و ارتباطات تأثیر بذاره. مثلاً اگه پورت وب سایتت رو از 80 به یه شماره دیگه تغییر بدی، باید مطمئن باشی که کاربران میدونن از چه پورتی برای دسترسی به سایتت استفاده کنن.
اگه دو برنامه بخوان از یه پورت همزمان استفاده کنن، یکی از برنامهها نمیتونه به پورت دسترسی پیدا کنه و با خطا مواجه میشه. این به این دلیله که هر پورت فقط میتونه به یه برنامه یا سرویس در هر لحظه اختصاص داده بشه. پس بهتره که هر برنامه یا سرویس پورت مخصوص به خودش رو داشته باشه تا تداخلی پیش نیاد.
حالا که با مفهوم پورت و کاربردهای اون بیشتر آشنا شدی، میتونی با دید بازتری به پروژههای شبکه ای و برنامه نویسی بپردازی. پورتها یکی از اجزای کلیدی شبکههای کامپیوتری هستن و بدون اونا، مدیریت ارتباطات و دادهها به این شکلی که امروز میشناسیم ممکن نبود. اگه بدونی چطور از پورتها به درستی استفاده کنی، میتونی ارتباطات شبکت رو بهینهتر کنی و از تداخلها جلوگیری کنی.
در نهایت، با فهم درست از پورتها و نحوه استفاده ازشون، میتونی پروژههای پیچیدهتر و قویتری رو مدیریت کنی و از تمامی امکانات شبکه بهره مند بشی. هر وقت هم سوال یا مشکلی داشتی، میتونی به منابع و ابزارهای مختلف مراجعه کنی و با اطمینان بیشتری به کارت ادامه بدی. این درک عمیق از پورت ها، تو رو تو کار با شبکههای کامپیوتری حرفه ایتر و مطمئنتر میکنه.
دوره الفبای برنامه نویسی با هدف انتخاب زبان برنامه نویسی مناسب برای شما و پاسخگویی به سوالات متداول در شروع یادگیری موقتا رایگان شد: