Page 236 - Computer Network
P. 236
28.4. อัลกอริทึมในการควบคุมความคับคั่ง (CONGESTION CONTROL ALGORITHMS) 227
จากขบวนการขั้นต้น จะเห็นว่าการกำหนดค่าของ Timeout มีความสำคัญอย่างมาก ซึ่งจะต้องสัมพันธ์กับค่า
ของ RTT ในระหว่างที่ไม่เกิดความคับคั่งขึ้น การกำหนด Timeout ที่สั้นเกินไป อาจทำให้เซกเมนต์เกิด Timeout
ที่เร็วเกินไป แต่ในทางตรงกันข้าม หากการกำหนด Timeout ที่สูงเกินไป อาจทำให้การตรวจจับการเกิดความคับคั่ง
ไม่ทันท่วงที การคำนวณหาค่าของ Timeout สามารถดูได้จากหัวข้อที่ 28.2
28.4.3 Fast Retransmit
เมื่อใดก็ตามที่ด้านรับได้รับเซกเมนต์ ด้านรับจะส่ง ACK เพื่อตอบกลับ ในบางครั้งอาจทำให้เกิด duplicated ACK
หรือการที่ได้รับ ACK ที่มีหมายเลขเดียวกันซํ้าๆ ที่ภาคส่ง ซึ่งกรณีเช่นนี้อาจเกิดจากเซกเมนต์ที่ส่งออกไปสูญหาย
หรือภาครับได้รับเซกเมนต์ไม่เป็นเรียงลำดับ (out of order) อย่างไรก็ตาม หากเกิดจากการที่เซกเมนต์ไปถึงปลาย
ทางอย่างไม่เป็นลำดับ การเกิดกรณีเช่นนี้ไม่ควรจะทำให้เซกเมนต์ที่ตามมาไปถึงได้เป็นจำนวนมาก โดยอาจเกิดขึ้น
เป็นจำนวน 1-2 เซกเมนต์ แต่หากมีมากกว่านั้น เราอาจคาดได้ว่าเซกเมนต์นั้นอาจเกิดการสูญหาย แม้ว่าจะยังไม่
book)
เกิด Timeout ของเซกเมนต์นั้น
เพื่อเร่งการส่งเซกเมนต์ที่คาดว่าเกิดการสูญหายให้เร็วขึ้นจากการที่ได้รับ ACK หมายเลขซํ้าๆ ดังนั้น เมื่อ TCP
ได้รับ ACK ที่มีหมายเลขเดียวกันจำนวน 3 ครั้ง TCP จะส่งเซกเมนต์นั้นออกไปทันทีเรียกว่า fast retransmission
โดยไม่รอให้ Timeout ก่อน รูปที่ 28.7 แสดงการทำงานของอัลกอริทึมดังกล่าว ในที่นี้ เราสมมติให้ เซกเมนต์ที่มี
(partial
Sequence number = 1301 เกิดการสูญหาย ทำให้เซกเมนต์ที่ Sequence number = 1401, 1501 และ 1601
ไปถึงภาครับก่อน พร้อมทั้งส่ง ACK ที่ Sequence number เป็น 1301 เมื่อภาคส่งได้รับ ACK ดังกล่าว ภาคส่งจะ
ส่งเซกเมนต์ที่ 1301 ออกมาทันที โดยไม่จำเป็นต้องรอให้เกิด Timeout ของ Sequence number = 1301
only
KKU
รูปที่ 28.7: การทำงานของ Fast Retransmission เมื่อรับ ACK ซํ้า
คล้ายกับการทำงานของ Selective repeat ใน ARQ แพกเกตที่ภาครับได้รับจะถูกเก็บในบัฟเฟอร์ เพื่อรอการ
จัดเรียงก่อนที่จะถูกส่งขึ้นไปยังแอพพลิเคชัน เมื่อภาครับได้รับเซกเมนต์ที่ Sequence number = 1301 ภาครับจะ
ตอบกลับด้วย ACK ที่ระบุถึงเซกเมนต์ถัดไป (Sequence number = 1701) เพื่อให้ทราบว่าเซกเมนต์ก่อนหน้านี้
ทั้งหมดได้รับแล้ว การทำเช่นนี้เรียกว่า Cumulative ACK ทำให้เซกเมนต์ที่ Sequence number = 1401, 1501
และ 1601 ไม่ต้องถูกส่งใหม่อีกครั้ง

