Bagaimana saya bisa menyetel batas waktu pengiriman ulang TCP awal?

14

Nilai awal TCP RTO 3s terlalu lama untuk sebagian besar aplikasi berbasis LAN. Bagaimana saya bisa menyetelnya lebih rendah? Apakah ada sysctl?

claymation
sumber

Jawaban:

12

Tidak, kamu tidak bisa; hardcoded di kernel. Jadi ubah kernel dan kompilasi ulang.

#define TCP_TIMEOUT_INIT ((unsigned)(3*HZ))     /* RFC 1122 initial RTO value   */

Inilah yang harus Anda dapatkan di include / net / tcp.h Anda.

Tapi saya bisa melihat seseorang memberikan tambalan , meskipun tidak pernah mencobanya sendiri

Marco Bizzarri
sumber
4

Pengaturan awal tidak akan terlalu memengaruhi kinerja Anda secara keseluruhan, karena RTO menyesuaikan diri dengan kondisi jaringan. Jika Anda mengubah RTO, Anda dapat mengaturnya menjadi 1 detik (tetapi tidak lebih rendah).

Ada diskusi tentang ini di RFC 1122 :

        The following values SHOULD be used to initialize the
        estimation parameters for a new connection:
        (a)  RTT = 0 seconds.

        (b)  RTO = 3 seconds.  (The smoothed variance is to be
             initialized to the value that will result in this RTO).

        The recommended upper and lower bounds on the RTO are known
        to be inadequate on large internets.  The lower bound SHOULD
        be measured in fractions of a second (to accommodate high
        speed LANs) and the upper bound should be 2*MSL, i.e., 240
        seconds.

        DISCUSSION:
             Experience has shown that these initialization values
             are reasonable, and that in any case the Karn and
             Jacobson algorithms make TCP behavior reasonably
             insensitive to the initial parameter choices.

RFC 6298 adalah pembaruan yang diusulkan (diterbitkan Juni 2011) yang mengatakan bahwa RTO dapat diinisialisasi ke nilai yang lebih rendah (tetapi tidak lebih rendah dari 1 detik), dan berisi Lampiran yang berisi data yang membenarkan 1 detik sebagai nilai awal yang wajar.

Jay Elston
sumber
1 detik HARUS, bukan HARUS; btw Anda dapat melihat rto dari satu front-berakhir mesin pencari terkenal =)
SaveTheRbtz
Saya tidak setuju dengan pernyataan ini "Pengaturan awal tidak akan terlalu memengaruhi kinerja Anda secara keseluruhan,". Ini dapat memengaruhi tingkat kesalahan Anda untuk aplikasi pada komunikasi awal. Ketika aplikasi backend menetapkan batas waktu baca menjadi 3 detik atau kurang, paket turun (kejadian normal dengan kemacetan) pada jaringan selama komunikasi TCP awal tidak akan memungkinkan pengiriman ulang yang tepat dari paket yang dijatuhkan. nilai awal harus lebih rendah dari batas waktu baca yang ditetapkan oleh sisi penerima dan harus ditetapkan berdasarkan QOS dari jaringan yang Anda jalankan.
Joe
3 Detik adalah keabadian pada jaringan lokal dan paket drop terjadi sangat cepat satu jaringan di mana waktu perjalanan bolak-balik dalam milidetik.
Joe
Saya setuju CPU modern dapat menyelesaikan banyak hal dalam 3 detik. Pemahaman saya adalah bahwa penundaan awal ini hanya diterapkan ketika driver menginisialisasi, yang hanya terjadi ketika sistem pertama kali boot up.
Jay Elston