อัลกอริทึม 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