টিসিপি / এইচটিটিপি পোর্টে শুনছেন: কীভাবে অনেক ব্যবহারকারী একই বন্দরে ভাগ করতে পারেন
সুতরাং, যখন কোনও সার্ভার টিসিপি পোর্টে আগত সংযোগগুলির জন্য শোনার পরে কী ঘটে? উদাহরণস্বরূপ, আসুন আমরা 80 পোর্টে আপনার একটি ওয়েব-সার্ভার রয়েছে বলে ধরা যাক আপনার কম্পিউটারের 24.14.181.229 এর সার্বজনীন আইপি ঠিকানা রয়েছে এবং যে ব্যক্তি আপনার সাথে সংযোগ স্থাপনের চেষ্টা করছে তার IP ঠিকানা 10.1.2.3 রয়েছে। এই ব্যক্তিটি 24.14.181.229:80 এ টিসিপি সকেট খোলার মাধ্যমে আপনার সাথে সংযোগ করতে পারে। যথেষ্ট সহজ।
স্বজ্ঞাতভাবে (এবং ভুলভাবে), বেশিরভাগ লোকেরা ধরে নেন যে এটি দেখতে এরকম কিছু দেখাচ্ছে:
Local Computer | Remote Computer
--------------------------------
<local_ip>:80 | <foreign_ip>:80
^^ not actually what happens, but this is the conceptual model a lot of people have in mind.
এটি স্বজ্ঞাত, কারণ ক্লায়েন্টের দৃষ্টিকোণ থেকে, তার একটি আইপি ঠিকানা রয়েছে, এবং আইপি: পোর্টে একটি সার্ভারের সাথে সংযুক্ত রয়েছে। যেহেতু ক্লায়েন্ট 80 পোর্টের সাথে সংযোগ স্থাপন করে, তখন তার পোর্টটিও অবশ্যই 80 হবে? এটি ভাবতে বুদ্ধিমানের জিনিস, তবে আসলে কী হয় তা নয়। যদি এটি সঠিক হয়, আমরা কেবলমাত্র বিদেশী আইপি ঠিকানার জন্য একজন ব্যবহারকারীকে পরিবেশন করতে পারি। একবার কোনও রিমোট কম্পিউটার সংযোগ স্থাপন করে, তারপরে তিনি পোর্ট ৮০ থেকে পোর্ট ৮০ সংযোগটি দিতেন এবং অন্য কেউ সংযোগ করতে পারেনি।
তিনটি বিষয় অবশ্যই বুঝতে হবে:
1.) একটি সার্ভারে, একটি প্রক্রিয়া একটি বন্দরে শুনছে । এটি সংযোগ পাওয়ার পরে এটি অন্য থ্রেডে ছেড়ে দেয়। যোগাযোগ শ্রবণ বন্দরে কখনই হোগ করে না।
২) সংযোগগুলি নিম্নলিখিত 5 টি টিপল দ্বারা ওএস দ্বারা স্বতন্ত্রভাবে সনাক্ত করা যায়: (লোকাল-আইপি, লোকাল-পোর্ট, রিমোট-আইপি, রিমোট-পোর্ট, প্রোটোকল) যদি টিপলটিতে কোনও উপাদান আলাদা হয়, তবে এটি সম্পূর্ণ স্বাধীন সংযোগ।
৩) যখন কোনও ক্লায়েন্ট কোনও সার্ভারের সাথে সংযুক্ত হয়, তখন এটি একটি এলোমেলো, অব্যবহৃত উচ্চ-অর্ডার উত্স পোর্টটি চয়ন করে । এইভাবে, একক ক্লায়েন্টের একই গন্তব্য পোর্টের জন্য সার্ভারের সাথে ~ 64k পর্যন্ত সংযোগ থাকতে পারে।
সুতরাং, যখন কোনও ক্লায়েন্ট কোনও সার্ভারের সাথে সংযোগ স্থাপন করে তখন এটি তৈরি হয়:
Local Computer | Remote Computer | Role
-----------------------------------------------------------
0.0.0.0:80 | <none> | LISTENING
127.0.0.1:80 | 10.1.2.3:<random_port> | ESTABLISHED
আসলে কী ঘটে তা দেখছি
প্রথমে এই কম্পিউটারে কী ঘটছে তা দেখতে নেটট্যাট ব্যবহার করা যাক। আমরা 80 এর পরিবর্তে 500 পোর্ট ব্যবহার করব (কারণ একটি সাধারণ বন্দর হওয়ায় 80 পোর্টে পুরো গোছা ঘটনা ঘটছে, তবে কার্যত এটি কোনও তাত্পর্য রাখে না)।
netstat -atnp | grep -i ":500 "
প্রত্যাশিত হিসাবে, আউটপুট ফাঁকা। এখন একটি ওয়েব সার্ভার শুরু করা যাক:
sudo python3 -m http.server 500
এখন, আবার নেটস্যাট চালানোর আউটপুট এখানে:
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:500 0.0.0.0:* LISTEN -
সুতরাং এখন একটি প্রক্রিয়া রয়েছে যা সক্রিয়ভাবে শুনছে (স্টেট: LISTEN) পোর্ট 500 এ। স্থানীয় ঠিকানাটি 0.0.0.0, যা "সমস্ত আইপি ঠিকানার জন্য শোনার" কোড। একটি সহজ ভুলটি কেবল 127.0.0.1 বন্দরটিতে শুনতে হবে, যা কেবলমাত্র বর্তমান কম্পিউটার থেকে সংযোগ গ্রহণ করবে। সুতরাং এটি কোনও সংযোগ নয়, এর অর্থ হ'ল কোনও প্রক্রিয়া আইপি-তে পোর্ট করার জন্য () বাঁধতে অনুরোধ করেছিল এবং সেই প্রক্রিয়াটি সেই বন্দরের সাথে সমস্ত সংযোগ পরিচালনা করার জন্য দায়ী। এই সীমাবদ্ধতার প্রতি ইঙ্গিত দেয় যে কোনও বন্দরে কম্পিউটারে শোনার জন্য কেবল একটি প্রক্রিয়া থাকতে পারে (মাল্টিপ্লেক্সিং ব্যবহার করে এটি ঘুরে দেখার উপায় রয়েছে তবে এটি আরও জটিল বিষয়)। যদি কোনও ওয়েব-সার্ভার ৮০ পোর্টে শুনছে তবে এটি অন্য ওয়েব-সার্ভারের সাথে পোর্টটি ভাগ করতে পারে না।
এখন, আসুন একটি ব্যবহারকারীকে আমাদের মেশিনে সংযুক্ত করুন:
quicknet -m tcp -t localhost:500 -p Test payload.
এটি একটি সাধারণ স্ক্রিপ্ট ( https://github.com/grokit/quickweb ) যা একটি টিসিপি সকেট খোলে, পে-লোড প্রেরণ করে ("এই ক্ষেত্রে টেস্ট পেলোড" "), কয়েক সেকেন্ড অপেক্ষা করে এবং সংযোগ বিচ্ছিন্ন হয়ে যায়। এটি হওয়ার সময় আবার নেটস্যাট করা নিম্নলিখিত বিষয়গুলি প্রদর্শন করে:
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:500 0.0.0.0:* LISTEN -
tcp 0 0 192.168.1.10:500 192.168.1.13:54240 ESTABLISHED -
আপনি যদি অন্য ক্লায়েন্টের সাথে সংযোগ স্থাপন করেন এবং আবার নেটস্যাট করেন, আপনি নিম্নলিখিতটি দেখতে পাবেন:
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:500 0.0.0.0:* LISTEN -
tcp 0 0 192.168.1.10:500 192.168.1.13:26813 ESTABLISHED -
... অর্থাৎ, ক্লায়েন্ট সংযোগের জন্য অন্য একটি এলোমেলো বন্দর ব্যবহার করেছে। সুতরাং আইপি ঠিকানাগুলির মধ্যে কখনও বিভ্রান্তি হয় না।