Paket TCP sedang dikirim ulang 7 kali ketika sysctl tcp_retries1 diatur ke 3 - mengapa?

9

Ubuntu 12.04

Saya mencoba untuk lebih memahami berapa kali TCP akan mencoba mengirim ulang paket ketika tidak menerima konfirmasi tujuan menerimanya. Setelah membaca halaman manual tcp tampak jelas ini dikendalikan oleh sysctl tcp_retries1:

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.

Sistem saya disetel ke nilai default 3:

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

Ingin menguji ini, saya terhubung dari sistem A (172.16.249.138) ke sistem B (172.16.249.137) melalui ssh dan memulai loop cetak sederhana pada konsol. Saya kemudian terputus B tiba-tiba dari jaringan saat komunikasi ini terjadi.

Di terminal lain, saya menjalankan 'tcpdump host 172.16.249.137' pada sistem A. Di bawah ini adalah baris yang relevan dari output (nomor baris ditambahkan untuk kejelasan).

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

Jika saya mengartikan ini dengan benar (dan saya mungkin tidak), paket baris 3 tidak pernah diakui oleh sistem B. A kemudian mencoba mengirim paket ini 7 kali (baris 5-11) setiap kali meningkatkan timer pengiriman ulang (kira-kira dua kali lipat setiap paket waktu).

Mengapa paket dikirim ulang 7 kali, bukan 3?

Catatan: Saya melakukan tes formal ini setelah memperhatikan beberapa file pcap di mana pengiriman ulang terjadi 6-7 kali melalui koneksi HTTP sehingga jumlah pengiriman ulang tampaknya tidak spesifik untuk SSH.

HodB
sumber
Apakah Anda membaca penjelasan pengaturan? Ini bukan jumlah percobaan yang dicoba. Jumlah percobaan yang harus diusahakan sebelum mengubah strategi.
David Schwartz
Seperti yang disebutkan di atas, ya, saya membaca pengaturan. Dalam hal ini tidak akan ada rute untuk memperbarui karena keduanya berada di subnet yang sama. Kenapa 7 coba lagi? Apa yang menentukan berapa banyak percobaan ulang yang terjadi secara total?
HodB
2
Berapa nilai Anda untuk sysctl net.ipv4.tcp_retries2? Variabel net.ipv4.tcp_retries2 adalah variabel yang benar-benar mengontrol jumlah percobaan yang akan dicoba. Variabel net.ipv4.tcp_retries1 hanya mengontrol jumlah coba lagi sebelum sistem memberi sinyal level yang lebih rendah untuk mencoba memverifikasi jaringan yang tersedia.
hrunting

Jawaban: