সার্ভার কীভাবে ক্লায়েন্ট পোর্টে প্রেরণ করবে তা আবিষ্কার করবে?


26

আমি এটি বুঝতে পেরে যখন কোনও ক্লায়েন্ট কোনও সংযোগের অনুরোধ করে তখনই এটি ঘটে:

  1. সার্ভারটি একটি নির্দিষ্ট পোর্ট নম্বরে আবদ্ধ থাকবে। পোর্ট নম্বর সর্বদা শ্রবণ প্রক্রিয়াতে আবদ্ধ। যেহেতু কেবল সার্ভারই ​​আগত সংযোগগুলি শুনছে, তাই আমাদের ক্লায়েন্টের পাশে বাঁধাইয়ের দরকার নেই
  2. সার্ভারটি সেই পোর্ট নম্বরটিতে লিজইনিগ রাখবে।
  3. ক্লায়েন্ট একটি connect()অনুরোধ প্রেরণ করবে ।
  4. সার্ভারটি ব্যবহার করে অনুরোধটি গ্রহণ করবে accept()। সার্ভার ক্লায়েন্টের অনুরোধটি গ্রহণ করার সাথে সাথে কার্নেলটি সার্ভারের জন্য আরও একটি এলোমেলো বন্দর নম্বর বরাদ্দ করে send()এবং receive()যেহেতু সার্ভারে একই পোর্ট নম্বরটি শ্রবণ করার পাশাপাশি প্রেরণের জন্য ব্যবহার করা যায় না, এবং পূর্ববর্তী পোর্টটি এখনও রয়েছে নতুন সংযোগের জন্য শুনছি

সমস্ত দেওয়া হয়েছে, ক্লায়েন্ট কোন পোর্টটি পাচ্ছে তা সার্ভার কীভাবে আবিষ্কার করবে? আমি জানি ক্লায়েন্টটি সোর্স পোর্ট এবং গন্তব্য পোর্ট সহ টিসিপি বিভাগগুলি প্রেরণ করবে, তাই সার্ভারটি সেগমেন্টের উত্স বন্দরটিকে তার গন্তব্য পোর্ট হিসাবে ব্যবহার করবে, কিন্তু সার্ভারটি সেই পোর্টটি সম্পর্কে জানতে কী ফাংশনটি কল করবে? এটা কি accept()?


সংশ্লিষ্ট: stackoverflow.com/questions/14388706/...
Pacerier

উত্তর:


33

এটি প্যাকেটে টিসিপি (বা ইউডিপি, ইত্যাদি) শিরোনামের অংশ। তাই ক্লায়েন্টটি এটি বলে সার্ভারটি খুঁজে বের করে। এটি কীভাবে এটি ক্লায়েন্টের আইপি ঠিকানা (যা আইপি শিরোনামের অংশ) তা খুঁজে বের করে to

উদাহরণস্বরূপ, প্রতিটি টিসিপি প্যাকেটে একটি আইপি শিরোলেখ অন্তর্ভুক্ত থাকে (উত্স IP, গন্তব্য আইপি এবং প্রোটোকল [টিসিপি] অন্তত) least তারপরে একটি টিসিপি শিরোনাম রয়েছে (উত্স এবং গন্তব্য পোর্ট সহ আরও অনেকগুলি)।

যখন কার্নেলটি 10.11.12.13 (আইপি শিরোনামে) এর রিমোট আইপি এবং 12345 (টিসিপি শিরোনামে) এর একটি রিমোট পোর্ট সহ একটি এসওয়াইএন প্যাকেট (একটি টিসিপি সংযোগের সূচনা) পায়, তখন এটি দূরবর্তী আইপি এবং পোর্টটি জানে । এটি একটি এসওয়াইএন | এসিকে ফেরত পাঠায়। যদি এটি একটি এসকে ফিরে পায়, listenকলটি একটি নতুন সকেট দেয়, সেই সংযোগের জন্য সেট আপ করুন।

একটি টিসিপি সকেট চারটি মান (রিমোট আইপি, লোকাল আইপি, রিমোট পোর্ট, স্থানীয় পোর্ট) দ্বারা স্বতন্ত্রভাবে চিহ্নিত করা হয়। আপনার একাধিক সংযোগ / সকেট থাকতে পারে, যতক্ষণ না সেগুলির মধ্যে অন্তত একটির ভিন্ন হয়।

সাধারণত, সার্ভার প্রক্রিয়াতে সমস্ত সংযোগের জন্য স্থানীয় পোর্ট এবং স্থানীয় আইপি সমান হবে (উদাঃ sshd- এ সমস্ত সংযোগ স্থানীয়-আইপি: 22 এ থাকবে)। যদি একটি রিমোট মেশিন একাধিক সংযোগ করে তবে প্রত্যেকে আলাদা আলাদা দূরবর্তী বন্দর ব্যবহার করবে। সুতরাং রিমোট বন্দর ব্যতীত সমস্ত কিছু একই হবে তবে এটি ঠিক of চারটির মধ্যে একটিরই আলাদা হতে হবে।

প্যাকেটটি দেখার জন্য আপনি যেমন ওয়্যারহর্স্ক ব্যবহার করতে পারেন এবং এটি আপনার জন্য সমস্ত ডেটা লেবেল করবে। এখানে উত্স বন্দরটি হাইলাইট করা হয়েছে (এটি ডিকোডড প্যাকেটে হাইলাইট করা লক্ষ্য করুন, পাশাপাশি নীচে হেক্স ডাম্প):

টিসিপি এসওয়াইএন প্যাকেট দেখাচ্ছে ওয়্যারশার্ক


> ব্যাখ্যার জন্য ধন্যবাদ u আপনি কি বলতে চেয়েছিলেন যে নতুন সার্ভার সকেট বর্ণনাকারী (অর্থাত্ টুপল) গ্রহণের পরে প্রাপ্ত হবে () ক্লায়েন্ট পোর্ট এবং ক্লায়েন্টের ঠিকানা বিশদ রাখবে এবং সেই নতুন সকেট বর্ণনাকারী সার্ভারটি ব্যবহার করে ডেটা প্রেরণ এবং গ্রহণ করছে এবং ক্লায়েন্ট থেকে। নতুন সকেট ফাইল বিবরণীতে নতুন সার্ভার পোর্ট নম্বর থাকবে কার্নেল, সার্ভার আইপি, ক্লায়েন্ট আইপি এবং ক্লায়েন্ট পোর্ট দ্বারা নির্ধারিত iআমি ঠিক?
সুবি সুরেশ

@ সুবিসুরেশ হ্যাঁ, টিপলটি কার্নেলের ভিতরে সংরক্ষণ করা হয়, সেই ফাইল বর্ণনাকারীর সাথে যুক্ত।
ডার্ববার্ট

> ধন্যবাদ ডারোবার্ট। সুতরাং আমি এই সিদ্ধান্তে পৌঁছে যাচ্ছি যে নতুন সার্ভার সকেট বর্ণনাকারীর কাছে ক্লায়েন্ট পোর্ট এবং ক্লায়েন্টের ঠিকানা থাকবে যা সার্ভারটি গ্রহণ () থেকে প্রাপ্ত হয়। আমার বোঝা ঠিক আছে কি?
সুবি সুরেশ

@ সুবিসুরেশ হ্যাঁ, এটি সঠিক। একটি অ্যাপ্লিকেশন দৃষ্টিকোণ থেকে, আপনি সাধারণত পাত্তা না (লগিং ব্যতীত)। কার্নেলটি নিশ্চিত করে যে আপনার write(ইত্যাদি) ডেটা সঠিক জায়গায় গেছে।
ডার্বোবার্ট

> আপনার সহায়তার জন্য ধন্যবাদ এবং আমি মনে করি আমি পয়েন্টটি পেয়েছি। ;-)
সুবি সুরেশ

2

"সংযোগের অনুরোধ (ক্লায়েন্ট প্রোগ্রামের connect()সিস্টেম কল, সাধারণত) একটি ত্রি-মুখী হ্যান্ডশেকের কারণ করে 3 টি-ওয়ে হ্যান্ডশেকের প্রথম প্যাকেটে (ক্লায়েন্ট থেকে সার্ভারে) এসওয়াইএন পতাকা সেট থাকে এবং এতে ক্লায়েন্ট প্রোগ্রামটির টিসিপি পোর্ট নম্বর অন্তর্ভুক্ত থাকে কার্নেল এটি বরাদ্দ করে।

আপনি এটি এনএম্যাপ বনাম প্রাকৃতিক এসওয়াইএন প্যাকেটগুলির একটি নিবন্ধে দেখতে পারেন । Nmap SYN প্যাকেট ডিকোডিংয়ে "উত্স .0058> ভাগ.22" বাক্যাংশ রয়েছে। "বৈধ এসওয়াইএন প্যাকেট" ডিকোডিংয়ের মধ্যে "উত্স .35970> ভাগ্য 80" রয়েছে phrase দুটি এসওয়াইএন প্যাকেট দূরবর্তী কার্নেলকে বলে যে প্যাকেটগুলি যথাক্রমে টিসিপি পোর্ট 60058 এবং পোর্ট 35970 থেকে from


> তবে ব্রুস যা পিছনের প্রান্তে ঘটছে ut তবে কীভাবে আমার সার্ভারটি ক্লায়েন্ট সার্ভার প্রোগ্রামগুলিতে সাধারণত পোর্ট নম্বর বুকস নাম্বার মত বিশদটি বয়ে আনছে, আমি ক্লায়েন্ট বন্দর এবং ক্লায়েন্টের ঠিকানা আনার জন্য কোনও ফাংশন দেখিনি
সুবি সুরেশ

সিস্টেম কল getpeername()আপনাকে যে কোনও খোলা সকেটে এটি করতে দেয়। accept()সিস্টেম কল সার্ভার কোড ক্লায়েন্ট ফিরে যোগাযোগ করার জন্য সকেট ফাইল বর্ণনাকারী পেতে ব্যবহার করতে যে একটি প্যারামিটার ( "sockaddr" আমার মানুষ পাতায়) যে প্রত্যাশিত ক্লায়েন্টের IP ঠিকানা এবং TCP পোর্ট সংখ্যা উপস্থিত রয়েছে হয়েছে।
ব্রুস এডিগার

> দয়া করে কিছু মনে করবেন না যদি আমি ইলবোরেট করি all সমস্ত ইনপুট থেকে আমি বুঝতে পেরেছি যে গ্রাহকের বিবরণে স্ট্রাকচারটি সোকাড্ডার_ইন ভরাট করছে এবং গ্রহণযোগ্যতার পরে নতুন সার্ভার সকেট বর্ণনাকারী ফিরে আসবে () স্বয়ংক্রিয়ভাবে ক্লায়েন্ট পোর্ট এবং ঠিকানা থাকবে। কেন আমরা প্রেরণ (নতুন সার্ভার সকেট বর্ণনাকারী) ব্যবহার করে প্রেরণ করতে সক্ষম হলাম? আমি আশা করি, আমি কি এখানে পৌঁছেছি? আমি কেবল যা বুঝতে পেরেছি তা সঠিক কিনা তা নিশ্চিত করার জন্য?
সুবি সুরেশ

@ সুবি সুরেশ - আমি বিশ্বাস করি আপনি সত্য লিখেছেন।
ব্রুস এডিগার

1

টিসিপি সকেট একটি স্ট্রিম-ভিত্তিক সকেট। দুটি সকেট বর্ণনাকারী (আপনার এবং আপনার পিয়ারের মালিকানাধীন) নির্ভরযোগ্যভাবে সংযুক্ত। সুতরাং আপনাকে ক্লায়েন্টের বন্দর সম্পর্কে চিন্তা করতে হবে না - কেবল আপনার সকেটের বর্ণনাকারী লিখুন!

এছাড়াও, গোকসনাম (2) নির্দ্বিধায় যদি আপনি সত্যিই এটি জানতে চান (সম্ভবত লগিংয়ের জন্য)।


0

সংযোগটি একটি টিপল (উত্স আইপি, উত্স পোর্ট, গন্তব্য আইপি, গন্তব্য পোর্ট) দ্বারা সংজ্ঞায়িত করা হয়। উত্তরগুলি বিপরীতে যায়।


@ ওয়ানড্র্যান্ড সেই বিন্দুটি আমি ভন বুঝেছি। তবে কোন ফাংশন থেকে সার্ভার ক্লায়েন্ট পোর্ট নম্বর সম্পর্কে জানতে পারে? ক্লায়েন্ট পোর্ট নম্বরটি কীভাবে প্রেরণ করবে তা জেনেও কী সার্ভার ক্লায়েন্ট আনতে () গ্রহণের জন্য কাঠামো ব্যবহার করে? বন্দরে?
সুবি সুরেশ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.