ข้อสอบเก่า · Q8

Stop-and-Wait ARQ เมื่อ Timeout สั้นเกินไป

ข้อวาดรูปล้วน ๆ 4 คะแนน — ต้องแสดงให้เห็นว่า นาฬิกา timeout ดังก่อน ACK จะเดินทางกลับมาถึงเสมอ ทำให้ทุกเฟรมถูกส่งซ้ำโดยไม่จำเป็น และผู้รับต้องคอยทิ้งเฟรมซ้ำทุกครั้ง

ระดับง่าย (ถ้าเคยวาด) ควรใช้ ~10 นาที 4 คะแนน อ่านคู่กับ บทที่ 11 (ARQ)
ทำไมข้อนี้คุ้มที่สุดในข้อสอบ

4 คะแนนโดยไม่ต้องคำนวณอะไรเลย — วาดถูกคือได้ครบ ใช้เวลาจริงประมาณ 6–7 นาที · รูปที่ต้องวาดมี "หน่วยซ้ำ" เพียงชุดเดียว แล้วก็อปวางอีก 4 ครั้ง เท่านั้น ถ้าจำหน่วยซ้ำนี้ได้ จะทำข้อนี้เสร็จเร็วกว่าใครในห้อง

โจทย์จริงจากข้อสอบปีที่แล้ว

Q8 (4 คะแนน · 10 นาที)

หากการส่งข้อมูลแบบ stop-and-wait มีการกำหนดค่าให้ Timeout น้อยกว่าเวลาต้องรอการตอบ ACK (Timeout < end-to-end delay) ให้วาดการทำงานที่เกิดขึ้นของการส่ง 5 เฟรม

อ่านโจทย์ให้ออก — "5 เฟรม" ไม่ได้แปลว่าวาด 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 ครั้ง จบข้อ

สูตร/ขั้นตอนที่ต้องใช้

T = tx + 2tprop + 2tproc + ta สมการ 11.1 — เวลาครบรอบของ Stop-and-Wait หนึ่งเฟรม (เรียกสั้น ๆ ว่า RTT ของโปรโตคอล)
เงื่อนไขที่ถูกต้อง:   Timeout > T โจทย์ข้อนี้จงใจให้ Timeout < T เพื่อดูว่าเราเข้าใจผลกระทบไหม
สัญลักษณ์ความหมายค่าที่ใช้ในหน้านี้
towเวลาเดินทางเที่ยวเดียว (one-way) รวมทุก delay1 วินาที
T (RTT)เวลาครบรอบ = ไป + กลับ2 วินาที
TOค่า Timeout ที่โจทย์ตั้งไว้ (สั้นเกินไป)1.5 วินาที (< 2)
จำนวนสำเนาเฟรมเดียวกันถูกยิงขึ้นสายกี่ครั้ง⌈T / TO⌉ = ⌈2/1.5⌉ = 2 ครั้ง
ที่มาของ ⌈T / TO⌉

นาฬิกาดังทุก ๆ 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 — วาด "หน่วยซ้ำ" ของเฟรมแรกให้ถูกก่อน

  1. t = 0.0 — Tstart — P ส่ง I(1) พร้อมตั้งนาฬิกา ให้ดังที่ 1.5 s

  2. t = 1.0 — S ได้ I(1) ครบ → ส่งข้อมูลขึ้นเลเยอร์บน แล้วตอบ ACK1 กลับทันที

  3. t = 1.5 — Texpires — นาฬิกาหมดเวลา! ในขณะที่ ACK1 ยังเดินทางอยู่กลางทาง (จะถึงที่ 2.0) → P เข้าใจผิดว่าเฟรมหาย จึงส่ง I(1) ซ้ำ และตั้งนาฬิกาใหม่

  4. t = 2.0 — Tstop — ACK1 ตัวจริงมาถึง P → P หยุดนาฬิกา ลบสำเนา แล้วส่ง I(2) ต่อทันที

  5. t = 2.5 — I(1) ตัวซ้ำมาถึง S → S เห็นว่าหมายเลขเฟรมซ้ำกับที่รับไปแล้ว จึงทิ้ง แต่ยังต้องตอบ ACK1 อีกครั้ง (ไม่งั้นถ้า ACK ตัวแรกหายจริง P จะวนไม่จบ)

  6. 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 s1.5 s1.5 s2.0 s3.5 s
I(2)2.0 s3.5 s3.5 s4.0 s5.5 s
I(3)4.0 s5.5 s5.5 s6.0 s7.5 s
I(4)6.0 s7.5 s7.5 s8.0 s9.5 s
I(5)8.0 s9.5 s9.5 s10.0 s11.5 s
คำตอบสุดท้ายที่ต้องเขียนใต้รูป ส่งครบ 5 เฟรมที่ t = 10.0 วินาที เฟรมข้อมูลที่ถูกยิงขึ้นสายจริง = 10 เฟรม (ต้นฉบับ 5 + ซ้ำ 5) · ACK ที่ถูกส่ง = 10 ตัว · เฟรมที่ผู้รับต้องทิ้ง = 5 เฟรม
ข้อสังเกตที่คนส่วนใหญ่ตอบผิด

การตั้ง 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 ซ้ำถูกตีความผิด

กับดักที่ทำให้เสียคะแนน

กับดัก 1 — วาดแค่ 5 เส้นแล้วจบ

คำตอบผิดที่พบบ่อยที่สุด: ลากลูกศร F(1)…F(5) กับ ACK1…ACK5 อย่างละ 5 เส้นสวย ๆ แล้วเขียนว่า "timeout สั้นไป" — ได้ 0–1 คะแนน เพราะรูปนั้นคือ Stop-and-Wait ปกติ ไม่ได้แสดงผลของ timeout ที่สั้นเลย · เฟรมซ้ำคือหัวใจของข้อนี้

กับดัก 2 — วาดให้ ACK หายหรือเฟรมหาย

หลายคนเผลอวาดกากบาทตัดเส้น ACK ทิ้ง เพราะเคยชินกับรูป "เฟรมหาย" ในบทที่ 11 — ผิด โจทย์ข้อนี้ไม่มีอะไรหายเลย ทุกเฟรมและทุก ACK ถึงปลายทางครบถ้วน ปัญหาเกิดจากนาฬิกาตั้งไว้สั้นเกินไป อย่างเดียว

กับดัก 3 — ลืมว่าผู้รับต้องตอบ ACK ให้เฟรมซ้ำด้วย

วาดเฟรมซ้ำไปถึง B แล้วเขียนว่า "ทิ้ง" จบแค่นั้น — ไม่ครบ · บทที่ 11 ระบุว่าผู้รับต้องส่ง ACK กลับทุกครั้งแม้จะเป็นเฟรมซ้ำ เพราะผู้รับไม่มีทางรู้ว่า ACK ตัวก่อนหน้าถึงผู้ส่งหรือเปล่า ⇒ ในรูปต้องมี ACK ซ้ำ ครบทุกเฟรม

กับดัก 4 — ตอบว่า "ทำให้การส่งช้าลง"

จากตารางเวลา งานยังเสร็จที่ 10 วินาทีเท่าเดิม เพราะตัวกำหนดจังหวะคือเวลาที่ ACK ตัวจริงเดินทางกลับ ไม่ใช่ timeout · คำตอบที่ถูกคือ "เปลืองแบนด์วิดท์เท่าตัว" และ "เสี่ยงต่อการตีความ ACK ผิดตัว" · (ถ้าช่องสัญญาณแน่นจนเฟรมซ้ำไปแย่งคิว ถึงจะช้าลงจริง — เขียนเสริมได้ แต่ต้องบอกเงื่อนไข)

กับดัก 5 — ไม่เขียนเส้น Texpires

เส้นแนวตั้ง Texpires คือหลักฐานเดียวในรูปที่บอกว่านาฬิกาดังตอนไหน ถ้าไม่มีเส้นนี้ อาจารย์อ่านไม่ออกว่าเฟรมซ้ำโผล่มาจากไหน — ต้องมีครบทั้ง 5 เฟรม และต้องอยู่ก่อน (ทางซ้ายของ) จุด Tstop ที่ ACK มาถึงเสมอ (นั่นคือความหมายของ Timeout < RTT) · ในเฉลยแต่ละเฟรมมีเส้นแนวตั้งครบ 3 เส้น: Tstart · Texpires · Tstop

เขียนยังไงให้ได้คะแนนเต็ม

ลำดับการลงกระดาษ (7 นาที)

  1. 0:00–0:30 เขียนบรรทัด "กำหนดให้" — one-way 1 s, RTT 2 s, Timeout 1.5 s

  2. 0:30–1:00 ลากรางแนวนอน 2 ราง เขียน "Primary P" (บน) / "Secondary S" (ล่าง) และแกนเวลาซ้าย→ขวา พร้อมขีดสเกล 0–12 วินาที

  3. 1:00–3:00 วาดหน่วยซ้ำของ I(1) ให้ครบ — ลูกศร 4 เส้น + เส้นแนวตั้ง Tstart / Texpires / Tstop พร้อมป้ายเวลา 0 / 1.5 / 2.0 / 2.5 / 3.5

  4. 3:00–5:30 ก็อปหน่วยซ้ำไปทางขวาอีก 4 ชุด (เลื่อนชุดละ 2 วินาที) เขียนเลขเฟรมกำกับให้ครบ

  5. 5:30–6:30 เขียนตารางสรุปเวลาข้าง ๆ รูป (เฟรม / timeout / ACK ถึง)

  6. 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.01.51.52.0
F(2)2.03.53.54.0
F(3)4.05.55.56.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

นาฬิกาดังครั้งที่เวลาเกิดอะไรขึ้น
10.8 sส่งสำเนาที่ 2 + ตั้งนาฬิกาใหม่
21.6 sส่งสำเนาที่ 3 + ตั้งนาฬิกาใหม่
—2.0 sACK มาถึง → หยุดนาฬิกา (ครั้งที่ 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

T = tx + 2tprop + 2tproc + ta
   = 8 + (2 × 50) + (2 × 2) + 0
   = 8 + 100 + 4 = 112 ms

(ก) Timeout ต้อง มากกว่า 112 ms — ถ้าน้อยกว่านี้จะเกิดการส่งซ้ำที่ไม่จำเป็นทุกเฟรม

(ข) ถ้าตั้ง 100 ms ⇒ 100 < 112 เข้าเงื่อนไขของ Q8 พอดี

จำนวนสำเนาต่อเฟรม = ⌈112 / 100⌉ = ⌈1.12⌉ = 2 ครั้ง

นาฬิกาดังที่ 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.0A ส่ง F(1) · ตั้งนาฬิกาถึง 1.5
1.0B ได้ F(1) → ส่ง ACK1
1.5timeout ดัง → A ส่ง F(1) ซ้ำ (สำเนาที่ไม่จำเป็น)
2.0ACK1 ถึง A → A ส่ง F(2) · ตั้งนาฬิกาถึง 3.5
2.5F(1) ซ้ำถึง B → ทิ้ง แต่ตอบ ACK1 อีกครั้ง
3.0✕ F(2) หายกลางทาง — B ไม่เคยเห็นเฟรมนี้
3.5timeout ของ F(2) ดัง → A ส่ง F(2) ครั้งที่ 2 · ตั้งนาฬิกาใหม่ถึง 5.0 · (พร้อมกันนั้น ACK1 ซ้ำก็มาถึง A พอดี — ต้องทิ้งเพราะเลขไม่ตรง)
4.5F(2) ครั้งที่ 2 ถึง B → B ส่ง ACK2
5.0timeout ดังอีก (ACK2 ยังอยู่กลางทาง) → A ส่ง F(2) ครั้งที่ 3
5.5ACK2 ถึง A → A ส่ง F(3) ได้
6.0F(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

c = ⌈ TTO ⌉   (รวมต้นฉบับแล้ว)

ขั้นที่ 2 — สัดส่วนที่เสียเปล่า มีเฟรมที่มีประโยชน์ 1 ใบจาก c ใบ

เสียเปล่า = c − 1c = 1 − 1cคำตอบในรูปสัญลักษณ์

ขั้นที่ 3 — แทนค่า (T = 2 s)

TOนาฬิกาดังที่c = ⌈T/TO⌉เสียเปล่า
1.5 s1.5⌈1.33⌉ = 21/2 = 50%
1.0 s1.0 (ดังพอดีครั้งเดียว)⌈2.0⌉ = 21/2 = 50%
0.5 s0.5 · 1.0 · 1.5⌈4.0⌉ = 43/4 = 75%

หมายเหตุกรณีขอบ: เมื่อ T/TO เป็นจำนวนเต็มพอดี (เช่น TO = 1.0) นาฬิกาครั้งสุดท้ายจะดังพร้อมกับที่ ACK มาถึงพอดี — ในห้องสอบให้เขียนกำกับว่า "ถือว่า ACK มาถึงก่อน จึงไม่นับการส่งซ้ำครั้งนั้น" แล้วจะได้ c = 2 ตามตาราง · การเขียนสมมติฐานของกรณีขอบไว้ คือสิ่งที่แยกคำตอบระดับ A ออกจากคำตอบทั่วไป

เช็คความเข้าใจ

ในโจทย์ Q8 (Timeout < RTT, ไม่มีอะไรหายเลย) สิ่งที่เสียหายหลัก ๆ คืออะไร
ไม่มีอะไรหายเลย ข้อมูลถึงครบ และเวลารวมก็ยังเท่าเดิม (10 วินาทีสำหรับ 5 เฟรม) เพราะจังหวะถูกกำหนดโดย ACK ตัวจริง — สิ่งที่เสียคือช่องสัญญาณครึ่งหนึ่งถูกใช้กับเฟรมซ้ำ และความเสี่ยงที่ ACK ซ้ำจะถูกเข้าใจผิดว่าเป็น ACK ของเฟรมถัดไป ซึ่งเป็นเหตุผลที่ต้องมีหมายเลขเฟรม
one-way delay = 1 s, Timeout = 0.6 s เฟรมหนึ่งเฟรมจะถูกยิงขึ้นสายกี่ครั้ง
RTT = 2 s → c = ⌈2 / 0.6⌉ = ⌈3.33⌉ = 4 ครั้ง · ตรวจด้วยมือ: นาฬิกาดังที่ 0.6, 1.2, 1.8 (สามครั้ง) ก่อน ACK จะมาถึงที่ 2.0 ⇒ ต้นฉบับ 1 + ซ้ำ 3 = 4 ใบ
เมื่อผู้รับได้เฟรมที่มีหมายเลขซ้ำกับที่เคยรับแล้ว ต้องทำอย่างไร
ต้องทิ้งข้อมูล (ไม่งั้นเลเยอร์บนจะได้ข้อมูลซ้ำซ้อน) แต่ยังต้องตอบ ACK เพราะผู้รับไม่มีทางรู้ว่า ACK ตัวก่อนหน้าหายไปหรือแค่มาช้า — ถ้าไม่ตอบ ผู้ส่งอาจวนส่งซ้ำไม่รู้จบ · นี่คือเหตุผลที่รูปของ Q8 ต้องมีเส้น ACK ซ้ำครบทุกเฟรม
เก็บก่อนออกจากข้อนี้
  • หน่วยซ้ำ 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
  • ห้ามวาดกากบาทให้อะไรหาย — ข้อนี้ทุกอย่างถึงครบ ปัญหาอยู่ที่นาฬิกาอย่างเดียว