जवाबों:
राउंड ट्रिप का समय वास्तव में कहीं भी संग्रहीत नहीं है। भेजने वाला होस्ट उस समय को याद करता है जब वह ICMP के 16-बिट आइडेंटिफ़ायर और सीक्वेंस फ़ील्ड का उपयोग करते हुए प्रत्येक ICMP इको रिक्वेस्ट मैसेज भेजता है। जब यह ICMP इको रिप्लाई हो जाता है, तो यह वर्तमान समय को नोट करता है, यह उस समय को खोजता है, जब उसने मिलान किए गए रिक्वेस्ट पैकेट को रिप्लाई द्वारा पहचाना जाता है, अंतर की गणना करता है, और उसे रिपोर्ट करता है।
आमतौर पर पिंग ICMP के पहचान क्षेत्र का उपयोग एक साथ कई पिंग्स को अलग करने के लिए करता है, और अलग-अलग पैकेट को अलग करने के लिए अनुक्रम क्षेत्र को।
किसी भी पैकेट के लिए निवर्तमान समय को कहाँ संग्रहीत करना है यह तय करना कार्यान्वयन पर निर्भर करता है: इसे मेज पर होस्ट पर संग्रहीत करने के बजाय, यह आमतौर पर इसे आउटगोइंग अनुरोध में भेजता है और समय की गणना करने के लिए उत्तर में प्रतिलिपि का उपयोग करता है। (इस टिप्पणी को इंगित करने के लिए धन्यवाद टिप्पणी।) इसे लागू करने के लिए सुविधाजनक है जो किसी भी तरह से भेजा गया है, और निश्चित रूप से डेटा को ठीक से कॉपी करने के लिए दूर के छोर, और किसी भी हस्तक्षेप करने वाले उपकरण पर भरोसा करना होगा। कुछ प्रणालियों को 16 बाइट्स में माइक्रोसेकंड के रिज़ॉल्यूशन के साथ समय का प्रतिनिधित्व करने के लिए जाना जाता है, कुछ को 8 बाइट्स के रूप में मिलीसेकंड के रिज़ॉल्यूशन के साथ जाना जाता है।
data
आईपी पैकेट के हिस्से के अंदर का प्रारूप ICMP इको रिक्वेस्ट / रिप्लाई संदेश है, जिसे RFC 792 "इंटरनेट कंट्रोल मैसेज फॉर्मेट" (p14) से कॉपी किया गया है ।
Type
अनुरोध के लिए 8, उत्तर के लिए 0 है; Code
0 है।
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identifier | Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data ...
+-+-+-+-+-
पुनश्च। बस स्पष्ट होने के लिए, आईपी हेडर का पहचान क्षेत्र सामान्य रूप से एक मनमाना मूल्य पर सेट होता है, प्रत्येक आउटगोइंग पैकेट के लिए अलग, किसी भी विखंडन के पुन: उपयोग के लिए उपयोग किया जाता है, और आईसीएमपी शरीर में किसी भी चीज के समान मूल्य नहीं होता है।
इसके अलावा, हालांकि एक विकल्प के रूप में आईपी हेडर में टाइमस्टैम्प लगाने के लिए एक तंत्र निर्धारित किया गया है, यह पिंग के लिए सामान्य तंत्र नहीं है क्योंकि बहुत से राउटर कॉन्फ़िगर किए जाते हैं जो कुछ निश्चित आईपी विकल्पों को पारित नहीं करते हैं। RFC 781 इंटरनेट प्रोटोकॉल टाइमस्टैम्प विकल्प की विशिष्टता देखें ।
अंत में, हालांकि यहां सब कुछ मूल प्रश्न के अनुसार एक आईपीवी 4 परिप्रेक्ष्य से लिखा गया था; लेकिन IPv6 में पिंग बेहद समान है, ICMPv6 RFC 4443 देखें ।
ping
लिनक्स पर कम से कम एक कार्यान्वयन है जो Data
आईसीएमपी पेलोड के अनुभाग में टाइमस्टैम्प को संग्रहीत करता है । उस समय कुछ काफी दिलचस्प त्रुटि संदेश होता है, जब प्रतिध्वनि एक इंटरनेट एक्सचेंज का जवाब देती है जो हर पैकेट में उस स्थान पर थोड़ा सा दूषित कर रहा था।
कम से कम ping
लिनक्स पर आम उपयोगिता के साथ , उस समय जब पैकेट भेजा गया था, आईपी और आईसीएमपी हेडर के बाद इको अनुरोध पैकेट के डेटा भाग में संग्रहीत किया जाता है। जब रिसीवर एक प्रतिध्वनि के साथ उत्तर देता है, तो डेटा भाग को बरकरार रखा जाता है, इसलिए प्रेषक गोल-यात्रा समय की गणना कर सकता है।
यह उपयोगिता के लिए मैन पेजping
में वर्णित है ("आईसीएमपी पैकेट विवरण" के तहत):
यदि डेटा स्थान
struct timeval
पिंग के आकार का कम से कम है, तो एक टाइमस्टैम्प को शामिल करने के लिए इस स्थान के शुरुआती बाइट्स का उपयोग करता है जो इसे गोल यात्रा समय की गणना में उपयोग करता है। यदि डेटा स्थान छोटा है, तो कोई गोल यात्रा समय नहीं दिया जाता है।
मेरी मशीन sizeof(struct timeval)
16 पर है, इसलिए पैकेट डेटा का आकार 15 तक सेट करने ping
से राउंड-ट्रिप समय दिखाने से रोकता है:
$ ping -s 15 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 15(43) bytes of data.
23 bytes from 8.8.8.8: icmp_seq=1 ttl=121
बेशक, उपयोगिता के भीतर भेजें टाइमस्टैम्प को संग्रहीत करना, जैसा कि @ जोनाथनोज़ का जवाब बताता है, एक संभावित कार्यान्वयन भी होगा। यहां तक कि लिनक्स उपयोगिता को कुछ आंतरिक बहीखाता की आवश्यकता है, क्योंकि यह डुप्लिकेट पैकेट का पता लगाता है।