Stop-and-Wait ARQ เมื่อ Timeout สั้นเกินไป
ข้อวาดรูปล้วน ๆ 4 คะแนน — ต้องแสดงให้เห็นว่า นาฬิกา timeout ดังก่อน ACK จะเดินทางกลับมาถึงเสมอ ทำให้ทุกเฟรมถูกส่งซ้ำโดยไม่จำเป็น และผู้รับต้องคอยทิ้งเฟรมซ้ำทุกครั้ง
4 คะแนนโดยไม่ต้องคำนวณอะไรเลย — วาดถูกคือได้ครบ ใช้เวลาจริงประมาณ 6–7 นาที · รูปที่ต้องวาดมี "หน่วยซ้ำ" เพียงชุดเดียว แล้วก็อปวางอีก 4 ครั้ง เท่านั้น ถ้าจำหน่วยซ้ำนี้ได้ จะทำข้อนี้เสร็จเร็วกว่าใครในห้อง
โจทย์จริงจากข้อสอบปีที่แล้ว
Q8 (4 คะแนน · 10 นาที)
หากการส่งข้อมูลแบบ stop-and-wait มีการกำหนดค่าให้ Timeout น้อยกว่าเวลาต้องรอการตอบ ACK (Timeout < end-to-end delay) ให้วาดการทำงานที่เกิดขึ้นของการส่ง 5 เฟรม
เฟรมข้อมูล 5 เฟรม แต่บนกระดาษจะมีเส้นทั้งหมด 20 เส้น — เพราะแต่ละเฟรมสร้าง (1) เฟรมต้นฉบับ (2) เฟรมซ้ำ (3) ACK ต้นฉบับ (4) ACK ซ้ำ บวกเส้นประ timeout อีก 5 เส้น · ถ้าคำตอบมีแค่ 5 เส้นแปลว่ายังไม่ได้ตอบโจทย์เลย
คิดยังไง (แนวคิดใน 30 วินาที)
ตัวปัญหาทั้งหมดอยู่ในประโยคเดียว: นาฬิกาดังก่อนคำตอบจะกลับมาถึง
ปกติ (Timeout > RTT)
ส่งเฟรม → ตั้งนาฬิกา → ACK กลับมาก่อน → หยุดนาฬิกา → ส่งเฟรมถัดไป · ช่องสัญญาณมีเฟรมวิ่งอยู่ทีละ 1 เฟรม สะอาดเรียบร้อย
โจทย์ข้อนี้ (Timeout < RTT)
ส่งเฟรม → ตั้งนาฬิกา → นาฬิกาดังทั้งที่ ACK ยังลอยอยู่กลางทาง → ส่งซ้ำทันที → ACK ตัวเดิมเพิ่งมาถึงทีหลัง · ผลคือทุกเฟรมถูกส่ง 2 ครั้ง และผู้รับต้องทิ้งเฟรมซ้ำทุกครั้ง
หนึ่งเฟรมประกอบด้วย 5 เส้นเสมอ: ① เฟรมออก → ② เส้นประ timeout → ③ เฟรมซ้ำออก → ④ ACK ตัวจริงกลับ → ⑤ ACK ซ้ำกลับ · วาดชุดนี้ให้ถูกครั้งเดียว แล้วเลื่อนลงมาทำซ้ำอีก 4 ครั้ง จบข้อ
สูตร/ขั้นตอนที่ต้องใช้
| สัญลักษณ์ | ความหมาย | ค่าที่ใช้ในหน้านี้ |
|---|---|---|
tow | เวลาเดินทางเที่ยวเดียว (one-way) รวมทุก delay | 1 วินาที |
T (RTT) | เวลาครบรอบ = ไป + กลับ | 2 วินาที |
TO | ค่า Timeout ที่โจทย์ตั้งไว้ (สั้นเกินไป) | 1.5 วินาที (< 2) |
| จำนวนสำเนา | เฟรมเดียวกันถูกยิงขึ้นสายกี่ครั้ง | ⌈T / TO⌉ = ⌈2/1.5⌉ = 2 ครั้ง |
นาฬิกาดังทุก ๆ TO วินาที (ดังแล้วส่งซ้ำแล้วตั้งใหม่) จนกว่า ACK จะมาถึงที่เวลา T ⇒ จำนวนครั้งที่ดังก่อน ACK มาถึงคือ ⌈T/TO⌉ − 1 และรวมต้นฉบับแล้วเฟรมนั้นถูกส่งทั้งหมด ⌈T/TO⌉ ครั้ง · เขียนสูตรนี้ไว้ใต้รูปได้คะแนนเพิ่มแน่นอน
โจทย์บอกแค่ความสัมพันธ์ว่า Timeout < เวลารอ ACK ไม่ได้ให้ตัวเลขใด ๆ · ในห้องสอบให้ตั้งตัวเลขง่าย ๆ เองแล้วเขียนกำกับ เช่น "กำหนดให้ one-way delay = 1 s ⇒ RTT = 2 s และ Timeout = 1.5 s" — การมีตัวเลขทำให้เขียนป้ายเวลาบนรูปได้ ซึ่งเป็นสิ่งที่ทำให้คำตอบดูสมบูรณ์กว่าคนอื่นทันที
เฉลยละเอียดทีละขั้น
รูปในเฉลยเป็น แนวนอน (เวลาไหลซ้าย → ขวา) มี สองราง: Primary P อยู่รางบน (ผู้ส่ง — เป็นฝ่ายเริ่มและเป็นเจ้าของนาฬิกา) และ Secondary S อยู่รางล่าง (ผู้รับ) · เฟรมข้อมูลเขียนว่า I(N) (Information frame) ส่วนตอบรับเขียนว่า ACK(N) · แต่ละเฟรมมีเส้นแนวตั้ง 3 เส้นกำกับที่ราง P: Tstart (ตั้งนาฬิกาพร้อมส่ง) → Texpires (นาฬิกาหมดเวลา) → Tstop (ACK ตัวจริงมาถึง จึงหยุดนาฬิกา)
ขั้นที่ 1 — วาด "หน่วยซ้ำ" ของเฟรมแรกให้ถูกก่อน
t = 0.0 —
Tstart— P ส่งI(1)พร้อมตั้งนาฬิกา ให้ดังที่ 1.5 st = 1.0 — S ได้
I(1)ครบ → ส่งข้อมูลขึ้นเลเยอร์บน แล้วตอบACK1กลับทันทีt = 1.5 —
Texpires— นาฬิกาหมดเวลา! ในขณะที่ACK1ยังเดินทางอยู่กลางทาง (จะถึงที่ 2.0) → P เข้าใจผิดว่าเฟรมหาย จึงส่งI(1)ซ้ำ และตั้งนาฬิกาใหม่t = 2.0 —
Tstop—ACK1ตัวจริงมาถึง P → P หยุดนาฬิกา ลบสำเนา แล้วส่งI(2)ต่อทันทีt = 2.5 —
I(1)ตัวซ้ำมาถึง S → S เห็นว่าหมายเลขเฟรมซ้ำกับที่รับไปแล้ว จึงทิ้ง แต่ยังต้องตอบ ACK1 อีกครั้ง (ไม่งั้นถ้า ACK ตัวแรกหายจริง P จะวนไม่จบ)t = 3.5 —
ACK1ตัวซ้ำมาถึง P ทั้งที่ P ไปทำI(2)อยู่แล้ว → เป็น ACK ที่ไม่มีเจ้าของ
สังเกตเวลา 3.5 วินาที ให้ดี — เป็นทั้งเวลาที่ ACK1 ซ้ำ มาถึง และ เวลาที่ timeout ของ F(2) ดังพอดี · ไม่ใช่เรื่องบังเอิญ เพราะทั้งคู่มีค่าเท่ากับ RTT + TO เสมอ ⇒ ในระบบที่ ACK ไม่มีหมายเลขกำกับ A จะเข้าใจผิดว่า ACK ซ้ำตัวนั้นคือ ACK ของ F(2) แล้วข้ามไปส่ง F(3) ทั้งที่ F(2) อาจยังไม่ถึงปลายทาง — นี่คือเหตุผลที่ Stop-and-Wait ต้องมีหมายเลขเฟรมสลับ 0/1 กำกับทั้งเฟรมและ ACK เขียนประโยคนี้ใต้รูปได้คะแนนแน่นอน
ขั้นที่ 2 — ทำซ้ำอีก 4 ครั้งให้ครบ 5 เฟรม
เฟรมถัดไปเริ่มทันทีที่ ACK ตัวจริงมาถึง คือทุก ๆ 2 วินาที (= RTT) รูปแบบจึงซ้ำเดิมเป๊ะ ๆ เลื่อนไปทางขวาทีละ 2 วินาที — ทุกชุดมีเส้นแนวตั้ง Tstart / Texpires / Tstop ครบ
| เฟรม | Tstart (ส่งครั้งแรก) | Texpires | ส่งซ้ำ | Tstop (ACK ตัวจริงถึง P) | ACK ซ้ำถึง P |
|---|---|---|---|---|---|
| I(1) | 0.0 s | 1.5 s | 1.5 s | 2.0 s | 3.5 s |
| I(2) | 2.0 s | 3.5 s | 3.5 s | 4.0 s | 5.5 s |
| I(3) | 4.0 s | 5.5 s | 5.5 s | 6.0 s | 7.5 s |
| I(4) | 6.0 s | 7.5 s | 7.5 s | 8.0 s | 9.5 s |
| I(5) | 8.0 s | 9.5 s | 9.5 s | 10.0 s | 11.5 s |
การตั้ง Timeout สั้นเกินไป ไม่ได้ทำให้ช้าลง ในกรณีนี้ (ยังจบที่ 10 วินาทีเท่าเดิม เพราะยังต้องรอ ACK ตัวจริงอยู่ดี) — สิ่งที่เสียคือ แบนด์วิดท์ครึ่งหนึ่งถูกใช้ไปกับเฟรมซ้ำที่ปลายทางต้องทิ้ง และความเสี่ยงที่ ACK ซ้ำจะถูกตีความผิด · ตอบให้ตรงสองประเด็นนี้ อย่าตอบลอย ๆ ว่า "ทำให้ช้าลง"
ขั้นที่ 3 — ลองเปลี่ยนค่า Timeout ดูเอง
รูปที่สมบูรณ์ต้องมีอะไรบ้าง
| ✓ | องค์ประกอบ | เขียนว่าอะไร |
|---|---|---|
| ☐ | บรรทัด "กำหนดให้" | one-way = 1 s · RTT = 2 s · Timeout = 1.5 s (< RTT) |
| ☐ | แกนเวลา | รูปเป็นแนวนอน — รางสองราง เวลาไหลซ้าย → ขวา + คำว่า "เวลา (วินาที)" และขีดสเกล 1, 2, 3, … |
| ☐ | ชื่อราง | "Primary P" (รางบน = ผู้ส่ง) และ "Secondary S" (รางล่าง = ผู้รับ) ตามชื่อในเฉลย |
| ☐ | ชื่อเฟรมทุกเส้น | I(1)…I(5) และ I(n) ซ้ำ · ACK1…ACK5 และ ACK ซ้ำ |
| ☐ | เส้นแนวตั้ง 3 เส้นต่อเฟรม | Tstart (ตอนส่ง) · Texpires (นาฬิกาดัง) · Tstop (ACK ตัวจริงมาถึง) — ชุดนี้ซ้ำครบทั้ง 5 เฟรม · นี่คือรูปแบบที่เฉลยใช้ |
| ☐ | เครื่องหมายว่าเฟรมซ้ำถูกทิ้ง | เขียนที่ฝั่ง B ว่า "เฟรมซ้ำ → ทิ้ง (แต่ยัง ACK)" อย่างน้อย 1 จุด |
| ☐ | ป้ายเวลาที่จุดสำคัญ | 0 (Tstart) · 1.5 (Texpires) · 2.0 (Tstop) · 2.5 (เฟรมซ้ำถึง S) · 3.5 (ACK ซ้ำถึง P) |
| ☐ | ลูกศรเน้นว่า "ดังก่อน ACK ถึง" | วงกลมหรือลูกศรชี้ช่วง 1.5 → 2.0 เขียนว่า "timeout ดังก่อน ACK มาถึง" |
| ☐ | สรุปตัวเลข | เสร็จที่ 10 s · เฟรมบนสาย 10 · เฟรมที่ถูกทิ้ง 5 |
| ☐ | ประโยคสรุปผลกระทบ | 2 บรรทัด: เปลืองแบนด์วิดท์ + เสี่ยง ACK ซ้ำถูกตีความผิด |
กับดักที่ทำให้เสียคะแนน
คำตอบผิดที่พบบ่อยที่สุด: ลากลูกศร F(1)…F(5) กับ ACK1…ACK5 อย่างละ 5 เส้นสวย ๆ แล้วเขียนว่า "timeout สั้นไป" — ได้ 0–1 คะแนน เพราะรูปนั้นคือ Stop-and-Wait ปกติ ไม่ได้แสดงผลของ timeout ที่สั้นเลย · เฟรมซ้ำคือหัวใจของข้อนี้
หลายคนเผลอวาดกากบาทตัดเส้น ACK ทิ้ง เพราะเคยชินกับรูป "เฟรมหาย" ในบทที่ 11 — ผิด โจทย์ข้อนี้ไม่มีอะไรหายเลย ทุกเฟรมและทุก ACK ถึงปลายทางครบถ้วน ปัญหาเกิดจากนาฬิกาตั้งไว้สั้นเกินไป อย่างเดียว
วาดเฟรมซ้ำไปถึง B แล้วเขียนว่า "ทิ้ง" จบแค่นั้น — ไม่ครบ · บทที่ 11 ระบุว่าผู้รับต้องส่ง ACK กลับทุกครั้งแม้จะเป็นเฟรมซ้ำ เพราะผู้รับไม่มีทางรู้ว่า ACK ตัวก่อนหน้าถึงผู้ส่งหรือเปล่า ⇒ ในรูปต้องมี ACK ซ้ำ ครบทุกเฟรม
จากตารางเวลา งานยังเสร็จที่ 10 วินาทีเท่าเดิม เพราะตัวกำหนดจังหวะคือเวลาที่ ACK ตัวจริงเดินทางกลับ ไม่ใช่ timeout · คำตอบที่ถูกคือ "เปลืองแบนด์วิดท์เท่าตัว" และ "เสี่ยงต่อการตีความ ACK ผิดตัว" · (ถ้าช่องสัญญาณแน่นจนเฟรมซ้ำไปแย่งคิว ถึงจะช้าลงจริง — เขียนเสริมได้ แต่ต้องบอกเงื่อนไข)
เส้นแนวตั้ง Texpires คือหลักฐานเดียวในรูปที่บอกว่านาฬิกาดังตอนไหน ถ้าไม่มีเส้นนี้ อาจารย์อ่านไม่ออกว่าเฟรมซ้ำโผล่มาจากไหน — ต้องมีครบทั้ง 5 เฟรม และต้องอยู่ก่อน (ทางซ้ายของ) จุด Tstop ที่ ACK มาถึงเสมอ (นั่นคือความหมายของ Timeout < RTT) · ในเฉลยแต่ละเฟรมมีเส้นแนวตั้งครบ 3 เส้น: Tstart · Texpires · Tstop
เขียนยังไงให้ได้คะแนนเต็ม
ลำดับการลงกระดาษ (7 นาที)
0:00–0:30 เขียนบรรทัด "กำหนดให้" — one-way 1 s, RTT 2 s, Timeout 1.5 s
0:30–1:00 ลากรางแนวนอน 2 ราง เขียน "Primary P" (บน) / "Secondary S" (ล่าง) และแกนเวลาซ้าย→ขวา พร้อมขีดสเกล 0–12 วินาที
1:00–3:00 วาดหน่วยซ้ำของ I(1) ให้ครบ — ลูกศร 4 เส้น + เส้นแนวตั้ง Tstart / Texpires / Tstop พร้อมป้ายเวลา 0 / 1.5 / 2.0 / 2.5 / 3.5
3:00–5:30 ก็อปหน่วยซ้ำไปทางขวาอีก 4 ชุด (เลื่อนชุดละ 2 วินาที) เขียนเลขเฟรมกำกับให้ครบ
5:30–6:30 เขียนตารางสรุปเวลาข้าง ๆ รูป (เฟรม / timeout / ACK ถึง)
6:30–7:00 เขียน 2 บรรทัดปิดท้าย + สูตร
จำนวนสำเนา = ⌈T/TO⌉
"เมื่อ Timeout (1.5 s) < เวลารอ ACK (2 s) นาฬิกาจะดังก่อน ACK เดินทางกลับมาถึงเสมอ ผู้ส่งจึงส่งเฟรมเดิมซ้ำทุกเฟรมโดยไม่จำเป็น ผู้รับตรวจพบหมายเลขเฟรมซ้ำจึงทิ้งข้อมูลแต่ยังต้องตอบ ACK กลับ ผลคือช่องสัญญาณถูกใช้ไปกับเฟรมซ้ำถึงครึ่งหนึ่ง (10 เฟรมสำหรับข้อมูลจริง 5 เฟรม) และ ACK ซ้ำที่ตามมาทีหลังอาจถูกเข้าใจผิดว่าเป็น ACK ของเฟรมถัดไป จึงจำเป็นต้องมีหมายเลขเฟรมกำกับทั้งเฟรมข้อมูลและ ACK"
โจทย์ฝึก 5 ข้อ
ไล่จากง่ายไปยากกว่าของจริงเล็กน้อย · ข้อวาดรูปให้ตอบเป็น "ลำดับเหตุการณ์พร้อมเวลา"
ข้อ 1 อุ่นเครื่อง — one-way delay = 1 s, Timeout = 1.5 s, ส่ง 3 เฟรม
(ก) งานเสร็จเมื่อไร (ข) มีเฟรมข้อมูลถูกยิงขึ้นสายกี่เฟรม (ค) ผู้รับต้องทิ้งกี่เฟรม
เฉลยข้อ 1
ขั้นที่ 1 — หา RTT ก่อน RTT = 2 × 1 = 2 วินาที และ TO = 1.5 < 2 ⇒ เข้าเงื่อนไข "timeout สั้นเกินไป"
ขั้นที่ 2 — ไล่ตาราง (เฟรมถัดไปเริ่มทุก 2 วินาที)
| เฟรม | ส่ง | timeout | ส่งซ้ำ | ACK ถึง A |
|---|---|---|---|---|
| F(1) | 0.0 | 1.5 | 1.5 | 2.0 |
| F(2) | 2.0 | 3.5 | 3.5 | 4.0 |
| F(3) | 4.0 | 5.5 | 5.5 | 6.0 |
(ก) เสร็จที่ 6.0 วินาที (= 3 × RTT)
(ข) จำนวนสำเนาต่อเฟรม = ⌈2/1.5⌉ = 2 ⇒ 3 × 2 = 6 เฟรม
(ค) ผู้รับทิ้ง 3 เฟรม (สำเนาที่สองของทุกเฟรม) แต่ยังต้องตอบ ACK ให้ครบทั้ง 6 ครั้ง
ข้อ 2 ง่าย–กลาง — เปลี่ยน Timeout เป็น 0.8 วินาที (one-way ยัง 1 s เท่าเดิม) ส่ง 5 เฟรม
(ก) เฟรมหนึ่งเฟรมถูกยิงขึ้นสายกี่ครั้ง และนาฬิกาดังตอนไหนบ้าง (ข) รวมทั้งหมดมีกี่เฟรมบนสาย
เฉลยข้อ 2
ขั้นที่ 1 — ไล่จังหวะนาฬิกาของเฟรมเดียว (ตั้งใหม่ทุกครั้งที่ดัง) ACK จะมาถึงที่ t = 2.0
| นาฬิกาดังครั้งที่ | เวลา | เกิดอะไรขึ้น |
|---|---|---|
| 1 | 0.8 s | ส่งสำเนาที่ 2 + ตั้งนาฬิกาใหม่ |
| 2 | 1.6 s | ส่งสำเนาที่ 3 + ตั้งนาฬิกาใหม่ |
| — | 2.0 s | ACK มาถึง → หยุดนาฬิกา (ครั้งที่ 3 จะดังตอน 2.4 แต่ไม่ทันแล้ว) |
(ก) นาฬิกาดัง 2 ครั้ง (ที่ 0.8 และ 1.6) ⇒ เฟรมถูกยิง 3 ครั้ง · ตรงกับสูตร ⌈T/TO⌉ = ⌈2/0.8⌉ = ⌈2.5⌉ = 3 ✓
(ข) 5 เฟรม × 3 สำเนา = 15 เฟรมบนสาย (และ ACK 15 ตัว) สำหรับข้อมูลจริงเพียง 5 เฟรม
อ่านผล: แบนด์วิดท์ที่เสียเปล่า = (3−1)/3 = 66.7% · ยิ่ง Timeout สั้น ยิ่งเปลืองเป็นทวีคูณ แต่เวลาที่ใช้ยังเท่าเดิมคือ 10 วินาที
ข้อ 3 กลาง — ลิงก์จริงมี tx = 8 ms, tprop = 50 ms, tproc = 2 ms ต่อครั้ง และ ACK เล็กจนละได้
(ก) ค่า Timeout ต่ำสุดที่ยอมรับได้คือเท่าไร (ข) ถ้าตั้ง Timeout = 100 ms จะเกิดอะไรขึ้น
เฉลยข้อ 3
ขั้นที่ 1 — หาเวลาครบรอบตามสมการ 11.1
= 8 + (2 × 50) + (2 × 2) + 0
= 8 + 100 + 4 = 112 ms
(ก) Timeout ต้อง มากกว่า 112 ms — ถ้าน้อยกว่านี้จะเกิดการส่งซ้ำที่ไม่จำเป็นทุกเฟรม
(ข) ถ้าตั้ง 100 ms ⇒ 100 < 112 เข้าเงื่อนไขของ Q8 พอดี
นาฬิกาดังที่ 100 ms ทั้งที่ ACK จะมาถึงที่ 112 ms — พลาดไปแค่ 12 ms แต่ทำให้ทุกเฟรมถูกส่งซ้ำ · ส่วนขยาย: ในทางปฏิบัติจึงนิยมตั้ง Timeout ≈ 2 × RTT (ที่นี่คือ ~224 ms) เผื่อไว้สำหรับ queueing delay ที่แกว่งไปมา — ข้อนี้ไม่ได้อยู่ในหนังสือ แต่เป็นแนวปฏิบัติมาตรฐาน
ข้อ 4 ข้อวาดรูป — one-way = 1 s, Timeout = 1.5 s, ส่ง 3 เฟรม แต่คราวนี้ F(2) หายจริง ๆ ระหว่างทาง
จงเขียนลำดับเหตุการณ์พร้อมเวลาว่า F(2) ถูกส่งกี่ครั้ง และ A เริ่มส่ง F(3) ตอนไหน
เฉลยข้อ 4
| เวลา (s) | เหตุการณ์ |
|---|---|
| 0.0 | A ส่ง F(1) · ตั้งนาฬิกาถึง 1.5 |
| 1.0 | B ได้ F(1) → ส่ง ACK1 |
| 1.5 | timeout ดัง → A ส่ง F(1) ซ้ำ (สำเนาที่ไม่จำเป็น) |
| 2.0 | ACK1 ถึง A → A ส่ง F(2) · ตั้งนาฬิกาถึง 3.5 |
| 2.5 | F(1) ซ้ำถึง B → ทิ้ง แต่ตอบ ACK1 อีกครั้ง |
| 3.0 | ✕ F(2) หายกลางทาง — B ไม่เคยเห็นเฟรมนี้ |
| 3.5 | timeout ของ F(2) ดัง → A ส่ง F(2) ครั้งที่ 2 · ตั้งนาฬิกาใหม่ถึง 5.0 · (พร้อมกันนั้น ACK1 ซ้ำก็มาถึง A พอดี — ต้องทิ้งเพราะเลขไม่ตรง) |
| 4.5 | F(2) ครั้งที่ 2 ถึง B → B ส่ง ACK2 |
| 5.0 | timeout ดังอีก (ACK2 ยังอยู่กลางทาง) → A ส่ง F(2) ครั้งที่ 3 |
| 5.5 | ACK2 ถึง A → A ส่ง F(3) ได้ |
| 6.0 | F(2) ครั้งที่ 3 ถึง B → ทิ้ง แต่ตอบ ACK2 ซ้ำ (ถึง A ที่ 7.0) |
ตอบ: F(2) ถูกส่งทั้งหมด 3 ครั้ง (หาย 1, ถึง 1, ซ้ำ 1) และ A เริ่มส่ง F(3) ที่ t = 5.5 วินาที · บทเรียน: เมื่อเฟรมหายจริง เวลาจะยืดออกไป 3.5 วินาที ต่อเฟรมที่หาย (จากปกติ 2 s เป็น 5.5 − 2.0 = 3.5 s) และ timeout ที่สั้นทำให้มีสำเนาส่วนเกินโผล่มาอีกหนึ่งใบเสมอ
ข้อ 5 ยากกว่าของจริง — จงหาสูตรทั่วไปของ สัดส่วนแบนด์วิดท์ที่เสียเปล่า เมื่อ Timeout = TO และเวลาครบรอบ = T (โดย TO < T และไม่มีเฟรมใดหายเลย) แล้วคำนวณกรณี T = 2 s ที่ TO = 1.5, 1.0 และ 0.5 วินาที
เฉลยข้อ 5
ขั้นที่ 1 — จำนวนสำเนาต่อเฟรม นาฬิกาดังทุก TO จนกว่า ACK จะถึงที่ T
ขั้นที่ 2 — สัดส่วนที่เสียเปล่า มีเฟรมที่มีประโยชน์ 1 ใบจาก c ใบ
ขั้นที่ 3 — แทนค่า (T = 2 s)
| TO | นาฬิกาดังที่ | c = ⌈T/TO⌉ | เสียเปล่า |
|---|---|---|---|
| 1.5 s | 1.5 | ⌈1.33⌉ = 2 | 1/2 = 50% |
| 1.0 s | 1.0 (ดังพอดีครั้งเดียว) | ⌈2.0⌉ = 2 | 1/2 = 50% |
| 0.5 s | 0.5 · 1.0 · 1.5 | ⌈4.0⌉ = 4 | 3/4 = 75% |
หมายเหตุกรณีขอบ: เมื่อ T/TO เป็นจำนวนเต็มพอดี (เช่น TO = 1.0) นาฬิกาครั้งสุดท้ายจะดังพร้อมกับที่ ACK มาถึงพอดี — ในห้องสอบให้เขียนกำกับว่า "ถือว่า ACK มาถึงก่อน จึงไม่นับการส่งซ้ำครั้งนั้น" แล้วจะได้ c = 2 ตามตาราง · การเขียนสมมติฐานของกรณีขอบไว้ คือสิ่งที่แยกคำตอบระดับ A ออกจากคำตอบทั่วไป
เช็คความเข้าใจ
c = ⌈2 / 0.6⌉ = ⌈3.33⌉ = 4 ครั้ง · ตรวจด้วยมือ: นาฬิกาดังที่ 0.6, 1.2, 1.8 (สามครั้ง) ก่อน ACK จะมาถึงที่ 2.0 ⇒ ต้นฉบับ 1 + ซ้ำ 3 = 4 ใบ- หน่วยซ้ำ 5 เส้นต่อหนึ่งเฟรม: เฟรมออก → เส้นประ timeout → เฟรมซ้ำ → ACK จริง → ACK ซ้ำ ทำซ้ำ 5 ชุด
- ตัวเลขที่ใช้: one-way 1 s · RTT 2 s · TO 1.5 s ⇒ เฟรม k เริ่มที่
2(k−1)· timeout ที่2(k−1)+1.5· ACK ถึงที่2k - คำตอบสรุป: เสร็จที่ 10 s · เฟรมบนสาย 10 · ผู้รับทิ้ง 5
- สูตรกันคะแนน:
จำนวนสำเนา = ⌈T / TO⌉และเสียเปล่า = 1 − 1/c - ห้ามวาดกากบาทให้อะไรหาย — ข้อนี้ทุกอย่างถึงครบ ปัญหาอยู่ที่นาฬิกาอย่างเดียว