টিসিপি সকেটের সংযোগের কি "বেঁচে থাকা" আছে?


85

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


4
কেবল এটি নিশ্চিত করার জন্য যে "এইচটিপি কিপালাইভ" সাধারণত সকেট রক্ষাকারীকরণের সাথে সম্পর্কিত নয়, এটি আরও অনুরোধের জন্য সংযোগগুলি উন্মুক্ত করার HTTP / 1.1 বৈশিষ্ট্যের কথা বলে। এটি কেবলমাত্র টিসিপি রক্ষণশীলের সাথে সম্পর্কিত কারণ এটি ভাঙা টিসিপি সংযোগগুলি সনাক্ত করতে হবে (বা সাধারণত কেবল সকেটগুলি সীমিত সময়ের জন্য উন্মুক্ত রাখে)।
উপস্থাপিত হয়েছে

উত্তর:


70

টিসিপি সকেটগুলি বন্ধ না হওয়া পর্যন্ত খোলা থাকে।

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


4
এটা একটা ভালো ধারণা. আপনি না আছে , কিন্তু যদি আপনি না, তাহলে আপনি একটি ভাঙা লিঙ্ক কেউ আসলে কিছু করতে চায় পর্যন্ত শনাক্ত নাও হতে পারে। আপনি যা অর্জন করতে চাইছেন তার উপর নির্ভর করে কোনটি ভাল জিনিস (বা হতে পারে বা নাও পারে) হতে পারে।
ম্যাথু Scharley

4
@ পেসারিয়র: প্রোটোকলের উপর নির্ভরশীল, যেহেতু এটি সম্পূর্ণ প্রোটোকল নির্ভর, তবে পাঠ্য-ভিত্তিক প্রোটোকলের জন্য যেগুলির জন্য একটি আক্ষরিক "পিং" এবং "পং" কমান্ডের প্রয়োজন হয় তা বেশ সাধারণ।
ম্যাথু শার্লে

4
@ ম্যাটহেসার্চলি: স্ট্যান্ডার্ড টিসিপি বাস্তবায়নে এই "পিং পং" ইতিমধ্যে আমাদের জন্য প্রয়োগ করা হয়েছে এবং এটিকে "কিপ-লাইভ" বলা হয় (এই প্রশ্নের অন্যান্য জনপ্রিয় উত্তর দেখুন)। এটি অ্যাপ পর্যায়ে কার্যকর করার কোনও কারণ আছে কি?
টিম কুপার

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

14
@ টিম অ্যাপ্লিকেশন পর্যায়ে বাঁচিয়ে রাখার কারণ টিসিপি স্ট্যান্ডার্ডটি কী-লাইভ টাইমারকে দুই ঘণ্টারও বেশি সময় নির্ধারণের পরামর্শ দেয়। ট্র্যাফিক ব্যতীত কোনও টিসিপি সংযোগ কখনও দেখেনি যা এই সময় টিকে আছে। সুতরাং টিসিপি রাখুন-জীবিত জিনিসগুলি ডিফল্টরূপে অকেজো।
রবার্ট

99

এখন এই সকেট সংযোগটি চিরকাল খোলা থাকবে বা এর সাথে কি কোনও টাইমআউট সীমাবদ্ধতা যুক্ত হবে এইচটিটিপি-বাঁচিয়ে রাখার মতো?

সংক্ষিপ্ত উত্তর হল কোন এটি চিরতরে খোলা থাকে না, এটা সম্ভবত কয়েক ঘন্টার পর আউট সময় হবে। অতএব হ্যাঁ সেখানে হয় একটি টাইমআউটের এবং এটি মাধ্যমে জারি করা হয়েছে বিভিন্ন TCP সক্রিয়-রাখুন

আপনি যদি আপনার মেশিনে কিপ-অ্যালাইভের সময়সীমাটি কনফিগার করতে চান তবে নীচে "টিসিপি পরিবর্তনকরণের সময় পরিবর্তন" বিভাগটি দেখুন। অন্যথায় টিসিপি কীপ-অ্যালাইভ কীভাবে কাজ করে তা শিখতে বাকী উত্তরের মাধ্যমে পড়ুন।

ভূমিকা

টিসিপি সংযোগগুলি দুটি সকেট নিয়ে গঠিত, সংযোগের প্রতিটি প্রান্তে একটি করে। যখন এক পক্ষ সংযোগটি শেষ করতে চায়, তখন এটি এমন একটি RSTপ্যাকেট প্রেরণ করে যা অন্য পক্ষ স্বীকৃতি দেয় এবং উভয়ই তাদের সকেট বন্ধ করে দেয়।

এটি না হওয়া পর্যন্ত উভয় পক্ষই তাদের সকেট অনির্দিষ্টকালের জন্য উন্মুক্ত রাখবে। এটি ইচ্ছাকৃতভাবে বা কিছু ত্রুটির কারণে অন্য দিকটি অবহিত না করেই একদিকে তাদের সকেটটি বন্ধ করে দেওয়ার সম্ভাবনাটি ছেড়ে দেয় RST। এই দৃশ্যটি সনাক্ত করতে এবং বাসি সংযোগগুলি বন্ধ করতে টিসিপি রাখুন জীবিত প্রক্রিয়া ব্যবহৃত হয়।

কিপ-অ্যালাইভ প্রক্রিয়া

তিনটি কনফিগারযোগ্য বৈশিষ্ট্য রয়েছে যা কীপ-অ্যালাইভস কীভাবে কাজ করে তা নির্ধারণ করে। লিনাক্স এ তারা 1 :

  • tcp_keepalive_time
    • ডিফল্ট 7200 সেকেন্ড
  • tcp_keepalive_probes
    • ডিফল্ট 9
  • tcp_keepalive_intvl
    • ডিফল্ট 75 সেকেন্ড

প্রক্রিয়াটি এইভাবে কাজ করে:

  1. ক্লায়েন্ট টিসিপি সংযোগ খোলে
  2. যদি সংযোগটি কয়েক tcp_keepalive_timeসেকেন্ডের জন্য নিঃশব্দ থাকে তবে একটি একক খালি ACKপ্যাকেটটি প্রেরণ করুন ।
  3. সার্ভার একটি সম্পর্কিত সঙ্গে প্রতিক্রিয়া ছিল? ACK তার নিজস্ব ?
    • না
      1. অপেক্ষা করুন tcp_keepalive_intvlসেকেন্ড , তারপরে অন্য একটি প্রেরণ করুনACK
      2. ACKযে পরিমাণ প্রোবের সমান প্রেরণ করা হয়েছে তার সমান হওয়া পর্যন্ত পুনরাবৃত্তি করুনtcp_keepalive_probes
      3. যদি এই মুহুর্তে কোনও প্রতিক্রিয়া না পাওয়া যায় তবে একটি প্রেরণ করুন RSTএবং সংযোগটি সমাপ্ত করুন।
    • হ্যাঁ : দ্বিতীয় ধাপে ফিরে যান

এই প্রক্রিয়াটি বেশিরভাগ অপারেটিং সিস্টেমে ডিফল্টরূপে সক্ষম হয় এবং অন্য প্রান্তটি 2 ঘন্টা 11 মিনিট (7200 সেকেন্ড + 75 * 9 সেকেন্ড) এর প্রতিক্রিয়াহীন হয়ে গেলে মৃত টিসিপি সংযোগগুলি নিয়মিত ছাঁটাই করা হয়।

গটছস

2 ঘন্টা ডিফল্ট

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

কিপ-অ্যালাইভ isচ্ছিক

মতে বোঝায় যা RFC 1122 4.2.3.6 , রেসপন্ড করার এবং / অথবা বিভিন্ন TCP সক্রিয়-রাখুন প্যাকেট রিলে ঐচ্ছিক :

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

...

এটি মনে রাখা অত্যন্ত গুরুত্বপূর্ণ যে এসি কে বিভাগগুলিতে কোনও ডেটা নেই সেগুলি টিসিপি দ্বারা নির্ভরযোগ্যভাবে সংক্রমণ করে না।

যুক্তিযুক্ত কারণ হ'ল কিপ-অ্যালাইভ প্যাকেটে কোনও ডেটা থাকে না এবং কঠোরভাবে প্রয়োজনীয় হয় না এবং অতিরিক্ত ব্যবহার করা হলে ইন্টারভ্যুবের টিউবগুলি আটকে রাখার ঝুঁকি থাকে।

তবে বাস্তবে আমার অভিজ্ঞতাটি হ'ল ব্যান্ডউইথ সস্তা হওয়ায় সময়ের সাথে এই উদ্বেগ হ্রাস পেয়েছে; এবং এভাবে কিপ-অ্যালাইভ প্যাকেটগুলি সাধারণত বাদ পড়ে না। আমাজন ইসি 2 ডকুমেন্টেশনউদাহরণস্বরূপ কিপ-অ্যালাইভের একটি অপ্রত্যক্ষ অনুমোদনের প্রস্তাব দেয়, সুতরাং আপনি যদি এডাব্লুএসের সাথে হোস্টিং করেন তবে আপনি সম্ভবত কিপ-অ্যালাইভের উপর নির্ভর করে নিরাপদ হন তবে আপনার মাইলেজটি আলাদা হতে পারে।

টিসিপি সময়সীমা পরিবর্তন করা হচ্ছে

প্রতি সকেট

দুর্ভাগ্যক্রমে যেহেতু টিসিপি সংযোগগুলি ওএস স্তরে পরিচালিত হয়, তাই জাভা প্রতি সকেট স্তরে যেমন টাইমআউটগুলি কনফিগার করতে সমর্থন করে না java.net.Socket। আমি কিছু চেষ্টা পেয়েছি 3 জাভা দেশীয় ইন্টারফেস (JNI) ব্যবহার জাভা সকেট যে এই অপশন কনফিগার করতে নেটিভ কোড কল তৈরি করতে, কিন্তু তেমন কাউকে ব্যাপক সম্প্রদায় গ্রহণ বা সমর্থন আছে প্রদর্শিত হবে।

পরিবর্তে, আপনি সামগ্রিকভাবে অপারেটিং সিস্টেমে আপনার কনফিগারেশনটি প্রয়োগ করতে বাধ্য হতে পারেন। সচেতন হন যে এই কনফিগারেশনটি পুরো সিস্টেমে চলমান সমস্ত টিসিপি সংযোগগুলিকে প্রভাবিত করবে।

লিনাক্স

বর্তমানে কনফিগার করা টিসিপি কিপ-অ্যালাইভ সেটিংস পাওয়া যাবে

  • /proc/sys/net/ipv4/tcp_keepalive_time
  • /proc/sys/net/ipv4/tcp_keepalive_probes
  • /proc/sys/net/ipv4/tcp_keepalive_intvl

আপনি এর মতো যেকোনটি আপডেট করতে পারেন:

# Send first Keep-Alive packet when a TCP socket has been idle for 3 minutes
$ echo 180 > /proc/sys/net/ipv4/tcp_keepalive_time
# Send three Keep-Alive probes...
$ echo 3 > /proc/sys/net/ipv4/tcp_keepalive_probes
# ... spaced 10 seconds apart.
$ echo 10 > /proc/sys/net/ipv4/tcp_keepalive_intvl

এই পরিবর্তনগুলি পুনরায় আরম্ভের মাধ্যমে স্থির থাকবে না। অবিরাম পরিবর্তন করতে, ব্যবহার করুন sysctl:

sysctl -w net.ipv4.tcp_keepalive_time=180 net.ipv4.tcp_keepalive_probes=3 net.ipv4.tcp_keepalive_intvl=10

ম্যাক ওএস এক্স

বর্তমানে কনফিগার করা সেটিংস এর সাথে দেখা যেতে পারে sysctl:

$ sysctl net.inet.tcp | grep -E "keepidle|keepintvl|keepcnt"
net.inet.tcp.keepidle: 7200000
net.inet.tcp.keepintvl: 75000
net.inet.tcp.keepcnt: 8

লক্ষণীয় বিষয়, ম্যাক ওএস এক্স লিনাক্সের বিপরীতে মিলিসেকেন্ডগুলির ইউনিটগুলিতে সংজ্ঞা দেয় keepidleএবং keepintvlসেকেন্ড ব্যবহার করে uses

বৈশিষ্ট্যগুলি সেট করা যেতে পারে sysctlযা রিবুটগুলি জুড়ে এই সেটিংসটি বহাল রাখবে:

sysctl -w net.inet.tcp.keepidle=180000 net.inet.tcp.keepcnt=3 net.inet.tcp.keepintvl=10000

বিকল্পভাবে, আপনি এগুলিতে যুক্ত করতে পারেন /etc/sysctl.conf(ফাইলটি উপস্থিত না থাকলে তৈরি করা)।

$ cat /etc/sysctl.conf
net.inet.tcp.keepidle=180000
net.inet.tcp.keepintvl=10000
net.inet.tcp.keepcnt=3

উইন্ডোজ

কনফার্ম করার জন্য আমার কাছে উইন্ডোজ মেশিন নেই, তবে আপনার রেজিস্ট্রিতে সম্পর্কিত টিসিপি কিপ-অ্যালাইভ সেটিংস পাওয়া উচিত

\HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\TCPIP\Parameters

পাদটীকা

1. man tcpআরও তথ্যের জন্য দেখুন।

২. এই প্যাকেটটি প্রায়শই "কিপ-অ্যালাইভ" প্যাকেট হিসাবে উল্লেখ করা হয়, তবে টিসিপি নির্দিষ্টকরণের মধ্যে এটি কেবল একটি নিয়মিত ACKপ্যাকেট। ওয়্যারশার্কের মতো অ্যাপ্লিকেশনগুলি সকেটের পূর্ববর্তী যোগাযোগের সাথে সম্পর্কিত ক্রম এবং স্বীকৃতি সংখ্যার মেটা-বিশ্লেষণ করে এটিকে "কিপ-অ্যালাইভ" প্যাকেট হিসাবে লেবেল করতে সক্ষম হয়।

৩. বেসিক গুগল অনুসন্ধান থেকে পাওয়া কয়েকটি উদাহরণ হ'ল লুকুইলিয়ামস / জাভালিনাক্সনেট এবং ফ্লোনটেল / লাইবডন্টি


খুব সহায়ক, ধন্যবাদ! একটি সংযোজন: উইন্ডোজের জন্য কিপএলাইভটাইমের নতুন মান কার্যকর হওয়ার জন্য একটি পুনঃসূচনা প্রয়োজন।
geld0r

এআইএক্স-এ, বর্তমান টিসিপি কিপ-অ্যালাইভ সেটিংস $ no -a | grep tcp_keepকমান্ড ব্যবহার করে অনুসন্ধান করা যেতে পারে ।
জারেক প্রাইজিডজকি

56

আপনি SO_KEEPALIVE সকেট বিকল্পটি সন্ধান করছেন।

জাভা সকেট API- টি অনাবৃত "সক্রিয়-রাখুন" অ্যাপ্লিকেশন মাধ্যমে setKeepAliveএবংgetKeepAlive পদ্ধতি।

সম্পাদনা: SO_KEEPALIVE কোনও "আসল" ডেটা না প্রেরণ ওএস নেটওয়ার্ক প্রোটোকল স্ট্যাকগুলিতে প্রয়োগ করা হয়। কিপ-লাইভ ইন্টার্ভাল অপারেটিং সিস্টেম নির্ভর, এবং কার্নেল প্যারামিটারের মাধ্যমে এটি টিউনযোগ্য হতে পারে।

যেহেতু কোনও ডেটা প্রেরণ করা হয়নি, তাই SO_KEEPALIVE কেবলমাত্র নেটওয়ার্ক সংযোগের প্রাণবন্ততা পরীক্ষা করতে পারে, সকেটের সাথে সংযুক্ত সেবার লাইভনেস নয়। পরবর্তীটি পরীক্ষা করার জন্য, আপনাকে এমন কিছু কার্যকর করতে হবে যাতে সার্ভারে বার্তা প্রেরণ এবং প্রতিক্রিয়া পাওয়া জড়িত।


4
যদি আমি সেটকিপএলাইভ (সত্য); অন্তর্বর্তটি কী হবে? ... এছাড়াও জাভা কি ডিফল্ট বিরতিতে কি-লাইভ বার্তাগুলি প্রেরণ করে রাখবে বা আমি কি এটি অগ্রগতিতে করতে হবে?
কেভিন বয়ড

4
unixguide.net/network/sketfaq/4.7.shtml SO_KEEPALIVE এর বর্ণনা রয়েছে। এটা এত কি ওপি চেয়েছিলেন না যদিও এটা হল আমি কি প্রস্তাব করার জন্য একটি প্রোটোকল ভিত্তিক বিকল্প ... যদিও, প্রতি দুই ঘন্টা অ্যাপ্লিকেশনের জন্য অনেক কিছু করা হবে না।
ম্যাথু Scharley

4
@ ম্যাথুশার্লি সম্পর্কিত "এটি অবশ্যই দুই ঘণ্টারও কম ডিফল্ট হবে না " ... এর অর্থ এটি ঠিক দুই ঘন্টারও কম হতে দেওয়া হচ্ছে?
পেসারিয়ার

4
@MatthewScharley - "তুমি ঠিক আছে, কিন্তু যে বাস্তবায়ন নির্দিষ্ট হতে চাই ..." । দু'বারেরও কম সময় থাকতে পারে না এমন একটি বেঁচে থাকার ব্যবধানটি এতটাই অকেজো যে এটি বাস্তবায়নকারী কারও পক্ষে ধারণা পোষণ করা শক্ত।
স্টিফেন সি

4
@ ড্যানিয়েল - বিকল্পটি (জাভাতে) হ'ল ম্যানুয়ালকে বাঁচিয়ে রাখা হবে, যেমন উপরে এবং অন্যান্য উত্তরে উল্লিখিত হয়েছে। সুন্দর নয়, তবে এটি ডিফল্টর ওএস-ব্যাপী পরিবর্তনের চেয়ে ভাল যা সিস্টেম পরিষেবাদি বা অন্যান্য অ্যাপ্লিকেশনগুলিকে ভেঙে দিতে পারে
স্টিফেন সি

34

টিসিপি রক্ষণশীল এবং এইচটিটিপি রক্ষণশীল খুব আলাদা ধারণা। টিসিপিতে, কীটালাইভ হ'ল বাসি সংযোগ সনাক্ত করতে প্রেরণ করা প্রশাসনিক প্যাকেট। এইচটিটিপি-তে, কিটালাইভ মানে অবিচ্ছিন্ন সংযোগের অবস্থা।

এটি টিসিপি স্পেসিফিকেশন থেকে,

বেঁচে থাকা প্যাকেটগুলি কেবল তখনই প্রেরণ করতে হবে যখন কোনও বিরতিতে সংযোগের জন্য কোনও ডেটা বা স্বীকৃতি প্যাকেটগুলি না পেয়ে। এই ব্যবধানটি কনফিগারযোগ্য এবং দু'ঘন্টারও কম ডিফল্ট হওয়া আবশ্যক।

আপনি দেখতে পাচ্ছেন, বেশিরভাগ অ্যাপ্লিকেশনের জন্য ডিফল্ট টিসিপি রক্ষণশীলের ব্যবধান খুব দীর্ঘ। আপনার অ্যাপ্লিকেশন প্রোটোকলে আপনাকে কিপালাইভ যুক্ত করতে হতে পারে।


4
আপনার অ্যাপ্লিকেশন অনুসারে আপনি টিসিপি রক্ষণশীল ব্যবধানটি সংশোধন করতে পারেন। যেমন msdn.microsoft.com/en-us/library/dd877220%28VS.85%29.aspx
ড্যান Berindei

@ZZCoder আপনি "এইচটিটিপি-তে, কিটালাইভের অর্থ অবিচ্ছিন্ন সংযোগের অবস্থা" বলতে গেলে এর অর্থ কী তা কী আপনি ব্যাখ্যা করতে পারেন?
পেসারিয়ার

4
@ পেসারিয়র: HTTP/1.0প্রতিটি অনুরোধ / প্রতিক্রিয়াতে সার্ভারের সাথে পুনরায় সংযোগ প্রয়োজন। কারণ HTTP/1.1তারা একটি Keep-Aliveশিরোনাম প্রবর্তন করেছে যা আরও ফাইলগুলির অনুরোধ এবং 'পাইপলাইনিং' এর অনুমতি দেওয়ার জন্য প্রতিক্রিয়া প্রক্রিয়া করার পরে সংযোগটি না কাটিয়ে দেওয়ার জন্য সার্ভারকে ট্রিগার করতে ব্যবহার করা যেতে পারে; একাধিক অনুরোধ প্রেরণ করে সমস্ত ডেটা ফিরে আসার অপেক্ষায়।
ম্যাথু শার্লে

মূলত এর অর্থ হ'ল অনেকগুলি এইচটিটিপি অনুরোধের / একই টিসিপি-সংযোগটি পুনরায় ব্যবহার করা উচিত (এই সংযোগগুলি হয়ত টিকিয়ে রাখতে পারে তবে এটি HTTP- র সাথে মিটার করে না তাই এটি মূলত আলাদা ধারণা)।
ইগোর Čordaš

24

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

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

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


আহ! আপনি এখানে একটি ভাল বিষয় যুক্ত করেছেন, তা হ'ল আপনাকে এমন অন্তর্নির্মিত বিষয়গুলিও বিবেচনা করতে হবে যা কোনও ন্যাশন রাউটার ইত্যাদির মতো সংযোগের কাজকে বাধাগ্রস্ত করতে পারে ...
কেভিন বয়ড

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

উল্লেখ্য যে পি 2 পি ফাইল ভাগ করে নেওয়ার ফলে উভয়ই প্রচুর বন্দর চিবিয়ে তোলে এবং প্রচুর পরিমাণে জম্বি সংযোগ উত্পাদন করে, এটি আরও সম্ভাবনা তৈরি করে যে NAT কে নিষ্ক্রিয় সংযোগগুলি ছাঁটাই করতে হবে।
আর্টিলিয়াস

4
অগত্যা, একটি টিসিপি সংযোগ 4 টি উপাদান দ্বারা সনাক্ত করা যায়: src আইপি, এসআরসি পোর্ট, ডেস্ট আইপি, ডেস্ট পোর্ট। গন্তব্য আইপি যতক্ষণ না আলাদা আপনি একই বাহ্যিক (উত্স) বন্দরটি পুনরায় ব্যবহার করতে পারেন।
ড্যান বেরিনেদি

4
হ্যাঁ, আপনি ঠিক বলেছেন। আমি মনে করি আসল কারণটি হ'ল স্মৃতি বাধা এবং অনুসন্ধানের সময় নাটকের কাছে উন্মুক্ত সংযোগগুলির একটি নির্দিষ্ট আকারের টেবিল রয়েছে।
আর্টেলিয়াস

4

এখানে রক্ষণশীল সম্পর্কিত কিছু পরিপূরক সাহিত্য রয়েছে যা এটি আরও সূক্ষ্ম বিশদে ব্যাখ্যা করে।

http://www.tldp.org/HOWTO/html_single/TCP-Kipalive-HOWTO

যেহেতু জাভা আপনাকে প্রকৃত রক্ষণশীল সময়গুলি নিয়ন্ত্রণ করতে দেয় না, আপনি যদি লিনাক্স কার্নেল (বা প্রোক ভিত্তিক ওএস) ব্যবহার করেন তবে উদাহরণগুলি সেগুলি পরিবর্তন করতে ব্যবহার করতে পারেন।


1

জাভা সকেটে - টিসিপি সংযোগগুলি ওএস স্তরে পরিচালিত হয়, java.net.Sket প্রতি সকেট স্তরে কিপালিভ প্যাকেটের জন্য টাইমআউট সেট করতে কোনও অন্তর্নির্মিত ফাংশন সরবরাহ করে না। তবে আমরা জাভা সকেটের জন্য রক্ষণশীল বিকল্প সক্ষম করতে পারি তবে একটি বাসি টিসিপি সংযোগের পরে প্রক্রিয়া করতে ডিফল্টরূপে এটি 2 ঘন্টা 11 মিনিট (7200 সেকেন্ড) লাগে। এই কারণ সংযোগটি শুদ্ধ হওয়ার আগে খুব দীর্ঘ সময়ের জন্য অবলম্বিত হবে। সুতরাং আমরা জাভা নেটিভ ইন্টারফেস (জেএনআই) ব্যবহার করার কিছু সমাধান পেয়েছি যা এই বিকল্পগুলি কনফিগার করতে নেটিভ কোড (সি ++) কল করে।

**** উইন্ডোজ ওএস ****

উইন্ডোজ অপারেটিং সিস্টেমে কিপালিভ_টাইম এবং কিপালাইভ_িন্টভিএল কনফিগারযোগ্য হতে পারে তবে tcp_keepalive_probes পরিবর্তন করা যায় না T ডিফল্ট হিসাবে, যখন কোনও টিসিপি সকেট শুরু হয় তখন ২ ঘন্টা এবং কিপ-লাইভ ব্যবধানটি 1 সেকেন্ডে সেট করে। কিপ-লাইভ টাইমআউটটির ডিফল্ট সিস্টেম-প্রশস্ত মান ক্যাপএলাইভটাইম রেজিস্ট্রি সেটিংয়ের মাধ্যমে নিয়ন্ত্রণযোগ্য যা মিলসেকেন্ডে একটি মান নেয়।

উইন্ডোজ ভিস্তা এবং তারপরে, রাখুন-জীবিত প্রোবের সংখ্যা (ডেটা পুনঃপ্রেরণ) 10 তে সেট করা আছে এবং এটি পরিবর্তন করা যায় না।

উইন্ডোজ সার্ভার 2003, উইন্ডোজ এক্সপি এবং উইন্ডোজ 2000-এ, লাইভ-লাইভ প্রোবের সংখ্যা নির্ধারণের জন্য ডিফল্ট সেটিংটি 5 রয়েছে-বেঁচে থাকা প্রোবের সংখ্যা নিয়ন্ত্রণযোগ্য। উইন্ডোজের জন্য উইনসক আইওসিটিএল লাইব্রেরি টিসিপি-কিপালাইভ পরামিতিগুলি কনফিগার করতে ব্যবহৃত হয়।

int WSAIoctl (সকেটএফডি, // বর্ণনাকারী একটি সকেট সনাক্ত করছে এসআইও_কিইপিএলআইভিআইপিএল, // ডিওয়াইওকন্ট্রোলকোড (এলপিভিআইআইডি) lpvInBuffer, // পয়েন্টার টিসিপি_কিটালাইভ স্ট্রাক্ট (ডিডাবর্ড) সিবিআইনফার, // ইনপুট আকার বাফার এর দৈর্ঘ্য NULL আউটপুট বাফার (এলপিডিডাবর্ড) lpcbBytesReturned, // বাইট সংখ্যা NULL, // ওভারল্যাপড কাঠামো নাল // সমাপ্তির রুটিন) ফেরত;

লিনাক্স ওএস

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

ইন্ট সেসকোপ্ট (ইন সকেট, ইনট লেভেল, ইন্ট অপ্টনাম, কনস্ট বেড * অপ্টাল, সোকলেন_ ট অপটলেন)

প্রতিটি ক্লায়েন্ট সকেট java.net.Sket ব্যবহার করে তৈরি করা হবে। প্রতিটি সকেটের ফাইল বর্ণনাকারী আইডি জাভা প্রতিবিম্ব ব্যবহার করে পুনরুদ্ধার করবে।


0

উইন্ডোজ জন্য মাইক্রোসফ্ট ডক্স অনুযায়ী

  • কিপএলাইভটাইম (আরইজি_ডাবর্ড, মিলিসেকেন্ডস, ডিফল্টরূপে সেট করা হয়নি যার অর্থ 7,200,000,000 = 2 ঘন্টা) - টিসিপি_কিপালিভ_টাইমের এনালগ
  • KeepAliveInterval (REG_DWORD, মিলিসেকেন্ডস, ডিফল্টরূপে সেট করা হয় না যার অর্থ 1,000 = 1 সেকেন্ড) - tcp_keepalive_intvl এ অ্যানালগ
  • উইন্ডোজ ভিস্তার যেহেতু tcp_keepalive_probes এর সাথে কোনও অ্যানালগ নেই, মান 10 স্থির করা হয়েছে এবং পরিবর্তন করা যায় না
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.