Tcp_tw_re سائیکل / 1 পুনরায় ব্যবহারের সেটগুলি কী কী?


10

আমি আমার কনফিগারেশন ফাইলে tcp_tw_reयकल / পুনরায় ব্যবহার উভয়ই সেট করে।

এটি করার ব্যত্যয়গুলি কী কী?

যদি কোনও টিসিপি সকেট পুনরায় ব্যবহার করা হয়, তা কি সুরক্ষা ঝুঁকি তৈরি করে? অর্থাত্ 2 টি পৃথক সংযোগ উভয়ই ডেটা প্রেরণে সক্ষম?

এটি সংযোগের লিট সুযোগের সাথে স্বল্প-স্থায়ী সংযোগগুলির জন্য উপযুক্ত?


সুস্পষ্ট প্রশ্ন হ'ল, আপনি এই পরিবর্তন থেকে কী লাভ করবেন বলে আশা করছেন?
রবার্ট মুন্তানু

1
@ রবার্টমুন্তানু সম্পর্কিত: সার্ভারফ্লাট
প্রশ্ন

উত্তর:


24

ডিফল্টরূপে, যখন উভয় tcp_tw_reuseএবং tcp_tw_recycleঅক্ষম হয়ে গেলে, কার্নেল নিশ্চিত করবে যে TIME_WAITরাজ্যে সকেটগুলি সেই রাজ্যে যথেষ্ট দীর্ঘ থাকবে - এটি নিশ্চিত হওয়ার জন্য যথেষ্ট যে ভবিষ্যতের সংযোগগুলির সাথে সম্পর্কিত প্যাকেটগুলি পুরানো সংযোগের দেরী প্যাকেটের জন্য ভুল হবে না।

যখন আপনি সক্ষম করবেন tcp_tw_reuse, TIME_WAITরাষ্ট্রের সকেটগুলি মেয়াদ শেষ হওয়ার আগে ব্যবহার করা যেতে পারে এবং কার্নেলটি এটি নিশ্চিত করার চেষ্টা করবে যে টিসিপি সিকোয়েন্স সংখ্যার সাথে কোনও সংঘর্ষ নেই। আপনি যদি সক্ষম হন tcp_timestamps(ওরফে PAWS, সুরক্ষার বিরুদ্ধে র‌্যাপড সিকোয়েন্স নম্বরের জন্য), এটি নিশ্চিত করবে যে এই সংঘর্ষগুলি ঘটতে পারে না। যাইহোক, উভয় প্রান্তে সক্রিয় করার জন্য আপনার টিসিপি টাইমস্ট্যাম্পগুলি প্রয়োজন (অন্তত, এটি আমার বোঝার)। গোরো বিবরণের জন্য tcp_twsk_unique এর সংজ্ঞাটি দেখুন ।

আপনি সক্ষম করার পরে tcp_tw_recycle, কার্নেলটি আরও বেশি আক্রমণাত্মক হয়ে ওঠে এবং দূরবর্তী হোস্টগুলির দ্বারা ব্যবহৃত টাইমস্ট্যাম্পগুলিতে অনুমানগুলি তৈরি করে। এটি প্রতিটি দূরবর্তী হোস্টের TIME_WAITরাষ্ট্রের সাথে সংযোগযুক্ত সর্বশেষ টাইমস্ট্যাম্প ট্র্যাক করবে ) এবং টাইমস্ট্যাম্পটি সঠিকভাবে বৃদ্ধি পেলে সকেটটি পুনরায় ব্যবহারের অনুমতি দেয়। তবে, হোস্ট দ্বারা ব্যবহৃত টাইমস্ট্যাম্প পরিবর্তিত হলে (অর্থাত্ সময়সীমার পিছনে ফিরে আসে), SYNপ্যাকেটটি নিঃশব্দে বাদ যাবে এবং সংযোগটি প্রতিষ্ঠিত হবে না (আপনি "সংযুক্ত সময়সীমা" এর অনুরূপ একটি ত্রুটি দেখতে পাবেন)। আপনি যদি কার্নেল কোডটিতে ডুব দিতে চান তবে tcp_timewait_state_process এর সংজ্ঞাটি একটি ভাল সূচনা পয়েন্ট হতে পারে।

এখন, টাইমস্ট্যাম্পগুলি কখনই সময় মতো ফিরে আসা উচিত নয়; যদি না:

  • হোস্টটি পুনরায় বুট করা হয়েছে (তবে তারপরে, এটি ফিরে আসার সাথে সাথে TIME_WAITসম্ভবত সকেটটির মেয়াদ শেষ হয়ে যাবে, সুতরাং এটি কোনও নন ইস্যু হবে);
  • আইপি অ্যাড্রেসটি দ্রুত অন্য কোনও কিছুর দ্বারা পুনরায় ব্যবহার করা হয়েছে ( TIME_WAITসংযোগগুলি কিছুটা সময় TCP RSTঅবধি থাকবে , তবে অন্যান্য সংযোগগুলি সম্ভবত আঘাত হানে এবং এটি কিছু স্থান খালি করে দেবে);
  • নেটওয়ার্ক ঠিকানার অনুবাদ (বা স্মার্ট প্যান্ট ফায়ারওয়াল) সংযোগের মাঝখানে জড়িত।

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

কিছু লোক একা চলে যাওয়ারtcp_tw_recycletcp_tw_reusetcp_timewait_len পরামর্শ দেয় তবে সক্ষম এবং কম করে দেয় । আমি একমত :-)


দুর্দান্ত ব্যাখ্যা
ইয়াঙ্গলি

6

আমার কেবল এই কামড় ছিল, যাতে কেউ আমার ব্যথা এবং কষ্ট থেকে উপকৃত হতে পারে। প্রথমত, প্রচুর তথ্যের সাথে জড়িত লিঙ্ক: http://vincent.bernat.im/en/blog/2014-tcp-time-wait-state-linux.html

নির্দিষ্টভাবে:

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

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

আমি আবার এটি একটি পাবলিক ফেসবুকের মুখোমুখি হ্যাপ্রোক্সি সিস্টেমে করেছি, ভারসাম্যহীন ট্র্যাফিক লোড করে, সত্যিই প্রভাবটি (বোবা, ডান ?!) অধ্যয়ন না করে এবং অনেক সমস্যার সমাধানের পরে এবং ভূতদের তাড়া করার পরে আবিষ্কার করেছি যে:

  • এটি NAT এর মাধ্যমে সংযোগকারী ক্লায়েন্টদের জন্য মায়াম তৈরি করবে।
  • এটি সনাক্ত করা প্রায় অসম্ভব কারণ এটি সম্পূর্ণ এলোমেলো, মাঝে মাঝে এবং লক্ষণগুলি গ্রাহক এ, গ্রাহক বি এর চেয়ে সম্পূর্ণ ভিন্ন (বা না) সময়ে আঘাত করবে etc.

গ্রাহকের পক্ষ থেকে, তারা এমন সময়কালে দেখতে পাবেন যেখানে তারা আর কখনও কখনও এসআইএন প্যাকেটগুলিতে প্রতিক্রিয়া পাবে না, কখনও কখনও এখানে এবং সেখানে এবং কখনও কখনও দীর্ঘ সময়ের জন্য। আবার, এলোমেলো।

আমার সাম্প্রতিক, বেদনাদায়ক, অভিজ্ঞতার মধ্যে এখানে ছোট গল্পটি এটিকে একা / অক্ষম রেখে পাবলিক ফেসিং সার্ভারগুলিতে, ভূমিকা নির্বিশেষে!


4

'ম্যান 7 টিসিপি' থেকে আপনি এটি দেখতে পাবেন:

   tcp_tw_recycle (Boolean; default: disabled; since Linux 2.4)
          Enable fast recycling of TIME_WAIT sockets.  Enabling this option is not recommended since this causes problems when working with NAT
          (Network Address Translation).

   tcp_tw_reuse (Boolean; default: disabled; since Linux 2.4.19/2.6)
          Allow  to  reuse  TIME_WAIT  sockets  for  new connections when it is safe from protocol viewpoint.  It should not be changed without
          advice/request of technical experts.

সেখানে খুব একটা সাহায্য নেই। এই uestion কিছু ভাল অন্তর্দৃষ্টি আছে:

/programming/6426253/tcp-tw-reuse-vs-tcp-tw-recycle-which-to-use-or-both

তবে পুনঃব্যবহারের ক্ষেত্রে পুনর্ব্যবহারের চেয়ে কেন নিরাপদ সে সম্পর্কে সুনির্দিষ্ট তথ্য নয়। মূল উত্তরটি হ'ল tcp_tw_reuse একই টিসিপি প্যারামিটার সহ TIME_WAIT এ ইতিমধ্যে যদি একটি থাকে এবং এটি এমন অবস্থায় থাকে যেখানে কোনও ট্র্যাফিক প্রত্যাশিত না হয় (আমি বিশ্বাস করি এটি যখন এফআইএন প্রেরণ করা হয়েছিল তখন )। অন্যদিকে tcp_tw_re سائیکل কেবলমাত্র TIME_WAIT এ থাকা সকেটগুলিকে রাষ্ট্র নির্বিশেষে একই পরামিতিগুলি পুনরায় ব্যবহার করবে, যা রাষ্ট্রীয় ফায়ারওয়ালগুলিকে বিভ্রান্ত করতে পারে যা বিভিন্ন প্যাকেটের প্রত্যাশা করে।

tcp_tw_reuse কোডটি নির্বাচন করে SO_REUSEADDR সকেট বিকল্পটি সেট করে, man 7 socketযেমন নথিভুক্ত করা যেতে পারে :

   SO_REUSEADDR
          Indicates that the rules used in validating addresses supplied in a bind(2) call should allow reuse of local addresses.  For  AF_INET
          sockets  this means that a socket may bind, except when there is an active listening socket bound to the address.  When the listening
          socket is bound to INADDR_ANY with a specific port then it is not possible to bind to this port for any local address.   Argument  is
          an integer boolean flag.

1
আপনি কি নিশ্চিত যে SO_REUSEADDRএর সাথে যুক্ত tcp_tw_reuse? যতদূর আমি জানি, SO_REUSEADDRকেবলমাত্র যখন আপনি চান তখনই প্রযোজ্য bind(), যখন কোনও নতুন বহির্গামী সংযোগ তৈরি করার প্রয়োজন হলে tcp_tw_reuseকর্নেলটিকে স্থানীয় সকেটের বন্দরটিকে পুনরায় ব্যবহার করার নির্দেশ দেবে TIME_WAIT
jpetazzo

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