দুটি অ্যাপ্লিকেশন একই বন্দরে শুনতে পাবে?


283

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


2
একাধিক সকেট সহ ঠিকানা / পোর্ট পুনঃব্যবহার সম্পর্কে একটি ভাল বিস্তৃত উত্তরের জন্য: স্ট্যাকওভারফ্লো
বার্জার ফ্রেউন্ড-হানসেন

উত্তর:


248

ওএস কী বিবেচনা করা হচ্ছে তার উপর নির্ভর করে উত্তর পৃথক। সাধারণভাবে যদিও:

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

ইউডিপি (মাল্টিকাস্টস) এর জন্য, একাধিক অ্যাপ্লিকেশন একই বন্দরে সাবস্ক্রাইব করতে পারে।

সম্পাদনা: লিনাক্স কার্নেল ৩.৯ এবং তার পরে, একই পোর্টে একাধিক অ্যাপ্লিকেশন শোনার SO_REUSEPORTবিকল্পটি ব্যবহার করে যুক্ত করা হয়েছে । আরও তথ্য এই lwn.net নিবন্ধে উপলব্ধ।


22
"একক পোর্টে একটি অ্যাপ্লিকেশন শুনছে" এ কারণেই পোর্টগুলির অস্তিত্ব রয়েছে - একাধিক অ্যাপ্লিকেশনটিকে দ্বিধা ছাড়াই নেটওয়ার্ক ভাগ করে নিতে allow
এসলট

46
প্রতি আইপি ঠিকানায় পোর্টে একজন শ্রোতা। অন্য একটি নেটওয়ার্ক ইন্টারফেস যুক্ত করা একটি দ্বিতীয় আইপি ঠিকানা পাওয়ার একটি উপায়। আপনার প্ল্যাটফর্ম সম্ভবত ভার্চুয়াল ইন্টারফেস সমর্থন করে যা একটি শারীরিক নেটওয়ার্ক কার্ডের সাথে দুটি আইপি ঠিকানা পাওয়ার অন্য উপায় another
জন এম

7
যদিও আমি এখনও অবধি একই মতামত ছিলাম তবে দেখা যাচ্ছে যে আমি দুটি পৃথক প্রক্রিয়া একই আইপি এবং টিসিপি পোর্টে বাঁধতে সক্ষম হয়েছি! আপনি জাভাতে বাঁধার আগে সার্ভারসকেট.সেটিউসএড্রেস (সত্য) সেট করে থাকলে এটি সম্ভব। সত্যিই অপ্রত্যাশিত আচরণ।
ইউজেন

7
(1) আপনার উত্তরের আসল অর্থ হ'ল টিসিপি-র জন্য, হ্যাঁ, সরবরাহ করা হয়েছে ... '(২) মাল্টিকাস্ট ইউডিপি পোর্ট ভাগ করে নেওয়ার পূর্ব শর্ত নয়, তবে SO_REUSEADDR।
লার্নের মারকুইস

12
ইউডিপি (মাল্টিকাস্টস) এর জন্য, একাধিক অ্যাপ্লিকেশন একই বন্দরে সাবস্ক্রাইব করতে পারে। যদি কোনও প্যাকেট ক্লায়েন্টের কাছ থেকে আসে তবে কোন অ্যাপ্লিকেশন এটি গ্রহণ করবে?
ইয়াং জুভেন

123

হ্যাঁ (টিসিপি-র জন্য) আপনার যদি দুটি প্রোগ্রাম একই সকেটে শোনা যায় তবে যদি প্রোগ্রামগুলি এমনভাবে তৈরি করা হয়। প্রথম প্রোগ্রাম দ্বারা সকেট তৈরি করা হলে, SO_REUSEADDRআপনার আগে সকেটে বিকল্পটি সেট করা আছে তা নিশ্চিত করুন bind()। তবে এটি আপনি যা চান তা নাও হতে পারে। এটি যা করে তা আসন্ন টিসিপি সংযোগটি প্রোগ্রামগুলির মধ্যে একটিতে পরিচালিত হবে , উভয়ই নয়, সুতরাং এটি সংযোগটির সদৃশ হয় না, এটি কেবলমাত্র দুটি প্রোগ্রামকে আগত অনুরোধটি পরিবেশন করার অনুমতি দেয়। উদাহরণস্বরূপ, ওয়েব সার্ভারের 80 পোর্টে সমস্ত শোনা একাধিক প্রক্রিয়া থাকবে এবং ও / এস প্রসেসটিতে একটি নতুন সংযোগ প্রেরণ করবে যা নতুন সংযোগ গ্রহণ করতে প্রস্তুত।

SO_REUSEADDR

bind()ইতিমধ্যে বন্দরে আবদ্ধ কোনও সক্রিয় শ্রবণ সকেট না থাকলে এই বন্দরে অন্যান্য সকেটগুলিকে অনুমতি দেয় । ক্রাশের পরে আপনি যখন সার্ভারটি পুনরায় চালু করার চেষ্টা করবেন তখন এটি আপনাকে "ইতিমধ্যে ব্যবহারের ঠিকানা" ত্রুটি বার্তাগুলির কাছাকাছি যেতে সক্ষম করে।


1
টিসিপি + ইউডিপি এখন কাজ করে (একটি নতুন যথেষ্ট কার্নেল দেওয়া হয়েছে)। উত্তরে আমি যুক্ত লিঙ্কটি দেখুন।
dpb

3
এই উত্তরটি সঠিক নয় যতক্ষণ না সমস্ত সকেট স্বতন্ত্র আইপি ঠিকানাগুলিতে আবদ্ধ থাকে যার কোনটিই INADDR_ANY নয়, বা আপনি উইন্ডোতে না থাকলে, যেখানে ফলাফলটি অনির্ধারিত।
মারকুইস লরেন

1
একই বন্দরে ডেটা কীভাবে কোনও নির্দিষ্ট অ্যাপে যায় তার উপর আপনি কী প্রসারিত করতে পারেন? অ্যাপ্লিকেশনগুলি SO_REUSEADDR বা SO_REUSEPORT কখন ব্যবহার করে সে সম্পর্কে ভাবার জন্য কি কোনও সুরক্ষা উদ্বেগ রয়েছে?
trusktr

@ ইজেপি আপনি কি আমার আগের মন্তব্যটি একবার দেখে নিতে পারেন?
trusktr

3
SO_REUSEADDRকমপক্ষে ইউনিক্সে অবশ্যই একই সময়ে আপনার দুটি টিসিপি সকেট শোনা অবস্থায় রাখতে দেয় না। এটি প্রায় কাছাকাছি পেতে বোঝানো হয়েছে TIME_WAIT state: unixguide.net/network/sketfaq/4.5.shtml । এটি উইন্ডোতে কাজ করতে পারে তবে আপনি নিশ্চিত নন যে অনুরোধটি যাইহোক সঠিক সার্ভারে পৌঁছে যাবে)।
ব্রুনো

48

হ্যাঁ.

  1. একাধিক শ্রবণকারী টিসিপি সকেট, সমস্ত একই পোর্টের সাথে আবদ্ধ, সহ-বিদ্যমান থাকতে পারে তবে শর্ত থাকে যে সেগুলি সমস্ত স্থানীয় আইপি ঠিকানার সাথে আবদ্ধ থাকে। গ্রাহকরা তাদের যে কোনও একটিতে সংযোগ করতে পারেন। এটি বাদ দেয় 0.0.0.0( INADDR_ANY)।

  2. একাধিক স্বীকৃত সকেট সহ-অস্তিত্ব থাকতে পারে, সমস্ত একই শ্রবণকারী সকেট থেকে গৃহীত, সমস্তই শ্রবণ সকেটের মতো একই স্থানীয় পোর্ট নম্বর দেখায়।

  3. একই পোর্টে আবদ্ধ একাধিক ইউডিপি সকেট (1) এর মতো একই শর্ত সরবরাহ করে বা তাদের সকলের SO_REUSEADDRকাছে বাইন্ডিংয়ের আগে বিকল্প সেট রয়েছে all

  4. টিসিপি পোর্ট এবং ইউডিপি বন্দরগুলি বিভিন্ন নেমস্পেসগুলি দখল করে, তাই টিসিপি-র জন্য একটি পোর্টের ব্যবহার ইউডিপি-র জন্য এর ব্যবহারকে হ্রাস করে না এবং বিপরীতে।

তথ্যসূত্র: স্টিভেনস এবং রাইট, টিসিপি / আইপি সচিত্র, দ্বিতীয় খণ্ড।


আপনার হাতে একটি লিঙ্ক আছে? টিসিপি-ইউডিপি সহাবস্থান করার সুযোগটি আমার খুব প্রশ্ন। অগ্রিম ধন্যবাদ :)
উলফ

1
@ ওল্ফ এটি চেষ্টা করুন। এটাই আপনার সত্য প্রমাণ প্রয়োজন। আমার উদ্ধৃতিটি স্টিভেনস এবং রাইট: আপনি এর চেয়ে ভাল আর পেতে পারেন না।
লার্নের মারকুইস

1
প্রতিক্রিয়া জন্য ধন্যবাদ, আমি আরও মনোযোগী পড়া প্রয়োজন। আপনি ইতিমধ্যে লিখেছেন যে ইউডিপি এবং টিসিপি সহাবস্থান করতে পারে
নেকড়ে

47

নীতিগতভাবে, না।

এটি পাথরে লেখা নেই; তবে সমস্ত এপিআই-র লিখিতভাবে এটি হয়: অ্যাপ্লিকেশনটি একটি পোর্ট খোলে, এতে একটি হ্যান্ডেল পায়, এবং ক্লায়েন্ট সংযোগ (বা ইউডিপি ক্ষেত্রে কোনও প্যাকেট) উপস্থিত হলে ওএস এটিকে (সেই হ্যান্ডেলের মাধ্যমে) অবহিত করে।

ওএস যদি দুটি অ্যাপ্লিকেশনকে একই বন্দরটি খুলতে দেয় তবে এটি কীভাবে জানবে যে কোনটি অবহিত করবে?

তবে ... এর চারপাশে উপায় আছে:

  1. জেড যেমন উল্লেখ করেছেন , আপনি একটি 'মাস্টার' প্রক্রিয়া লিখতে পারেন, এটি কেবলমাত্র একমাত্র যা বন্দরে সত্যই শোনে এবং অন্যকে অবহিত করে, ক্লায়েন্টের অনুরোধগুলি পৃথক করতে চায় এমন কোনও যুক্তি ব্যবহার করে।
    • লিনাক্স এবং বিএসডি-তে (কমপক্ষে) আপনি কোনও 'রিম্যাপিং' বিধি তৈরি করতে পারেন যা কোনও প্যাকেটগুলিকে 'দৃশ্যমান' বন্দর থেকে আলাদা আলাদা (যেখানে অ্যাপ্লিকেশনগুলি শুনছে), কোনও নেটওয়ার্ক সম্পর্কিত মানদণ্ড অনুসারে (সম্ভবত উত্সের নেটওয়ার্ক, বা কিছু) লোড ব্যালেন্সিংয়ের সহজ ফর্মগুলি)।

37
iptables -m statistic --mode random --probability 0.5মজার.
জেড স্মিথ 21

1
"একটি পোর্ট খোলে" ঠিক কী বোঝায়? আমি বাক্যটি বুঝতে পারি তবে কী আপনি জানেন যে সিস্টেমটি যখন কোনও বন্দরটি খোলার এবং হ্যান্ডেল করার সময় ঠিক কী করে? আমি জানি যে আপনি যখন টিসিপি দিয়ে কোনও বন্দর খুলতে চান, আপনি একটি স্ট্রিম পাবেন এবং সেই স্ট্রিমটি হ'ল রিমোটের সাথে আপনার সংযোগ তবে আমি ওয়েবে অনুসন্ধান করি এবং খুব ভাল ব্যাখ্যা পাই না।
স্যামুয়েল

4
@ সামুয়েল: একটি পোর্ট খোলার (সার্ভার মোডে) অর্থ একটি ফাইল বর্ণনাকারী পাওয়া, এবং সিস্টেমটি যখন port পোর্ট নম্বরে একটি এসওয়াইএন প্যাকেট পেয়ে যায়, এসওয়াইএন + এসকে দিয়ে সাড়া দেয় এবং সম্পর্কিত ফাইল বিবরণীতে একটি ইভেন্ট উত্পন্ন করে। অ্যাপ্লিকেশনটি সেই ইভেন্টটিকে একটি গ্রহণযোগ্য () কল দিয়ে সাড়া দেয়, যা নির্দিষ্ট স্ট্রিমের সাথে যুক্ত একটি নতুন ফাইল বর্ণনাকারী তৈরি করে, ক্লায়েন্টদের কাছ থেকে নতুন সংযোগ পেতে মূল সার্ভার বর্ণনাকারীকে মুক্ত রাখে
জাভিয়ের

7
এই উত্তরটি সঠিক হিসাবে বিবেচনা করা যায় না। এটি সম্পূর্ণরূপে SO_REUSEADDR এবং SO_REUSEPORT উভয়ের অস্তিত্বকেই উপেক্ষা করে।
লার্নের মারকুইস

পছন্দ করুন সার্ভার অ্যাপ্লিকেশনটির দৃষ্টিকোণ থেকে একটি পোর্ট খোলার ঘটনা তখনই ঘটে যখন আপনি শ্রবণকারী সকেটকে বাঁধেন, বা আপনি যে সকেটটি ব্যবহার করতে চলেছেন তার সাথে আবদ্ধ listen()হন। সম্ভবত সম্ভবত প্রশ্নটি এটি ফায়ারওয়ালে খোলার বিষয়ে। এখানে অনেক বেশি ত্রুটি রয়েছে এবং 7 বছরে সমস্ত অসম্পূর্ণ হয়েছে। উত্তর একই পোর্ট নম্বর সহ বিভিন্ন স্থানীয় ঠিকানায় বাঁধাইয়ের ক্ষেত্রেও বাদ দেয়। এটি আসলে সম্পূর্ণ ভুল।
মার্নকুইস অফ লরেন

27

হ্যাঁ নিশ্চিতভাবে । যতক্ষণ না আমি কার্নেল সংস্করণ থেকে মনে করি 3.9 (সংস্করণে নিশ্চিত নয়) এর পরে সমর্থনটির জন্য SO_REUSEPORTপ্রবর্তন করা হয়েছিল। SO_RESUEPORTঠিক একই পোর্ট এবং ঠিকানার সাথে বাঁধার অনুমতি দেয়, যতক্ষণ না প্রথম সার্ভারটি সকেট বাঁধার আগে এই বিকল্পটি সেট করে।

এটি টিসিপি এবং ইউডিপি উভয়ের পক্ষে কাজ করে । আরও তথ্যের জন্য লিঙ্কটি দেখুন: SO_REUSEPORT

দ্রষ্টব্য : গৃহীত উত্তরগুলি আমার মতামত অনুসারে আর সত্য থাকে না।


2
সম্পূর্ণ সত্য। এটি যদি সত্য না হয় তবে ওয়্যারশার্ক কীভাবে কাজ করতে পারে?
স্টাসেক

5
@ স্ট্যাসেক ওয়্যারশার্ক বন্দর শোনেন না। এটি প্যাকেট পর্যায়ে পরিচালনা করে।
লার্নের মারকুইস

ওহ, এটা বোঝা যাবে। যাইহোক, 2 অ্যাপ্লিকেশন দ্বারা দুটি পোর্ট শোনার অবশ্যই সম্ভব।
স্টাজেক

18

না। কেবলমাত্র একটি অ্যাপ্লিকেশন একবারে একটি বন্দরে বাঁধতে পারে এবং যদি বাধ্যতামূলকভাবে বাধ্যতামূলক বাধ্যতামূলক করা হয় তবে তা সীমাহীন is

মাল্টিকাস্ট সকেটগুলির সাথে - যা আপনি যা চান তার কাছে কোথাও লাগে না - যতক্ষণ না প্রতিটি সকেটের বিকল্পগুলিতে SO_REUSEADDR সেট করা থাকে ততক্ষণ একাধিক অ্যাপ্লিকেশন কোনও বন্দরে আবদ্ধ হতে পারে।

আপনি "মাস্টার" প্রক্রিয়া লিখে এটি সম্পাদন করতে পারেন, যা সমস্ত সংযোগ গ্রহণ করে এবং প্রক্রিয়া করে, তারপরে এগুলি আপনার দুটি অ্যাপ্লিকেশনের হাতে তুলে দেয়, যাদের একই বন্দরে শুনতে হবে। ওয়েব সার্ভারগুলি এবং এ জাতীয় গ্রহণের পদ্ধতিটি হ'ল, যেহেতু অনেকগুলি প্রক্রিয়াতে 80 শোনা উচিত।

এর বাইরেও, আমরা সুনির্দিষ্ট হয়ে যাচ্ছি - আপনি টিসিপি এবং ইউডিপি উভয়কে ট্যাগ করেছেন, এটি কোনটি? এছাড়াও, কি প্ল্যাটফর্ম?


উভয়ই আমার আগ্রহী। প্ল্যাটফর্মটি উইন্ডোজ, তবে লিনাক্সের জন্য উত্তরটি যদি আলাদা হয় তবে তা জেনে রাখা ভাল
নাদিব

8
আসার মাল্টিকাস্ট সকেট তেমন কোনও জিনিস নেই। সেখানে ইউডিপি সকেট রয়েছে। মাল্টিকাস্ট SO_REUSEADDR এর পূর্ব শর্ত নয়।
মারকুইস

3

একটি নেটওয়ার্ক ইন্টারফেসের জন্য আপনার একটি পোর্টে একটি অ্যাপ্লিকেশন শোনা যেতে পারে। সুতরাং আপনি থাকতে পারে:

  1. httpd দূরবর্তী অ্যাক্সেসযোগ্য ইন্টারফেসে শুনা, যেমন 192.168.1.1:80
  2. অন্য ডিমন শুনছেন 127.0.0.1:80

নমুনা ব্যবহারের ক্ষেত্রে httpdলোড ব্যালান্সার বা প্রক্সি হিসাবে ব্যবহার করা যেতে পারে ।


3

অন্য উপায় হ'ল একটি পোর্টে শোনার একটি প্রোগ্রাম ব্যবহার করা যা ট্রাফিকের ধরণের বিশদ বিশ্লেষণ করে (এসএসএস, https ইত্যাদি) এটি অভ্যন্তরীণভাবে অন্য কোনও বন্দরে পুনর্নির্দেশ করে যেখানে "আসল" পরিষেবাটি শুনছে।

উদাহরণস্বরূপ, লিনাক্সের জন্য, sslh: https://github.com/yrutschle/sslh


উইন্ডোতে কি এমন প্রোগ্রাম আছে? আমার আমার স্থানীয় আইআইএস সার্ভার এবং অ্যাক্টিভ এমকিউ ব্রোকার উভয়ই 443 বন্দরটিতে শুনতে হবে
হার্ভে লিন

3

আপনি যখন কোনও টিসিপি সংযোগ তৈরি করেন, আপনি একটি নির্দিষ্ট টিসিপি ঠিকানার সাথে সংযোগ রাখতে বলেন, যা কোনও আইপি ঠিকানার (v4 বা v6, আপনার ব্যবহার করা প্রোটোকলের উপর নির্ভর করে) এবং একটি পোর্টের সংমিশ্রণ।

যখন কোনও সার্ভার সংযোগের জন্য শোনার জন্য, এটি কার্নেলকে জানাতে পারে যে এটি নির্দিষ্ট আইপি ঠিকানা এবং পোর্ট, যেমন, একটি টিসিপি ঠিকানা, বা হোস্টের প্রতিটি আইপি ঠিকানায় একই পোর্টে শুনতে চায় (সাধারণত আইপি ঠিকানার সাথে নির্দিষ্ট করা হয়) 0.0.0.0), যা কার্যকরভাবে ভিন্ন "বিভিন্ন TCP ঠিকানাগুলি" এর অনেক শুনছে (যেমন, 192.168.1.10:8000, 127.0.0.1:8000, ইত্যাদি)

না, আপনি একই "টিসিপি ঠিকানা" তে দুটি অ্যাপ্লিকেশন শুনতে পাচ্ছেন না কারণ যখন কোনও বার্তা আসে তখন কার্নেলটি কীভাবে অ্যাপ্লিকেশনটিকে বার্তা দেবে তা জানবে?

তবে, বেশিরভাগ অপারেটিং সিস্টেমে আপনি একটি একক ইন্টারফেসে বেশ কয়েকটি আইপি ঠিকানা সেট আপ করতে পারেন (যেমন, যদি আপনার 192.168.1.10ইন্টারফেসে 192.168.1.11থাকে তবে আপনিও সেটআপ করতে পারেন, যদি নেটওয়ার্কের অন্য কেউ এটি ব্যবহার না করে) এবং সেই ক্ষেত্রে আপনি 8000এই দুটি আইপি ঠিকানার প্রত্যেকটিতে পৃথক অ্যাপ্লিকেশন শুনতে পারা যেতে পারে ।


2

যদি কমপক্ষে কোনও রিমোট আইপি ইতিমধ্যে পরিচিত, স্থিতিশীল এবং কেবল আপনার অ্যাপ্লিকেশনগুলির মধ্যে একটিতে কথা বলার জন্য উত্সর্গীকৃত হয় তবে আপনি এই ঠিকানা থেকে "ভাগ করা" স্থানীয় বন্দরটিতে অজ্ঞাত ট্রাফিক পুনর্নির্দেশের জন্য iptables নিয়ম (টেবিল নাট, চেইন PREROUTING) ব্যবহার করতে পারেন you অন্য যে কোনও বন্দর যেখানে উপযুক্ত অ্যাপ্লিকেশনটি শুনতে পায় actually


1

হ্যা এবং না. কেবলমাত্র একটি অ্যাপ্লিকেশন সক্রিয়ভাবে একটি বন্দরে শুনতে পারে। তবে সেই অ্যাপ্লিকেশনটি এর সাথে অন্য কোনও প্রক্রিয়ার সাথে সংযোগ স্থাপন করতে পারে। সুতরাং আপনি একই বন্দরে একাধিক প্রক্রিয়া কাজ করতে পারে।


@ ট্রুসকিটার, আমার মনে হয় তিনি এটিকে
ওয়ার্ভারিওক

1

হ্যাঁ.

এই নিবন্ধ থেকে:
https://lwn.net/Articles/542629/

নতুন সকেট বিকল্পটি একই হোস্টের একাধিক সকেটকে একই বন্দরে বাঁধতে দেয়


1
দুর্দান্ত লিঙ্কটি তবে এই লিখিতভাবে সেখানে লেখা নেই - SO_REUSEPORT বিকল্পটি মানসম্মত নয়
সাহিল সিং

0

যদি অ্যাপ্লিকেশনগুলির দ্বারা আপনি একাধিক প্রক্রিয়া বোঝায় তবে হ্যাঁ তবে সাধারণত হয় না। উদাহরণস্বরূপ, অ্যাপাচি সার্ভার একই বন্দরে একাধিক প্রক্রিয়া চালায় (সাধারণত ৮০) actuallyএটি প্রক্রিয়াটির কোনও একটিকে বাস্তবে বন্দরের সাথে সংযুক্ত করার জন্য নির্দিষ্ট করে এবং তারপরে সংযোগ গ্রহণকারী বিভিন্ন প্রক্রিয়াতে হ্যান্ডওভার করার জন্য সেই প্রক্রিয়াটি ব্যবহার করে।


0

আপনি একই অ্যাপ্লিকেশন একই নেটওয়ার্ক ইন্টারফেসে একই বন্দরের জন্য শোনার জন্য করতে পারেন।

নির্দিষ্ট নেটওয়ার্ক ইন্টারফেস এবং পোর্টের জন্য কেবল একটি শোনার সকেট থাকতে পারে, তবে সেই সকেটটি বেশ কয়েকটি অ্যাপ্লিকেশনের মধ্যে ভাগ করা যায়।

আপনার যদি কোনও অ্যাপ্লিকেশন প্রক্রিয়ায় শোনার সকেট থাকে এবং আপনি forkসেই প্রক্রিয়াটি করেন তবে সকেটটি উত্তরাধিকার সূত্রে প্রাপ্ত হবে, তাই প্রযুক্তিগতভাবে এখন একই বন্দরের শোনার দুটি প্রক্রিয়া থাকবে।


0

আমি নিম্নলিখিতটি চেষ্টা করেছি socat:

socat TCP-L:8080,fork,reuseaddr -

এবং যদিও আমি সকেটের সাথে সংযোগ স্থাপন করি নি, তবুও আমি একই বন্দরে দু'বার শুনতে পারি না reuseaddr বিকল্প ।

আমি এই বার্তাটি পেয়েছি (যা আমি আগে প্রত্যাশা করেছিল):

2016/02/23 09:56:49 socat[2667] E bind(5, {AF=2 0.0.0.0:8080}, 16): Address already in use

0

@ জেনিউটন যা উল্লেখ করেছেন তা কেবল ভাগ করে নিতে। আমি আমার ম্যাকের উপর একটি এনগিনেক্স এবং এমবেডড টমক্যাট প্রক্রিয়া শুরু করেছি। আমি উভয় প্রক্রিয়া 8080 এ চলমান দেখতে পাচ্ছি।

LT<XXXX>-MAC:~ b0<XXX>$ sudo netstat -anp tcp | grep LISTEN
tcp46      0      0  *.8080                 *.*                    LISTEN     
tcp4       0      0  *.8080                 *.*                    LISTEN   

-2

সংক্ষিপ্ত উত্তর:

এখানে দেওয়া উত্তর দিয়ে যাচ্ছেন । একই আইপি ঠিকানা এবং পোর্ট নম্বর শুনে আপনার দুটি অ্যাপ্লিকেশন থাকতে পারে, এত দীর্ঘ বন্দরের একটি ইউডিপি বন্দর, অন্যটি টিসিপি পোর্ট।

ব্যাখ্যা:

টিসিপি / আইপি স্ট্যাকের ট্রান্সপোর্ট লেয়ারের সাথে পোর্টের ধারণা প্রাসঙ্গিক, সুতরাং আপনি যতক্ষণ না স্ট্যাকের বিভিন্ন ট্রান্সপোর্ট লেয়ার প্রোটোকল ব্যবহার করছেন, আপনার একাধিক প্রক্রিয়া একই সাথে শোনা যাবে <ip-address>:<port> সংমিশ্রনে ।

মানুষের একটি সন্দেহ যে দুটি অ্যাপ্লিকেশন একই <ip-address>:<port>সংমিশ্রণে চলমান থাকলে, রিমোট মেশিনে চালিত ক্লায়েন্ট কীভাবে এই দুটির মধ্যে পার্থক্য করতে পারে? আপনি যদি আইপি লেয়ার প্যাকেটের শিরোনামটি দেখে থাকেন ( https://en.wikedia.org/wiki/IPv4# হেডার ) দেখুন, আপনি দেখতে পাবেন যে প্রোটোকল সংজ্ঞায়িত করতে 72 থেকে 79 বিট ব্যবহৃত হয়, এইভাবে পার্থক্য তৈরি করা যায় can

তবে আপনি যদি একই টিসিপিতে দুটি অ্যাপ্লিকেশন চান <ip-address>:<port> সংমিশ্রণে , তবে উত্তরটি হ'ল না (একটি আকর্ষণীয় অনুশীলন দুটি ভিএম চালু করবে, তাদের একই আইপি ঠিকানা দিবে, তবে বিভিন্ন ম্যাক ঠিকানা দিবে, এবং দেখুন কী হবে - আপনি লক্ষ্য করবেন যে কিছু সময় ভিএম 1 প্যাকেট পাবে, এবং অন্যান্য সময় ভিএম 2 প্যাকেট পাবে - এআরপি ক্যাশে রিফ্রেশের উপর নির্ভর করে)।

আমি মনে করি যে দুটি অ্যাপ্লিকেশন একইভাবে চালানো হয়েছে <op-address>:<port> আপনি একরকম লোড ভারসাম্য অর্জন করতে চান। এর জন্য আপনি বিভিন্ন বন্দরগুলিতে অ্যাপ্লিকেশনগুলি পরিচালনা করতে পারেন এবং তাদের মধ্যে ট্র্যাফিক বিভক্ত করতে আইপি টেবিল বিধিগুলি লিখতে পারেন।

এছাড়াও @ ব্যবহারকারী 6169806 এর উত্তর দেখুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.