پورت در لینوکس چیست و چگونه ببینیم چه چیزی گوش میدهد؟
مفهوم پورت TCP/UDP، تفاوت listening و established، و فرمانهای ss برای دیدن چه فرایندی روی کدام پورت است.
بنیانگذار و مهندس محصول

وقتی میگویید «پورت ۸۰ باز است» در واقع از یک نقطهٔ انتهایی منطقی روی پشتهٔ شبکه حرف میزنید: ترکیب آدرس IP، پروتکل انتقال (معمولاً TCP یا UDP) و شمارهٔ ۱۶بیتی پورت. بدون این مدل، خطاهای «address already in use»، اشتباه فایروال، و سردرگمی بین localhost و اینترفیس عمومی اجتنابناپذیر است.
این مقاله مفهوم پورت را به فرمانهای واقعی `ss` وصل میکند — ابزار مدرن جایگزینی netstat در بسیاری توزیعها — تا ببینید چه فرایندی گوش میدهد و کدام اتصال برقرار است.

پاسخ کوتاه
پورت شمارهای است که به سیستمعامل میگوید ترافیک ورودی به کدام سوکت برنامه تحویل شود. سرویسها روی پورت listen میکنند؛ کلاینتها معمولاً از پورت موقت (ephemeral) به پورت شناختهشده وصل میشوند. برای دیدن شنوندگان: `ss -tulpn`. برای دیدن اینکه چه کسی به پورت وصل است: `ss -tp`. باز بودن پورت در فایروال جدا از این است که اصلاً سرویسی گوش بدهد.
پورت بدون فرایند شنونده فقط یک عدد در مستند است؛ فرایند بدون پورت قابلدسترس از بیرون، سرویس داخلی است.
TCP در برابر UDP — به اندازهٔ لازم
TCP اتصالگراست: handshake، جریان بایت، وضعیتهایی مثل LISTEN و ESTABLISHED. UDP دیتاگرام بیاتصال است؛ «شنیدن» یعنی سوکت به پورت bind شده و آمادۀ دریافت است. بسیاری سرویسهای وب/دیتابیس TCPاند؛ DNS و برخی discoveryها UDP زیاد استفاده میکنند. شمارهٔ پورت در هر دو فضا جداست: UDP/53 با TCP/53 یکی نیستند.
بازهٔ شمارهها
- ۰–۱۰۲۳: پورتهای شناختهشده؛ bind اغلب نیاز به مجوز ویژه دارد.
- ۱۰۲۴–۴۹۱۵۱: ثبتشده/کاربردی برای سرویسهای زیاد.
- ۴۹۱۵۲–۶۵۵۳۵: معمولاً پورتهای موقت کلاینت.
مثالهای رایج: ۲۲ SSH، ۸۰ HTTP، ۴۴۳ HTTPS، ۵۴۳۲ PostgreSQL، ۶۳۷۹ Redis. روی سرور production، سرویسهای مدیریتی را ترجیحاً روی اینترفیس خصوصی نگه دارید نه ۰.۰.۰.۰ عمومی بدون فایروال.
دیدن چه چیزی گوش میدهد
bash
ss -tulpn ss -tlnp ss -ulnp
توضیح پرچمها: -t TCP، -u UDP، -l فقط listening، -n عددی بدون resolve نام، -p نشان دادن فرایند (اغلب root لازم است برای همه). خروجی Local Address:Port میگوید روی کدام آدرس bind شدهاید:
- 127.0.0.1:5432 — فقط محلی
- 0.0.0.0:80 یا *:80 — همهٔ IPv4
- [::]:80 — IPv6
bash
ss -tlnp | grep ':22' ss -tlnp 'sport = :443'
اتصالهای برقرار و عیبیابی
bash
ss -tp ss -s ss -tp state established '( dport = :443 or sport = :443 )'
اگر اپ به دیتابیس وصل نمیشود، ببینید آیا اصلاً LISTEN هست، روی کدام آدرس، و آیا فایروال اجازه میدهد. خطای connection refused معمولاً یعنی کسی گوش نمیدهد؛ timeout اغلب یعنی فیلتر/مسیر.
کدام فرایند پورت را گرفته؟
bash
sudo ss -tlnp | grep ':8080' sudo lsof -iTCP:8080 -sTCP:LISTEN
پس از یافتن PID، به ps و در صورت نیاز systemctl برگردید تا بفهمید واحد مالک کیست.
bash
ps -p PID -o pid,user,cmd systemctl status PID
Address already in use
یعنی پورت برای bind جدید آزاد نیست — سرویس قبلی زنده است، یا در TIME_WAIT گیر کردهاید، یا فرایند یتیم. با ss شنونده را پیدا و درست متوقف کنید؛ کشتن کورکورانه آخرین گزینه است.
bash
sudo ss -tlnp | grep ':3000'
فایروال و «باز بودن»
سه لایه را قاطی نکنید: (۱) bind برنامه، (۲) فیلتر هسته/فایروال میزبان، (۳) security group ابر. `ss` لایهٔ اول را نشان میدهد. باز کردن پورت در ufw بدون سرویس شنونده بیفایده است؛ سرویس روی 0.0.0.0 بدون فایروال خطرناک است.
جدول تصمیم سریع
| سؤال | فرمان شروع |
|---|---|
| چه سرویسهایی گوش میدهند؟ | ss -tulpn |
| آیا ۸۰ آزاد است؟ | ss -tlnp | grep ':80' |
| چه کسی به من وصل است؟ | ss -tp |
| فقط محلی است یا عمومی؟ | ستون Local Address در ss |
اشتباههای رایج
- فرض اینکه publish داکر همان bind روی میزبان را شفاف کرده بدون بررسی ss روی host.
- باز کردن پورت دیتابیس به ۰.۰.۰.۰ برای «راحتی».
- اتکا به netstat روی سیستمی که فقط ss دارد.
- یکی دانستن UDP و TCP برای همان شماره.
خلاصه
پورت آدرس منطقی تحویل ترافیک به سوکت برنامه است. با ss ببینید چه میشنود و کجا bind شده، بعد فایروال و مالک فرایند را درست کنید. این مهارت پایهٔ عیبیابی استقرار، امنیت محیطی و مقالات شبکهٔ بعدی است.
سوالات متداول
چرا از بیرون نمیتوانم وصل شوم ولی روی خود سرور میتوانم؟
احتمالاً bind روی 127.0.0.1 است یا فایروال/security group ورودی را بسته. ss و قوانین فیلتر را جدا چک کنید.
آیا netstat هنوز لازم است؟
روی بسیاری سیستمهای جدید ss جایگزین است؛ مفهوم یکی است، نحو فرق دارد.
منابع و مراجع
- ss(8) — iproute2: https://man7.org/linux/man-pages/man8/ss.8.html
- IANA Service Name and Transport Protocol Port Number Registry: https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml
- ip(8) overview context: https://man7.org/linux/man-pages/man8/ip.8.html
نویسنده
سهیل ابراهیمپور بنیانگذار FutureForge است. روی طراحی محصول، معماری و استقرار نرمافزار سفارشی کار میکند.
یادداشتهای مرتبط
اگر در انتخاب معماری یا مسیر توسعه مطمئن نیستید، میتوانید درباره پروژه صحبت کنیم.
مسئله و محدودیت را بنویسید. اگر تطابق داشته باشیم، برای گفتگو هماهنگ میکنیم.




