কীভাবে ওয়েব সার্ভারগুলি আইপি অ্যাড্রেসগুলিতে বাধা দেয় বা ভোট দেয়?


87

আমি ওয়েব সার্ভারগুলির নীচের বিবরণগুলি বোঝার চেষ্টা করছি। আমি ভাবছি যে কোনও সার্ভার, বলুন আপাচি, ক্রমাগতভাবে নতুন অনুরোধগুলির জন্য পোলিং করছে বা যদি এটি কোনও ধরণের বিঘ্নিত সিস্টেমের দ্বারা কাজ করে। যদি এটি একটি বাধা হয়, যা বাধা স্পার করছে, এটি নেটওয়ার্ক কার্ড ড্রাইভার?


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

1
@ সাউডস্ট খুব আকর্ষণীয় প্রশ্নটি সত্যই
এসডাব্লু

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

@ জি-ম্যান: আমি তত্ত্ব, হ্যাঁ। বাস্তবে বেশিরভাগ টাইপিস্টরা 1 জিবিট / গুলি টাইপ করেন না, যা দুটি ভিন্ন আর্কিটেকচারকে ন্যায্যতা দেয়। একটি পরিষ্কার, নমনীয় এবং ধীর, একটি আনাড়ি কিন্তু উচ্চ গতি।
এমসাল্টারস

উত্তর:


181

সংক্ষিপ্ত উত্তরটি হ'ল: এক ধরণের বিঘ্নিত সিস্টেম। মূলত, তারা ব্লকিং আই / ও ব্যবহার করে, যার অর্থ তারা নতুন ডেটার জন্য অপেক্ষা করার সময় ঘুমায় (ব্লক) করে।

  1. সার্ভারটি একটি শোনার সকেট তৈরি করে এবং তারপরে নতুন সংযোগের জন্য অপেক্ষা করার সময় ব্লক করে। এই সময়ে, কার্নেল প্রক্রিয়াটিকে একটি বাধাপ্রাপ্ত ঘুমের স্থানে রাখে এবং অন্যান্য প্রক্রিয়াগুলি চালায়। এটি একটি গুরুত্বপূর্ণ বিষয়: ক্রমাগত প্রক্রিয়া সমীক্ষা করা সিপিইউ নষ্ট করবে। কার্নেল প্রক্রিয়াটি কাজ না করার অবধি প্রক্রিয়াটিকে অবরুদ্ধ করে আরও কার্যকরভাবে সিস্টেম সংস্থানগুলি ব্যবহার করতে সক্ষম হয়।

  2. যখন নতুন ডেটা নেটওয়ার্কে আসে তখন নেটওয়ার্ক কার্ড একটি বাধা দেয়।

  3. নেটওয়ার্ক কার্ড থেকে একটি বাধা রয়েছে তা দেখে কার্নেল, নেটওয়ার্ক কার্ড ড্রাইভারের মাধ্যমে, নেটওয়ার্ক কার্ড থেকে নতুন ডেটা পড়ে এবং এটি মেমোরিতে সঞ্চয় করে। (এটি অবশ্যই দ্রুত সম্পন্ন করা উচিত এবং সাধারণত বিঘ্নিত হ্যান্ডলারের অভ্যন্তরে পরিচালিত হয়))

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

  5. এর অবসর সময়ে, কার্নেলটি অবরুদ্ধ ওয়েবসারভার প্রক্রিয়াটি জাগিয়ে তুলবে। (যেহেতু এটি এখন চালানো যায়))

  6. ওয়েবসভার প্রক্রিয়াটি চালিয়ে যেতে থাকে যেন কোনও সময় কেটে যায় না। এটির ব্লকিং সিস্টেম কল রিটার্ন দেয় এবং এটি কোনও নতুন ডেটা প্রক্রিয়াকরণ করে। তারপরে ... 1 ধাপে যান।


18
ওয়েব সার্ভার প্রক্রিয়া বনাম কার্নেলের সুস্পষ্ট বর্ণনার জন্য +1।
রাসেল বোরোগোভ

13
আমি এত জটিল কিছু বিশ্বাস করতে পারি না কারণ এটি এত পরিষ্কারভাবে এবং সরলভাবে সংক্ষিপ্ত করা যেতে পারে তবে আপনি এটি করেছিলেন। +1
ব্র্যান্ডন

8
+1 দুর্দান্ত উত্তর। এছাড়াও, 2 থেকে 3 এর মধ্যে ধাপগুলি আধুনিক এনআইসি, ওএস এবং ড্রাইভারদের সাথে কিছুটা জটিল হতে পারে। উদাহরণস্বরূপ, লিনাক্সে এনএপিআই সহ , প্যাকেটগুলি আসলে বাধা প্রসঙ্গে পাওয়া যায় না। পরিবর্তে, কার্নেল বলে "ঠিক আছে এনআইসি, আমি বুঝতে আপনি ডাটা পেয়েছেন। Bugging আমাকে (বিঘ্ন উৎস অক্ষম) ছাড়ো, এবং আমি এই প্যাকেট দখল করতে খুব শীঘ্রই ফিরে হবেন এবং পরবর্তী প্যাকেট তার আগে আমি কি পৌঁছা পারে।"
জোনাথন রাইনহার্ট

8
সামান্য নিটপিক: এটি ব্লক করা সত্যিই প্রয়োজন হয় না। যত তাড়াতাড়ি সার্ভার প্রক্রিয়া একটি শ্রবণকারী সকেট তৈরি করেছে, ততক্ষণ আপনি ভিতরে বাধা না থাকা সত্ত্বেও, কার্নেল সেই বন্দরে SYN গ্রহণ করবে accept। তারা (ভাগ্যক্রমে, বা এটি পুরোপুরি স্তন্যপান হবে!) স্বতন্ত্র, অবিচ্ছিন্নভাবে চলমান কাজগুলি। সংযোগগুলি আসার সাথে সাথে সেগুলিকে একটি সারিতে স্থাপন করা হয়েছে যেখানে acceptএগুলি সেগুলি টানবে। কেবলমাত্র যদি কেউ না থাকে তবে এটি অবরুদ্ধ করে।
দামন

3
"নেটওয়ার্ক কার্ড থেকে নতুন ডেটা পড়ে এবং এটিকে মেমোরিতে সঞ্চয় করে (
সিয়ুয়ান রেন

9

যথেষ্ট "নিম্ন" বিশদ রয়েছে।

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

কোথাও সার্ভারে এমন একটি সিস্টেম কল রয়েছে যা "আমাকে কিছু করার জন্য দিন" বলে। এটি করা যেতে পারে এমন দুটি বিস্তৃত বিভাগ। অ্যাপাচি এর ক্ষেত্রে এটি acceptসকেটে কল করে যা আগে অ্যাপাচি খুলেছিল, সম্ভবত পোর্ট ৮০ এ শুনছে ker কার্নেল সংযোগের চেষ্টাগুলির একটি সারি বজায় রাখে এবং প্রতিবার টিসিপি এসওয়াইএন পাওয়ার সাথে সাথে এই সারিটি যুক্ত করে । কার্নেল টিসিপি এসওয়াইএন প্রাপ্ত হয়েছিল কীভাবে তা ডিভাইস ড্রাইভারের উপর নির্ভর করে; অনেক এনআইসি-র ক্ষেত্রে নেটওয়ার্কের ডেটা পাওয়ার পরে সম্ভবত একটি হার্ডওয়্যার বিঘ্ন ঘটেছে।

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

একবার acceptফিরে আসার পরে , অ্যাপাচি জানে যে কেউ সংযোগ দেওয়ার চেষ্টা করছেন। এরপরে অ্যাপাচি প্রক্রিয়াটিকে দুটি অভিন্ন প্রক্রিয়াতে ভাগ করার জন্য কাঁটাচামচ কল করে। এইগুলির মধ্যে একটি HTTP অনুরোধটি প্রক্রিয়া করতে চলেছে, অন্য acceptসংযোগটি পরবর্তী সংযোগ পেতে আবার কল করে calls সুতরাং, সর্বদা একটি মাস্টার প্রক্রিয়া থাকে যা কল acceptএবং উপ-প্রক্রিয়াগুলি স্পন ছাড়া কিছুই করে না এবং তারপরে প্রতিটি অনুরোধের জন্য একটি উপ-প্রক্রিয়া রয়েছে।

এটি সরলকরণ: প্রক্রিয়াগুলির পরিবর্তে থ্রেডগুলির সাহায্যে এটি করা সম্ভব এবং অনুরোধ forkপেলে একটি শ্রমিক প্রক্রিয়া প্রস্তুত থাকে, সুতরাং প্রারম্ভিক ওভারহেড হ্রাস করে। অ্যাপাচি কীভাবে এটি কনফিগার করা হয়েছে তার উপর নির্ভর করে এই যে কোনও একটি কাজ করতে পারে।

এটা কিভাবে করতে হবে প্রথম বৃহত্ শ্রেণীর, এবং এটি বলা হচ্ছে আই ব্লক কারণ সিস্টেম মত কল acceptএবং readএবং writeযা সকেট কাজ প্রক্রিয়া স্থগিত থাকবে যতক্ষন না তারা ফিরে যাওয়ার কিছু আছে।

এটি করার অন্যান্য বিস্তৃত উপায়কে অ-ব্লকিং বা ইভেন্ট ভিত্তিক বা অ্যাসিঙ্ক্রোনাস আইও বলা হয় । এটি সিস্টেম কল selectবা এর মতো প্রয়োগ করা হয় epoll। এগুলি প্রত্যেকে একই কাজ করে: আপনি তাদের সকেটের একটি তালিকা দিন (বা সাধারণভাবে, ফাইল বর্ণনাকারী) এবং আপনি তাদের সাথে কী করতে চান এবং কার্নেল সেগুলির মধ্যে একটি কাজ করার জন্য প্রস্তুত না হওয়া পর্যন্ত অবরুদ্ধ করে।

এই মডেলটির সাহায্যে, আপনি কার্নেলকে (সহ epoll) বলতে পারেন, "আমার যখন খোলা এই অন্যান্য 9471 সংযোগের কোনওটিতে পোর্ট ৮০ বা নতুন ডেটাতে নতুন সংযোগ রয়েছে তখন আমাকে বলুন" " epollএইগুলির মধ্যে একটির প্রস্তুত না হওয়া অবধি অবরুদ্ধ থাকে, তবে আপনি এটি করুন। তারপরে আপনি পুনরাবৃত্তি করুন। সিস্টেম কল মত acceptএবং readএবং writeকখনও ব্লক, আংশিকভাবে কারণ যখনই আপনি তাদের কল, epollশুধু আপনার বলছে যে তারা প্রস্তুত হয় তাই ব্লক কোনো কারণ হতে চাই, এবং এছাড়াও কারণ যখন আপনি সকেট বা ফাইল আপনার নির্দিষ্ট করা খুলুন আপনি তাদের চাই যে নন-ব্লকিং মোডে, সুতরাং সেই কলগুলি EWOULDBLOCKব্লক করার পরিবর্তে ব্যর্থ হবে ।

এই মডেলটির সুবিধাটি হ'ল আপনার কেবল একটি প্রক্রিয়া দরকার। এর অর্থ প্রতিটি অনুরোধের জন্য আপনাকে স্ট্যাক এবং কার্নেল কাঠামো বরাদ্দ করতে হবে না। Nginx এবং HAProxy এই মডেলটি ব্যবহার করে এবং এটি একই ধরণের হার্ডওয়্যারে অ্যাপাচি এর চেয়ে আরও অনেক সংযোগের সাথে ডিল করতে পারে তার একটি বড় কারণ।

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