Sysctl tcp_retries1 3 olarak ayarlandığında TCP paketi 7 kez yeniden iletiliyor - neden?


9

Ubuntu 12.04

Hedefin aldığı onay almadığında TCP kaç kez bir paketi yeniden iletmeye çalışacağını daha iyi anlamaya çalışıyorum. Tcp man sayfasını okuduktan sonra bunun sysctl tcp_retries1 tarafından kontrol edildiği açıkça görülüyordu:

tcp_retries1 (integer; default: 3)
           The number of times TCP will attempt to retransmit a  packet  on
           an  established connection normally, without the extra effort of
           getting the network layers involved.  Once we exceed this number
           of retransmits, we first have the network layer update the route
           if possible before each new retransmit.  The default is the  RFC
           specified minimum of 3.

Sistemim varsayılan 3 olarak ayarlanmıştır:

# cat /proc/sys/net/ipv4/tcp_retries1 
3

Bunu test etmek için ssh üzerinden A sisteminden (172.16.249.138) B sistemine (172.16.249.137) bağlandım ve konsolda basit bir yazdırma döngüsü başlattım. Daha sonra, bu iletişim gerçekleşirken B'nin ağ ile aniden bağlantısını kestim.

Başka bir terminalde, A sisteminde “tcpdump host 172.16.249.137” çalıştırıyordum. Çıktıdan ilgili satırlar (netlik için eklenen satır numaraları).

00: ...
01: 13:29:46.994715 IP 172.16.249.138.50489 > 172.16.249.137.ssh: Flags [.], ack 5989441, win 80, options [nop,nop,TS val 1957286 ecr 4294962520], length 0
02: 13:29:46.995084 IP 172.16.249.138.50489 > 172.16.249.137.ssh: Flags [.], ack 5989441, win 186, options [nop,nop,TS val 1957286 ecr 4294962520], length 0    
03: 13:29:47.040360 IP 172.16.249.138.50489 > 172.16.249.137.ssh: Flags [P.], seq 29136:29184, ack 5989441, win 186, options [nop,nop,TS val 1957298 ecr 4294962520], length 48
04: 13:29:47.086552 IP 172.16.249.138.50489 > 172.16.249.137.ssh: Flags [.], ack 5989441, win 376, options [nop,nop,TS val 1957309 ecr 4294962520], length 0
05: 13:29:47.680608 IP 172.16.249.138.50489 > 172.16.249.137.ssh: Flags [P.], seq 29136:29184, ack 5989441, win 376, options [nop,nop,TS val 1957458 ecr 4294962520], length 48
06: 13:29:48.963721 IP 172.16.249.138.50489 > 172.16.249.137.ssh: Flags [P.], seq 29136:29184, ack 5989441, win 376, options [nop,nop,TS val 1957779 ecr 4294962520], length 48
07: 13:29:51.528564 IP 172.16.249.138.50489 > 172.16.249.137.ssh: Flags [P.], seq 29136:29184, ack 5989441, win 376, options [nop,nop,TS val 1958420 ecr 4294962520], length 48
08: 13:29:56.664384 IP 172.16.249.138.50489 > 172.16.249.137.ssh: Flags [P.], seq 29136:29184, ack 5989441, win 376, options [nop,nop,TS val 1959704 ecr 4294962520], length 48
09: 13:30:06.936480 IP 172.16.249.138.50489 > 172.16.249.137.ssh: Flags [P.], seq 29136:29184, ack 5989441, win 376, options [nop,nop,TS val 1962272 ecr 4294962520], length 48
10: 13:30:27.480381 IP 172.16.249.138.50489 > 172.16.249.137.ssh: Flags [P.], seq 29136:29184, ack 5989441, win 376, options [nop,nop,TS val 1967408 ecr 4294962520], length 48
11: 13:31:08.504033 IP 172.16.249.138.50489 > 172.16.249.137.ssh: Flags [P.], seq 29136:29184, ack 5989441, win 376, options [nop,nop,TS val 1977664 ecr 4294962520], length 48
12: 13:31:13.512437 ARP, Request who-has 172.16.249.137 tell 172.16.249.138, length 28
13: 13:31:14.512336 ARP, Request who-has 172.16.249.137 tell 172.16.249.138, length 28
14: 13:31:15.512241 ARP, Request who-has 172.16.249.137 tell 172.16.249.138, length 28

Bunu doğru şekilde yorumluyorsam (ve olmayabilirim), hat 3'ün paketi hiçbir zaman B sistemi tarafından kabul edilmez. A, bu paketi her seferinde yeniden iletim zamanlayıcısını (kabaca iki katına çıkararak) iki kez 7 kez (yeniden 5-11 satır) göndermeye çalışır. süresi).

Paket neden 3 yerine 7 kez yeniden iletiliyor?

Not: Bu resmi testi, HTTP bağlantıları üzerinden yeniden iletimlerin 6-7 kez tekrarlandığı birkaç pcap dosyasını fark ettikten sonra yaptım, böylece yeniden iletim sayısı SSH'ye özgü görünmüyor.


Ortamın açıklamasını okudunuz mu? Deneme denemesi sayısı değil. Stratejileri değiştirmeden önce tekrar denenecek deneme sayısı.
David Schwartz

Yukarıda belirtildiği gibi, evet, ayarı okudum. Bu durumda, her ikisi de aynı alt ağda olduğu için güncellenecek bir yol olmazdı. Neden 7 tekrar deniyor? Toplamda kaç yeniden deneme gerçekleştiğini ne belirler?
HodB

2
Sysctl net.ipv4.tcp_retries2 için değeriniz nedir? Net.ipv4.tcp_retries2 değişkeni, denenecek yeniden deneme sayısını gerçekten kontrol eden değişkendir. Net.ipv4.tcp_retries1 değişkeni, sistem ağın kullanılabilir olduğunu doğrulamak için sistem daha düşük bir düzey sinyali vermeden önce yeniden deneme sayısını denetler.
2014

Yanıtlar:


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.