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