ฉันได้ทดลองกับพารามิเตอร์ TCP ใน Linux (ด้วยเคอร์เนล 3.5) โดยทั่วไปเกี่ยวกับการเชื่อมต่อนี้:
เซิร์ฟเวอร์: Gigabit อัปลิงค์ในดาต้าเซ็นเตอร์แบนด์วิดท์จริง (เนื่องจากการแบ่งปันอัปลิงค์) ประมาณ 70 MB / s เมื่อทดสอบจากดาต้าเซ็นเตอร์อื่น
ไคลเอนต์: กิกะบิตท้องถิ่น LAN เชื่อมต่อกับไฟเบอร์ 200mbit การดึงไฟล์ทดสอบมาถึง 20 MB / s
Latency: ประมาณ 50ms ไปกลับ
รีโมตเซิร์ฟเวอร์ใช้เป็นเซิร์ฟเวอร์ไฟล์สำหรับไฟล์ในช่วง 10 ถึง 100mb ฉันสังเกตเห็นว่าการใช้ initcwnd จาก 10 เวลาในการถ่ายโอนไฟล์เหล่านี้ได้รับผลกระทบอย่างมากจาก TCP ช้าเริ่มต้นใช้เวลา 3.5 วินาทีในการโหลด 10mb (ความเร็วสูงสุดถึง: 3.3 MB / s) เพราะมันเริ่มช้าแล้วก็ลาดขึ้น เสร็จสิ้นก่อนที่จะถึงความเร็วสูงสุด เป้าหมายของฉันคือการปรับแต่งเวลาในการโหลดไฟล์เหล่านั้นให้น้อยที่สุด (ดังนั้นจึงไม่ผ่านทราฟฟิกสูงสุดหรือเวลาแฝงไปกลับต่ำที่สุดฉันยินดีที่จะเสียสละทั้งสองอย่างถ้ามันลดเวลาที่ใช้จริงในการโหลดไฟล์)
ดังนั้นฉันจึงลองคำนวณง่าย ๆ เพื่อกำหนดว่าอะไรคือสิ่งที่ดีที่สุดที่ควรจะเป็นโดยไม่สนใจการเชื่อมต่ออื่น ๆ และผลกระทบที่อาจเกิดขึ้นกับผู้อื่น แบนด์วิดท์ล่าช้าของผลิตภัณฑ์คือ 200 Mbit / s * 50ms = 10 Mbit หรือ 1.310.720 ไบต์ พิจารณาว่า initcwnd ตั้งอยู่ในหน่วยของ MSS และสมมติว่า MSS อยู่ที่ประมาณ 1,400 ไบต์ซึ่งจะต้องมีการตั้งค่า: 1.310.720 / 1400 = 936
ค่านี้อยู่ไกลจากค่าเริ่มต้น (10 * MSS ใน Linux, 64kb ใน Windows) ดังนั้นจึงไม่ควรตั้งค่าเช่นนี้ ข้อเสียที่คาดหวังของการกำหนดค่าเช่นนี้คืออะไร? เช่น:
- จะส่งผลกระทบต่อผู้ใช้รายอื่นในเครือข่ายเดียวกันหรือไม่
- มันสามารถสร้างความแออัดที่ยอมรับไม่ได้สำหรับการเชื่อมต่ออื่น ๆ หรือไม่?
- ท่วมเราเตอร์บัฟเฟอร์ที่ใดที่หนึ่งบนเส้นทางหรือไม่
- เพิ่มผลกระทบของการสูญเสียแพ็กเก็ตจำนวนเล็กน้อยหรือไม่
70 MB/s
และไม่ใช่เมกะบิต? แค่มองหาคำอธิบาย