ค่า TCP RTO เริ่มต้นของ 3s นั้นยาวเกินไปสำหรับแอปพลิเคชันที่ใช้ LAN ส่วนใหญ่ ฉันจะปรับมันลดลงได้อย่างไร? มี sysctl หรือไม่?
ค่า TCP RTO เริ่มต้นของ 3s นั้นยาวเกินไปสำหรับแอปพลิเคชันที่ใช้ LAN ส่วนใหญ่ ฉันจะปรับมันลดลงได้อย่างไร? มี sysctl หรือไม่?
คำตอบ:
ไม่คุณไม่สามารถ; มันเป็นฮาร์ดโค้ดในเคอร์เนล ดังนั้นเปลี่ยนเคอร์เนลและคอมไพล์ใหม่
#define TCP_TIMEOUT_INIT ((unsigned)(3*HZ)) /* RFC 1122 initial RTO value */
นี่คือสิ่งที่คุณควรได้รับในการรวม / net / tcp.h
แต่ฉันสามารถเห็นใครบางคนให้แพทช์แม้ว่าจะไม่เคยลองเอง
การตั้งค่าเริ่มต้นไม่ควรส่งผลกระทบต่อประสิทธิภาพโดยรวมของคุณเป็นอย่างมากเนื่องจาก RTO สามารถปรับสภาพเครือข่ายได้เอง หากคุณเปลี่ยน RTO คุณสามารถตั้งค่าเป็น 1 วินาที (แต่ไม่ต่ำกว่า)
มีการอภิปรายเรื่องนี้ใน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เป็นการอัปเดตที่เสนอ (เผยแพร่มิถุนายน 2011) ที่ระบุว่าRTOสามารถเริ่มต้นเป็นค่าที่ต่ำกว่า (แต่ไม่ต่ำกว่า 1 วินาที) และมีภาคผนวกที่มีข้อมูลที่ปรับ 1 วินาทีเป็นค่าเริ่มต้นที่สมเหตุสมผล