টিসিপি সংযোগের জন্য সর্বোচ্চ প্যাকেটের আকারটি কীভাবে বা আমি কীভাবে সর্বোচ্চ প্যাকেটের আকার পেতে পারি?
টিসিপি সংযোগের জন্য সর্বোচ্চ প্যাকেটের আকারটি কীভাবে বা আমি কীভাবে সর্বোচ্চ প্যাকেটের আকার পেতে পারি?
উত্তর:
টিসিপি প্যাকেটের আকারের নিখুঁত সীমাবদ্ধতা 5৪ কে (5 65৫৩৩ বাইট), তবে ব্যবহারিকতায় এটি যে কোনও প্যাকেট আপনি দেখতে পাবেন তার চেয়ে অনেক বড়, কারণ নীচের স্তরগুলিতে (যেমন ইথারনেট) কম প্যাকেটের আকার রয়েছে।
ইথারনেটের জন্য এমটিইউ (সর্বোচ্চ সংক্রমণ ইউনিট), উদাহরণস্বরূপ, 1500 বাইট tes কিছু ধরণের নেটওয়ার্কের (যেমন টোকেন রিং) আরও বড় এমটিইউ থাকে এবং কিছু ধরণের ছোট এমটিইউ থাকে তবে প্রতিটি শারীরিক প্রযুক্তির জন্য মানগুলি স্থির থাকে।
এটি একটি দুর্দান্ত প্রশ্ন এবং আমি আসলে এটি অনেক কাজ করে চলেছি। 65k এবং 1500 এর মতো অনেকগুলি "প্রযুক্তিগতভাবে সঠিক" উত্তর রয়েছে network আমি নেটওয়ার্ক ইন্টারফেস লেখার জন্য অনেক কাজ করেছি এবং 65k ব্যবহার করা নির্বোধ, এবং 1500 আপনাকে বড় সমস্যায় ফেলতে পারে। আমার কাজটি বিভিন্ন হার্ডওয়্যার / প্ল্যাটফর্ম / রাউটারগুলিতে প্রচুর পরিমাণে যায় এবং আমি যে জায়গাটি শুরু করি তার সত্য কথা বলতে 1400 বাইট হয়। যদি আপনার 1400 এরও বেশি প্রয়োজন হয় তবে আপনি নিজের পথটি ইঞ্চি করতে শুরু করতে পারেন, আপনি সম্ভবত 1450 এবং কখনও কখনও 1480'ish যেতে পারেন? আপনার যদি এর চেয়ে বেশি প্রয়োজন হয় তবে অবশ্যই আপনাকে 2 টি প্যাকেটে বিভক্ত করতে হবে, যার মধ্যে বেশ কয়েকটি সুস্পষ্ট উপায় রয়েছে ..
সমস্যাটি হ'ল আপনি একটি ডেটা প্যাকেট তৈরি করার কথা বলছেন এবং এটি টিসিপির মাধ্যমে লিখে রাখছেন, তবে অবশ্যই এখানে শিরোনামের ডেটা রয়েছে এবং আরও অনেক কিছু আছে, সুতরাং আপনার কাছে "ব্যাগেজ" রয়েছে যা আপনাকে 1500 বা তারও বেশি রাখে .. এবং এটিও হার্ডওয়্যার অনেক কম সীমাবদ্ধতা আছে।
আপনি যদি "এটিকে" চাপ দিন তবে আপনি কিছু সত্যই অদ্ভুত জিনিস চলতে পারেন। কাটা তথ্য, স্পষ্টতই, বা বাদ দেওয়া ডেটা আমি খুব কমই দেখেছি। দুর্নীতিগ্রস্থ ডেটা খুব কমই ঘটে তবে অবশ্যই ঘটে।
send()
সুবিধাজনক হলে আপনি কোনওটিতে 2 জি লিখতে পারবেন না তার কোনও কারণ নেই ।
1480'ish
হওয়া উচিত 1460
। আইপি শিরোনাম এবং টিসিপি শিরোনাম কমপক্ষে প্রতিটি 20 বাইট নেয় (unlessচ্ছিক শিরোনাম ক্ষেত্রগুলি ব্যবহার না করা হয়) এবং সুতরাং (নন-জাম্বো ফ্রেম) ইথারনেটের সর্বোচ্চ হয় 1500 - 20 -20 = 1460
।
অ্যাপ্লিকেশন স্তরে, অ্যাপ্লিকেশনটি টিসিপিটিকে একটি স্ট্রিম ওরিয়েন্টেড প্রোটোকল হিসাবে ব্যবহার করে। পরিবর্তে টিসিপিতে অবিশ্বস্ত আইপি প্যাকেটগুলির সাথে কাজ করার বিশদগুলি বিভক্ত করে এবং বিমূর্ত করে তোলে।
টিসিপি প্যাকেটের পরিবর্তে বিভাগগুলি নিয়ে কাজ করে। প্রতিটি টিসিপি বিভাগে একটি সিকোয়েন্স নম্বর থাকে যা একটি টিসিপি শিরোনামের ভিতরে থাকে। টিসিপি বিভাগে প্রেরিত আসল ডেটা পরিবর্তনশীল।
গেসকোপ্টের জন্য একটি মান রয়েছে যা কিছু ওএসে সমর্থিত যা আপনি টিসিপি_এমএক্সএসইজি নামে ব্যবহার করতে পারেন যা সর্বাধিক টিসিপি বিভাগের আকার (এমএসএস) পুনরুদ্ধার করে। যদিও এটি সমস্ত ওএসে সমর্থিত নয়।
আপনি ঠিক কী করার চেষ্টা করছেন তা আমি নিশ্চিত নই তবে আপনি যে বাফার আকারটি ব্যবহার করেছেন তা হ্রাস করতে চাইলে আপনি এটিও দেখতে পারেন: SO_SNDBUF এবং SO_RCVBUF।
Http://en.wikedia.org/wiki/Maximum_segment_size এর মতে , একটি নেটওয়ার্কে আইপিভি 4 প্যাকেটের জন্য ডিফল্ট বৃহত্তম আকার হ'ল 536 অক্টেট (আকার 8 বিটের বাইট)। আরএফসি 879 দেখুন
টিসিপি এপিআইতে কোনও প্যাকেট নেই।
অন্তর্নিহিত প্রোটোকলগুলিতে প্যাকেটগুলি প্রায়শই থাকে, যেমন আইপি-এর মাধ্যমে টিসিপি করা হয়, যা সম্পর্কে আপনার কোনও আগ্রহ নেই, কারণ আপনার খুব আগ্রহী না পারফরম্যান্স অপ্টিমাইজেশান বাদে ব্যবহারকারীর সাথে তাদের কোনও সম্পর্ক নেই (সম্ভবত সেই অনুযায়ী প্রশ্ন গঠনের)।
যদি আপনি send()
একটি এপিআই কলটিতে সর্বাধিক সংখ্যক বাইট কী তা জিজ্ঞাসা করেন তবে এটি বাস্তবায়ন এবং সেটিংস নির্ভর। আপনি সাধারণত কয়েক কিলোবাইট পর্যন্ত অংশের জন্য প্রেরণ () কল করতেন এবং সিস্টেমটিকে সম্পূর্ণ বা আংশিকভাবে গ্রহণ করতে অস্বীকার করার জন্য সর্বদা প্রস্তুত থাকবেন, এক্ষেত্রে আপনাকে নিজের ডেটা ফিড করার জন্য ম্যানুয়ালি ছোট খণ্ডে বিভাজন পরিচালনা করতে হবে টিসিপি প্রেরণ () এপিআই।
সাধারণত, এটি সংযোগটি ব্যবহার করছে এমন ইন্টারফেসের উপর নির্ভর করবে। আপনি সম্ভবত এমটিইউ পেতে একটি আইওএসটিএল () ব্যবহার করতে পারেন এবং এটি যদি ইথারনেট হয় তবে আপনি সাধারণত সেই থেকে হার্ডওয়্যার শিরোনামের আকার বিয়োগ করে সর্বাধিক প্যাকেট আকার পেতে পারেন যা কোনও ভিএলএএন ছাড়াই ইথারনেটের জন্য 14।
এটি কেবলমাত্র যদি এমটিইউ কমপক্ষে পুরো নেটওয়ার্ক জুড়ে থাকে। টিসিপি আপনার কার্যকর এমটিইউ হ্রাস করতে পাথ এমটিইউ আবিষ্কার ব্যবহার করতে পারে।
প্রশ্নটি হচ্ছে, আপনি যত্ন কেন?
মনে হচ্ছে ইন্টারনেটে বেশিরভাগ ওয়েব সাইট এমটিইউর মানটির জন্য 1460 বাইট ব্যবহার করে। কখনও কখনও এটি 1452 হয় এবং আপনি কোনও ভিপিএন এ থাকলে এটি আইপিসেক শিরোলেখগুলির জন্য আরও বেশি নামবে।
ডিফল্ট উইন্ডো আকারটি সর্বাধিক 65535 বাইটের চেয়ে কিছুটা পরিবর্তিত হয়। আমি আমার নিজস্ব উত্সের আইপি মানগুলি দেখতে এবং অন্যান্য ইন্টারনেট বিক্রেতারা কী ব্যবহার করছে তা পরীক্ষা করতে http://tcpcheck.com ব্যবহার করি।
একটি সমাধান সকেট বিকল্প টিসিপি_এমএক্সএসইজি ( http://linux.die.net/man/7/tcp ) অন্তর্নিহিত নেটওয়ার্ক (যেমন ইথারনেটে নিরাপদ থাকতে 1400 সেট করুন) এর সাথে "নিরাপদ" মান হিসাবে সেট করতে পারেন এবং তারপরে সিস্টেম কলটিতে একটি বড় বাফার ব্যবহার করুন। এই পদ্ধতিতে ব্যয়বহুল কম সিস্টেমে কল আসতে পারে। কার্নেল এমএসএসের সাথে ম্যাচ করার জন্য ডেটা বিভক্ত করবে।
এইভাবে আপনি ছাঁটা ডেটা এড়াতে পারবেন এবং আপনার অ্যাপ্লিকেশনটিকে ছোট বাফার সম্পর্কে চিন্তা করতে হবে না।
আইপি প্রোটোকল (আইপি 4) এ টিসিপি সেটিংয়ের জন্য প্যাকেটের আকার। এই ক্ষেত্রটির জন্য (টিএল), 16 টি বিট বরাদ্দ করা হয়েছে, তদনুসারে প্যাকেটের সর্বোচ্চ আকার 65535 বাইট: আইপি প্রোটোকল বিশদ