อัลกอริทึม Nagle ชื่อตามวิศวกร John Nagle ถูกออกแบบมาเพื่อ ลดการแออัดเครือข่าย ที่เกิดจากปัญหาแพ็กเก็ตขนาดเล็ก (small packet problems) กับแอปพลิเคชัน TCP การใช้งานใน UNIX เริ่มใช้งานอัลกอริทึม Nagle ในช่วงทศวรรษ 1980 และมันยังคงเป็นคุณสมบัติมาตรฐานของ TCP จนถึงปัจจุบัน
อัลกอริทึม Nagle ทำงานอย่างไร?
อัลกอริทึม Nagle ประมวลผลข้อมูลฝั่งผู้ส่งของแอปพลิเคชัน TCP ด้วยวิธีที่เรียกว่า nagling มันตรวจจับข้อความขนาดเล็กและ สะสมข้อความเหล่านั้นเป็นแพ็กเก็ต TCP ขนาดใหญ่ก่อนส่งข้อมูลข้ามสาย กระบวนการนี้ป้องกันการสร้างแพ็กเก็ตขนาดเล็กจำนวนมากที่ไม่จำเป็น
ข้อกำหนดทางเทคนิคของอัลกอริทึม Nagle เผยแพร่ในปี 1984 เป็น RFC 896 การตัดสินใจว่าจะสะสมข้อมูลเท่าไหร่ และรอระยะเวลานานเท่าไหร่ระหว่างการส่ง เป็นสิ่งสำคัญต่อประสิทธิภาพโดยรวม
ประโยชน์ของ Nagling
Nagling สามารถ ใช้แบนด์วิดท์ของการเชื่อมต่อเครือข่ายได้อย่างมีประสิทธิภาพ แลกกับการเพิ่มความล่าช้า (latency) ตัวอย่างที่อธิบายใน RFC 896 แสดงประโยชน์ด้านแบนด์วิดท์และเหตุผลในการสร้าง:
- หากแอปพลิเคชัน TCP ที่ดแป้นพิมพ์ต้องการสื่อสารตัวอักษรแต่ละตัวที่พิมพ์ไปยังผู้รับ มันสามารถสร้างชุดข้อความ แต่ละข้อความมีข้อมูล 1 ไบต์
- ก่อนที่ข้อความเหล่านี้จะส่งข้ามเครือข่าย แต่ละข้อความต้องบรรจุกับ ข้อมูลหัวข้อ TCP (TCP header) ตามที่ TCP/IP กำหนด แต่ละหัวข้อมีขนาด 20-60 ไบต์
- โดยไม่มี nagling แอปพลิเคชันตัวอย่างนี้จะสร้างข้อความเครือข่ายที่ประกอบด้วยข้อมูลหัวข้อ 95% หรือมากกว่า (อย่างน้อย 20 จาก 21 ไบต์) และข้อมูลจริงจากแป้นพิมพ์ผู้ส่ง 5% หรือน้อยกว่า ด้วยอัลกอริทึม Nagle ข้อมูลเดียวกันสามารถส่งได้ด้วยข้อความน้อยกว่า ทำให้ประหยัดแบนด์วิดท์มาก
แอปพลิเคชันควบคุมการใช้งานอัลกอริทึม Nagle ด้วยตัวเลือก socket programming TCP_NODELAY ระบบ Windows, Linux และ Java ปกติเปิด Nagle โดยค่าเริ่มต้น ดังนั้น แอปพลิเคชันที่เขียนสำหรับสภาพแวดล้อมเหล่านี้ต้องระบุ TCP_NODELAY เพื่อ ปิดอัลกอริทึม
ข้อจำกัด
แอปพลิเคชันที่ต้องการการตอบสนองเครือข่ายเร็ว เช่น วิดีโอคอลและเกมออนไลน์ อาจทำงานไม่ดีเมื่อ Nagle เปิดอยู่ ความล่าช้าที่เกิดจากอัลกอริทึมใช้เวลาเพิ่มเติมในการประกอบชุดข้อมูลขนาดเล็ก สามารถทำให้เกิด lag ที่สังเกตได้บนหน้าจอหรือในสตรีมเสียงดิจิทัล แอปพลิเคชันแบบนี้มัก ปิด Nagle
อัลกอริทึมนี้พัฒนาเดิมในสมัยที่เครือข่ายคอมพิวเตอร์รองรับแบนด์วิดท์น้อยกว่าปัจจุบัน ตัวอย่างข้างต้นอิงประสบการณ์ของ John Nagle ที่ Ford Aerospace ในช่วงต้นทศวรรษ 1980 ที่การแลกเปลี่ยน (tradeoffs) ของ nagling บนเครือข่ายช้า โหลดหนัก และระยะไกลของ Ford ทำให้สมเหตุสมผล ปัจจุบันมีสถานการณ์น้อยลงที่แอปพลิเคชันเครือข่ายได้ประโยชน์จากอัลกอริทึมของเขา
อัลกอริทึม Nagle ใช้ได้กับ TCP เท่านั้น โปรโตคอลอื่นๆ เช่น UDP ไม่รองรับ