เพื่อนร่วมงานของฉันเชื่อว่าเป็นเพราะระยะทางกายภาพในขณะที่ฉันไม่คิดว่ามันจะสำคัญ ความเข้าใจของฉันคือเมื่อคุณจับมือเริ่มต้นและการไหลของข้อมูลเริ่มขึ้นไม่สำคัญว่าเซิร์ฟเวอร์จะอยู่ที่ใดและผลลัพธ์ควรใกล้เคียงกัน ฉันทำอะไรบางอย่างหายไปหรือเปล่า มันทำงานอย่างไรจริง ๆ ?
คุณทั้งคู่พูดถูกในบางช่วงเวลาในประวัติศาสตร์ แต่ความเข้าใจของคุณถูกต้องที่สุด ... วันนี้ :) มีปัจจัยบางอย่างที่เปลี่ยนไประหว่างคำตอบเก่าที่เพื่อนของคุณให้และความสามารถที่เรามีในปัจจุบัน
- การปรับขนาดหน้าต่าง TCP
- การปรับบัฟเฟอร์โฮสต์
ความแตกต่างในผลลัพธ์ที่คุณเห็นอาจได้รับผลกระทบจาก:
- การสูญเสียแพ็คเก็ต
- การถ่ายโอน TCP แบบขนาน
การปรับขนาดหน้าต่าง TCP: เอฟเฟกต์การหน่วงเวลาแบนด์วิดท์
ดังที่เพื่อนของคุณได้กล่าวถึงการใช้งาน TCP แบบเก่าได้รับผลกระทบจากข้อ จำกัด ที่กำหนดโดยขนาดหน้าต่างรับ 16 บิตดั้งเดิมในส่วนหัว TCP (อ้างอิงRFC 793: ส่วน 3.1 ); RWIN ควบคุมจำนวนข้อมูลที่ไม่ได้รับการยอมรับที่สามารถรอในซ็อกเก็ต TCP เดียว ค่า RWIN แบบ 16 บิต จำกัด เส้นทางอินเทอร์เน็ตที่ จำกัด ด้วยผลิตภัณฑ์ที่มีความล่าช้าในแบนด์วิดท์สูง (และการเชื่อมต่ออินเทอร์เน็ตความเร็วสูงจำนวนมากในปัจจุบันจะถูก จำกัด โดยค่า 16 บิต)
สำหรับค่า RTT ที่สูงจะเป็นประโยชน์หากมี RWIN ขนาดใหญ่มาก ตัวอย่างเช่นหากเส้นทาง RTT ของคุณจากมาเลเซียไปยังสหรัฐอเมริกาอยู่ที่ประมาณ 200ms TCP RWIN ดั้งเดิมจะ จำกัด ให้คุณอยู่ที่ 2.6Mbps
ปริมาณงานสูงสุด = Rcv_Win / RTT
* ปริมาณงานสูงสุด = 65535 * 8 / 0.200 *
ปริมาณงานสูงสุด = 2.6Mbps
RFC 1323กำหนด "ตัวเลือก TCP" บางอย่างเพื่อเอาชนะข้อ จำกัด เหล่านี้ หนึ่งในตัวเลือก TCP เหล่านั้นคือ "window scaling" มันแนะนำตัวประกอบสเกลซึ่งคูณค่า RWIN ดั้งเดิมเพื่อรับค่าหน้าต่างรับแบบเต็ม ใช้ตัวเลือกการปรับขนาดหน้าต่างให้ RWIN สูงสุด 1073725440 ไบต์ ใช้การคำนวณเดียวกัน:
ปริมาณงานสูงสุด = Rcv_Win / RTT
* ปริมาณงานสูงสุด = 1073725440 * 8 / 0.200 *
ปริมาณงานสูงสุด = 42.96Gbps
โปรดทราบว่า TCP จะเพิ่ม RWIN ในช่วงระยะเวลาของการถ่ายโอนข้อมูลตราบใดที่การสูญเสียแพ็กเก็ตไม่ใช่ปัญหา ในการดูอัตราการถ่ายโอนขนาดใหญ่จริง ๆ ผ่านการเชื่อมต่อที่มีความล่าช้าสูงคุณต้องถ่ายโอนไฟล์ขนาดใหญ่ (ดังนั้น TCP จะมีเวลาเพิ่มหน้าต่าง) และการสูญเสียแพ็กเก็ตจะไม่เป็นปัญหาสำหรับการเชื่อมต่อ
การสูญเสียแพ็คเก็ต
วงจรอินเทอร์เน็ตทั่วมหาสมุทรแปซิฟิกค่อนข้างหนาแน่นในบางครั้ง ครอบครัวของฉันบางคนอาศัยอยู่ในไต้หวันและเราพบปัญหาเป็นประจำเมื่อเราใช้ Google Talk กับพวกเขา ฉันมักจะเห็นการสูญเสียแพ็คเก็ตมากกว่า 0.5% เมื่อฉัน ping สาย DSL ของพวกเขาจากสหรัฐอเมริกา หากคุณเห็นอะไรเช่นการสูญเสีย 0.5% ไปยังเซิร์ฟเวอร์ "ช้าลง" จะง่ายมากที่จะ จำกัด ปริมาณงานบนซ็อกเก็ต TCP เดียว
สตรีม TCP แบบขนาน
FYI บางเว็บไซต์ทดสอบความเร็วใช้กระแส TCP ขนานไปกับการเพิ่ม throughput ; สิ่งนี้อาจส่งผลต่อผลลัพธ์ที่คุณเห็นเนื่องจากสตรีม TCP แบบขนานเพิ่มปริมาณงานอย่างมากในกรณีที่คุณสูญเสียแพ็กเก็ตในเส้นทาง ฉันได้เห็นลำธาร TCP แบบขนานสี่กระแสเต็มอิ่มที่เคเบิลโมเด็ม 5Mbps ซึ่งรับความเสียหายจากการสูญเสียแพ็กเก็ตคงที่ 1% โดยปกติการสูญเสีย 1% จะทำให้ปริมาณงานของสตรีม TCP เดี่ยวลดลง
วัสดุโบนัส: การปรับแต่งบัฟเฟอร์โฮสต์
ระบบปฏิบัติการรุ่นเก่าหลายแห่งมีซ็อกเก็ตที่มีบัฟเฟอร์ จำกัด ด้วยระบบปฏิบัติการรุ่นเก่า (เช่น Windows 2000) มันไม่สำคัญว่า TCP จะอนุญาตให้มีข้อมูลจำนวนมากบนเครื่องหรือไม่ ... บัฟเฟอร์ซ็อกเก็ตไม่ได้ถูกปรับแต่งเพื่อใช้ประโยชน์จาก RWIN ขนาดใหญ่ มีจำนวนมากของการวิจัยที่จะทำคือการเปิดใช้งานที่มีประสิทธิภาพสูงในการถ่ายโอน TCP ระบบปฏิบัติการที่ทันสมัย (สำหรับคำตอบนี้เราสามารถเรียก Windows Vista และต่อมา "ทันสมัย") รวมถึงกลไกการจัดสรรบัฟเฟอร์ที่ดีขึ้นในการใช้ซ็อกเก็ตบัฟเฟอร์