
एक ऑनलाइन अनुरोध प्रतिकृति और TCP स्ट्रीम रीप्ले टूल, जो वास्तविक परीक्षण, प्रदर्शन परीक्षण, स्थिरता परीक्षण, तनाव परीक्षण, लोड परीक्षण, स्मोक टेस्टिंग और अधिक के लिए आदर्श है।
TCPCopy एक TCP स्ट्रीम रीप्ले टूल है जो इंटरनेट सर्वर अनुप्रयोगों के यथार्थवादी परीक्षण के लिए उपयोग होता है।
शुरुआती लोगों के लिए TCPCopy का एक अवलोकन
TCPCopy आर्किटेक्चर का एक सामान्य अवलोकन
TCPCopy परीक्षण उपयोग के मामले
हालाँकि इंटरनेट सर्वर अनुप्रयोगों के परीक्षण के लिए वास्तविक लाइव ट्रैफ़िक महत्वपूर्ण है, लेकिन ऑनलाइन वातावरण की जटिलता के कारण इसे सटीक रूप से अनुकरण करना चुनौतीपूर्ण है। अधिक यथार्थवादी परीक्षण को सक्षम करने के लिए, TCPCopy को एक लाइव फ़्लो पुनरुत्पादन उपकरण के रूप में विकसित किया गया था जो उत्पादन वर्कलोड से निकटता से मिलता-जुलता परीक्षण वर्कलोड उत्पन्न करता है। TCPCopy चीन में कंपनियों द्वारा व्यापक रूप से उपयोग किया जाता है।
TCPCopy उत्पादन प्रणाली को न्यूनतम रूप से प्रभावित करता है, केवल अतिरिक्त CPU, मेमोरी और बैंडविड्थ की खपत करता है। पुनरुत्पादित वर्कलोड अनुरोध विविधता, नेटवर्क विलंबता और संसाधन उपयोग के संदर्भ में उत्पादन वातावरण को दर्शाता है।

चित्र 1. TCPCopy आर्किटेक्चर का अवलोकन।
जैसा कि चित्र 1 में दिखाया गया है, TCPCopy दो घटकों से बना है: tcpcopy और intercept। tcpcopy घटक ऑनलाइन सर्वर पर चलता है, लाइव अनुरोधों को कैप्चर करता है, जबकि intercept सहायक सर्वर पर संचालित होता है, tcpcopy को प्रतिक्रिया जानकारी पास करने जैसे कार्य करता है। परीक्षण एप्लिकेशन स्वयं लक्ष्य सर्वर पर चलता है।
डिफ़ॉल्ट रूप से, tcpcopy नेटवर्क लेयर पर पैकेट कैप्चर करने के लिए रॉ सॉकेट का उपयोग करता है (चित्र में नारंगी तीरों द्वारा दर्शाया गया है)। यह TCP इंटरैक्शन सिमुलेशन, नेटवर्क विलंबता नियंत्रण और ऊपरी-लेयर इंटरैक्शन सिमुलेशन जैसी प्रक्रियाओं को संभालता है। फिर यह आउटपुट के लिए रॉ सॉकेट का उपयोग करके लक्ष्य सर्वर को पैकेट भेजता है (चित्र में हल्के लाल तीरों द्वारा दिखाया गया है)।
लक्ष्य सर्वर पर एकमात्र आवश्यक कार्य प्रतिक्रिया पैकेट (चित्र में हल्के हरे तीरों द्वारा दिखाया गया है) को सहायक सर्वर पर निर्देशित करने के लिए रूट नियमों को कॉन्फ़िगर करना है।
intercept घटक की भूमिका प्रतिक्रिया हेडर (डिफ़ॉल्ट रूप से) को tcpcopy को अग्रेषित करना है। यह प्रतिक्रिया पैकेट को कैप्चर करता है, प्रतिक्रिया हेडर जानकारी निकालता है, और इस जानकारी को एक समर्पित चैनल (चित्र में हल्के नीले तीरों द्वारा दर्शाया गया है) के माध्यम से tcpcopy को भेजता है। प्रतिक्रिया हेडर प्राप्त करने पर, tcpcopy ऑनलाइन पैकेट की विशेषताओं को संशोधित करने के लिए जानकारी का उपयोग करता है और आगे के पैकेट भेजना जारी रखता है।
यह ध्यान रखना महत्वपूर्ण है कि लक्ष्य सर्वर से प्रतिक्रियाएँ सहायक सर्वर पर रूट की जाती हैं, जो एक ब्लैक होल के रूप में कार्य करता है।
intercept के लिए, आपके पास दो विकल्प हैं:
git clone git://github.com/session-replay-tools/intercept.git।tcpcopy के लिए, आपके पास भी दो विकल्प हैं:
git clone git://github.com/session-replay-tools/tcpcopy.git।intercept निर्देशिका पर जाएँ:cd intercept./configure makeintercept टूल स्थापित करें:make installintercept के लिए कॉन्फ़िगरेशन विकल्प--single
intercept को गैर-वितरित मोड में चलाएँ।
--with-pfring=PATH
PF_RING लाइब्रेरी स्रोतों का पथ निर्दिष्ट करें।
--with-debug
डीबग समर्थन के साथ intercept संकलित करें, लॉग एक फ़ाइल में सहेजे जाएँगे।
tcpcopy स्थापित करनाtcpcopy निर्देशिका पर जाएँ: cd tcpcopy./configure maketcpcopy टूल स्थापित करें: make installtcpcopy के लिए कॉन्फ़िगरेशन विकल्प--offline
pcap फ़ाइल से TCP स्ट्रीम्स को रीप्ले करें।
--pcap-capture
डेटा लिंक लेयर पर पैकेट कैप्चर करें।
--pcap-send
IP लेयर के बजाय डेटा लिंक लेयर पर पैकेट भेजें।
--with-pfring=PATH
PF_RING लाइब्रेरी स्रोतों का पथ निर्दिष्ट करें।
--set-protocol-module=PATH
tcpcopy को एक बाहरी प्रोटोकॉल मॉड्यूल के साथ काम करने के लिए सेट करें।
--single
यदि intercept और tcpcopy दोनों को --single विकल्प के साथ कॉन्फ़िगर किया गया है, तो केवल एक tcpcopy इंस्टेंस intercept के साथ काम करेगा, जिससे बेहतर प्रदर्शन होगा।
--with-tcmalloc
malloc के बजाय tcmalloc का उपयोग करें।
--with-debug
डीबग समर्थन के साथ tcpcopy संकलित करें, लॉग एक फ़ाइल में सहेजे जाएँगे।
मान लें कि tcpcopy और intercept दोनों को ./configure का उपयोग करके कॉन्फ़िगर किया गया है।
सर्वर एप्लिकेशन चलाने वाले लक्ष्य सर्वर पर:
प्रतिक्रिया पैकेट को सहायक सर्वर पर निर्देशित करने के लिए रूट नियमों को कॉन्फ़िगर करें। उदाहरण के लिए, यदि 61.135.233.161 सहायक सर्वर का IP पता है, तो 62.135.200.x श्रेणी के क्लाइंट से सभी प्रतिक्रियाओं को सहायक सर्वर पर निर्देशित करने के लिए निम्नलिखित रूट कमांड का उपयोग करें:
route add -net 62.135.200.0 netmask 255.255.255.0 gw 61.135.233.161
intercept चलाने वाले सहायक सर्वर पर (रूट विशेषाधिकार या CAP_NET_RAW क्षमता आवश्यक):
./intercept -F <filter> -i <device>
ध्यान दें कि फ़िल्टर प्रारूप pcap फ़िल्टर के समान है। उदाहरण के लिए:
./intercept -i eth0 -F 'tcp and src port 8080' -d
इस उदाहरण में, intercept पोर्ट 8080 पर सुनने वाले TCP-आधारित एप्लिकेशन से प्रतिक्रिया पैकेट कैप्चर करेगा, eth0 नेटवर्क डिवाइस का उपयोग करके।
कृपया ध्यान दें कि सहायक सर्वर पर ip_forward सक्षम नहीं है।
ऑनलाइन स्रोत सर्वर पर (रूट विशेषाधिकार या CAP_NET_RAW क्षमता आवश्यक):
./tcpcopy -x localServerPort-targetServerIP:targetServerPort -s <intercept server> [-c <ip range>]
उदाहरण के लिए (मान लें कि 61.135.233.160 लक्ष्य सर्वर का IP पता है):
./tcpcopy -x 80-61.135.233.160:8080 -s 61.135.233.161 -c 62.135.200.x
इस उदाहरण में, tcpcopy वर्तमान सर्वर से पोर्ट 80 पर पैकेट कैप्चर करता है, क्लाइंट IP पते को 62.135.200.x श्रेणी में से एक में बदलता है, और इन पैकेट को लक्ष्य सर्वर (61.135.233.160) के पोर्ट 8080 पर भेजता है। यह प्रतिक्रिया पैकेट अग्रेषित करने के लिए intercept का अनुरोध करने हेतु 61.135.233.161 से भी जुड़ता है। जबकि -c पैरामीटर वैकल्पिक है, इसका उपयोग यहाँ रूट नियमों को सरल बनाने के लिए किया गया है।