কীভাবে একটি টিসিপি সকেট তৈরি করবেন


20

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

আমরা ইতিমধ্যে টিসিপি বাফার পড়ার সময় এবং নেটওয়ার্ক সংযোগ বিচ্ছিন্ন উত্সগুলি (সাম্বা) পড়ার সময় নেটওয়ার্ক ইন্টারফেসগুলি রাখার চেষ্টা করেছি।

আউট টেস্ট সার্ভারটি উবুন্টু 12.04.4।

উত্তর:


19

সময়সীমার সাথে একটি প্রস্থানীয় সংযোগ সৃষ্টি করতে আপনি ব্যবহার করতে পারেন iptablesDROPআপনি যে পোর্টটি অক্ষম করতে চান তাতে কেবল একটি নিয়ম সক্ষম করুন। সুতরাং আপনার সামাবা সার্ভারের সময়সীমা অনুকরণ করার জন্য, যখন একটি সক্রিয় সংযোগ চালু রয়েছে, সার্ভারে নিম্নলিখিতটি সম্পাদন করুন:

sudo iptables -A INPUT -p tcp --dport 445 -j DROP

DROPলক্ষ্য একটি জানিয়ে উত্তর করা হবে না RSTপ্যাকেট বা ICMPপ্যাকেট এর প্রেরককে ত্রুটি। ক্লায়েন্ট সার্ভার থেকে প্যাকেট প্রাপ্ত এবং অবশেষে সময়সীমা বন্ধ করবে।

আপনি / কীভাবে iptablesকনফিগার করেছেন তার উপর নির্ভর করে আপনি নিয়মটি INPUTরুলসেটের মধ্যে সন্নিবেশ করতে চাইতে পারেন ।


নেটকাট ব্যবহার করে এটি চেষ্টা করে (ডেটা শোনার / প্রেরণ করার জন্য) এবং চিরকালের জন্য অপেক্ষা করেছিল ... সময়সীমা শেষ হয়নি: / এবং আমি নিশ্চিত করতে পারি যে ডেটা ফেলে দেওয়া হয়েছিল। আমি এমনকি /proc/sys/net/ipv4/tcp_keepalive_timeখুব ছোট সংখ্যায়ও পরিবর্তিত
হয়েছি

@ er453r ncat -vঠিক ncatকী করছে তা দেখার জন্য ভার্বোজ আউটপুট সক্ষম করার চেষ্টা করুন । এটি আমাকে ভ্যানিলা উবুন্টু 12.04 এ টাইমআউট ইনস্টল করে 2m7.291s নিয়েছে
ক্রিক

ডান - আমি প্রথম পরীক্ষার সময় সকেটের মাধ্যমে কিছুই পাঠাচ্ছিলাম না। অবশেষে সময়সীমাটি আয়ত্ত করেছি এবং সেগুলি নীচে বিশদভাবে বর্ণনা করেছি :)
er453r

16

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

এখানে 4 টি আকর্ষণীয় কার্নেল প্যারামিটার রয়েছে যা টিসিপি টাইমআউটগুলি নিয়ে কাজ করে:

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

এখন 2 টি পরিস্থিতি রয়েছে:

  1. সকেটটি খোলা হয়েছে এবং প্রেরণের চেষ্টা করা হচ্ছে - তারপরে (অন্যদিকে কোনও প্রতিক্রিয়া না থাকলে), সিস্টেম tcp_retries2বারবার চেষ্টা করে। অবসর নেওয়ার ডিফল্ট মান সহ এটি কোথাও 2 মিনিটের বেশি সময় নেয় এবং সকেটের সময় শেষ হয়ে যায়।

  2. সকেটটি খোলা এবং নিষ্ক্রিয় হয় - তবে রক্ষণশীল সীমাটি আকর্ষণীয়। একটি অলস সকেট সিস্টেমের সাথে tcp_keepalive_timeসেকেন্ড অপেক্ষা করতে হবে , এবং এরপরে কয়েক সেকেন্ডের tcp_keepalive_probesব্যবধানে টিসিপি কেপালাইভ পাঠানোর চেষ্টা করুন tcp_keepalive_intvl। এবং তারপরেই সমস্ত সকেটের সময় শেষ হয়ে যায়।


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