যেকোনো রেঞ্জে র্যান্ডম TCP বা UDP পোর্ট নম্বর তৈরি করুন, স্বয়ংক্রিয়ভাবে পরিচিত এবং সাধারণভাবে বাউন্ড সার্ভিস পোর্টগুলো বাদ দিয়ে যাতে আপনার স্থানীয় সার্ভিসগুলো সংঘর্ষ না করে।
একটি পোর্ট নম্বর যা আপনার মেশিনে অন্য কেউ চাইতে পারে না। আপনার কতগুলো পোর্ট দরকার এবং কোন রেঞ্জ থেকে নিতে হবে তা বেছে নিন। পরিচিত সার্ভিসের পোর্টগুলো ডিফল্টরূপে বাদ দেওয়া হয়, তাই আপনি যে সংখ্যাগুলো পান তা ইতিমধ্যে চলমান কিছুর সাথে সংঘর্ষের সম্ভাবনা কম।
–
সংঘর্ষ হবে না এমন একটি পোর্ট নম্বর নির্বাচন করা
পোর্ট স্পেস কীভাবে ভাগ করা হয়
একটি TCP বা UDP পোর্ট একটি 16-বিট সংখ্যা, তাই ব্যবহারযোগ্য রেঞ্জটি 0 থেকে 65535 পর্যন্ত চলে। IANA সেই স্পেসকে তিনটি অংশে ভাগ করে। পোর্ট 0 থেকে 1023 হলো সিস্টেম বা পরিচিত পোর্ট, HTTP-এর জন্য 80 এবং SSH-এর জন্য 22 এর মতো মানক সার্ভিসের জন্য সংরক্ষিত; Unix-সদৃশ সিস্টেমে সেগুলোর একটি বাইন্ড করতে সাধারণত root বা একটি স্পষ্ট ক্ষমতা প্রয়োজন। পোর্ট 1024 থেকে 49151 হলো নিবন্ধিত পোর্ট, নির্দিষ্ট অ্যাপ্লিকেশনে অনুরোধের ভিত্তিতে বরাদ্দ করা হয় - PostgreSQL-এর 5432 এবং MySQL-এর 3306 এখানে থাকে। পোর্ট 49152 থেকে 65535 হলো ডায়নামিক বা এফেমেরাল রেঞ্জ, অস্থায়ী ক্লায়েন্ট-সাইড বরাদ্দের জন্য সংরক্ষিত।
একটি স্থানীয় ডেভেলপমেন্ট সার্ভিসের জন্য, মিষ্টি জায়গাটি হলো 1024-এর উপরে নিবন্ধিত রেঞ্জ, সুবিধাপ্রাপ্ত ব্লক এবং এফেমেরাল ব্লক উভয়ই এড়িয়ে। এই কারণেই এই জেনারেটরটি নিম্ন সীমা হিসেবে 1024-এ ডিফল্ট হয়। 49152-এর নিচে থাকা শোনার চেয়ে বেশি গুরুত্বপূর্ণ: আপনার অপারেটিং সিস্টেম প্রতিবার একটি প্রোগ্রাম আউটবাউন্ড সংযোগ খুললে এফেমেরাল রেঞ্জ থেকে নেয়, তাই সেখানে অবস্থান করা একটি সার্ভিস রিবুটের পরে তার পোর্ট ইতিমধ্যে নেওয়া দেখতে পারে।
কেন পরিচিত পোর্ট বাদ দেওয়া সাহায্য করে
শুধুমাত্র র্যান্ডমনেস সংঘর্ষ প্রতিরোধ করে না। একটি র্যান্ডম ড্র সহজেই 3306, 5432, 6379 বা 8080-এ পড়তে পারে, এবং একটি কাজের ডেভেলপার মেশিনে সেগুলোই ঠিক সেই সংখ্যা যা ইতিমধ্যে দখল হওয়ার সম্ভাবনা সবচেয়ে বেশি। এখানে ব্যবহৃত বাদ দেওয়ার তালিকাটি ক্লাসিক Unix সার্ভিস, সাধারণ ডেটাবেস এবং মেসেজ ব্রোকার এবং জনপ্রিয় ফ্রেমওয়ার্কগুলো ডিফল্টরূপে বেছে নেওয়া পোর্টগুলো কভার করে, যেমন Node টুলিংয়ের জন্য 3000 এবং স্থানীয় HTTP সার্ভারের জন্য 8000 বা 8080।
সেগুলো বাদ দিলে প্রায় কিছুই খরচ হয় না - পুলটিতে এখনও কয়েক হাজার প্রার্থী থাকে - এবং এটি "পোর্ট ইতিমধ্যে ব্যবহৃত" ত্রুটির সবচেয়ে সাধারণ উৎসটি দূর করে। আপনি যদি ইচ্ছাকৃতভাবে সেই সংখ্যাগুলোর একটি চান, বিকল্পটি বন্ধ করুন এবং সম্পূর্ণ রেঞ্জটি আবার উপলব্ধ হয়ে যায়।
মনে রাখবেন এটি একটি সম্ভাব্যতাভিত্তিক সাহায্য, রিজার্ভেশন নয়। টুলটির আপনার মেশিন পরিদর্শন করার কোনো উপায় নেই, তাই এটি জানতে পারে না যে কিছু শুনছে। একটি পোর্ট সত্যিই ফ্রি কিনা নিশ্চিত করতে, এটি স্থানীয়ভাবে macOS বা Linux-এ lsof -i :PORT, আধুনিক Linux-এ ss -ltnp বা Windows-এ netstat -ano | findstr :PORT দিয়ে পরীক্ষা করুন।
কন্টেইনার এবং CI-তে পোর্ট
কন্টেইনার এবং CI পরিবেশ গণনা পরিবর্তন করে। একটি কন্টেইনারের ভেতরে পোর্ট স্পেস সাধারণত প্রাইভেট, তাই দুটি কন্টেইনার সংঘর্ষ ছাড়াই উভয়েই 8080-এ শুনতে পারে; সংঘর্ষের ঝুঁকি হোস্ট দিকে চলে যায়, যেখানে প্রকাশিত পোর্টগুলো একটি নামস্পেস ভাগ করে। একটি র্যান্ডম হোস্ট পোর্ট বেছে নেওয়া এবং এটিকে একটি নির্দিষ্ট কন্টেইনার পোর্টে ম্যাপ করা একই সার্ভিসের বেশ কয়েকটি কপি পাশাপাশি চালানোর একটি সাধারণ উপায়।
অনেক CI সিস্টেম এবং অর্কেস্ট্রেশন টুল একটি ফ্রি পোর্টের জন্য কার্নেলকে জিজ্ঞাসা করে এটি ভিন্নভাবে সমাধান করে: পোর্ট 0-তে বাইন্ড করুন, এবং অপারেটিং সিস্টেম একটি অব্যবহৃত পোর্ট নির্ধারণ করে এবং আপনাকে বলে এটি কোনটি বেছে নিয়েছে। এটি রেস-ফ্রি এবং সর্বদা সঠিক, তাই আপনার প্রোগ্রামকে রানটাইমে এর পোর্ট বলা যেতে পারে এমন হলে এটি পছন্দ করুন। এখানে তৈরি করা সংখ্যার মতো একটি তৈরি সংখ্যা সঠিক টুল যখন কিছুই চলার আগে আপনার একটি কনফিগারেশন ফাইল, একটি docker-compose ম্যাপিং বা একটি টিম ডকুমেন্টে লেখার জন্য একটি স্থিতিশীল মান প্রয়োজন।
সচরাচর জিজ্ঞাসা
কেন রেঞ্জটি ডিফল্টরূপে 1024-এ শুরু হয়?
1024-এর নিচের পোর্টগুলো Unix-সদৃশ সিস্টেমে সুবিধাপ্রাপ্ত এবং সাধারণত বাইন্ড করতে root প্রয়োজন। 1024 থেকে শুরু করলে সাধারণ ব্যবহারকারী অ্যাকাউন্টের জন্য ফলাফলগুলো ব্যবহারযোগ্য থাকে।
আমার কি 49152-এর উপরের পোর্টগুলো এড়ানো উচিত?
একটি দীর্ঘস্থায়ী সার্ভিসের জন্য সাধারণত হ্যাঁ। সেটিই সেই রেঞ্জ যেখানে অপারেটিং সিস্টেম এফেমেরাল ক্লায়েন্ট পোর্ট টানে, তাই সেখানে অবস্থান করা একটি সার্ভিস রিস্টার্টের পরে তার নম্বর ইতিমধ্যে দাবি করা দেখতে পারে।
এটি কি পোর্টটি সত্যিই ফ্রি কিনা পরীক্ষা করে?
না। পৃষ্ঠাটি সম্পূর্ণ আপনার ব্রাউজারে চলে এবং আপনার সিস্টেম পরিদর্শন করতে পারে না। একটি নম্বরে প্রতিশ্রুতিবদ্ধ হওয়ার আগে `lsof -i :PORT`, `ss -ltnp` বা `netstat -ano | findstr :PORT` দিয়ে যাচাই করুন।
বাদ দেওয়ার বিকল্পটি কোন পোর্টগুলো বাদ দেয়?
ক্লাসিক Unix সার্ভিস, MySQL, PostgreSQL, Redis, RabbitMQ, MongoDB এবং Elasticsearch এর মতো সাধারণ ডেটাবেস ও ব্রোকার এবং 3000, 8000, 8080 এবং 8443 এর মতো জনপ্রিয় ফ্রেমওয়ার্ক ডিফল্ট।
র্যান্ডমনেস কি ক্রিপ্টোগ্রাফিকভাবে নিরাপদ?
এটি ব্রাউজার সরবরাহ করলে Web Crypto API ব্যবহার করে, রিজেকশন স্যাম্পলিংসহ যাতে ড্রটি অভিন্ন থাকে, এবং Crypto অনুপলব্ধ থাকলে শুধুমাত্র Math.random-এ ফিরে যায়।
একটি TCP এবং একটি UDP পোর্টের মধ্যে পার্থক্য কী?
এগুলো পৃথক 65536-এন্ট্রি স্পেস, তাই TCP 8080 এবং UDP 8080 সম্পর্কহীন এবং একই সময়ে ভিন্ন প্রোগ্রাম ব্যবহার করতে পারে। এই টুল যে সংখ্যাগুলো তৈরি করে সেগুলো উভয়ের জন্য কাজ করে।