จำลอง Stop-and-Wait, Go-Back-N และ Selective Repeat คลิกเส้นที่กำลังวิ่งเพื่อทำให้เฟรมหรือ ACK หาย แล้วดูว่าผู้ส่งกับผู้รับจัดการกันอย่างไร
คลิกเส้นเฟรมหรือ ACK ที่กำลังวิ่งอยู่เพื่อทำให้หาย (กดหยุดก่อนจะคลิกง่ายกว่า) หรือเพิ่มเหตุการณ์จากฟอร์มด้านบน
| โหมด | ส่งทั้งหมด | ซ้ำ | เวลา | สถานการณ์ |
|---|
| หัวข้อ | Stop-and-Wait | Go-Back-N | Selective Repeat |
|---|---|---|---|
| Pipelining | ไม่มี | มี | มี |
| Sender window | 1 | ≤ 2^m − 1 | ≤ 2^(m−1) |
| Receiver window | 1 | 1 เสมอ | ≤ 2^(m−1) |
| เฟรมผิดลำดับ | ไม่มีกรณีนี้ | ทิ้ง ไม่ buffer | รับไว้ + buffer |
| แบบของ ACK | positive ACK ทีละตัว | Cumulative ACK | Individual ACK + NAK/SREJ |
| Timer | 1 ตัว | 1 ตัว (เฟรมเก่าสุด) | แยกทุกเฟรม |
| ตอน timeout | ส่งเฟรมเดิมซ้ำ | ส่งใหม่ตั้งแต่ตัวเก่าสุด + ที่ตามมาทั้งหมด | ส่งใหม่เฉพาะเฟรมนั้น |
| ข้อดี | ง่ายที่สุด | ผู้รับออกแบบง่าย (window = 1) | ประหยัด bandwidth ที่สุด |
| ข้อเสีย | ช้ามาก สายว่างเปล่าเยอะ | error บ่อย = ส่งซ้ำเยอะ เปลือง bandwidth และเพิ่ม delay | ผู้รับซับซ้อน ต้องมี buffer + timer หลายตัว |
คอลัมน์ที่สว่างขึ้นคือโหมดที่เลือกอยู่ในแล็บ
สรุปให้จำ: Stop-and-Wait คือกรณีพิเศษของ Go-Back-N ที่ window = 1 และใช้เลขลำดับแค่ 0 กับ 1 · GBN มองเฟรมเป็น "กลุ่ม" ส่วน SR มองเฟรมเป็น "รายตัว"
GBN: sender = 2^m − 1 (เลขคี่เสมอ), receiver = 1 เสมอ
SR: sender = receiver = 2^(m−1) (เลขคู่เสมอ)
ACK 1 แปลว่าได้ frame 0 แล้ว กำลังรอ frame 1 ไม่ใช่ "ได้ frame 1" และใน GBN ACK เป็นแบบสะสม เช่น ACK 4 = ได้ frame 0, 1, 2, 3 ครบแล้ว
เฟรมหาย: ผู้รับไม่รู้เรื่อง ไม่ตอบอะไร มีแต่ timeout ที่ช่วยได้
ACK หาย/ช้า: ข้อมูลถึงแล้ว ผู้รับต้องทิ้งเฟรมซ้ำแต่ยังต้องตอบ ACK ใน GBN ถ้า ACK ตัวถัดไปมาทัน ก็ไม่ต้องส่งใหม่เลย
ส่ง 20 เฟรมด้วย m = 4 ได้ 0, 1, …, 14, 15, 0, 1, 2, 3 ไม่ใช่ 16, 17, 18, 19
REJ = NAK ของ Go-Back-N · SREJ = NAK ของ Selective Repeat
RNR ไม่ใช่ error แต่เป็น flow control (ผู้รับบอกว่า "ได้แล้วนะ แต่ขอพักก่อน")
โจทย์ที่บอก "ไม่คิด transmission delay" ให้ใช้แค่ propagation delay ในการหา RTT
ระวังหน่วย: ms → sec หาร 1000 · Mbps → bps คูณ 10⁶
สรุปจากสไลด์ ITDS231 Lecture 5.2 (Flow Control, ARQ & HDLC) ตัวจำลองใช้เวลาเป็น tick: ส่ง 1 เฟรมต่อ tick, เดินทางทางเดียว 3 tick, timeout 8 tick ส่วน HDLC ยังไม่รวมในหน้านี้