Yanıtlar:
Gidiş dönüş süresi aslında hiçbir yerde saklanmaz. Gönderen ana bilgisayar, ICMP'nin 16 bitlik tanımlayıcı ve sıra alanlarını kullanarak her ICMP Yankı İsteği iletisini gönderdiği zamanı hatırlar. ICMP Yankı Yanıtını aldığında, geçerli saati not eder, yanıt tarafından tanımlanan eşleşen İstek paketini gönderdiği zamanı bulur, farkı hesaplar ve raporlar.
Genellikle ping, aynı anda birden çok ping'i ayırmak için ICMP'nin tanımlama alanını ve ayrı ayrı paketleri ayırmak için sıra alanını kullanır.
Belirli bir paket için giden sürenin nerede saklanacağına karar vermek uygulamaya bağlıdır: bunu bir tabloda ana bilgisayarda depolamak yerine, genellikle giden istekte gönderir ve zamanı hesaplamak için yanıttaki kopyayı kullanır. (Bunu işaret ettikleri için yorumculara teşekkür ederiz.) Uygulama için uygun olan her şekilde gönderilir ve elbette verileri düzgün bir şekilde kopyalamak için uzak uca ve herhangi bir müdahale ekipmanına güvenmek zorundadır. Bazı sistemlerin mikrosaniye çözünürlüğünde 16 baytta, bazıları milisaniyede çözünürlüğünde 8 bayt olarak zamanı temsil ettiği bilinmektedir.
data
IP paketinin içindeki format , burada RFC 792 "İnternet Kontrol Mesaj Formatı" ndan (s14) kopyalanan ICMP Yankı Talebi / Cevap mesajıdır .
Type
İstek için 8, Yanıt için 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 ...
+-+-+-+-+-
PS. Daha açık olmak gerekirse, IP başlığının tanımlama alanı normalde, herhangi bir parçalamanın yeniden birleştirilmesi için kullanılan her giden paket için farklı olan rastgele bir değere ayarlanır ve ICMP gövdesindeki herhangi bir değerle aynı değere sahip değildir.
Ayrıca, zaman damgasını IP başlığına bir seçenek olarak koymak için tanımlanmış bir mekanizma olmasına rağmen, ping için normal bir mekanizma değildir, çünkü çok sayıda yönlendirici belirli IP seçeneklerini geçmeyecek şekilde yapılandırılmıştır. Bkz. RFC 781 Internet Protokolü Zaman Damgası Seçeneğinin Belirtimi.
Son olarak, buradaki her şey orijinal soru başına bir IPv4 perspektifinden yazılmış olsa da; ancak IPv6'daki ping işlemi oldukça benzerdir, bkz. ICMPv6 RFC 4443 .
ping
zaman damgasını saklayan Linux üzerinde en az bir uygulama olduğundan eminim Data
. Bu, yankı yanıtları, her pakette o konumda biraz bozulan bir internet alışverişinden geçtiğinde oldukça ilginç bir hata mesajına yol açar.
En azından ping
Linux'taki ortak yardımcı programda, paketin gönderildiği zaman yankı istek paketinin veri kısmında, yani IP ve ICMP başlıklarından sonra depolanır. Alıcı bir yankı cevabı ile cevap verdiğinde veri kısmı bozulmadan tutulur, böylece gönderen gidiş-dönüş süresini hesaplayabilir.
Bu yardımcı programın kılavuz sayfasındaping
açıklanmıştır ("ICMP PAKET DETAYLARI" altında):
Veri alanı en az
struct timeval
ping boyutundaysa , gidiş-dönüş sürelerinin hesaplanmasında kullandığı bir zaman damgasını dahil etmek için bu alanın başlangıç baytlarını kullanır. Veri alanı daha kısaysa, gidiş-dönüş süreleri verilmez.
Makinemde sizeof(struct timeval)
16, bu nedenle paket veri boyutunu 15 olarak ayarlamak ping
gidiş-dönüş sürelerinin gösterilmesini önler :
$ 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
Elbette, @ jonathanjo'nun cevabının açıkladığı gibi, gönderme zaman damgasını yardımcı program içinde saklamak da olası bir uygulama olacaktır. Linux yardımcı programı bile yinelenen paketleri algıladığından dahili bir defter tutmaya ihtiyaç duyar.