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