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 ไม่ต้องถูกส่งใหม่อีกครั้ง
   231   232   233   234   235   236   237   238   239   240   241