Store-and-Forward หลาย hop — A → B → C
ข้อวาดรูปที่มี "จุดตาย" อยู่จุดเดียว — โนดกลาง B ต้องรับเฟรมให้ครบทั้งเฟรมก่อน แล้วจึงเริ่มส่งต่อ ถ้าวาดให้บิตไหลทะลุ B ไปเลย เสียคะแนนทั้งข้อ
โครงเวลาเป็นแบบ Stop-and-Wait (บทที่ 11 · เหมือน Q5) แต่กลไกที่โนดกลางเป็น store-and-forward (บทที่ 3 · เหมือน Q6) — ถ้าทำสองข้อนั้นได้แล้ว ข้อนี้คือการเอามาต่อกันเท่านั้น สิ่งที่ต้องเพิ่มคือ ต้องคูณ tx ด้วยจำนวนลิงก์
โจทย์จริงจากข้อสอบปีที่แล้ว
Q7 — ข้อวาดรูป + คำนวณ
ส่ง F(1) และ F(2) จาก A → B → C โดยแต่ละช่วง 10 km ที่ 1.5 Mbps
ให้วาดไดอะแกรมเวลาแสดงการส่งและ ack ทั้งหมด พร้อมคำนวณเวลาที่ใช้
โครงเส้นทาง: A —10 km, 1.5 Mbps— B —10 km, 1.5 Mbps— C (2 ลิงก์ · โนดกลาง 1 ตัว)
โจทย์ให้มาแค่ ระยะทาง กับ อัตราเร็วลิงก์ แต่ไม่ได้ให้ ขนาดเฟรม, ขนาด ACK และ ความเร็วสัญญาณ ซึ่งจำเป็นทั้งหมด — ในห้องสอบให้สมมติค่าเอง แล้วเขียนบรรทัด "กำหนดให้…" ไว้บนสุดของคำตอบ อาจารย์ให้คะแนนที่วิธีคิด ไม่ได้ให้ที่ตัวเลข แต่ถ้าไม่เขียนว่าสมมติอะไร คำตอบจะกลายเป็น "เลขลอย" ทันที · หน้านี้ใช้ค่าสมมติชุดนี้ตลอด: เฟรม 1500 byte, ACK 75 byte, ความเร็วสัญญาณ 2×106 m/s (ค่าที่เฉลยของอาจารย์ใช้ — ค่าเดียวกับ Q4)
คิดยังไง (แนวคิดใน 30 วินาที)
ถ้าเป็นลิงก์เดียว A → B เวลาครบรอบคือสูตร Stop-and-Wait ปกติ แต่พอมี โนดกลาง เพิ่มเข้ามา มีของเพิ่มมาแค่ 2 อย่าง:
1. tx ถูกจ่ายซ้ำทุกลิงก์
B ต้องรับบิตสุดท้ายของเฟรมเข้ามาครบก่อน (เพื่ออ่านเฮดเดอร์และตรวจ error) จึงจะเริ่มยิงบิตแรกออกไปหา C ได้ ⇒ เฟรมหนึ่งเฟรมจ่าย tx 2 ครั้ง (A→B และ B→C)
2. ACK ก็เดินสองต่อเหมือนกัน
ACK จาก C ต้องผ่าน B กลับมาหา A ⇒ จ่าย tack อีก 2 ครั้ง และ tprop รวมทั้งหมด 4 ครั้ง (ไป 2 + กลับ 2)
"นับเส้นในรูป แล้วคูณ" — มีกี่เส้น (ลิงก์) ก็จ่าย transmission delay เท่านั้นครั้ง ทั้งขาไปและขากลับ · A → B → C มี 2 เส้น ⇒ ทุกอย่างคูณ 2
สูตร/ขั้นตอนที่ต้องใช้
| สัญลักษณ์ | ความหมาย | ค่าในข้อนี้ |
|---|---|---|
N | จำนวนลิงก์ (นับเส้น ไม่ใช่นับกล่อง) | 2 (A→B, B→C) |
tx | Transmission delay ของเฟรมข้อมูล 1 ลิงก์ | 8 ms |
tack | Transmission delay ของ ACK 1 ลิงก์ | 0.4 ms |
tprop | Propagation delay 1 ลิงก์ = 10 km ÷ 2×106 | 5 ms (0.005 s) |
เฉลยละเอียดทีละขั้น
-
เขียนบรรทัด "กำหนดให้" ก่อนเป็นอันดับแรก
เฟรม = 1500 byte · ACK = 75 byte · ความเร็วสัญญาณ = 2×106 m/s (ตามเฉลย) · ละ processing delay และ queueing delay
-
แปลง byte → bit ก่อนทุกครั้ง
เฟรม = 1500 × 8 = 12,000 บิต · ACK = 75 × 8 = 600 บิต
ลิงก์ = 1.5 Mbps = 1.5 × 106 bps · ระยะ = 10 km = 10 × 103 m -
หา tx ของหนึ่งลิงก์
tx = 12,0001.5 × 106 = 8 × 10−3 s = 8 ms -
หา tack ของหนึ่งลิงก์
tack = 6001.5 × 106 = 4 × 10−4 s = 0.4 ms -
หา tprop ของหนึ่งลิงก์
dp = tprop = 10,0002 × 106 = 5 × 10−3 s = 0.005 s = 5 msเฉลยใช้ propagation speed = 2×106 m/s ⇒ dp = 0.005 วินาทีต่อ hop — ค่านี้ใหญ่พอที่จะตัดทิ้งไม่ได้ -
ไล่เวลาทีละเหตุการณ์ของ F(1) — นี่คือส่วนที่ต้องวาดเป็นรูป
เวลา (ms) เหตุการณ์ บวกอะไรเข้ามา 0 A เริ่มยิงบิตแรกของ F(1) ขึ้นสาย — 8.00 A ยิงบิตสุดท้ายของ F(1) เสร็จ + tx = 8 13.00 B รับ F(1) ครบทั้งเฟรม → store and forward — เพิ่งเริ่มส่งต่อได้ + tprop = 5 21.00 B ยิงบิตสุดท้ายออกไปหา C เสร็จ + tx = 8 จ่ายซ้ำ! 26.00 C ได้ F(1) ครบ → เริ่มตอบ ACK1 + tprop = 5 26.40 C ยิงบิตสุดท้ายของ ACK1 เสร็จ + tack = 0.4 31.40 B รับ ACK1 ครบ → ส่งต่อ (store and forward ขากลับด้วย) + tprop = 5 31.80 B ยิงบิตสุดท้ายของ ACK1 ไปหา A + tack = 0.4 36.80 A ได้ ACK1 ครบ → เริ่มส่ง F(2) ได้ + tprop = 5 -
สรุปเป็นสูตร (ตรวจว่าตรงกับตาราง)
T1 เฟรม = 2tx + 2tack + 4tprop
= (2 × 8) + (2 × 0.4) + (4 × 5)
= 16 + 0.8 + 20 = 36.80 ms -
F(2) ทำซ้ำทุกอย่าง — Stop-and-Wait ส่งได้ทีละเฟรม F(2) จึงเริ่มที่ 36.80 ms และจบที่ 73.60 ms
โจทย์หลายชุดบอกให้ถือว่า "ACK สั้นมากจนละได้" (tack ≈ 0) กรณีนั้นคำตอบจะเป็น T = 2tx + 4tprop = 16 + 20 = 36.00 ms ต่อเฟรม และ 72.00 ms สำหรับ 2 เฟรม — เขียนไว้ทั้งสองแบบพร้อมวงเล็บกำกับว่าใช้สมมติฐานอะไร จะปลอดภัยที่สุด
ทำไมต้องรอ "รับครบทั้งเฟรม" — เทียบให้เห็นกับกรณีที่ไม่ต้องรอ
ถ้าโนด B ส่งต่อบิตออกไปทันทีที่บิตแรกเข้ามา (กลไกนี้เรียกว่า cut-through ซึ่ง ไม่ใช่สิ่งที่โจทย์ข้อนี้ให้ใช้) เวลาจะสั้นลงทันที เพราะจ่าย tx เพียงครั้งเดียว — ส่วนต่างระหว่างสองแบบคือ "ราคาของ store-and-forward"
บทที่ 3 ระบุว่าโนดกลางต้องรับให้ครบก่อนเพื่ออ่านเฮดเดอร์และตรวจสอบความผิดพลาด ถ้าส่งต่อทันทีตั้งแต่บิตแรก โนดจะยังไม่รู้ปลายทางและตรวจ error ไม่ได้ (เพราะรหัสตรวจสอบอยู่ท้ายเฟรม) — เท่ากับอาจส่งเฟรมเสียต่อไปทั้งเครือข่าย · ราคา 8 ms ต่อ hop จึงเป็นราคาของความถูกต้อง ไม่ใช่ความบกพร่องของการออกแบบ
รูปที่สมบูรณ์ต้องมีอะไรบ้าง
| ✓ | องค์ประกอบ | เขียนว่าอะไร |
|---|---|---|
| ☐ | บรรทัด "กำหนดให้" | ขนาดเฟรม, ขนาด ACK, ความเร็วสัญญาณที่สมมติ — เขียนไว้เหนือรูป |
| ☐ | แกนเวลา | ลูกศรชี้ลง + คำว่า "เวลา (ms)" |
| ☐ | เส้นตั้ง 3 เส้น + ชื่อโหนด | A, B, C พร้อมเขียน "10 km, 1.5 Mbps" กำกับระหว่างเส้น |
| ☐ | ชื่อเฟรมทุกเส้น | F(1), F(1) ต่อ hop 2, ACK1, F(2), ACK2 — ห้ามลากเส้นเปล่า |
| ☐ | แท่ง tx ที่ A และที่ B | แท่งหนา ๆ ข้างเส้นตั้ง เขียน "8 ms" ทั้งสองที่ = หลักฐานว่ารู้ว่าจ่ายซ้ำ |
| ☐ | จุด "รับครบทั้งเฟรม" ที่ B | ขีดจุด/เขียนคำว่า store and forward ที่ t = 13.00 ms (หัวใจของข้อนี้) |
| ☐ | ป้ายเวลาทุกจุดตัด | 13.00 · 26.00 · 36.80 · 62.80 · 73.60 (ms) |
| ☐ | ACK ขากลับสองท่อน | C→B และ B→A แยกกัน ไม่ใช่เส้นเดียวยาว |
| ☐ | การคำนวณข้างรูป | tx, tack, tprop และ T รวม พร้อมหน่วย |
กับดักที่ทำให้เสียคะแนน
คำตอบผิดที่พบจริง: ลากลูกศรเส้นเดียวจาก A ยาวถึง C แล้วเขียน "F(1)" — ผิดทั้งข้อ เพราะข้อนี้ออกมาเพื่อทดสอบ store-and-forward โดยเฉพาะ · รูปต้องมี เส้นหักที่ B และต้องมีช่องว่างเวลาระหว่างเส้นสองท่อนไม่ได้ (ท่อนที่สองเริ่มทันทีที่ท่อนแรกจบ)
"A, B, C มี 3 โหนด ⇒ 3 × 8 = 24 ms" — ผิด ตัวคูณคือจำนวนลิงก์ = 2 ⇒ 16 ms · วิธีกันพลาด: นับเส้นเฉียงในรูปที่ตัวเองวาด ขาไปมีกี่เส้น ก็คูณเท่านั้น
ใส่ 1500 / 1.5×106 = 1 ms แล้วได้คำตอบ 2.2 ms — ผิด ขนาดเฟรมเป็น byte ต้องคูณ 8 ก่อนเสมอ (12,000 บิต) นี่เป็นกับดักเดียวกับ Q5 ที่เน้นว่า M กับ N เป็น byte
วาด ACK เป็นลูกศรเส้นเดียวจาก C ยาวถึง A — ไม่สมบูรณ์ เพราะ ACK ก็เป็นเฟรมหนึ่ง จึงต้องผ่าน store-and-forward ที่ B เหมือนกัน ⇒ tack คูณ 2 · ถ้าอาจารย์ให้ละขนาด ACK ก็ยังต้องวาดสองท่อนอยู่ดี เพียงแต่ความชันเกือบเป็นแนวนอน
ด้วย propagation speed ที่เฉลยใช้ (2×106 m/s) จะได้ tprop = 5 ms ซึ่งเป็น 62.5% ของ tx = 8 ms — ตัดทิ้งไม่ได้เด็ดขาด · ในไทม์ไลน์ทั้งหมด 36.80 ms มี propagation อยู่ถึง 4 × 5 = 20 ms คือ เกินครึ่งของเวลาทั้งหมด · (ถ้าโจทย์ให้ 2×108 m/s เหมือนตำราทั่วไป tprop จะเหลือ 0.05 ms ซึ่งตัดได้ — แต่ต้องเขียนกำกับว่าตัด · ข้อนี้ให้ยึด 2×106 ตามเฉลย)
เขียนยังไงให้ได้คะแนนเต็ม
โครงคำตอบที่กินคะแนนทุกขั้น
บรรทัดที่ 1 — กำหนดให้ เขียนค่าที่สมมติทั้งหมด (เฟรม, ACK, ความเร็วสัญญาณ) และบอกว่าละ processing/queueing
บรรทัดที่ 2–4 — คำนวณ delay ทีละตัวพร้อมหน่วย
tx = 8 ms,tack = 0.4 ms,tprop = 5 ms· แต่ละบรรทัดต้องเห็น สูตร → แทนค่า → ผลลัพธ์ → หน่วยวาดรูป ตามเช็กลิสต์ข้างบน พร้อมป้ายเวลาที่จุดตัดทุกจุด
เขียนสูตรรวม
T = 2tx + 2tack + 4tpropแล้วแทนค่าให้เห็นเลขทุกตัวกรอบคำตอบ — วงกรอบ
36.80 ms ต่อเฟรม · 73.60 ms สำหรับ 2 เฟรมพร้อมหน่วย ms ชัดเจน
ถ้าคำนวณเลขผิดกลางทาง แต่รูปถูกและสูตรถูก ยังได้คะแนนส่วนใหญ่ — กลับกัน ถ้าเลขถูกหมดแต่วาดให้บิตทะลุ B จะเสียคะแนนส่วนที่หนักที่สุดของข้อ · ดังนั้นวาดรูปก่อน แล้วค่อยคำนวณ
โจทย์ฝึก 5 ข้อ
ทุกข้อใช้โครง A → B → C เดิม (10 km/ลิงก์, ความเร็วสัญญาณ 2×106 m/s ⇒ tprop = 5 ms/hop) เว้นแต่จะระบุเป็นอย่างอื่น
ข้อ 1 อุ่นเครื่อง — ส่ง F(1) เพียงเฟรมเดียว ขนาด 1500 byte บนลิงก์ 1.5 Mbps ACK ขนาด 75 byte
(ก) C ได้บิตสุดท้ายของ F(1) เมื่อไร (ข) A ได้ ACK1 ครบเมื่อไร
เฉลยข้อ 1
(ก) ขาไป = 2 ลิงก์
(ข) ครบรอบ
ตรวจง่าย ๆ: ขากลับใช้เวลา 36.80 − 26.00 = 10.80 ms = 2×0.4 (ACK) + 2×5 (prop) ✓
ข้อ 2 ง่าย–กลาง — เปลี่ยนขนาดเฟรมเป็น 3000 byte (ACK ยังเป็น 75 byte เท่าเดิม)
จงหาเวลาครบรอบของ 1 เฟรม และเวลารวมของ F(1) + F(2)
เฉลยข้อ 2
ขั้นที่ 1 — มีแค่ tx ที่เปลี่ยน (tack และ tprop เท่าเดิม)
ขั้นที่ 2 — แทนสูตรเดิม
= 32 + 0.8 + 20 = 52.80 ms ต่อเฟรม
ข้อสังเกต: เฟรมใหญ่ขึ้น 2 เท่า เวลาเพิ่มจาก 36.80 → 52.80 ms (ไม่ถึง 2 เท่าพอดี) เพราะส่วนของ ACK และ propagation เท่าเดิม — สัดส่วนเวลาที่ใช้ส่งข้อมูลจริงจึงสูงขึ้น (utilization ดีขึ้น ตามแนวคิดของ Q5)
ข้อ 3 กลาง — เพิ่มโนดกลางอีกตัวเป็น A → B → C → D (ลิงก์ละ 10 km, 1.5 Mbps เหมือนเดิม, เฟรม 1500 byte, ACK 75 byte)
จงหา (ก) เวลาที่ D ได้ F(1) ครบ (ข) เวลาครบรอบต่อเฟรม (ค) เวลารวม 2 เฟรม
เฉลยข้อ 3
ขั้นที่ 1 — นับลิงก์ใหม่ A→B, B→C, C→D = N = 3 ลิงก์ (โหนด 4 ตัว แต่ลิงก์ 3 เส้น)
(ก) ขาไป
(ข) ครบรอบ — ขากลับ ACK ก็ผ่าน 3 ลิงก์เช่นกัน
T = 39.00 + 16.20 = 55.20 ms ต่อเฟรม
(ค) สองเฟรม
บทเรียน: เพิ่ม hop มา 1 ลิงก์ เวลาเพิ่มขึ้น 55.20 − 36.80 = 18.40 ms ต่อเฟรม ซึ่งแยกเป็น tx 8 + tack 0.4 + tprop 2×5 = 10 — ทุก hop ที่เพิ่มต้องจ่ายทั้ง tx ซ้ำและ propagation ซ้ำ ทั้งขาไปและขากลับ ยิ่ง hop เยอะ store and forward ยิ่งแพง
ข้อ 4 กลาง — ใช้ตัวเลขชุดหลัก (2 ลิงก์, เฟรม 1500 byte) สมมติว่าโนด B ไม่ต้องรอรับครบ แต่ส่งต่อบิตออกไปทันทีที่บิตแรกเข้ามา
(ก) C จะได้ F(1) ครบเมื่อไร (ข) ส่วนต่างจากแบบ store-and-forward คือเท่าไร และส่วนต่างนั้นคืออะไร
เฉลยข้อ 4
(ก) ถ้า B ไม่ต้องรอ บิตจะไหลต่อเนื่อง เท่ากับจ่าย tx เพียงครั้งเดียว แต่ยังต้องเดินทางผ่าน 2 ลิงก์
(ข) ส่วนต่าง
ตอบเป็นคำพูด: ส่วนต่างคือ transmission delay หนึ่งชุดเต็ม ๆ ที่โนดกลางต้องจ่ายเพิ่ม เพราะต้องรับเฟรมให้ครบก่อนจึงส่งต่อได้ · ถ้ามี k โนดกลาง ส่วนต่างจะเป็น k × tx — นี่คือ "ราคาของ store-and-forward"
ข้อ 5 ยากกว่าของจริง — ถ้าเปลี่ยนจาก Stop-and-Wait เป็นการส่งแบบมี window ที่ให้ A ยิง F(1) และ F(2) ติดกันได้ทันที (ไม่ต้องรอ ACK) ทุกอย่างอื่นเหมือนเดิม
(ก) F(2) จะถึง C เมื่อไร (ข) เร็วกว่าแบบ Stop-and-Wait เท่าไร (ค) อธิบายว่าอะไรเป็นคอขวด
เฉลยข้อ 5
ขั้นที่ 1 — ไล่ตารางเวลาของทั้งสองเฟรม (ต้องระวังว่าสายหนึ่งเส้นส่งได้ทีละเฟรมเท่านั้น)
| เวลา (ms) | สาย A→B | สาย B→C |
|---|---|---|
| 0 → 8 | A ยิง F(1) | ว่าง |
| 8 → 16 | A ยิง F(2) (ต่อทันที) | ว่าง จนถึง 13.00 |
| 13.00 → 21.00 | — | B ยิง F(1) (เริ่มได้ทันทีที่รับ F(1) ครบ) |
| 21.00 | — | B รับ F(2) ครบพอดีที่ 21.00 และสาย B→C ก็เพิ่งว่างพอดี |
| 21.00 → 29.00 | — | B ยิง F(2) |
(ก) F(2) ถึง C
(ข) เทียบกับ Stop-and-Wait — แบบเดิม F(2) เริ่มส่งที่ 36.80 ms และใช้เวลาขาไปอีก 26.00 ms
(ค) คอขวดคือสาย B→C — เพราะทั้ง F(1) และ F(2) ต้องใช้สายเส้นเดียวกันเรียงคิว ทำให้ F(2) ออกจาก B ได้เร็วที่สุดคือ 21.00 ms · สังเกตว่า B รับ F(2) ครบ (21.00) พอดีกับตอนที่สาย B→C ว่าง (21.00) — เป็นจังหวะที่ท่อเต็มพอดี ถ้าเฟรมเล็กกว่านี้ B จะต้องรอสายว่าง (queueing delay เกิดตรงนี้เอง)
เช็คความเข้าใจ
- นับลิงก์ ไม่ใช่นับโหนด — A→B→C มี 2 ลิงก์ ⇒ tx คูณ 2 ทั้งขาไป (เฟรม) และขากลับ (ACK)
- เส้นในรูปต้องหักที่ B พร้อมป้าย "รับครบทั้งเฟรมก่อน (store and forward)" ที่ t = 13.00 ms — คำนี้คือคะแนนหลักของข้อ
- ค่าที่ต้องท่องได้:
tx = 8 ms·tack = 0.4 ms·dp = tprop = 5 ms(จาก 2×106 m/s) ·T = 36.80 ms/เฟรม·2 เฟรม = 73.60 ms - ถ้าละขนาด ACK:
36.00 ms/เฟรมและ72.00 msสำหรับ 2 เฟรม — เขียนกำกับว่าใช้สมมติฐานไหน - ราคาของ store-and-forward = tx × จำนวนโนดกลาง (ข้อนี้คือ 8 ms)