राउंड ट्रिप टाइम (RTT) क्या है?
RTT एक सिग्नल भेजने और उसकी पावती प्राप्त करने के बीच का कुल समय है। इसमें प्रसारण समय, प्रसंस्करण समय और कतार विलंब शामिल हैं।
RTT को प्रभावित करने वाले कारक
- संचारण माध्यम (फाइबर, कॉपर, वायरलेस)
- नेटवर्क में नोड्स/हॉप्स की संख्या
- नेटवर्क ट्रैफिक/भीड़
- भौतिक दूरी
- सर्वर प्रतिक्रिया समय
नोट: शुद्ध C में RTT
मूल C में HTTP अनुरोध करने के लिए मानक पुस्तकालय समर्थन नहीं है। मूल कोड पायथन में था (requests पुस्तकालय का उपयोग करके)। यहां C समकक्ष है जो सिस्टम कॉल का उपयोग करता है:
पिंग का उपयोग करके C प्रोग्राम (लिनक्स/यूनिक्स)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
double measure_rtt_ping(const char *host) {
char command[256];
snprintf(command, sizeof(command), "ping -c 1 %s", host);
FILE *fp = popen(command, "r");
if (!fp) return -1;
char line[256];
double rtt = -1;
while (fgets(line, sizeof(line), fp)) {
// "time=12.3 ms" पैटर्न खोजें
char *time_ptr = strstr(line, "time=");
if (time_ptr) {
sscanf(time_ptr, "time=%lf", &rtt);
break;
}
}
pclose(fp);
return rtt; // मिलीसेकंड में
}
int main() {
char host[256];
printf("होस्टनाम/IP दर्ज करें: ");
scanf("%255s", host);
double rtt = measure_rtt_ping(host);
if (rtt >= 0)
printf("RTT to %s: %.2f ms\n", host, rtt);
else
printf("RTT मापने में विफल\n");
return 0;
}
सॉकेट का उपयोग करके C प्रोग्राम (TCP SYN)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <sys/time.h>
#include <unistd.h>
double measure_rtt_tcp(const char *hostname, int port) {
struct hostent *he = gethostbyname(hostname);
if (!he) return -1;
int sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0) return -1;
struct sockaddr_in addr;
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
memcpy(&addr.sin_addr, he->h_addr, he->h_length);
// नॉन-ब्लॉकिंग कनेक्ट के लिए टाइमआउट सेट करें
struct timeval tv = {5, 0}; // 5 सेकंड टाइमआउट
setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv));
setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(tv));
struct timeval start, end;
gettimeofday(&start, NULL);
int result = connect(sock, (struct sockaddr*)&addr, sizeof(addr));
gettimeofday(&end, NULL);
close(sock);
if (result < 0) return -1;
double rtt_ms = (end.tv_sec - start.tv_sec) * 1000.0 +
(end.tv_usec - start.tv_usec) / 1000.0;
return rtt_ms;
}
int main() {
double rtt = measure_rtt_tcp("www.google.com", 80);
if (rtt >= 0)
printf("TCP RTT: %.2f ms\n", rtt);
else
printf("कनेक्शन विफल\n");
return 0;
}
ICMP पिंग (रॉ सॉकेट - रूट आवश्यक)
सटीक ICMP पिंग के लिए रॉ सॉकेट और रूट विशेषाधिकारों की आवश्यकता होती है। उत्पादन कोड के लिए, liboping या सिस्टम ping कमांड का उपयोग करें।
आउटपुट उदाहरण
होस्टनाम/IP दर्ज करें: www.google.com RTT to www.google.com: 23.45 ms