ฉันพบปรากฏการณ์ต่อต้านโดยสัญชาตญาณที่ rtt (เวลาไป-กลับ) ของคำขอจากไคลเอนต์ไปยังเซิร์ฟเวอร์ที่มีเวลาแฝงของเครือข่ายต่ำ (ServerL) สูงกว่าคำขอจากไคลเอนต์เดียวกันไปยังเซิร์ฟเวอร์ที่มีเวลาแฝงสูงของเครือข่าย (ServerH) การโต้ตอบระหว่างเซิร์ฟเวอร์และไคลเอนต์นั้นง่ายมาก: ไคลเอ็นต์เพียงแค่ส่งสตรีมไบต์ขนาดใหญ่ (1~2M ไบต์) และเซิร์ฟเวอร์ยอมรับไบต์ทั้งหมดและตอบกลับโค้ดส่งคืนตกลงแบบง่ายๆ
เวลาแฝงของเครือข่ายวัดโดย ping ปิงแฝง:
ลูกค้า <-> ServerL: 1 มิลลิวินาที
ลูกค้า <-> ServerH: 1.9ms
ปรากฎว่า rtt ของ Client to ServerL ถูกขยายเนื่องจากเซิร์ฟเวอร์ acks ServerL ส่ง acks มากกว่าที่ ServerB ทำ และช่วงเวลาระหว่างสอง ack ที่อยู่ติดกันซึ่งมองเห็นได้จากมุมมองของไคลเอ็นต์ บางครั้งอาจมากกว่าที่วัดได้จากฝั่ง ServerL
แล้วอะไรคือปัจจัยในการตัดสินใจที่ทำให้จำนวน acks ที่ส่งโดยเซิร์ฟเวอร์ทั้งสองนี้แตกต่างกัน การกำหนดค่าบัฟเฟอร์ซ็อกเก็ตในเซิร์ฟเวอร์ทั้งสองนี้เหมือนกัน ส่งผลให้แยกตัวเองออกจากการเป็นส่วนหนึ่งของเหตุผล คอนฟิกูเรชันถูกตรวจสอบโดยคำสั่งเชลล์ต่อไปนี้:
# sysctl -a | ความแออัดของ grep
net.ipv4.tcp_allowed_congestion_control = รีโนคิวบิก
net.ipv4.tcp_available_congestion_control = รีโนคิวบิก
net.ipv4.tcp_congestion_control = ลูกบาศก์
# sysctl -a | egrep "rmem|wmem|adv_win|ปานกลาง"
net.core.rmem_default = 262144000
net.core.rmem_max = 16777216
net.core.wmem_default = 262144000
net.core.wmem_max = 16777216
net.ipv4.tcp_adv_win_scale = 1
net.ipv4.tcp_moderate_rcvbuf = 1
sysctl: net.ipv4.tcp_rmem = 4096 87380 6291456
net.ipv4.tcp_wmem = 4096 16384 4194304
net.ipv4.udp_rmem_min = 4096
net.ipv4.udp_wmem_min = 4096
vm.lowmem_reserve_ratio = 256 256 32 0 0