টিসিপি স্ট্রিমে প্যাকেটের আকার


10

আমি নেটওয়ার্ক ট্রাফিক এবং প্রতিটি টিসিপি অধিবেশনকে অনুরোধ এবং প্রতিক্রিয়াগুলির একটি ধারাবাহিকের মধ্যে বিভক্ত করতে চাই (HTTP বা SSL এর মতো আমি যে সমস্ত প্রোটোকল নিয়ে কাজ করছি)।

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

প্যাকেট 1 - অনুরোধ "পান ..."

প্যাকেট 2 - প্রতিক্রিয়া, আকার 1434

প্যাকেট 3 - প্রতিক্রিয়া, আকার 1434

প্যাকেট 4 - প্রতিক্রিয়া, আকার 1434

প্যাকেট 5 - প্রতিক্রিয়া, আকার 500

আমি বেশিরভাগ সেশনে যা পাই তা হ'ল, তবে কমপক্ষে একটি উপলক্ষ আমি দেখেছি যা দেখতে বেশ ভাল লেগেছে

প্যাকেট 1 - অনুরোধ "পান ..."

প্যাকেট 2 - প্রতিক্রিয়া, আকার 1434

প্যাকেট 3 - প্রতিক্রিয়া, আকার 1080

প্যাকেট 4 - প্রতিক্রিয়া, আকার 1434

প্যাকেট 5 - প্রতিক্রিয়া, আকার 500

এখানে কোনও পুনঃপ্রেরণ, অর্ডার প্যাকেটের বাইরে বা সার্ভারে কোনও ব্যতিক্রমী বিলম্ব নেই।

আমি জানতে চাই - এর কারণ কী হতে পারে এবং কখন তা ঘটবে? আমার অনুমান কতটা ভুল?

হালনাগাদ

আমি এখানে একটি পিসিপি ফাইল রাখি

আপডেট 2

tsharkপ্রাসঙ্গিক ক্ষেত্র সহ একটি ডাম্প সহ ...

$ tshark -r http_1082.pcap -T fields -e frame.number -e frame.len \
    -e ip.src -e ip.dst -e tcp.flags.push -e http.request.method \
    -e http.request.uri -e http.response.code | head -n 47
1     66      192.168.1.103    206.33.49.126    0            
2     62      206.33.49.126    192.168.1.103    0            
3     64      192.168.1.103    206.33.49.126    0            
4     411     192.168.1.103    206.33.49.126    1    GET    /money/.element/script/3.0/video/xmp/xmp_playlistapi.js    
5     54      206.33.49.126    192.168.1.103    0            
6     1434    206.33.49.126    192.168.1.103    0            
7     1434    206.33.49.126    192.168.1.103    0            
8     64      192.168.1.103    206.33.49.126    0            
9     1434    206.33.49.126    192.168.1.103    0            
10    1434    206.33.49.126    192.168.1.103    0            
11    1434    206.33.49.126    192.168.1.103    0            
12    64      192.168.1.103    206.33.49.126    0            
13    1434    206.33.49.126    192.168.1.103    0            
14    1434    206.33.49.126    192.168.1.103    0            
15    1434    206.33.49.126    192.168.1.103    0            
16    1434    206.33.49.126    192.168.1.103    0            
17    64      192.168.1.103    206.33.49.126    0            
18    1434    206.33.49.126    192.168.1.103    0            
19    1434    206.33.49.126    192.168.1.103    0            
20    1434    206.33.49.126    192.168.1.103    0            
21    1434    206.33.49.126    192.168.1.103    0            
22    1434    206.33.49.126    192.168.1.103    0            
23    64      192.168.1.103    206.33.49.126    0            
24    1434    206.33.49.126    192.168.1.103    0            
25    1434    206.33.49.126    192.168.1.103    0            
26    1434    206.33.49.126    192.168.1.103    0            
27    1434    206.33.49.126    192.168.1.103    0            
28    1434    206.33.49.126    192.168.1.103    0            
29    1434    206.33.49.126    192.168.1.103    0            
30    64      192.168.1.103    206.33.49.126    0            
31    1434    206.33.49.126    192.168.1.103    0            
32    1434    206.33.49.126    192.168.1.103    0            
33    1434    206.33.49.126    192.168.1.103    0            
34    1082    206.33.49.126    192.168.1.103    1     <------ Packet in question        
35    1434    206.33.49.126    192.168.1.103    0            
36    1434    206.33.49.126    192.168.1.103    0            
37    1434    206.33.49.126    192.168.1.103    0            
38    64      192.168.1.103    206.33.49.126    0            
39    1434    206.33.49.126    192.168.1.103    0            
40    1434    206.33.49.126    192.168.1.103    0            
41    1434    206.33.49.126    192.168.1.103    0            
42    1434    206.33.49.126    192.168.1.103    0            
43    1434    206.33.49.126    192.168.1.103    0            
44    1434    206.33.49.126    192.168.1.103    0            
45    1434    206.33.49.126    192.168.1.103    0            
46    626     206.33.49.126    192.168.1.103    1            200
47    64      192.168.1.103    206.33.49.126    0 

অনেকগুলি কারণ থাকতে পারে ... উইন্ডোর আকার খুব ছোট হতে পারে (যদিও এটি আপনার ক্ষেত্রে খুব সম্ভবত) তবে প্রেরণে পর্যাপ্ত ডেটা নাও থাকতে পারে (কোনও স্ক্রিপ্ট দ্বারা আউটপুট উত্পন্ন হয় কি?), সফ্টওয়্যারটি ডেটা তৈরি করতে পারে স্পষ্টভাবে, এটা রাঙা আছে ইত্যাদি
স্যান্ডার Steffann

@ স্যান্ডারস্টেফান, উইন্ডোর আকার প্রাসঙ্গিক বলে মনে হচ্ছে না, acks বেশ নিয়মিত বিরতিতে আসে। পুরো প্রতিক্রিয়া একটি জাভাস্ক্রিপ্ট, সুতরাং আমি মনে করি না এটি অন্য স্ক্রিপ্ট দ্বারা উত্পাদিত হয়েছে।
ভাদিম

@ ভাদিম, আপনি কি দয়া করে একটি স্ক্রিনশট পোস্ট করতে পারেন বা এর চেয়ে ভাল, পিক্যাপে একটি হাইপারলিংক 1080 বাইট পেডলোড সহ?
মাইক পেনিংটন

@ মাইকপেনিংটন - আপনার ইনপুটটির জন্য ধন্যবাদ, আমি কয়েক ঘন্টার মধ্যে পিসিএপ ফাইলটিতে একটি লিঙ্ক সরবরাহ করব।
ভাদিম

@ মাইকপেনিংটন - আমি একটি পিসিএপ ফাইলের সাথে একটি লিঙ্ক যুক্ত করেছি যা এটি দেখায়।
ভাদিম

উত্তর:


6

টিসিপি স্তরটি ট্র্যাফিক বাফার করতে নাগলে অ্যালগরিদম ব্যবহার করে (এটি আরও বেশি ছোট প্যাকেটের পরিবর্তে আরও কম বড় প্যাকেট প্রেরণ করে ... আরও কার্যকর করে তোলে); 'এখনই এটি প্রেরণ করুন' বলার জন্য অ্যাপ্লিকেশনটির একটি উপায় রয়েছে। আপনি দেখতে পাচ্ছেন যে টিসিপি শিরোনামে PSH (পুশ) বিট নামে একটি পতাকা রয়েছে with বিটটি স্ট্যাক দ্বারা সেট করা অবস্থায়, পুশটি আবেদনটির অনুরোধে করা হয়।

সুতরাং এটি নিয়মিত এবং স্বাভাবিক আচরণ।



একদম ঠিক আছে, সেখানে মূল আরএফসি-তে সম্পন্ন করার প্রস্তাব ছিল এবং উইনসক এবং সকেট কী করেছিল
ফ্রেডব্যাকার

প্যাক্যাপটি দেখার পরে, ওয়েব সার্ভারটি পিপিএইচ ওপির ট্র্যাফিকের উপর সেট করে দেওয়ার খুব কম সম্ভাবনা রয়েছে
মাইক পেনিংটন

3

প্যাকেটের আকার নির্ভর করে কীভাবে অ্যাপ্লিকেশন এবং / অথবা ওএস বাফার করে এবং নেটওয়ার্ক ডেটা প্রেরণ করে। যদি অ্যাপ্লিকেশন এবং / বা ওএস বাফারে 1080 বাইট থাকার পরে ডেটা প্রেরণের সিদ্ধান্ত নেয় তবে প্যাকেটটি 1080 বাইট (প্লাস শিরোনাম) হবে। এটি করার অনেক কারণ থাকতে পারে। আপনার ক্ষেত্রে আপনাকে ওয়েবসারভার উত্স কোড এবং / অথবা ওএস নেটওয়ার্ক স্ট্যাকের সন্ধান করতে হবে।


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

অবশ্যই, কিছু হতে পারে। সার্ভার এবং এটি ওএস চালু হওয়ায় ডিবাগ না করে বলার উপায় নেই। তবে আইএমএইচও সম্পর্কে সতর্ক হওয়ার কিছু নেই।
সেবাস্তিয়ান উইজিংগার

আমি শঙ্কিত নই, এটিকে কেবল অদ্ভুত বলে মনে হয়েছিল এবং এর চেয়ে আরও কিছু আছে কিনা তা আমি জানতে চাই।
ভাদিম

1
আপনার যদি ওয়্যারশার্ক থাকে তবে পিএসএইচ (পুশ) বিটের জন্য 1080 প্যাকেট টিসিপি শিরোনামে দেখুন। অ্যাপ্লিকেশন স্ট্যাক বলছে এখন এই তথ্য প্রেরণ।
ফ্রেডপেকার

1
উপরে দেখুন, বেশিরভাগ ক্ষেত্রে এটির টিসিপি স্ট্যাক
ফ্রেডপেকার

1

প্যাকেটের আকার ওএস (সাধারণভাবে) দ্বারা সংজ্ঞায়িত করা হয় এবং এটি বাফারগুলির সাথে সম্পর্কিত, অ্যাপ্লিকেশন দ্বারা সরবরাহ করা ডেটার পরিমাণ ইত্যাদি Many একটি বড় প্যাকেট।

কখনও কখনও চলমান অ্যাপ্লিকেশানগুলি বাফারকে স্যাচুরেট না করে ওএসকে দ্রুততর করার দাবি করতে পারে (এটি এখন পর্যন্ত বাফারে যা আছে তা প্রেরণ করুন)।

সম্ভবত, আপনি যে দৃশ্যের সাথে কাজ করছেন সে সম্পর্কে আমাদের আরও বিস্তারিত জানাতে পারেন (যেমন: সার্ভার ওএস, এতে থাকা অ্যাপস)।


0

মূলত সমস্যাটি টিসিপি বাস্তবায়ন জানে না অ্যাপ্লিকেশন পরবর্তী কী করতে চলেছে। সার্ভার অ্যাপ্লিকেশন যখন লেখার একটি ক্রম তৈরি করে তখন স্ট্যাকটি জানে না যে এগুলি এতক্ষণে যে লেখাগুলি পেয়েছে তা পুরো ক্রম বা এটির একমাত্র অংশ।

সার্ভার অ্যাপ্লিকেশনটি বেশিরভাগ সময় নেটওয়ার্ক স্ট্যাকটি খালি করতে সক্ষম হওয়ার চেয়ে দ্রুত বাফারে লেখায়। সুতরাং বাফার পূর্ণ এবং পূর্ণ আকারের প্যাকেটগুলি বেরিয়ে আসে।

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


0

আপনি যদি ফ্রেম 34 এ দেখুন, আপনি দেখতে পাবেন যে সার্ভারটি একটি 32 কেবি বাফার স্থানান্তর করেছে এবং পিএসএইচ বিট সেট হয়েছে। আপনি যদি 82 এর দিকে তাকান তবে আপনি একই পিএসএইচ বিট থেকে 32 কেবি দেখতে পাবেন। প্যাকেটের 52 টিতে পিএসএইচ বিট রয়েছে যদিও প্রতিক্রিয়াটির 2kB এর চেয়ে কম রয়েছে।

নেটওয়ার্কে লিখিত অ্যাপ্লিকেশন পিডিইউর শেষ বিভাগের জন্য পিএসএইচ বিটটি সাধারণত টিসিপি স্ট্যাক দ্বারা সেট করা হয়। সুতরাং অ্যাপ্লিকেশনটিতে একটি 32 কেবি বাফার ব্যবহার করা হয় এবং যখন প্রচুর ডেটা থাকে, এটি একবারে টিসিপি সকেটে 32 কেবিতে লিখে দেয়। যখন 51-52 ফ্রেমের মতো কম ডেটা থাকে, তখনই অ্যাপ্লিকেশনটি সেই প্রতিক্রিয়াটি প্রথমে লিখেছিল এবং এটি কেবল 1820 বাইট ছিল।

লক্ষ্য করুন যে আমি যে অ্যাপ্লিকেশনটি উল্লেখ করেছি তা বাস্তবে সার্ভার অ্যাপ্লিকেশন নাও হতে পারে তবে কিছু ইন্টারমিডিয়েট সফটওয়্যার যেমন জাভা ভার্চুয়াল মেশিন (জেভিএম) বা যাই হোক না কেন। ডেটা সামগ্রী থেকে এটি পরিষ্কার নয় যে কেন 1820 বাইট পিডিইউ পাঠানো হয়েছিল, সম্ভবত কোনও 32 কেবি বাফার তখন উপলব্ধ ছিল না?

মুল বক্তব্যটি এটির উচিত নয়, কোনও কার্যকর পার্সোনাল্টি পেনাল্টি নেই penalty

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